- •Министерство образования и науки Украины
- •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.9. Свойства процессно-нитиевой структуры прв
При разработке логической структуры ПРВ механизм процессов обеспечивает структурный параллелизм, а механизм нитей - функциональный параллелизм ПРВ. В частности, ПРВ может состоять из одного процесса, в котором исполняются множество нитей. Однако, представление ПРВ в виде совокупности взаимодействующих процессов придает ему следующие дополнительные свойства:
возможность модульной организации ПРВ на макро уровне;
гибкость и конфигурируемость ПРВ;
повышение надежности ПРВ.
Модульность ПРВ на макроуровне обуславливает возможность разработки исполняемых процессами программ независимо друг от друга. Гибкость и конфигурируемость ПРВ вытекает из возможности динамически добавлять или модифицировать процессы непосредственно при функционировании ПРВ ("на лету"). Единственная возможность установить зависимость процессов друг от друга - наладить между ними информационную связь с помощью небольшого количества средств взаимодействия. Так как поведение процесса в рамках решаемой им задачи может быть четко специфицировано, то упрощается процедура выявления и устранения ошибок в исполняемой программе. Кроме того, процессы выполняются в независимых адресных пространствах. Две нити, работающие в разных процессах, изолированы одна от другой. Это способствует большей надежности ПРВ.
5.10. Программный интерфейс qnx
Одной из целей, которые изначально ставились перед разработчиками QNX, являлось создание удобной среды программирования и программного интерфейса. Разработка программ не возможна без знания интерфейса системных вызовов и без понимания внутренних структур и функций, предоставляемых операционной системой. Осмысленное администрирование системы также затруднительно без представления о том, как работает QNX. Программный интерфейс QNX позволяет наглядно показать внутренние механизмы операционной системы.
Программный интерфейс выражается в виде системных вызовов и функций стандартных библиотек.
5.10.1. Системные вызовы и функции стандартных библиотек
Прикладные задачи имеют возможность воспользоваться базовыми услугами, предоставляемыми QNX. Эти услуги получили название системных вызовов. Системный вызов инициирует функцию, выполняемую средствами операционной системы от имени процесса, выполнившего вызов, и является программным интерфейсом самого низкого уровня взаимодействия прикладных процессов с операционной системой. В среде программирования QNX они определяются как функции языка С. В QNX каждый системный вызов имеет соответствующую функцию (или семейство функций) с тем же именем, хранящуюся в стандартной библиотеке языка С (в дальнейшем эти функции будем для простоты называть системными вызовами). Фактически эти функции играют роль оболочки, которая выполняет необходимые преобразования аргументов и инициируют требуемый системный вызов ОС.
Помимо системных вызовов программный интерфейс предлагает большой набор функций общего назначения. Эти функции не являются системными вызовами, хотя в процессе выполнения многие из них выполняют системные вызовы. Эти функции также хранятся в стандартных библиотеках С и наряду с системными вызовами составляют основу среды программирования в QNX. К этим функциям относятся функции библиотеки ввода/вывода, функции распределения памяти, функции управления процессами и т.д.