- •Министерство образования и науки Украины
- •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);
2.3. Архитектура микроядра qnx
QNX обязана своей уникальной степенью эффективности, модульности и простоты двум фундаментальным принципам:
микроядерной архитектуре;
межпроцессному взаимодействию с помощью сообщений.
QNX состоит из маленького ядра, отвечающего за группу взаимодействующих процессов. Как показано на следующих иллюстрациях, его структура напоминает скорее "команду", чем иерархию, поскольку несколько игроков равного ранга взаимодействуют друг с другом и с "защитником" - ядром.
Рис.10. Микроядро QNX, координирующее менеджеров системы
2.3.1. Микроядро
Ядро - основа любой операционной системы. В некоторых системах "ядро" включает та много функций, что является полной операционной системой!
Но микроядро QNX - действительно ядро. Во-первых, как ядро операционной системы реального времени, микроядро QNX очень маленькое. Во-вторых, оно обеспечивает только две необходимых функции:
Передачу сообщений (message passing) - микроядро обрабатывает поток всех сообщений всех процессов во всей системе;
Планирование (scheduling) - планировщик является частью микроядра и вызывается всякий раз, когда изменяется состояние процесса в результате сообщения или прерывания.
В отличие от процессов, выполнение самого микроядра никогда не планируется. Вход в микроядро - только прямой результат вызовов его или процессом, или аппаратным прерыванием.
2.3.2. Системные процессы
Все услуги QNX, кроме обеспечиваемых микроядром, обеспечиваются стандартными процессами QNX. Типичная конфигурация QNX имеет следующие системные процессы:
Менеджер процессов (Proc)
Менеджер файловой системы (Fsys)
Менеджер устройств (Dev)
Менеджер сети (Net)
2.3.3. Системные и пользовательские процессы
Системные процессы фактически не отличаются от любой пользовательской программы - они не имеют никаких недоступных процессам пользователя частных или скрытых интерфейсов. Именно эта архитектура обеспечивает QNX беспрецедентную расширяемость.
Единственное реальное различие между системными процессами и приложениями - то, что системные процессы распределяют ресурсы для приложений.
2.3.4. Драйверы устройств
Драйверы устройств - процессы, которые избавляют операционную систему от необходимости иметь дело со всеми деталями, требуемыми для поддержки определенных аппаратных средств.
Поскольку драйверы запускаются как стандартные процессы, добавление нового драйвера к QNX не затрагивает любую другую часть операционной системы. Единственное изменение, которое нужно среде QNX - запуск нового драйвера.
2.3.5. Межпроцессное взаимодействие
Когда несколько процессов выполняется одновременно, как в типичных многозадачных средах в реальном масштабе времени, операционная система должна обеспечить механизмы для связи процессов друг с другом.
QNX была первой коммерческой операционной системой, использовавшей передачу сообщений как фундаментальное средство межпроцессного взаимодействия.
Сообщение в QNX - пакет байтов, передающийся от одного процесса к другому. Передача сообщений позволяет процессам не только передавать данные друг другу, но также и обеспечивает средства синхронизации выполнения нескольких процессов. Когда процессы посылают, принимают и отвечают на сообщения, они подвергаются различным "изменениям состояния", которые влияют на то, когда, и как долго, они могут выполняться. Зная их состояния и приоритеты, микроядро может распланировать все процессы настолько эффективно, насколько возможно использовать доступные ресурсы центрального процессора.
QNX обеспечивает простой, но мощный набор средств межпроцессного взаимодействия, которые очень упрощают работу по созданию приложений, состоящих из взаимодействующих процессов.
QNX обязана многим из своей мощности, простоты и элегантности законченной интеграции метода передачи сообщений во всю систему.