
- •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.
11. Концепция потоков и процессов
Часто в системах, особенно реального времени, бывает необходимо выполнять некоторые действия паралельно. Как правило это позволяет приложению максимально использовать ресурсы процессора для быстрейшего получения результатов работы. Для этого служит механизм процессов и потоков. Так в микроядре Neutrino2 параллелизм работы достигается за счет выполнения модели потоков по стандарту POSIX (Portable Operating System Interface for Unix), который определяет процесс как контейнер, что содержит в себе один или более потоков.
Процесс всегда содержит хотя бы один поток, поскольку мы ведь говорим об исполняемом, развивающемся во времени коде. Для процессов, исходный код которых подготовлен на языке C, функцией главного потока процесса является поток, в котором исполняется функция main(). Код и данные процесса размещаются в оперативной памяти в адресном пространстве процесса. Любой процесс может содержать произвольное количество потоков, но не меньше чем один, и не больше чем 32767 (для QNX версии 6.2).
Потоком называется наименьшая единица, которая подлежит выполнению и диспетчеризации.
Совокупность данных, необходимых для выполнения любого из потоков процесса, а также контекст текущего выполняемого потока называются контекстом процесса. Из других важных атрибутов процесса отметим:
• PPID (Parent Process ID) – PID процесса, породившего данный процесс. Таким образом все процессы в системе включены в единую древовидную иерархию. • TTY – терминальная линия: терминал или псевдотерминал, ассоциированный с процессом. Если процесс становится процессом демоном, от он отсоединяется от своей терминальной линии, и не имеет ассоциированной терминальной линии (запуск процесса как фонового – знак “&” в конце командной строки – не является достаточным основанием для отсоединения процесса от терминальной линии). • RID и EUID – реальный и эффективный идентификаторы пользователя. Эффективный идентификатор служит для определения прав доступа процесса к системным ресурсам (в первую очередь - к файловым системам).
В зависимости от характера азрабатываемого приложения, потоки могут выполняться независимо друг от друга и без необходимости связываться друг с другом, или они могут быть сильно связаны. Чтобы обеспечить связь и синхронизацию взаимодействующих потоков, ядро предоставляет разнообразные сервисы IPC и синхронизации.
Хоть потоки в пределах процесса сообща могут использовать адресное пространство процесса, каждый поток еще имеет и свои локальные данные. В некоторых случаях эти данные защищены в пределах ядра, в то же время как локальные данные постоянно находятся незащищенными в адресном пространстве процесса. Приведем некоторые типы локальных ресурсов потока:
tid – каждый поток идентифицируется целочисленным значением, которое начинается с 1 и уникально в пределах процесса.
Набор регистров – каждый поток имеет свой собственный счетчик программы, указатель на вершину стека и слово процессовра.
стек – каждый поток выполняется в своем собственном стеке, который хранится в пределах адресного пространства его процесса.;
маска сигнала – каждый поток имеет собственную маску сигнала.
Поток имеет определенную системную область данных - «thread local storage» (TLS). TLS используется, чтобы сберечь информацию о потоке (например tid, вказівник стеку). TLS непосредственно не доступен приложению. Функции для работы с потоками реализованы в библиотеке pthread и обеспечивают механизм для связи глобальной переменной процесса с данными потока.