- •Министерство образования и науки Украины
- •1. Определение системам реального времени
- •1.1. Основные понятия
- •1.2. Срв
- •1.3. Классификация срв
- •1.4. Структура срв
- •Основные требования к срв и их особенности
- •1.4.1. Ос
- •1.4.2. Основные архитектурные решения ос
- •1.4.3. Основные концепции ос
- •Прерывания
- •Системные вызовы
- •Файловая система
- •Процессы
- •Нити (потоки)
- •Понятие ресурса
- •1.5. Аппаратные среды срв
- •1.5.1. Мультипрограммная среда
- •Состояния процесса (см. Рисунок 4.).
- •1.5.2. Симметричная мультипроцессорная среда (рис. 5)
- •1.5.3. Распределенная среда (рис. 6)
- •1.6. Конфигурации клиент-серверных систем (рис.7.)
- •1.7. Средства ввода-вывода срв
- •2.1. Версии qnx
- •2.2. Posix-совместимость
- •2.3. Архитектура микроядра qnx
- •2.3.1. Микроядро
- •2.3.2. Системные процессы
- •2.3.3. Системные и пользовательские процессы
- •2.3.4. Драйверы устройств
- •2.3.5. Межпроцессное взаимодействие
- •2.3.6. Сеть qnx
- •2.4. Файлы и файловая система
- •2.4.1. Типы файлов
- •2.4.2. Жесткие ссылки
- •2.4.3. Символические ссылки
- •2.4.4. Named Special Device — именованные специальные устройства
- •2.4.5. Именованные программные каналы (fifo) (Именованный канал)
- •2.5. Структура файловой системы qnx
- •2.6. Концепция прав доступа
- •3. Начало работы
- •3.1. Интерфейс командной строки
- •3.2. Консоль командной строки
- •3.3. Соглашения по работе с командной строкой
- •3.4. Знакомство с shell
- •3.5. Обращение к домашнему каталогу
- •3.6. Базовые команды
- •3.6.1. Изменение текущего каталога
- •3.6.2. Просмотр содержимого каталогов
- •Жесткая ссылка обозначает ся так же, как файл, на который она ссылается, счетчик ссылок при этом будет иметь значение больше 1.
- •3.6.3. Создание новых каталогов
- •3.6.4. Копирование файлов
- •3.6.5. Перемещение файлов
- •3.6.6. Удаление файлов
- •3.6.7. Удаление каталогов
- •3.6.8. Просмотр содержимого файлов
- •3.6.9. Конкатенация (слияние) и просмотр файлов
- •3.6.10. Получение оперативной помощи
- •4. Объектно-ориентированное программирование
- •4.1. Системы программирования
- •4.2. Создание приложения
- •4.3. Средства отладки программ
- •5. Архитектура ос qnx
- •5.1. Типы процессов
- •5.2. Механизмы микроядра
- •5.3. Диспетчеризация потоков
- •5.4. Администратор процессов
- •5.5. Управление памятью
- •5.6. Управление пространством путевых имен
- •5.7. Пространство путевых имен
- •5.7.1. Файловая система qnx
- •5.7.2. Виртуальные устройства
- •Устройство /dev/null
- •Устройство /dev/zero
- •Устройство /dev/full
- •Устройства генерирования случайных чисел
- •5.8. Программы, процессы, нити
- •5.9. Свойства процессно-нитиевой структуры прв
- •5.10. Программный интерфейс qnx
- •5.10.1. Системные вызовы и функции стандартных библиотек
- •5.10.2. Обработка ошибок
- •5.11. Формальные параметры функции main
- •5.12. Разграничение доступа к файлам
- •5.13. Функции базового ввода/вывода
- •5.13.1. Открытие файла
- •5.13.2. Дублирование дескриптора файла
- •5.13.3. Доступ к файлу
- •6. Функции управления файловой системой
- •6.1. Смена корневого каталога
- •6.2. Смена текущего каталога
- •6.3. Создание каталога
- •6.4. Удаление каталога
- •6.5. Создание жесткой связи
- •6.6. Создание символической связи
- •6.7. Чтение символической связи
- •6.8. Переименование файла
- •6.9. Удаление файла
- •7. Микроядро
- •7.1. Запуск процессов
- •7.2. Запуск процесса из shell
- •7.3. Программный запуск процессов
- •7.3.1. Функция system()
- •7.3.2. Функции семейства exec*()
- •7.3.3. Функции семейства spawn*()
- •7.3.4. Функция fork()
- •7.3.5. Функция vfork()
- •7.4. Организация взаимодействия между процессами
- •7.5. Создание и удаление каналов Создание канала.
- •Удаление канала
- •7.6. Установление и удаление соединений с каналом Установление соединения
- •Int ConnectAttach(uint32_t nd, pid_t pid, int chid, unsigned index, int flags);
- •Разрыв соединения
- •Int ConnectDetach(int coid);
- •7.7. Передача сообщений
- •7.7.1. Посылка сообщения
- •IntMsgSend(int coid, constvoid* smsg, int sbytes, void* rmsg, int rbytes);
- •7.7.2. Прием сообщения
- •Int MsgReceive(int chid, void *msg, int bytes, struct _msg_info *info);
- •7.7.3. Посылка ответа
- •Int MsgReply(int rcvid,int status,const void* msg, int size);
- •7.7.4. Сценарии ответов
- •7.7.5. Управление сообщениями
- •7.7.6. Управление приемом сообщений
- •7.7.7. Управление передачей ответа
- •Int MsgSendv(int coid, const iov_t* siov, //Массив iov сообщения int sparts, //Количество iov сообщения const iov_t* riov, //Массив iov ответа int rbytes); //Количество iov ответа
- •Int MsgReceivev(int chid, const iov_t* riov, //Массив iov буфера int sparts, //Количество iov буфера struct_msg_info* riov);
5. Архитектура ос qnx
В настоящее время многие разработчики операционных систем представляют свой программный продукт как системы реального времени. В такой спорной ситуации только экспериментальная проверка операционных систем по минимальной величине времени реакции на запросы прерываний от событий во внешней среде позволяют выявить настоящие операционные системы реального времени (ОС РВ). Из всех многозадачных ОС только QNX является операционной системой реального времени и это определяется её уникальной архитектурой.
Процесс – это выполняющаяся программа. Процесс (или "задача") включает код и данные программы, а также различную дополнительную информацию – переменные системного окружения и т. п.
Кроме процесса важным понятием является "поток управления" (он же просто "поток", он же "нить", он же thread). Процесс является, по сути дела, контейнером потоков и содержит минимум один поток.
Поток управления – это фрагмент процесса, содержащий непрерывную последовательность команд, которые могут выполняться параллельно с другими потоками того же и других процессов.
На этапе выполнения поток может находиться в одном из трех состояний: исполнение на процессоре (RUNNING), ожидание процессора, или готовность к исполнению (READY) и блокировка в ожидании освобождения некоторого ресурса (название блокированного состояния зависит от того, в ожидании какого ресурса заблокирован поток). Есть еще состояние DEAD (в UNIX его называют ZOMBIE) — когда физически поток Уничтожен, но администратор процессов еще сохраняет некоторые структуры данных с информацией о нем, чтобы передать родительскому потоку код завершения.
Потоки весьма полезны в ряде случаев, поэтому поддержка потоков– обязательное свойство POSIX-совместимых ОС.
Обычно нити используют в следующих ситуациях:
для распараллеливания задачи на многопроцессорных ЭВМ;
для более эффективного использования процессора (например, когда одна нить ожидает пользовательского ввода, другая может выполнять расчеты);
для облегчения совместного использования данных (все нити процесса имеют свободный доступ к данным процесса).
Архитектура — это то, чем операционные системы семейста QNX, несмотря на большое внешнее сходство, отличаются от операционных систем семейства UNIX.
Концептуально архитектура QNX проста – она основана на двух фундаментальных понятиях:
микроядро;
межзадачное взаимодействие на основе сообщений.
Центральным понятием в QNX является микроядро (microkernel), которое назывется Neutrino (это название теперь распростаняется на всю ОС). Грубо говоря, микроядро почти ничего само не делает, являясь своего рода коммутирующим элементом, к которому с помощью дополнительных программных модулей добавляется та или иная функциональность. Другими словами, микроядро лишь обеспечивает возможность внешним процессам добавлять функциональность ОС.
Итак, микроядро Neutrino – главный и обязательный компонент ОСРВ QNX обеспечивает следующий минимально необходимый набор системных функций:.
создание и уничтожение потоков;
диспетчеризация потоков;
поддержка механизмов синхронизации нитей;.
поддержка механизмов межзадачного взаимодействия (IPC);
поддержка механизма обработки прерываний;
поддержка часов и таймеров.
Больше Neutrino не делает ничего. Как видно из приведенного списка функций микроядро не управляет процессами, а работает только с потоками и ничего не знает о процессах.
Поддержку процессов, работающих в изолированных адресных пространствах, в QNX обеспечивает специальная системная компонента, называемая администратор процессов.
Микроядро QNX Neutrino скомпоновано с Администратором процессов (Process Manager) в единый модуль proento — главный (и единственный безусловно необходимый для работы системы) компонент. Следует заметить, что существуют различные дополнительные варианты модуля proеnto:
procnto-smp — вариант модуля procnto с поддержкой симметричной многопроцессорности (входит в SMP TDK);
procnto-instr — вариант модуля procnto, оборудованный средствами трассировки событий,
procnto-smp-instr — сами догадайтесь, что это за модуль и для чего он предназначен.
Для разных процессоров, естественно существуют свои версии.
Администратор процессов выполняет следующие функции:
управление процессами;
управление механизмами защиты памяти;
поддержка механизма разделяемой памяти и механизмов межпроцессного взаимодействия;
управление пространством имен путей.
Переключение контекста между нитями в одном процессе происходит без участия администратора процессов, а - между нитями в разных процессах - с участием администратора процессов.
Вся остальная функциональность QNX обеспечивается специальными процессами, называемыми администраторами ресурсов (Resource Manager) и системными прикладными процессами. С помощью администраторов ресурсов, например, реализуется слаженное взаимодействие процессов с помощью механизма сообщений, доступ к устройствам внешней памяти (администраторы различных файловых систем) или сети (администратор сети qnet, администратор TCP/IP) . В качестве системного прикладного процесса выступает, например, процесс, инициируемый запуском командного интерпретатора shell.
Таким образом, в общем случае QNX Neutrino представляет собой группу процессов, работающих в изолированных адресных пространствах, взаимодействующих через микроядро и включающих:
Администратор процессов, скомпонованный с микроядром;
администраторы ресурсов;
системные процессы
прикладные процессы.