
- •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.
28.Синхронізація потоків за „умовними змінними”.
Иногда при выполнении синхронизации нам нужно что б поток ожидал некоторого события. Иногда два или больше потока могут ожидать данного события, для выполнения такой синхронизации пользуются методом „ждущих блокировок” или „условных переменных”.
Ждущие блокировки — это надстройка над механизмом условных переменных. Функция pthread_cond_wait() аналогично функции pthread_sleepon_wait() освобождает мютекс, ждёт, а затем повторно блокирует мютекс. Основное отличие состоит в том, что библиотека ждущих блокировок имеет скрытый внутренний мютекс, а при использовании условных переменных мютекс передаётся явно. Это даёт больше гибкости, но за распределение условных переменных отвечает программист. Мютексы и условные переменные могут использоваться между потоками как в том же самом, так и в разных процессах, а ждущие блокировки можно применять только между потоками одного и того же процесса.
Рассмотрим программу с использованием condvars:
#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
volatile int flag=0;
pthread_mutex_t mutex=PHTREAD_MUTEX_INITIALIZER;
pthread_cond_t cond=PHTREAD_COND_INITIALIZER;
void * consumer (void * a)
{printf(“This is consumer\n”); \\потребитель
while(1)
{ pthread_mutex_lock(&mutex);
while(!flag) pthread_cond_wait(&cond, &mutex);
sleep(1); //имитация обработки данных
flag=0;
pthread_cond_signal(&cond);
pthread_mutex_signal(&mutex); }}
void * producer(void * a)
{printf(“This is producer\n”);\\производитель
while(1)
{ sleep(3); //имитация обработки данных
pthread_mutex_lock(&mutex);
while(flag) pthread_cond_wait(&cond, &mutex);
flag=1;
pthread_cond_signal(&cond);
pthread_mutex_signal(&mutex);
}}
int main()
{ printf(‘Example\n’);
pthread_create(NULL,NULL,producer,NULL);
pthread_create(NULL,NULL,consumer,NULL);
sleep(30);}
Нужно следить за блокировкой мутексов перед к условным переменным, а также применением правильного мутекса для каждой условной переменной и применением правильной условной переменной для каждого мутекса.
Условные переменные надо использовать для точки встречи, а мутексы используются для изменения, а также проверки разделяемых элементов данных.
29.Пули (pool) потоків та їх використання.
Пулы потоков – это несколько потоков, используемых для определенной цели. Обычно можно производить управление потоками в пуле. Потому рассматривают два режима потоков в пуле: режим блокирования и режим обработки.
Основными причинами использования пулов в потоке можно разобрать на наглядном примере: Пусть у нас есть сервер, который работает с клиентами. Когда сервер получит сообщение от клиента, было б не плохо создать еще один поток – и установить его в режим ожидания, на случай получения нового сообщения для обработки. После продолжительной работы сервер накопит много бездействующих потоков, соответственно эти бездействующие потоки надо будет уничтожить, для поддержания работоспособности сервера.
Библиотека для работы в QNX с пулами: <sys/dispach.h>
Существуют следующие в данной библиотеке атрибуты потоков для управления числом потоков:
lo_water – задает min число потоков в режиме блокировки, если число меньше указанного, создается автомат. еще increment потоков.
Increment – соответственно задает сколько еще потоков должно быть создано, если lo_water совпало с числом потоков в режиме ожидания.
hi_water – max число потоков в режиме блокирования, лишние удаляются.
4.maximum – макс. Число потоков, которые могут работать одновременно в пуле потоков.
Указанные параметры размещены в структуре: pthread_pool_attr_t.