- •Министерство образования и науки Украины
- •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.6. Управление пространством путевых имен
Пространство путевых имен является одной из особенностей ОС QNX. Дело в том, что управление ресурсами ввода/вывода не встроено в микроядро, а реализуется посредством администраторов ресурсов. Например, записью файлов на диск управляет Администратор файловой системы, отправкой данных по сети — Администратор сети. Для того, что бы интегрировать услуги администраторов ресурсов в операционную систему Администратор процессов предоставляет механизм пространства путевых имен.
5.7. Пространство путевых имен
5.7.1. Файловая система qnx
В QNX файлы организованы в виде древовидной структуры (дерева), называемой файловым пространством. Корнем этого дерева является корневой каталог, имеющий имя </>. Все доступное пользователям файловое пространство объединено в единое дерево каталогов, корнем которого является каталог с именем </>. Поэтому полное (абсолютное) имя любого файла начинается с </>. Это, однако, не означает, что файловое пространство выражает собой только одну файловую систему. В общем случае единое дерево, такое, каким его видит пользователь системы, составлено из нескольких отдельных файловых систем, которые могут располагаться на различных устройствах и иметь различные внутренние организации. QNX располагает средствами, позволяющими объединять различные файловые системы, находящиеся на различных устройствах в единое дерево.
Заметим, что QNX более тонко определяет понятие имени файла. Имя файла рассматривается как атрибут файловой системы, косвенно связанный с набором некоторых данных на диске, который не имеет имени как такового. Каждый файл (набор данных) имеет связанные с ним метаданные (хранящиеся в индексных дескрипторах - inode), содержащие все характеристики файла и позволяющие операционной системе управлять выполнением операций, заказанных прикладной задачей: открыть файл, прочитать или записать данные, создать или удалить файл. В частности, метаданные содержат указатели на дисковые блоки хранения данных файла. Имя файла в файловой системе рассматривается как ссылка на его метаданные, в то время как метаданные не содержат сведений об имени файла.
Для каждого процесса ОС ведет два атрибута, связанных с файловой системой – атрибут, указывающий на каталог, который рассматривается для процесса в качестве корневого, и атрибут, указывающий на каталог, который рассматривается для процесса в качестве текущего рабочего. В связи с этим процесс может адресоваться к файлу по имени либо в абсолютном, либо в относительном формате. Имя файла состоит из последовательности компонентов – локальных имен, разделенных символами '/'. Каталог, содержащий локальное имя, считается родительским каталогом этого имени. Последовательность имен каталогов, предшествующая последнему локальному имени в имени файла, считается префиксом имени файла. Абсолютное имя файла начинается с символа '/', обозначающего корневой каталог. Например, /user/bin/sh является абсолютным именем файла sh, а /user/bin/ - его префикс. Если имя файла не начинается с символа '/', то оно обозначает путь в файловой системе от текущего каталога процесса до указанного файла. Такое имя считается относительным. Например, mydir/test1.c.
Каждый каталог всегда содержит две скрытых системных жестких ссылки на каталоги. Первая ссылка имеет локальное имя ".". Она ссылается на свой родительский каталог. Вторая ссылка имеет локальное имя "..". Она ссылается на родительский каталог своего родительского каталога. Исключение составляет корневой каталог. Для него имя "." означает то же, что и имя "..". Например, имя ../andy/mydir/test1.c заставляет искать файл, начав с поиска локального имени andy в каталоге, являющемся родительским для текущего каталога.
Поиск файла по имени состоит в последовательном просмотре каталогов, указанных в префиксе, и поиске очередного локального имени.