- •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.
33. Обмін повідомленнями за моделлю "клієнт – сервер - субсервер". Смотри далее.
Субсерверная модель в случае одного клиента и одного субсервера на мой взгляд не имеет никакго смылса, так как получается что сервер просто перекладывает свои обязанности по выполнению заданий на субсервер, а сам заниемается только приемом сообщений от клиента. Единственным оправданием такого подхода может быть то что задания достаточно трудоемкие, и поступают с большой интенсивностью, в таком случае на сервер возлагается задача формирования очереди заданий.
34. Обмін повідомленнями за моделлю "клієнт – сервер - субсервер".
В соответствии с этой моделью сервер создает ряд других процессов (субсерверов); каждый субсервер посылает сообщения серверу, но сервер не отвечает им до тех пор, пока не получит запрос от клиента.
Затем сервер передаёт запрос клиента одному из субсерверов, отвечая таким образом на его сообщение заданием которое субсервер должен выполнить.
Особенность этой модели в том, что она является управляемой по ответу, так как выполнение задания начинается с ответа субсерверу, а стандартная модель клиент-сервер, является управляемой по запросу, так как работа начинается с передачи сообщения серверу.
Пример программы фрактальной графики распределения по сети.
Ведущая программа делит экран на 64 зоны при чём на её старте задается список узлов сети, которые могут учавствовать в работе. Затем, ведущая программа запускает рабочие программы (субсерверы) по одной на каждый узел сети и ждёт от них сообщений.
Программы – субсерверы посылают сообщение ведущей о готовности к работе. Ведущая по очереди берёт незаполненные зоны и передаёт задачу фрактальных вычислений программе-субсерверу, отвечая ей на её сообщение.
Потом субсервер посылает рещультаты ведущей, которая выводит их на экран. Так как данные он отправил, то он опять готов получить новое задание.
Если бы ведущая использовала «клиент-сервер» она была бы блокирована и не могла бы работать до тех пор, пока субсервер закончит обработку.
Эта модель является reply-driven моделью, так как выполнение задания начинается с ответа сервера субсерверу, в котором содержится задание. В данной модели задачей сервера является распределение заданий.
35. Механізм обміну повідомленнями між клієнтом та сервером в ос qnx-6.
Архитектура клиент-сервер это механизм, когда запрос любой программы-клиента обрабатывается программой-сервером путём отправки/приёма сообщений, в которых могут передаваться некоторые данные. В QNX-6 ядро обеспечивает маршрутизацию сообщений между этими программами, выполняя роль своеобразного посредника.
В QNX-6 обмен сообщениями происходит очень быстро. К видам сообщений относятся импульсы, сигналы, сообщения.
Службы передачи сообщений копируют сообщение непосредственное с адресного пространства одного потока в другое без буферизации. Neutrino не анализирует содержание сообщения - данные в сообщении имеют значение только для отправителя и получателя.
В Neutrino передача сообщений направлена скорее к каналам и подключениям, чем непосредственно от потока к потоку. Поток, что желает получить сообщение, сначала создает канал; другой поток, что желает послать сообщение первому потоку, должен сначала создать подключение, присоединяясь к созданному каналу.
Если много потоков прикрепляются на один и тот же канал, то одно подключение будет распределено между всеми потоками.
Поток, который выполняет MsgSend(), посылая сообщение к другому потоку (который может быть в пределах другого процесса), будет блокирован, пока тот другой поток не выполнит MsgReceive(), обработает сообщение, и не выполнит MsgReply(). Если поток выполняет MsgReceive() без предварительно посланного сообщения, то он блокируется, пока другой поток не выполняет MsgSend(), то есть не пошлет сообщения.
Функция MsgReply () используется сервером для ответа клиенту, чтобы вернуть ноль или большее количество байтов, а функция MsgError () используется, чтобы вернуть клиенту только состояние. Обе функции разблокируют клиента от его MsgSend ().
Пример:
Сервер
……
while(1) {
rcvid=MsgReceive(chid, message, sizeof(message), NULL);
.......
MsgReply(rcvid, 0, message, sizeof(message)); }
........
Клиент
........
coid=ConnectAttach(0,pid_ser,1,0,0);
if (coid==-1) {printf("Connection error\n");exit(1);}
if (MsgSend(coid,smsg,strlen(smsg)+1,rmsg,sizeof(rmsg))==-1) {
printf("Send message error\n");exit(1);}
if (strlen(rmsg)>0) {printf("Process return %s\n",rmsg);}
