- •Министерство образования и науки Украины
- •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);
1.7. Средства ввода-вывода срв
Существует два механизма выполнения ввода/вывода: прерывания и опрос. Рассмотрим, как задачи взаимодействуют с внешними устройствами.
Контроллеры устройств. Устройства ввода/вывода общаются с операционной системой при помощи контроллеров, которые находятся на интерфейсных платах устройства. Центральный процессор работает именно с контроллером, а не с самим устройством. У контроллера есть набор регистров, используемых для обмена информацией с ЦП. Пример простого контроллера устройства ввода/вывода приведен на рис.9.
Рис.9. Пример простого контроллера устройства ввода/вывода
Поместив блок информации в буфер ввода, контроллер взводит бит в регистре состояния, показывающий, что буфер ввода полон. При выводе используется другой бит, свидетельствующий, что полон буфер вывода. После вывода символа контроллер сбрасывает этот бит. Биты состояния применяются для управления передачей данных между процессором и устройством. Драйверы устройств исполняются центральным процессором и отвечают за работу с устройствами ввода/вывода через их контроллеры. Обычно для каждого типа устройства существует один драйвер.
Ввод/вывод с опросом. Когда используется ввод/вывод с опросом, система должна периодически проверять устройство ввода, чтобы понять, не пришли ли новые данные, или устройство вывода, чтобы выяснить, завершилась ли операция.
При вводе с опросом задача драйвера должна опрашивать устройство ввода, то есть периодически проверять, не установлен ли бит «буфер ввода полон» в регистре состояния. Контроллер взводит этот бит, когда есть новые входные данные. Обнаружив, что бит установлен, драйвер устройства считывает символ и сбрасывает бит.
При выводе драйвер устройства инициирует вывод, а затем периодически проверяет бит «буфер вывода пуст», чтобы узнать, когда завершилась операция. Обнаружив, что бит установлен, драйвер может приступить к выводу следующего символа.
Обработка прерываний.
В регистре управления есть бит, разрешающий или запрещающий прерывания. Если они разрешены, то при поступлении входных данных и завершении операции вывода контроллер генерирует прерывание.
Наиболее распространенные способы ввод/вывод: с управлением от программы и ввод/вывод, запускаемый программой. В первом случае прерывание обычно генерируется после чтения или записи каждого символа, во втором между устройством ввода/вывода и основной памятью помещается устройство прямого доступа к памяти (Direct Memory Access – DMA), управляющее передачей блоков данных между ними. По завершении передачи устройство DMA генерирует прерывание.
При поступлении прерывания ЦП приостанавливает выполнение текущей задачи, сохраняет ее контекст и вызывает обработчик прерывания (предполагается, что приоритет такого обработчика выше, чем приоритет задачи). Когда обработка закончена, контекст прерванной задачи восстанавливается, и она может продолжать функционирование.
2. QNX
2.1. Версии qnx
Для коммерческого использования доступно три семейства ОС QNX: QNX2, QNX4 и QNX6.
ОС QNX2 мало распространена и почти повсеместно вышли из употребления.
ОС QNX4 Компания QSS не развивает эту ОС, но продолжает выпускать к ней драйверы для новых устройств. Последняя ее версия — 4.25 патч G (вышла в начале 2003 года).
ОС QNX6 (или QNX Neutrino) может использоваться не только на х86-совместимых ЭВМ и еще более удобна для встраивания, чем QNX4. Разработчики системы стремятся обеспечить максимальную переносимость в QNX исходных кодов, написанных для ОС Linux. Это значительно облегчает портирование свободно распространяемого ПО в QNX и, с другой стороны, обеспечивает "переносимость" для разработчиков — прикладной программист, знающий любую UNIX-подобную ОС, может приступать к разработке прикладного ПО для QNX без переучивания. Последняя версия QNX Neutrino – 6.3.
QNX — это семейство операционных систем жесткого реального времени, ориентированных главным образом на рынок встраиваемых систем, т.е. требует от ОС максимального использования особенностей аппаратуры. Поэтому ОС QNX разных версий (правильнее было бы сказать — поколений) не имеют между собой двоичной совместимости.