- •Министерство образования и науки Украины
- •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.6. Сеть qnx
QNX основана на том принципе, что эффективная связь - ключ к эффективной работе. QNX интегрирует сеть в единый набор ресурсов. Любой процесс на любой машине в сети может непосредственно использовать любой ресурс на любой другой машине. С точки зрения приложения нет никакого различия между локальным или удаленным ресурсом - доступ к ним обеспечивается обычными средствами.
Сети QNX могут быть объединены с помощью различных аппаратных средств и стандартных промышленных протоколов. Новая архитектура сети может быть представлена в любое время без помех для операционной системы, так как она полностью прозрачна для прикладных программ и пользователей.
Каждому узлу в сети QNX назначается уникальный номер, который становится его идентификатором. Этот номер - единственное средство, позволяющее определить, работает ли QNX как сеть или как операционная система одиночного компьютера.
2.4. Файлы и файловая система
Все данные в операционной системе хранятся в виде файлов. Одной из важнейших функций любой ОС является способность манипулировать файлами, размещенными на различных физических носителях (магнитных дисках, микросхемах ПЗУ и т. п.).
В QNX файлы организованы виде древовидной структуры (дерева), называемой файловым пространством. В общем случае единое дерево, такое, каким его видит пользователь системы, составлено из нескольких отдельных файловых систем, которые могут располагаться на различных устройствах и иметь различные внутренние организации. QNX располагает средствами, позволяющими объединять различные файловые системы, находящиеся на различных устройствах в единое дерево (Монтирование файловых систем). Корнем этого дерева является корневой каталог, имеющий имя </>. Поэтому полное имя любого файла начинается с </>.
Файл — это набор байтов, имеющий общие атрибуты:
имя файла;
идентификатор владельца и идентификатор группы;
атрибуты доступа (для владельца, для членов группы и для остальных пользователей);
метки времени (время создания файла, время последней модификации файла, время последнего доступа к файлу, время последней записи в файл);
тип файла;
счетчик ссылок;
Другие атрибуты.
Имя файла с добавлением списка разделенных символом "/" имен вложенных каталогов, содержащих файл (начиная с корневого каталога), называется полным или путевым именем файла. Например, /usr/photon/bin/slideviewer. Здесь файл с именем
slideviewer имеет путь /usr/photon/bin.
2.4.1. Типы файлов
В QNX существуют несколькь типов файлов, различающихся по функциональному назначению и действиям операционной системы при выполнении тех или иных операций над файлами:
Каталоги — это, по сути дела, обычные файлы, имеющие определенную структуру. Каталог представляет собой набор записей Определенного формата, называемых элементами каталога. Первым элементом каталога всегда является запись о файле с именем ”.”. Этот элемент является ссылкой "на самого себя", указывая на соответствующую самому себе запись в родительском каталоге. Вторым элементом каталога всегда является запись о файле с именем ". .". Этот элемент ссылается на родительский каталог, указывая на его первый элемент. Таким образом, первые два элемента каталога всегда существуют и имеют известное содержимое. Если каталог является корневым для данного физического раздела, то оба эти элемента ссылаются на собственный каталог. Штатные средства просмотра файловой системы по умолчанию не отображают файлы (а каталог, как мы уже выяснили, это просто тип файла), имена которых начинаются с точки (.). Такие файлы называют "скрытыми" и обычно в них содержится системная и конфигурационная информация, а "спрятаны" они для повышения "дуракоустойчивости" операционной системы.
Каждый элемент каталога связывает имя некоторого файла со служебной информацией о нем, включающей ссылку на место физического хранения данных. Содержимое элемента каталога можно представить так:
16 байт для имени файла;
размер файла;
информация о физическом размещении содержимого файла на диске;
метки времени;
атрибуты доступа;
счетчик ссылок на физические данные;
тип файла;
статус ("закрыт" или "открыт").
Вы, конечно же, заметили, что для имени файла в элементе каталога отведено всего 16 байт. Что же делать, если требуется задать для файла более длинное имя? В файловой системе QNX (о которой мы еще поговорим) есть служебный файл /.inodes (Information Nodes — "информационные узлы", эти "узлы" — дальние родственники индексных узлов UNIX). Если длина имени какого-нибудь файла превысит 16 символов (т. е. 16 байт), то в файле /.inodes будет создана запись для этого файла, в которую переместится вся информация о файле, кроме имени. В элементе каталога, относящемся к данному файлу, останутся файла (теперь его длина может достигать 48 символов) и, имеется, ссылка на запись в файле /. inodes.
Т.к. возникла необходимость поддержки во страиваемых системах еще более длинных имен файлов. Разработчики QSS добавили в версии 6.2.1 очень простое решение: "лишняя" часть имен файлов помещается в файл . longfilenames, аналогичный файлу .inodes. Это позволяет задавать имена, состоящие из 505 символов. Если файловую систему с такими длиннющими именами смонтировать в версии QNX Neutrino, которая еще не знала о существовании подобных имен, то "урезание" будет выполняться тем же способом, каким DOS урезает длинные имена Windows.
Любая задача, имеющая право на чтение каталога, может прочесть его содержимое, но только ОС имеет право на запись в каталог.
Обычный файл представляется операционной системой как файл, содержащий просто последовательность байтов. Интерпретация содержимого такого файла производится исключительно прикладной программой. К таким файлам относятся и исполняемые программы.
В сложившейся практике приложение "узнает" свой файл по расширению его имени (т. е. по части имени файла, идущей после точки). Например: myfile.c — это исходный текст программы на языке С. Исполняемые файлы, в отличие от операционных систем семейства Windows, QNX узнает не по расширению (вроде ехе), а по специальному атрибуту. Для того чтобы при двойном щелчке мышью на имени файла в окне файлового менеджера Photon (pfm) автоматически запускалось нужное приложение, необходимо добавить соответствующую ассоциацию (см. гл. 3).
Связь позволяет связать с одним файлом несколько различных имен, которые могут быть помещены, например, в различные каталоги. Создание еще одного имени файла осуществляется с помощью команды <ln>.