- •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.
42. Створення та використання таймерів в ос qnx-6.
Чтобы работать с таймером необходимо: создать объект типа «таймер», выбрать схему уведомления (сигнал, импульс или создание потока) и создать структуру уведомления (struct sigevent), выбрать нужный тип таймера (относительный или абсолютный, однократный или периодический), запустить таймер.
Создание таймера при помощи функции timer_create().
#include <time.h>
#include <sys/siginfo.h>
Int timer_create(clockid_t clock_id, struct sigevent *event, timer_t *timerid);
Аргумент clock_id сообщает функции, на каком временном базисе формируется таймер (CLOCK_REALTIME, CLOCK_SOFTTIME, CLOCK_MONOTONIC). Последний аргумент функции – дескриптор таймера в таблице таймеров ядра.
Создав таймер, нужно определить его тип. Это осуществляется путем комбинирования аргументов (flags)функции timer_settime(), которая обычно применяется для собственно запуска таймера:
#include <time.h>
Int timer_settime(timer_t timerid, int flags, struct itimerspec *value, struct itmerspec *oldvalue);
С помощью flags определяется тип таймера – абсолютный или относительный, елси будет стоять константа TIMER_ABSTIME – абсолютный таймер, если нуль – относительный таймер.
Struct timespec {long tv_sec, tv_nsec};
Structu itimerspec {struct timespec it_value, it_interval};
Параметр it_value задает либо интервал времени от настоящего момента до момента срабатывания таймера (относительный таймер), либо собственно время срабатывания (абсолютный таймер). После срабатывания таймера значение величины it_interval задает относительное время для повторной загрузки таймера, чтобы он мог сработать снова (если 0 – однократный таймер).
43. Тайм-аути ядра ос qnx-6.
Когда время работы таймера истекло, происходит тайм-аут. QNX/Neutrino позволяет получать тайм-ауты по всем блокированным состояниям. Наиболее часто потребность в этом возникает при обмене сообщениями: клиент, посылая, сообщение серверу, не желает ждать ответа вечно. Тайм-ауты ядра также полезны в сочетании с функцией pthread_join(): завершение потока тоже не хочется долго ждать. Функция TimerTimeout() является системным вызовом, ответственным за формирование тайм-аутов ядра.
#include <sys/neutrino.h>
Int TimerTimeout(clockid_t id, int flags, const struct sigevent * notify, const uint64_t * ntime, uint64 * otime);
Функция возвращает целое чилос – индикатор удачи/неудачи (0 – все в порядке, -1 – произошла ошибка, код которой записывается в errno). Источник синхроимпульсов указывается в id. Параметр notify всегда должен быть событием уведомления типа SIGEV_UNBLOCK; параметр ntime указывает относительное время, спустя которое ядро должно сгенерировать тайм-аут. Параметр otime показывает предыдущее значение тайм-аута и в большинстве случаев не используется (NULL). Тайм-ауты «взводятся» функцией TimerTimeout(), а запускаются по входу в одно из состояний, указанных в параметра flags. Сбрасывается тайм-аут при возврате из любого системного вызова. Это означает, что тайм-аут нужно «взводить» перед каждым системным вызовом, к которому надо его применить. Сбрасывать таймер после системного вызова не надо – это выполняется автоматически.
