Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform
Шрифт:
Вспомогательная подпрограмма dirent_size просто вычисляет число байт, необходимое для структуры
И, наконец, вспомогательная подпрограмма dirent_fill применяется для помещения передаваемых ей значений (а именно — полей inode, offset и fname) в также передаваемый ей элемент каталога. В порядке щедрости она также возвращает указатель на адрес (с учетом выравнивания), с которого должен начинаться следующий элемент каталога.
Резюме
Написание администратора ресурсов — наиболее сложная
задача из описанных в этой книге.Администратор ресурсов — это сервер, который воспринимает ряд четко определенных сообщений. Эти сообщения можно подразделить на две категории:
Сообщения установления соединения
Относятся к операциям с именами путей, с их помощью можно устанавливать контекст для дальнейшей работы.
Сообщения ввода/вывода
Всегда следуют за сообщениями установления соединения и указывают, какую реальную работу нужно сделать для клиента (например, stat).
Действия администратора ресурса управляются функциями пула потоков (мы обсуждали их в главе «Процессы и потоки») и функциями интерфейса диспетчеризации.
QSSL в библиотеке администратора ресурсов предоставляет ряд вспомогательных POSIX-функций, которые выполняют львиную долю работы по обслуживанию клиентских сообщений установления соединения и ввода/вывода, поступающих в администратор ресурсов.
Существует ряд структур данных, относящихся к клиентам и объявляемым администраторами ресурсов устройствам, которые необходимо принимать во внимание:
OCB (блок открытого контекста)
Выделяется при каждом «открытии» ресурса; содержат контекст для клиента (например, текущее смещение lseek).
Атрибутная запись
Выделяется для каждого устройства; содержит информацию об устройстве (например, размер устройства, режимы доступа, и т.д.).
Запись точки монтирования
Распределяется на базисе по каждому администратору ресурса и содержит полную информацию о характеристиках администратора ресурса.
Клиент общается с администраторами ресурсов посредством обмена сообщениями, разрешив имя пути (с помощью функции open и других вызовов) в соответствующий нужному администратору дескриптор узла, идентификатор процесса, идентификатор канала и обработчик (handle).
И наконец, вы наделяете администратор ресурса необходимой вам функциональностью, переопределяя некоторые из вызовов в таблицах функций установления соединения и функций ввода/вывода.
Приложение А
Переход с QNX4 на QNX/Neutrino
Переход с QNX4 на QNX/Neutrino
В данном приложении мы рассмотрим предыдущую операционную систему разработки QSSL, QNX4, и сравним ее с QNX/Neutrino. Данное приложение будет вам интересно главным образом в том случае, если вы уже являетесь пользователем QNX4 и хотите узнать.
• что такого замечательного в QNX/Neutrino?
• какие сложности связаны с переносом программного обеспечения в QNX/Neutrino?
а также если вы разрабатываете (или портируете) программное обеспечение для обеих операционных систем.
Сходства
Давайте начнем со общих черт этих двух операционных систем:
• архитектура на основе обмена сообщениями;
• распределенный обмен сообщениями в сети;
• реальное время;
• микроядерная архитектура;
• защита памяти на уровне процессов;
• POSIX-совместимость;
• относительно простая модель «драйвера устройства»;