
- •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.
38. Складені повідомлення та механізм iov.
Механизм IOV(Input Output Vector) , или «вектор ввода/вывода» - фактически это метод при котором ядро выполняет операцию фрагментации/дефрагментацин сообщения.
То есть мы сообщаем ему о том, что одна часть данных (заголовок) фиксирована по некоторому адресу, а другая часть (собственно данные) фиксирована где-нибудь еще, без необходимости самим вручную собирать буферы из частей и копировать данные.
Для формирования сообщения используется массив структур типа iov_t, которые состоят из 2х полей- ссылки на начало буфера и значения длинны данных в этом буфере.
Заполняется эта структура макросом SЕTIOV(укзатель на вектор, адрес буфера, длина данных)
Такую пересылку сообщений выполняет функция MsgSendv(coid, siov, sparts, riov, rparts), где
сoid- идентификатор соединения, по которому мы передаем — как и при использовании функции MsgSend().
sparts и rparts - число пересылаемых и принимаемых частей.
siov и riov – эти массивы значений указывают на пары «адрес — длина», которые мы хотим передать.
Прием таких сообщений можно осуществлять с помощью функции MsgReceivev(chid,iov,parts,msg_info)
Chid – идентификатор канала
iov - вектор приемник
parts - количество фрагментов в сообщении
При выполнении MsgSendv() ядро просто прозрачно копирует данные из каждой части вектора IOV из адресного пространства клиента в адресное пространство сервера (и обратно, при ответе на сообщение).
Число фрагментов ограничено значением 231;
Ядро просто копирует данные, указанные вектором IOV, из одного адресного пространства в другое.
Вектор-источник и вектор-приемник не должны совпадать.
39. Повідомлення за типом “імпульс”. Передача та прийом імпульсу.
Импульс это механизм, который обеспечивает отправку сообщения без блокирования отправителя. Это маленькое сообщение (16 байт) которое:
- может перенести 40 бит полезной информации (32 бита данных + 8 бит кода импульса);
- является неблокируемым для отправителя;
- может быть получено точно так же, как и сообщение другого типа;
- ставиться в очередь, если получатель не заблокирован в ожидании сообщения.
Прием импульса выполняется очень просто: короткое, четко определенное сообщение передается функции MsgReceive(), как будто поток отправил обычное стандартное сообщение. Единственное различие состоит в невозможности применить функцию MsgReply() к такому сообщению, поскольку, общая идея импульса состоит в том, что это сообщение по своей сути является асинхронным. Идентификатор отправителя, который возвращается функцией MsgReceive() при приеме импулься, имеет нулевое значение. Это верный индикатор того, что принятое сообщение является импульсом, а не стандартным сообщением клиента.
Пример:
rcvid = MsgReceive(…)
if (rcvid == 0) {
код, обработка}
Функция MsgReceive() может принимать как обычные сообщения, так и импульсы, но если нужно принимать только импульсы, то нужно использовать функцию MsgReceivePulse (), клиент в свою очередь должен использовать вызов MsgSendPulse().
С помощью механизма импульсов можно реализовать процесс запуска некоторого сервера, который имеет пул потоков, способных обрабатывать запросы от клиентов, т.к. при вызове MsgReceive() гарантирует, что никакой клиентский запрос не просочиться, пока не придет импульс, означающий команду начать работу.