
- •Министерство образования и науки Украины
- •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.12. Разграничение доступа к файлам
QNX регулирует возможность приложений выполнять операции чтения/записи с файлом. Каждому созданному в QNX файлу устанавливаются идентификатор владельца (UID) и идентификатор группы (GID), а также атрибуты доступа для трех "личностей": владельца (user owner), группы (group owner) и "остальных" (other). Отметим, что владелец может не являться членом группы, владеющей файлом.
Каждой запущенной на выполнение программе (процессу) в системе устанавливается так называемый эффективный идентификатор владельца (EUID) и эффективный идентификатор группы (EGID). Эти идентификаторы используются для проверки прав доступа к файлу. Когда процесс пытается открыть какой-либо файл, QNX сначала проверяет, совпадает ли EUID процесса с UID файла. Если совпадает, то проверяется, имеет ли владелец право открыть файл с указанным режимом доступа. Если владелец имеет такие права, то файл открывается, если не имеет - процесс получит уведомление о запрете указанного режима доступа. Если EUID процесса не совпадает с UID файла, то проверяется, совпадает ли EGID процесса с GID файла и право группы открывать файл с указанным режимом доступа. Если никакие идентификаторы не совпали, тогда данному процессу может быть разрешен режим доступа, установленный для "остальных". Для процессов с EUID=0 (т.е. для пользователя root) доступ к файлам предоставляется без процедуры проверки прав.
Пользователь, который инициировал создание файлов, является их владельцем с соответствующими правами доступа к файлам. Пользователь может получить права доступа к файлам, владельцем которых он не является, если он становится членом соответствующей группы. Включение пользователя в группу автоматически предоставляет ему по отношению файлам, которыми владеет группа, соответствующие права доступа. Наоборот - для лишения пользователя прав доступа к файлам группы достаточно исключить его из состава группы.
Изменение для файла владельца пользователя производится командой chown, а изменение для файла владельца группы выполняется командой - chgrp. Эти команды может выполнить только пользователь root.
Владение файлом определяет не только возможность доступа к файлу, но и тот набор операций (прав доступа), который пользователь может совершить с файлом: чтение, запись, запуск на выполнение (для исполняемых файлов). Изменение прав доступа может осуществлять только владелец-пользователь, а также пользователь root.
Права доступа к файлу
Операционная система QNX различает три базовых класса доступа к файлу:
User access (u) - для владельца-пользователя файла.
Group access (g) - для членов группы, являющейся владельцем файла.
Other access (o) - для остальных пользователей (кроме суперпользователя, у которого максимальные права).
Для каждого из указанных классов доступа QNX поддерживает три типа прав доступа к файлу: на чтение (r), на запись (w) и на выполнение (x).
Права доступа могут быть изменены только владельцем файла или пользователем root посредством команды chmod.
Значение (семантика) прав доступа зависит от типа файла. Для обычного файла смысл операций вытекает из названий прав доступа. Например, если исполняемый файл является скриптом командного интерпретатора shell, то для его запуска понадобится право на чтение (r), поскольку при выполнении скрипта командный интерпретатор должен иметь возможность считывать команды из файла, а также право на выполнение (x). Права доступа для каталога не столь очевидны. Система трактует операции чтения и записи для каталогов отлично от остальных файлов. Право чтения каталога позволяет получить только имена файлов, находящихся в данном каталоге. Чтобы получить дополнительную информацию о файлах каталога, требуются права на "выполнение" каталога (x). Это же право нужно иметь для доступа ко всем каталогам на пути к указанному. Особое значение для каталога имеет право на запись. Создание и удаление файлов в каталоге требуют права на запись в этот каталог. Но при этом, чтобы удалить некоторый файл из каталога, не обязательно иметь какие-либо права доступа к этому файлу, важно лишь иметь право на запись для каталога, в котором находится этот файл.