- •Министерство образования и науки Украины
- •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);
3.6.10. Получение оперативной помощи
Для того чтобы точно знать синтаксис конкретной команды, следует обратиться к документации. Пользователи UNIX-подобных систем часто пользуются электронной документацией, доступной через утилиту man.
Практически каждый QNX имеет то, что называется "Руководство" - man ( ``manual pages''). Команда man содержит документацию на различные команды системы, ресурсы, конфигурационные файлы и выдает страницу Руководства по данной команде или ресурсу. (здесь "ресурс" - это любая системная утилита, которая не является командой, например библиотечная функция). Синтаксис:
man <command> где <command> имя команды или ресурса, о котором запрашивается информация.
Например, если вы хотите найти информацию о других опциях команды ls, введите
/home/stud# man ls
и вам на экран будут выведены страницы Руководства.
К сожалению, большинство страниц руководства написаны с ориентацией на пользователей, имеющих некоторые представления о работе соответствующих команд. Поэтому страницы Руководства обычно содержат справочные данные по командам, а не учебный материал. Но Руководство неоценимо для освежения памяти, если вы забыли синтаксис команды.
В QNX исторически используется другая утилита — use. Например, для получения информации о синтаксисе утилиты ls нужно выполнить команду
use ls
Документация man-страниц хранится в отдельном файле, а use-сообщения встроено внутрь программы, в данном случае – внутрь утилиты ls.
4. Объектно-ориентированное программирование
Комплект разработчика QNX Momentics содержит ряд инструментов:
системы программирования;
комплекты разработчика;
интегрированная среда разработки;
средства визуального моделирования;
средства разработки графических интерфейсов пользователя;
средства управления версиями.
Часть из этих инструментов разработана непосредственно компанией QSS, часть другими компаниями (например, Motorola), часть перенесены из Linux. Портированное из Linux программное обеспечение распространяется на условиях GNU GPL (кстати, достаточно жесткой для конечного пользователя лицензии) и технической поддержкой не обеспечивается. Поэтому наиболее полезные OpenSource-продукты постепенно замещаются коммерческими аналогами.
4.1. Системы программирования
Компания QSS традиционно не вела самостоятельную разработку инструментальных средств для своих ОСРВ. Например, в QNX4 штатным инструментом была система программирования C/C++ компании Watcom (сейчас эта торговая марка принадлежит корпорации Sybase).
К системам программирования, поставляемым с QNX, относятся:
C/C++ (GNU CC) — пока это основной инструмент, используемый для создания приложений под QNX. Для защиты пользователей от "острых углов" лицензии GNU GPLL (General Public Library License) с коммерческими дистрибутивами QNX поставляются коммерческие библиотеки. Для целевых систем х86 планируется использовать продукты производства Intel (например, ice);
Java (на основе IBM j9) — значение этого инструмента постепенно повышается с ростом популярности платформы Java 2 MicroEdition и проекта Eclipse;
Pascal (проект OpenPascal.org) — для тех, кому это надо;
и ряд других (Perl, Python, tel/tk, ksh, zsh, algol68 и т. д.). Напомню, что большинство из этих продуктов перенесено из Linux энтузиастами, часто — для демонстрации совместимости QNX с Linux на уровне исходных кодов.