- •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.
45. Розподіл загальної пам'яті між процесами (розповісти про shm_open, mmap, shm_unlink).
Наличие механизмов синхронизации доступа к разделяемым ресурсам – одно из основных функциональных требований к ОС РВ. Память – это также ресурс, который может быть общим для нескольких процессов. Для распределение общей памяти между процессами в QNX-6 используются функции shm_open, mmap, shm_unlink. Рассмотрим подробней каждую из этих функций и их параметры.
shm_open () – открывает объект общей памяти процессов.
#include <fcntl.h>
#include <sys/mman.h>
Int shm_open (const char * name, int oflag, mode_t mode);
Name – открываемый объет общей памяти процессов.
Oflag – комбинация следующих бит, определенных в библиотеке <fcntl.h>:
O_RDONLY – открыть только для чтения;
O_RDWR – открыть для чтения и записи;
O_CREATE – создать файл, если файл не существует;
O_EXCL – проверить существование файла.
Mode – режим работы с открытым объектом.
Функция shm_open() возвращает дескриптор файла, который ассоциируется с объектом памяти, разделяемы процессами с именем name. Этот дескриптор в дальнейшем используется другими функциями работы с памятью (mmap(), mprotect()). Режим работы с открытым объектом, установленный функцией сохраняется все время, пока объект не отсоединен (unlinked) и любые ссылки на него отсутствуют. При неудачном открытии файла функции возвращает -1. Причины ошибки при открытии файла могут быть разными: закрыт доступ к файлу, открытие файла было прервано прерыванием, файл уже существует – невозможно создать файл с тем же именем, слишком много файловых дескрипторов используется текущим процессом, недостаточно места для создания объекта общей памяти и т.д.
mmap() – отображение области памяти в адресное пространство процесса.
#include <sys/mman.h>
void *mmap (void * addr, size_t len, int prot, int flags, int fildes, off_t off);
addr – NULL или указатель на адресное пространство процесса, куда будет помещен объект.
Len – количество помещаемых байт.
Prot – уровень доступа к области памяти.
Fildes – файловый дескриптор разделенного объекта памяти.
Off – смещение внутри разделяемой памяти.
Mmap() – функция, которая помещает область памяти, представляемую объектом разделямой памяти, в адресное просторанство процесса, начиная со смещения off и продолжаясь количество байт len. Функция возвращает адресс вставленного объекта или MAP_FAILED в случаи ошибки.
shm_unlink() – удаляет объект памяти, разделяемый процессами.
#include <sys/mman.h>
Int shm_unlink(const char * name);
Name – имя удаляемого объекта памяти.
Функция shm_unlink() удаляет имя объекта памяти с именем name. После удаления имени, объект не сможет быть открыт при помощи функции shm_open(), доступ к этому объекту памяти невозможен. Данная функция не влияет на ссылки на объект памяти, так что фактически объект не считается удаленным, пока не закрыты все ссылки на него. Функция возвращает 0 при удачном удалении имени, -1 – если произошла ошибка.
