- •Министерство образования и науки Украины
- •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.4.4. Named Special Device — именованные специальные устройства
Этот тип специфичен для QNX. Поскольку не всегда данные при обмене удобно представлять в виде символов и блоков, потребовалось ввести специальный дополнительный тип файлов — Named Special Device. Разумеется, обмен посредством этого типа файлов требует знания формата данных от всех участников обмена. Например, для взаимодействия компонентов графической системы используется специальный файл /dev/photon.
2.4.5. Именованные программные каналы (fifo) (Именованный канал)
Это файл, используемый для связи между процессами.
Именованные каналы предназначены для организации взаимодействия между двумя или более процесса-один процесс пишет в программный канал, другой читает из программного канала. FIFO — далеко не самый быстрый способ межзадачного взаимодействия. Но он не лишен достоинств: во-первых, данные, записанные в FIFO, сохраняются при отключении питания, во-вторых, взаимодействующие процессы не должны передавать друг другу никакие дескрипторы или идентификаторы (но им должно быть известно имя FIFO-файла).
Сокеты используются для доступа к сети TCP/IP.
2.5. Структура файловой системы qnx
Файловая система QNX имеет базовую структуру системных каталогов и файлов, обеспечивающую работу ОС и её администрирование. Нарушение этой структуры может привести к неработоспособности системы или отдельных её компонентов. Типичная базовая структура файловой системы QNX включает в себя следующие каталоги.
Корневой каталог
Корневой каталог </> является основой файловой системы. Все остальные каталоги и файлы располагаются в структуре корневого каталога независимо от их физического местонахождения.
/bin
В каталоге /bin находятся наиболее часто употребляемые команды и утилиты системы, как правило, общего пользования.
/dev
Каталог /dev содержит файлы устройств. Каталог может содержать подкаталоги, группирующие файлы устройств одного типа.
/etc
В этом каталоге находятся системные конфигурационные файлы и многие утилиты администрирования, а также скрипты инициализации системы.
/lib
В каталоге /lib находятся библиотечные файлы языка С.
/fs
Это стандартный каталог для монтирования файловых систем физических устройств к структуре корневого каталога для получения единого дерева логической файловой системы.
/home
Каталог общего употребления для размещения домашних каталогов пользователей.
/usr
В этом каталоге находятся подкаталоги различных сервисных подсистем, исполняемые файлы утилит QNX, заголовочные файлы и т.д.
/var
Этот каталог используется для хранения временных файлов различных сервисных подсистем.
/tmp
Каталог хранения временных файлов, необходимых для работы различных подсистем QNX, а также пользователей системы.
/x86
В структуре этого каталога содержатся средства, обеспечивающие разработку программ на языке С для исполнения на базе платформы intel. В нем, в частности, находится утилита – компилятор qcc.
К файлу можно обращаться по пути (pathname), формируемом из имени файла, которому предшествует имя каталога, содержащего файл. Путь - это маршрут, который надо проделать, чтобы добраться до конкретного файла. Каталог выше данного (под)каталога называется родительским каталогом, а ниже данного дочерним.
Например, если в каталоге "/usr/include" содержится каталог "sys", который в свою очередь, содержит каталог "conf", то путь к каталогу "conf" будет
/usr/include/sys/conf
Здесь каталог sys является родительским для каталога conf. Как вы видите, имена каталогов и файлов разделяются единичным слэшем (/). Поэтому имена файлов сами по себе не могут содержать этот символ.
Полное (абсолютное) имя- это полный маршрут - т.е. путь от корня до данного имени. Формальным признаком полного имени является то, что оно начинается со слэша ("/").
Имя файла может начинаться с символа, отличного от ``/'', система предполагает, что вы обращаетесь к файлу с учетом вашего текущего рабочего каталога. Это называют относительным именем (а).
Любой пользователь в каждый момент времени «находится» в каком-либо каталоге, называемом текущим или рабочим каталогом. Можно думать о текущим каталоге, как о каталоге в котором вы находитесь. При обращении к файлу можно обращаться к нему с учетом текущего местоположения, вместо того, чтобы указывать полный путь. Относительное имя начинается не с "/", и определят имя относительно своего местоположения. Если (пользователь?) в данный момент находится в директории /usr файловой системы, то он может обратиться к этому же файлу по относительному имени
include/sys/conf
Есть два специальных имени:
. - это "имя" текущего директория и
.. - это "имя" родительского директория (т.е. директория, находящегося на ступеньку выше данного на пути к корню).
После установки QNX в системе будет домашний каталог root, используемый, когда вы входите в систему как пользователь root, и еще один — в каталоге home. Каждый пользователь имеет домашний каталог, который выделяется пользователю для хранения его файлов. Обычно пользовательский домашний каталог находится под каталогом /home и называется именем пользователя, например /home/stud. При начальном входе в систему рабочим каталогом автоматически становится домашний каталог.