
- •1. Общая х-ка систем реального времени
- •4._Архітектура ос qnx-6.
- •5. Основні компоненти ос рч та їх загальна характеристика (планувальник задач та диспетчер (ядро), обробники переривань, програма стеження за часом, адміністратор ресурсів).
- •6.Правила диспетчеризації потоків в сучасних ос рч (fifo,rr,тощо). Рівні пріоритетів. Механізми синхронізації.
- •8.Стани задач в ос рч
- •9.Планування та диспетчеризація задач в ос рч. Чинники та алгоритми планування.
- •10. Механізми взаємодії задач в ос рч (повідомлення, схеми обміну повідомленнями).
- •11. Концепция потоков и процессов
- •12. Методи синхронізації потоків.
- •13. Архітектура ос qnx-6.
- •14. Алгоритми планування задач в ос qnx-6
- •15. Дисципліни та правила диспетчеризації потоків в ос qnx-6.
- •16. Стани потоків в ос qnx-6
- •17. Запуск процесів та потоків в ос qnx-6.
- •18. Створення потоків в ос qnx-6
- •19. Копіювання процесів в ос qnx-6
- •20. Атрибути потоків в ос qnx-6.
- •21.Синхронизация потоков по мютексу.
- •22.Синхронизация потоков по семафору.
- •23.Синхронізація потоків за „приєднанням”. (взято из Кертона, изменяй, когда переписываешь)
- •24. Синхронізація потоків за «бар'єром».
- •25. Синхронізація операцій читання-запису.
- •26.Синхронізація потоків за ”чекаючим блокуванням”.
- •27.Алгоритм взаємодії потока-виробника та потока-приймача інформації на основі „чекаючих блокувань”.
- •28.Синхронізація потоків за „умовними змінними”.
- •29.Пули (pool) потоків та їх використання.
- •30. Алгоритм керування числом потоків в пулі потоків.
- •31. Обмін повідомленнями за моделлю "клієнт - сервер".
- •33. Обмін повідомленнями за моделлю "клієнт – сервер - субсервер". Смотри далее.
- •34. Обмін повідомленнями за моделлю "клієнт – сервер - субсервер".
- •35. Механізм обміну повідомленнями між клієнтом та сервером в ос qnx-6.
- •36. Визначення потрібного сервера та жетон клієнта.
- •37. Обмін повідомленнями великого розміру.
- •38. Складені повідомлення та механізм iov.
- •39. Повідомлення за типом “імпульс”. Передача та прийом імпульсу.
- •40. Механізм стеження за часом. Годинники та таймери.
- •41. Механізм стеження за часом. Схеми повідомлення про «тайм-аут».
- •42. Створення та використання таймерів в ос qnx-6.
- •43. Тайм-аути ядра ос qnx-6.
- •44. Обробка переривань в ос qnx-6.
- •45. Розподіл загальної пам'яті між процесами (розповісти про shm_open, mmap, shm_unlink).
- •46. Мікроядро Neutrino та його можливості.
- •47. Розробка консольних проектів срч в середовищі qnx-6.
- •48. Мікроядро Photon та його можливості.
- •49. Розробка проектів срч в середовищі Application Builder.
27.Алгоритм взаємодії потока-виробника та потока-приймача інформації на основі „чекаючих блокувань”.
Иногда при выполнении синхронизации нам нужно что б поток ожидал некоторого события. Иногда даже два или больше потока могут ожидать данного события, для выполнения такой синхронизации пользуются методом „ждущие блокировки” или „условных переменных”.
Для наглядного примера можно написать такую программу, где один поток является поставщиком данных, а другой потребителем. Для удобства нам нужно ввести переменную flag, которая будет принимать значения 0 если данных нет, или 1 если данные есть. Флаг будет служить для определения наличия данных, а также указания адреса, где происходит синхронизация. В последствии выполнения такой программы мы можем проследить алгоритм взаимодействия между потоком – производителем и потоком – получателем:
#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
volatile int flag=0;
void * consumer (void * not_used)
{printf(“This is consumer\n”); \\потребитель
while(1)
{ pthread_sleepon_lock(); //захват внутреннего мютекса
while(!flag) pthread_sleepon_wait(&flag);
sleep(1); //имитация обработки данных
flag=0; //данных нет
pthread_sleepon_unlock();}}
void * producer(void * not_used){
while(1){ sleep(2); // имитация получения данных
pthread_sleepon_lock();
flag=1; // данные теперь есть
pthread_sleepon_signal(&flag); //посылаем сигнал потоку
pthread_sleepon_unlock();
}}
int main()
{ printf(‘Example\n’);
pthread_create(NULL,NULL,producer,NUUL);
pthread_create(NULL,NULL,consumer,NUUL);
sleep(30);}
№1 – потребитель; №2 – поставщик; Готов – готов к выполнению; Данные – ожидание данных; Флаг – ожидание установки флага; mutex – ожидание освобождения мютекса.
Действие |
Владелец мутекса |
№1 |
№2 |
№1 блок mutex |
№1 |
Готов |
Данные |
№1 провер флаг |
№1 |
Готов |
Данные |
№1_wait() |
№1 |
Готов |
Данные |
Wait Разблок Mutex |
-- |
Готов |
Данные |
Wait блок На ожид. |
-- |
Флаг |
Данные |
Пауза |
-- |
Флаг |
Данные |
Получка Данных |
-- |
Флаг |
Готов |
№2 блок mutex |
№2 |
Флаг |
Готов |
№2 устан. Флаг=1 |
№2 |
Флаг |
Готов |
№2_signal |
№2 |
Флаг |
Готов |
№1 ждет Mutex |
№2 |
Mutex |
Готов |
№2 Разблок Mutex |
-- |
Mutex |
Готов |
№1 получ. Mutex |
№1 |
Готов |
Готов |
№1 обраб. Данные |
№1 |
Готов |
Готов |
№1 обраб. Данные |
№1 |
Готов |
Данные |
№1 обраб. Данные |
№1 |
Готов |
Данные |
№1 разблок. Mutex |
-- |
Готов |
Данные |
1-я строка |
№1 |
Готов |
Данные |