- •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.
10. Механізми взаємодії задач в ос рч (повідомлення, схеми обміну повідомленнями).
Микроядро Neutrino2 предлагает следующие формы IPC:
- Передача сообщений,
- Сигналы,
- Очереди сообщений POSIX,
- Общедоступная память,
- Каналы,
- FIFOs.
Поток, выполняющий MsgSend (), посылая сообщения в другое потока (который может быть в пределах другого процесса), будет блокирован, пока тот другой поток не выполнит MsgReceive (), обработает сообщения, и не выполнит MsgReply (). Если поток выполняет MsgReceive () без предварительно посланного сообщения, то он блокируется, пока другой поток не выполняет MsgSend (), то есть не прищлет сообщение.
Это блокирование синхронизирует поток-отправитель, что позволяет серверу отвечать клиенту и продолжать обработку, в то время как ядро асинхронно передает данные ответа до потока-отправителя и обозначают его как готовый к выполнению. Функция MsgReply () используется сервером для ответа клиенту, чтобы вернуть ноль или большее количество байтов, а функция MsgError () используется, чтобы вернуть клиенту только состояние. Обе функции разблокируют клиента от его MsgSend ().
Службы передачи сообщений копируют сообщения непосредственно из адресного пространства одного потока в другой без буферизации. Neutrino не анализирует содержание сообщения - данные в сообщении имеют значение только для отправителя и получателя.
Для простых сообщений Neutrino обеспечивает функции, которые принимают указатель непосредственно на буфер без потребности в IOV (Input-Output Vector - вектор ввода / вывода).
В Neutrino передача сообщений направлена скорее к каналам и подключениям, чем непосредственно от потока к потоку. Поток, желающий получить сообщение, сначала создает канал; другой поток, желающий послать сообщение первого потока, должен сначала создать подключение, присоединяясь к созданному каналу.
Как только соединение установлены, клиенты могут выполнять MsgSend (). Если много потоков в процессе прикрепляются на тот же самый канал, то одно подключение будет распределено между всеми потоками. Каналы и подключения в рамках процесса имеют целочисленных идентификатор. Клиентские подключения отображаются непосредственно в дескрипторы файлов.
Дополнительно к синхронных Send / Receive / Reply служб, Neutrino также поддерживает передачу сообщений фиксированного размера без блокирования его отправителя. Они определены как импульсы и имеют четыре байта данных плюс один байт кода. Импульсы часто используются как механизм сообщения в рамках программ обработки прерываний. Они также позволяют серверам отвечать клиентам без их блокировки.
Стандарт POSIX определяет набор неблокующих средств передачи сообщений, известных как очереди сообщений. В отличие от примитивов передачи сообщений Neutrino2, очереди сообщений постоянно находятся вне ядра. Очереди сообщений осуществляют промежуточное накопления сообщений, они существуют независимо от процессов, их используют. В Neutrino2 созданы очереди сообщения будут появляться в пространстве имен файлов в каталоге / dev / mqueue. Общедоступная память предлагает процессам использовать указатели, чтобы непосредственно читать и записывать в нее. Общедоступная память часто используется вместе с одним из примитивов синхронизации, чтобы сделать модификации данных атомарными. Общедоступная память наиболее эффективна, когда используется для модифицирования большого количества данных. Семафоры и мютексы - пригодны примитивы синхронизации для использования их в общедоступной памятью. Общедоступная память реализована в Neutrino в менеджере процессов (procnto) Канал - это безымянный файл, который служит как канал ввода / вывода между двумя или более процессами, когда один процесс записывает в канал, а другой читает из канала.
