- •1. Общая х-ка систем реального времени
- •4._Архітектура ос qnx-6.
- •5. Основні компоненти ос рч та їх загальна характеристика (планувальник задач та диспетчер (ядро), обробники переривань, програма стеження за часом, адміністратор ресурсів).
- •6.Правила диспетчеризації потоків в сучасних ос рч (fifo,rr,тощо). Рівні пріоритетів. Механізми синхронізації.
- •8.Стани задач в ос рч
- •9.Планування та диспетчеризація задач в ос рч. Чинники та алгоритми планування.
- •10. Механізми взаємодії задач в ос рч (повідомлення, схеми обміну повідомленнями).
- •11. Концепция потоков и процессов
- •13. Архітектура ос qnx-6.
- •12. Методи синхронізації потоків.
- •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.
30. Алгоритм керування числом потоків в пулі потоків.
Пулы потоков – это несколько потоков, используемых для определенной цели. В пуле могут находится в двух режимах функционирования: режим блокирования и режим обработки.
Библиотека для работы в QNX с пулами: <sys/dispach.h>
Для управлением пулом потоков используется специальная атрибутная структура – thread_pool_attr_t, которая содержит указатели на функции для управления потоками, и атрибуты управления количеством потоков в пуле. Управление количеством потоков в пуле осуществляет ядро ОС на основе следующих значений
1.lo_water – задает min число потоков в режиме блокировки, если число меньше указанного, создается автомат. еще increment потоков.
2.Increment – соответственно задает сколько еще потоков должно быть создано, если lo_water совпало с числом потоков в режиме ожидания.
3.hi_water – max число потоков в режиме блокирования, лишние удаляются.
4.maximum – макс. Число потоков, которые могут работать одновременно в пуле потоков.
Пользуясь данными атрибутами, мы можем применить такой алгоритм для управления числом потоков в пуле:
FOREVER DO
IF (#threads<lo_water) THEN если потоков в режиме блокир меньше чем lo_water
IF (#threads<maximum) THEN если потоков меньше чем мак число потоков в пуле
create new thread создать потоки в количестве Increment штук
context=(*context_alloc)(handle) инициализировать память созданных потоков
ENDIF
ENDIF
retval=(*block_func)(context) обработка режима ожидания
(*handle_func)(retval); режим обработки
IF (#thread>hi_water) THEN если число потоков режиме блокир больше чем hi_water
(*context_free)(context) освободить выделенную память
KILL thread убить поток
ENDIF
DONE
31. Обмін повідомленнями за моделлю "клієнт - сервер".
Основной механизм в рамках микроядерной архитектуры, когда запрос любой програмы-клиента обрабатывается программой-сервером путём отправки\приёма сообщения в котором могут передаваться некоторые данные.
Ядро обеспечивает маршрутизацию сообщений между этими программами, выполняя роль своеобразного посредника.
В QNX6 обмен сообщениями происходит очень быстро. К видам сообщений относятся импульсы, сигналы, сообщения.
Существуют различные схемы обмена сообщениями:
- клиент - сервер;
- клиент - субсервер;
- клиент - многопотоковый сервер и т.д..
Модель «клиент-сервер» позволяет говорить о нескольких состояниях рабочих состояниях процессов, связанных с обменом сообщениями.
Первоначально сервер ждет от кого-нибудь сообщение. В этот момент сервер должен быть в состоянии блокировки по приему (receive). По получению общения сервер переходит в состояние готовности (ready) и становится способен выполнять работу. Если данный процесс (сервер) имеет наивысший приоритет, то он получает процессор и может обработать сообщение клиента. В какой-то момент времени сервер завершит обработку и затем «ответит» клиенту.
Клиент первоначально работал самостоятельно, пока не решил послать сообщение серверу. Клиент переключается при этом из состояния готовности (ready) в состояние либо блокировки по передаче (send), либо блокировки по приему ответа (reply), в зависимости от состояния сервера.
Состояние REPLY означает следующее: сервер принял сообщение и теперь обрабатывает его. Клиент ожидает ответа от сервера. Состояние SEND означает следующее: сервер все еще не принял сообщение, либо из-за того что занят обработкой другого сообщения, либо из-за какой-то внутренней ошибки.
Смену состояний можно отобразить следующим образом:
Сервер
Пример программы-клиента, который делает передачу сообщений.
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
int main ()
{ int fd;
fd = open (“my.dat”, O_WRONY|O_CREAT);
write (fd, “This is message \n”, 16);
close (fd);
return (EXIT_SUCCESS); }
Благодаря абстрагированию предоставленного сервиса, пример для распределительного обмена сообщениями выглядит аналогично локальному, за исключением указания маршрута
32. Обмін повідомленнями за моделлю "клієнти - багатопоточний сервер". (+28)
Модель клиенты - многопотоковый сервер аналогична модели клиент сервер.
Модель «клиент-сервер» позволяет говорить о нескольких состояниях рабочих состояниях процессов, связанных с обменом сообщениями.
Первоначально сервер ждет от кого-нибудь сообщение. В этот момент сервер должен быть в состоянии блокировки по приему (receive). По получению общения сервер переходит в состояние готовности (ready) и становится способен выполнять работу. Если данный процесс (сервер) имеет наивысший приоритет, то он получает процессор и может обработать сообщение клиента. В какой-то момент времени сервер завершит обработку и затем «ответит» клиенту.
Клиент первоначально работал самостоятельно, пока не решил послать сообщение серверу. Клиент переключается при этом из состояния готовности (ready) в состояние либо блокировки по передаче (send), либо блокировки по приему ответа (reply), в зависимости от состояния сервера.
Состояние REPLY означает следующее: сервер принял сообщение и теперь обрабатывает его. Клиент ожидает ответа от сервера. Состояние SEND означает следующее: сервер все еще не принял сообщение, либо из-за того что занят обработкой другого сообщения, либо из-за какой-то внутренней ошибки.
Однако в отличие от клиент-серверной модели, в модлеи клиенты - многопотоковый сервер, на каждого клиента приходится поток сервера который ждет сообщения от клиента. В этой модели количство потоков может быть статическим, их количество будет определять количество одновременно обслуживаемых клиентов, или динамическим, при этом потоки буду создаваться по необходимости. Для реализации динамического создания
Потоков можно использовать библиотеку пула потоков.
