1 В чем уникальность QNX Neutrino
ОСРВ QNX Neutrino состоит из микроядра и различных процессов. Каждый процесс, в том числе драйверы устройств, выполняется в своем соб-ственном виртуальном пространстве памяти (рис. 2).
Рисунок 2«Архитектура ОСРВ QNX Neutrino»
Преимущество использования виртуальной памяти в том, что один процесс не может повредить адресное пространство другого процесса. (Более подробные сведения можно найти в главе документа "Описание применения. Часть 1. Системная архитектура" КПДА.10964-01 31 01). Главной особенно-стью ОСРВ QNX Neutrino является ее микроядерная архитектура, вокруг ко-торой строится инфраструктура администраторов ресурсов. Драйверы имеют точно такой же статус, как и другие пользовательские приложения, поэтому их отладку можно выполнять с помощью тех же высокоуровневых инстру-ментов IDE, которые используют исходный текст (source-aware) и точки оста-нова (breakpointing) и которые обычно применяются для отладки пользова-тельских приложений. Это также означает, что: - процесс отладки драйвера не затрагивает ядро; - сбой драйвера не приведет к сбою всей ОС;
1.1 Администраторы ресурсов
Администратор ресурсов (resource manager) — это серверная програм-ма, которая принимает сообщения от других программ и может взаимодей-ствовать с оборудованием. Все драйверы устройств и файловые системы в ОСРВ QNX Neutrino реализуются как администраторы ресурсов.
Администраторы ресурсов служат для обеспечения интерфейса с раз-личными типами устройств. В их число могут входить как физические устройства (например, последовательные порты, параллельные порты, сете-вые карты, диски), так и виртуальные (например, /dev/null, сетевая файловая система, псевдотерминалы).
Взаимодействие между администратором ресурса и клиентской про-граммой, использующей данный ресурс, осуществляется посредством гибко-го механизма пространства путевых имен (pathname-space mapping). Этот ме-ханизм служит для ассоциирования путевых имен с администратором ресур-сов. Для этого администратор ресурсов уведомляет администратор процессов (process manager) о том, что он будет отвечать за обработку запросов к задан-ной точке монтирования (или ниже нее в случае файловых систем).
Таким образом, администратор процессов устанавливает связь между службами (т. е. функциями, предоставляемыми администраторами ресурсов) и именами путей. Как только администратор ресурсов установил свой пре-фикс путевого имени, он начинает получать сообщения при каждой попытке клиентской программы сделать по этому путевому имени вызов open(), read(), write() и т. д. Более подробные сведения см. в главе 8 руководства "Описание применения. Часть 1. Системная архитектура" КПДА.10964-01 31 01.
2 Вход в систему, выход из нее и завершение работы системы
ОСРВ QNX Neutrino — это многопользовательская операционная си-стема. Несколько пользователей могут одновременно входить и работать в системе, при этом защита пользователей осуществляется с помощью меха-низма владения ресурсами (resource ownership) и прав доступа (permissions). В зависимости от конфигурации система загружается либо в графическом ре-жиме (графическая оболочка Photon), либо в текстовом режиме, после чего у пользователя запрашивается имя и пароль. Систему можно сконфигурировать таким образом, чтобы пользователю не требовалось выполнять процедуру входа.
2.1 root или не root?
При первой установке ОСРВ QNX Neutrino автоматически создается единственная учетная запись пользователя с именем root. Этот пользователь может выполнять в системе любые действия (по терминологии Windows, он имеет привилегии администратора, а в UNIX-подобных операционных систе-мах учетную запись root называют суперпользователем (superuser). По умол-чанию для учетной записи root пароль не установлен. Для защиты системы следует: - создать надежный пароль сразу после установки ОС; - создать дру-гую учетную запись для повседневной работы (это поможет предотвратить случайное изменение или удаление системного программного обеспечения, поскольку некоторые действия, например запуск драйверов, выполнение за-дач по системному администрированию или профилированию приложений, можно выполнить только под учетной записью root). Приглашение команд-ной строки, заданное по умолчанию, указывает используемый идентификатор пользователя: - для пользователя root отображается символ диеза (#); - для остальных пользователей отображается символ доллара ($).
2.2 Вход в систему
Если система настроена на запуск графической оболочки Photon, авто-матически запускается утилита phlogin2 или phlogin, отображающая диалого-вое окно для входа в систему. В этом окне нужно ввести имя пользователя (или щелкнуть мышью по пиктограмме нужного пользователя), ввести па-роль и затем нажать кнопку Login.
2.2.1 Текстовый режим
Если система настроена на загрузку в текстовом режиме, автоматически запускается утилита login, которая запрашивает имя пользователя и пароль. Примечание. Если вы введете неверное имя пользователя, система не сообщит об этом и все равно запросит пароль (это сделано для повышения безопасно-сти системы). Текстовый режим на компьютере с архитектурой x86 может быть реализован на физической консоли посредством утилиты devc-con или devc-con-hid. Кроме того, соединение с целевой системой может осуществ-ляться через последовательный порт или посредством протокола TCP/IP.
2.3 После входа в систему
После входа в систему автоматически запускается сценарий /home/имя_пользователя/.profile. Он позволяет настроить рабочее окружение пользователя (working environment), не влияя на настройки других пользова-телей. Изменить пароль можно с помощью команды passwd. Эта команда за-прашивает текущий и новый пароль. Чтобы войти в систему в качестве друго-го пользователя, введите команду login в командной строке и затем введите имя пользователя и пароль.
2.4 Выход из системы
2.4.1 Выход из графического режима
Чтобы выйти из графической оболочки Photon, выполните следующие действия:
1. Выберите команду Log Out в меню Launch или Desktop либо введите команду phshutdown в командной строке. На экране появится диалоговое ок-но завершения работы.
2. Выберите Logout (End Photon session) и нажмите кнопку Оk. Если си-стема настроена на запуск в графической оболочке Photon, на экране снова появится диалоговое окно утилиты phlogin2 или phlogin. Если же вы запусти-ли графическую оболочку Photon вручную из текстового режима, система вернется в этот режим. Даже если запуск графической оболочки Photon про-исходит автоматически, вы можете завершить сеанс работы с Photon и перей-ти в текстовый режим. Для этого выполните следующие действия:
• В диалоговом окне входа в систему щелкните мышью Shutdown. На экране появится диалоговое окно завершения работы.
• Выберите Exit to text mode и нажмите кнопку Ok. Если вы запустите сеанс работы с терминалом из графической оболочки Photon (например, щелкнув мышью Terminal на системной панели, утилита pterm запустит ко-мандный интерпретатор от имени текущего пользователя Photon. Как и в тек-стовом режиме, вы можете переключаться между пользователями, однако при выполнении команды выхода окно утилиты pterm закрывается.
2.4.2 Выход из текстового режима
Чтобы выйти из системы, находящейся в текстовом режиме, введите в командной строке команду logout. Вы также можете выйти из системы с по-мощью завершения командного интерпретатора. Для этого нужно ввести ко-манду exit или нажать комбинацию клавиш +.
2.5 Завершение работы и перезагрузка системы
ОСРВ QNX Neutrino редко требуется перезагружать целиком. В случае сбоя драйвера или другого системного процесса, как правило, его можно пе-резапустить отдельно. Примечание. Для завершения работы системы с QNX Neutrino нельзя просто выключать компьютер из электросети, т. к. процессы могут завершиться некорректно, а данные, находящиеся в кэше файловой си-стемы, могут не записаться на диск.
Для завершения работы или перезагрузки системы в текстовом режиме используйте команду shutdown. Однако эта команда доступна только для привилегированного пользователя root. Эта утилита позволяет выполнять следующие операции: - задавать узел, работу которого требуется завершить (по умолчанию текущий узел); - задавать тип завершения работы (по умолча-нию выполняется перезагрузка); - ускоренно завершать работу; - выводить список действий, выполняемых при завершении работы (т. е. подробный от-чет). В графической оболочке Photon вы можете выполнить команду phshutdown в командной строке или выбрать пункт Shutdown в меню Launch или Desktop. По умолчанию эти действия могут выполнять любые пользова-тели (не только root).
Перед тем как завершить работу системы, команды shutdown и phshutdown посылают сигнал SIGTERM всем выполняемым процессам для их корректного завершения. Более подробные сведения об этих утилитах см. в документе "Описание программы" КПДА.10964-01 13.
3 Операционная система реального времени QNX
3.1 Операционная система QNX
QNX - операционная система реального времени, разработанная специ-ально для высокоответственных приложений, бесперебойно функционирую-щих годами. Надёжность QNX обеспечивается её архитектурой - это настоя-щая операционная система на основе микроядра. В QNX ядром обрабатыва-ются только базовые примитивы ОС (сигналы, таймеры, планирование). Все остальные компоненты: драйверы, файловые системы, стеки протоколов, прикладные приложения - выполняются вне пределов ядра как отдельные процессы, каждый в своём защищённом адресном пространстве. Такой под-ход автоматически обеспечивает системам на основе QNX «встроенную» от-казоустойчивость.
Все компоненты QNX используют для общения друг с другом единый, чётко детерминированный механизм - обмен сообщениями. Он образует меж-ду компонентами системы виртуальную «программную шину», позволяю-щую подключать к ней или, наоборот, отключать любой компонент «на ле-ту». Сообщения могут свободно передаваться между узлами вычислительной сети, предоставляя прозрачный доступ к любому ресурсу, где бы он ни нахо-дился.
Использование QNX позволяет: создавать системы, способные к само-восстановлению - в QNX любой компонент в случае отказа может быть пере-запущен динамически, не нарушая работу микроядра и других компонентов. Например, если драйвер попытается обратиться к памяти за пределами своего адресного пространства (что для большинства ОС является фатальной ошиб-кой), QNX корректно завершит этот драйвер и освободит все занятые им ре-сурсы; использовать одну и ту же ОС во всей своей линейке программных продуктов - благодаря исключительной модульности QNX любые уже испы-танные и проверенные компоненты: драйверы, приложения, дополнительные сервисы ОС - могут использоваться повторно в других продуктах. Фактиче-ски универсальный набор бинарных модулей может применяться как в одно-процессорном устройстве, так и в SMP_системе, и в вычислительном класте-ре; производить обновление системного программного обеспечения без оста-новки работы конечного устройства - поскольку любой компонент в QNX может быть добавлен или удалён динамически, система может продолжать работать даже в процессе замены или добавления в неё новых приложений, драйверов или стеков протоколов.
3.2 Архитектура ядра системы QNX
Система QNX состоит из небольшого ядра (микроядра) и набора взаи-модействующих процессов. Как показано на рис. 1, система не имеет иерар-хической структуры, ее организация скорее напоминает "спортивную коман-ду", в которой игроки (процессы), имеющие равную значимость, взаимодей-ствуют друг с другом и со своим "ведущим игроком" (ядром).
Рисунок 3 «Архитектура ядра QNX»
3.2.1 Ядро системы QNX
Ядро является "сердцем" любой операционной системы. В некоторых системах на ядро возложено такое количество функций, что, по сути дела, оно само является полной операционной системой.
В системе QNX ядро является действительно ядром. Прежде всего, как и подобает ядру операционной системы реального времени, оно имеет не-большой размер_-_менее 8 Кбайт. На ядро системы QNX возложено выпол-нение только двух основных функций:
1)передача сообщений (ядро реализует передачу всех сообщений между всеми процессами во всей системе);
2)планирование (планировщик является частью ядра и подключается каждый раз, когда процесс меняет свое состояние в результате появления со-общения или прерывания).
В отличие от процессов само ядро никогда не планируется к выполне-нию. Управление передается ядру только в результате прямого вызова ядра либо из процесса, либо по аппаратному прерыванию.