- •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.
12. Методи синхронізації потоків.
Процесс- минимальная программная единица, которая способна обладать ресурсами (областями памяти). Процесс может содержать 1 или более потоков, то есть процесс – это контейнер потоков.
Поток – это минимальная диспетчеризуемая программная единица. Он не может обладать другими ресурсами, кроме ресурса процесса который порожден.
К потокам можно применять такие методы синхронизации:
1) мютексы (mutex) – владеть мютексом в каждый момент времени может только один поток. Мютекс – рекомендательная блокировка: если один поток хочет получить доступ к разделяемому ресурсу, доступ к которому синхронизируется через мютекс, то он в начале должен проверить зн-ние мютекса и если он свободен заблокировать его и после этого использовать ресурс связанный с данным мютексом. После окончания работы с ресурсом, поток должен разблокировать (освободить) мютекс, разрешая доступ к ресурсам других потоков. Если же поток не желает проверять мютекс то он сможет воспользоваться ресурсом, однако последствия этого могут быть не предсказуемыми;
2) семафоры (semaphores)- рекомендательная блокировка. Владеть семафором могут несколько потоков (аналогия некоторое кол-во ключей перед дверью) каждый хочет воспользоваться ресурсом;
3) ждущие блокировки (sleepons) – предназначены для блокировки потока на некотором объекте с динамическим назначением к потоку некоторой условной переменной и плюс мютекс, который скрыт внутри библиотеки и программисту не доступен;
4) условные переменные (condvars) – аналогично sleepons, но мютекс назначает программист;
5) присоединение (joining). Предназначен для синхронизации одного потока по отношению к завершению другого. Поток желает ждать завершиться некоторый другой поток;
6) барьеры (barriers). Предназначен для синхронизации работы нескольких потоков: потоки которые желают ждать у барьера должны вызвать соответствующую ф-цию (barrier_wait); обьект типа барьер содержит число потоков которые могут ожидать у барьера. Если число реально ждущих у барьера потоков будет равно или больше чем значения записанные в барьере, то эти потоки одновременно разблокируются. В отличие от присоединения потоки не обязаны умирать.
Мютексы, семафоры и условные переменные могут применяться как методы синхронизации потоков как внутри одного процесса так и в разных. Эти и остальные методы обычно применяются к потокам внутри одного процесса.
Кроме синхронизации потоки можно диспетчеризовать по различным дисциплинам диспетчеризации (FIFO; RR; адаптивная, спорадическая) и назначать приоритеты (0..63).
При создании процесса администратор процессов создает адресное пространство и ядро запускает главный поток, который после выполнения нескольких инструкций стартует с точки входа main или fork.
13. Архітектура ос qnx-6.
ОС QNX-6, кот. также называют QNX/Neutrino2], предназначена для разработки проектов систем РВ на различных аппаратных платформах. ОС QNX-6 имеет клиент-серверную архитектуру и состоит из микроядра и сгруппированных вокруг него взаимодействующих процессов. Микроядро предоставляет только несколько сервисов: планирует потоки, подает сигналы, передает сообщение, выполняет синхронизацию потоков и их диспетчеризацию и обслуживает таймер. Поэтому микроядро имеет небольшой размер, причем микроядро само по себе не поддается диспетчеризации. Его код выполняется только в результате вызова определенной системной функции или в результате возникновения аппаратного прерывания. Дополнительные функциональные возможности ОС QNX-6 обеспечиваются серверними процессами (серверами), которые должны отвечать на запросы клиентских процессов и которые не входят в состав микроядра. Типичная конфигурация ОС QNX-6 имеет следующие стандартные серверные процессы: менеджер процессов (procnto), менеджер файловой системы (fs), менеджер устройств (dev), менеджер сети (qnet). Указанные менеджеры в рамках терминологии ОС QNX-6 часто называют администраторами ресурсов.
В QNX-6 микроядро действует как программная шина, которая разрешает динамично подключать различные менеджеры каждый раз, когда они нужны. Обычно менеджер процессов procnto и микроядро объединяются в один программный модуль, который руководит всеми процессами в ОС QNX-6.
Микроядро запускается на 0 (нулевом) уровне привилегий процессора, а менеджеры и драйверы устройств запускаются на уровнях 1 и 2 (для выполнения действий ввод/вывод). Прикладные процессы запускаются на 3 уровне привилегий и потому могут выполнять только общие команды процессора.
QNX-6 - это ОС, которая основана на механизме передачи сообщений. Этот механизм явл фундаментальным способом реализации взаимодействия процессов между собой собой, то есть он обеспечивает так называемый IPC - InterProcess Communication. Механизм передачи сообщений основан на модели клиент-сервер: клиент присылает сообщение серверу, который потом возвращает результат. Механизм передачи сообщений должен быть прозрачным относительно сети, и потому разрабатываемая система может быть распределена между несколькими сетевыми узлами без любых изменений в коде разработанного программного обеспечения.
Для передачи сообщений между клиентом и сервером, QNX-6 использует механизм приоритетов, управляемый клиентом. Это означает, что серверний процесс наследует уровень приоритета клиентского процесса, кот. требует обслуживание. Когда обслуживание запроса клиента завершен, серверний процесс может восстановить свой первобытный уровень приоритета. Если обслуживания требуют несколько клиентов вместе, серверний процесс принимает уровень приоритета клиентского процесса с наиболее высоким приоритетом.
Архитектура клиента-сервер имеет много преимуществ, одна из которых - устойчивость к ошибкам. Каждый серверний и клиентский процессы загружаются в своих собственных адресных пространствах виртуальной памяти, что приводит к надежности и устойчивости разработанной системы в целом, но выполнение системных вызовов нуждается в переключение контекста активной задачи, что приводит к дополнительным затратам на защиту памяти и к снижению производительности роботы. Для повышения указанной производительности работы разработки программного кода процессов (как серверних, так и клиентских) обычно выполняют в стиле многопоточных приложений.
