Сетевая операционная система реального времени QNX

Вспомним основные принципы, обязательная реализация которых позволяет со­здавать операционные системы реального времени (ОСРВ). Первым обязатель­ным требованием к архитектуре операционной системы реального времени явля­ется многозадачность в истинном смысле этого слова. Очевидно, что варианты с псевдомногозадачностью (а точнее, с невытесняющей многозадачностью) в систе­мах Windows 3.X или Novell NetWare неприемлемы, поскольку они допускают воз­можность блокировки или даже полного развала системы одним неправильно ра­ботающим процессом. Для предотвращения блокировок вычислений ОСРВ должна использовать квантование времени (то есть использовать вытесняющую, а не коо­перативную многозадачность), что сделать достаточно просто. Вторая пробле­ма — организация надежных вычислений — может быть эффективно решена за счет специальных аппаратных возможностей процессора. При построении системы для работы на персональных компьютерах типа IBM PC для этого необходимы про­цессоры типа Intel 80386 и выше, чтобы иметь возможность организовать функци­онирование операционной системы в защищенном (32-разрядном) режиме работы процессора. Для эффективного обслуживания прерываний операционная система должна использовать алгоритм диспетчеризации, обеспечивающий вытесняющее планирование, основанное на приоритетах. Наконец, крайне желательна эффек­тивная поддержка сетевых коммуникаций и наличие развитых механизмов взаи­модействия между процессами, поскольку реальные технологические системы обычно управляются целым комплексом компьютеров и/или контроллеров. Весь-

Сетевая операционная система реального времени QNX - student2.ru Сетевая операционная система реального времени QNX__________________ 341

ма желательно также, чтобы операционная система поддерживала многопоточность (не только мультипрограммный, но и мультизадачный режимы) и симметричную мультипроцессорность. И наконец, при соблюдении всех перечисленных условий операционная система должна быть способна работать на ограниченных аппарат­ных ресурсах, поскольку одна из ее основных областей применения — встроенные системы. К сожалению, данное условие обычно реализуется путем простого уреза­ния стандартных сервисных средств.

Операционная система QNX является мощной операционной системой, разрабо­танной для процессоров с архитектурой ia32. Она позволяет проектировать слож­ные программные комплексы, работающие в реальном времени как на отдельном компьютере, так и в локальной вычислительной сети. Встроенные средства QNX обеспечивают поддержку многозадачного режима на одном компьютере и взаимо­действие параллельно выполняемых задач на разных компьютерах, работающих в среде локальной вычислительной сети. Таким образом, эта операционная система хорошо подходит для построения распределенных систем.

Основным языком программирования в системе является С. Основная операци­онная среда соответствует стандарту POSIX. Это позволяет с небольшими дора­ботками переносить ранее разработанное программное обеспечение в QNX для организации их работы в среде распределенной обработки.

Операционная система QNX, будучи сетевой и мультизадачной, в то же время яв­ляется многопользовательской (многотерминальной). Кроме того, она масштаби­руема. С точки зрения пользовательского интерфейса и интерфейса прикладного программирования она очень похожа на UNIX, поскольку выполняет требования стандарта POSIX. Однако QNX — это не версия UNIX, хотя почему-то многие так считают. Система QNX была разработана, что называется, «с нуля» канадской фирмой QNX Software Systems Limited в 1989 году по заказу Министерства оборо­ны США, причем на совершенно иных архитектурных принципах, нежели исполь­зовались при создании операционной системы UNIX.

QNX была первой коммерческой операционной системой, построенной на прин­ципах микроядра и обмена сообщениями. Система реализована в виде совокупно­сти независимых (но взаимодействующих путем обмена сообщениями) процессов различного уровня (менеджеры и драйверы), каждый из которых реализует опре­деленный вид услуг. Эти идеи позволили добиться нескольких важнейших пре­имуществ. Вот как об этом написано на сайте, посвященном операционной систе­ме QNX [14].

- Предсказуемость означает применимость системы к задачам жесткого ре­ального времени. QNX является операционной системой, которая дает пол­ную гарантию того, что процесс с наивысшим приоритетом начнет выпол­няться практически немедленно, и критически важное событие (например, сигнал тревоги) никогда не будет потеряно. Ни одна версия UNIX не может достичь подобного качества, поскольку нереентерабельный код ядра слиш­ком велик. Любой системный вызов из обработчика прерывания в UNIX может привести к непредсказуемой задержке (то же самое можно сказать про Windows NT).




Сетевая операционная система реального времени QNX - student2.ru 342________________ Глава 10. Краткий обзор современных операционных систем

- Масштабируемость и эффективность достигаются оптимальным использова­
нием ресурсов и означают применимость QNX для встроенных (embedded) си­
стем. В данном случае мы не увидим в каталоге /dev множества файлов, соот­
ветствующих ненужным драйверам, что характерно для UNIX-систем. Драйверы
и менеджеры можно запускать и удалять (кроме файловой системы, что оче­
видно) динамически, просто из командной строки. Мы можем иметь только те
услуги, которые нам реально нужны, причем это не требует серьезных усилий и
не порождает проблем.

- Расширяемость и надежность обеспечиваются одновременно, поскольку напи­санный драйвер не нужно компилировать в ядро, рискуя вызвать нестабиль­ность системы. Менеджеры ресурсов (служба логического уровня) работают в третьем кольце защиты, и вы можете добавлять свои менеджеры, не опасаясь за систему. Драйверы работают в первом кольце и могут вызвать проблемы, но не фатального характера. Кроме того, их достаточно просто писать и отла­живать.

- Быстрый сетевой протокол FLEEP прозрачен для обмена сообщениями, авто­матически обеспечивает отказоустойчивость, балансирование нагрузки и мар­шрутизацию между альтернативными путями доступа.

- Компактная графическая подсистема Photon, построенная на тех же принци­
пах модульности, что и сама операционная система, позволяет получить пол­
нофункциональный интерфейс GUI (расширенный интерфейс Motif), работа­
ющий вместе с POSIX-совместимой операционной системой всего в 4 Мбайт
памяти, начиная с i80386 процессора.

Архитектура системы QNX

Итак, QNX — это операционная система реального времени для персональных компьютеров, позволяющая эффективно организовать распределенные вычисле­ния. В системе реализована концепция связи между задачами на основе сообще­ний, посылаемых от одной задачи к другой, причем задачи эти могут решаться как на одном и том же компьютере, так и на разных, но связанных между собой ло­кальной вычислительной сетью. Реальное время и концепция связи между про­цессами посредством сообщений оказывают решающее влияние и на разрабатывае­мое для операционной системы QNX программное обеспечение, и на программиста, стремящегося с максимальной выгодой использовать преимущества системы.

Микроядро операционной системы QNX имеет объем всего в несколько десятков килобайтов (в одной из версий — 10 Кбайт, в другой — менее 32 Кбайт, хотя есть вариант и на 46 Кбайт), то есть это одно из самых маленьких ядер среди всех суще­ствующих операционных систем. В этом объеме помещаются [26]:

- механизм передачи сообщений между процессами IPC (Inter Process Commu­
nication — взаимодействие между процессами);

- редиректор (redirector) прерываний;

Сетевая операционная система реального времени QNX - student2.ru 1 Это фирменная технология, о которой несколько более подробно рассказано далее.

Сетевая операционная система реального времени QNX - student2.ru Сетевая операционная система реального времени QNX - student2.ru Сетевая операционная система реального времени QNX______________________ 343

- блок планирования выполнения задач (иначе говоря, диспетчер задач); - сетевой интерфейс для перенаправления сообщений (менеджер Net).

Механизм IPC обеспечивает пересылку сообщений между процессами и является одной из важнейших частей операционной системы, так как все взаимодействие между процессами, в том числе и системными, происходит через сообщения. Со­общение в операционной системе QNX — это последовательность байтов произ­вольной длины (0-65 535 байт) произвольного формата. Протокол обмена сооб­щениями может выглядеть, например, таким образом. Задача блокируется для ожидания сообщения. Другая задача посылает первой сообщение и при этом бло­кируется сама, ожидая ответа. Первая задача деблокируется, обрабатывает сооб­щение и отвечает, деблокируя вторую задачу.

Сообщения и ответы, пересылаемые между процессами при их взаимодействии, находятся в теле отправляющего их процесса до того момента, когда они могут быть приняты. Это означает, что, с одной стороны, снижается вероятность повреж­дения сообщения в процессе передачи, а с другой — уменьшается объем оператив­ной памяти, необходимый для работы ядра. Кроме того, становится меньше пере­сылок из памяти в память, что разгружает процессор. Особенностью процесса передачи сообщений является то, что в сети, состоящей из нескольких компьюте­ров, работающих под управлением QNX, сообщения могут прозрачно передавать­ся процессам, выполняющимся на любом из узлов. Определены в QNX еще и два дополнительных метода передачи сообщений — метод представителей (proxy) и метод сигналов (signal).

Представители используются в случаях, когда процесс должен передать сообщение, но не должен при этом блокироваться на передачу. Тогда вызывается функция qnx_proxy_attach() и создается представитель. Он накапливает в себе сообщения, кото­рые должны быть доставлены другим процессам. Любой процесс, знающий иденти­фикатор представителя, может вызвать функцию Trigger(), после чего будет доставле­но первое в очереди сообщение. Функция Trigger() может вызываться несколько раз, и каждый раз представитель будет доставлять следующее сообщение. При этом пред­ставитель содержит буфер, в котором может храниться до 65 535 сообщений.

Как известно, механизм сигналов уже давно используется в операционных систе­мах, в том числе и в UNIX. Операционная система QNX также поддерживает множе­ство сигналов, совместимых с POSIX, большое количество сигналов, традиционно использовавшихся в UNIX (поддержка этих сигналов требуется для совместимости с переносимыми приложениями, ни один из системных процессов QNX их не ге­нерирует), а также несколько сигналов, специфичных для самой системы QNX. По умолчанию любой сигнал, полученный процессом, приводит к завершению процесса (кроме нескольких сигналов, которые по умолчанию игнорируются). Но процесс с приоритетом уровня суперпользователя может защититься от неже­лательных сигналов. В любом случае процесс может содержать обработчик для каждого возможного сигнала. Сигналы удобно рассматривать как разновидность программных прерываний.

Редиректор прерываний является частью ядра и занимается перенаправлением аппаратных прерываний в связанные с ними процессы. Благодаря такому подходу

Сетевая операционная система реального времени QNX - student2.ru 344________________ Глава 10. Краткий обзор современных операционных систем

возникает один побочный эффект — с аппаратной частью компьютера работает ядро, оно перенаправляет прерывания процессам — обработчикам прерываний. Обработчики прерываний обычно встроены в процессы, хотя каждый из них ис­полняется асинхронно с процессом, в который он встроен. Обработчик исполня­ется в контексте процесса и имеет доступ ко всем глобальным переменным про­цесса. При работе обработчика прерываний прерывания разрешены, но обработчик приостанавливается только в том случае, если произошло более высокоприори­тетное прерывание. Если это позволяется аппаратной частью, к одному прерыва­нию может быть подключено несколько обработчиков, каждый из которых полу­чит управление при возникновении прерывания.

Этот механизм позволяет пользователю избегать работы с аппаратным обеспече­нием напрямую и тем самым избегать конфликтов между различными процесса­ми, работающими с одним и тем же устройством. Для обработки сигналов от вне­шних устройств чрезвычайно важно минимизировать время между возникновением события и началом непосредственной его обработки. Этот фактор существен в любой области применения: от работы терминальных устройств до обработки вы­сокочастотных сигналов.

Блок планирования выполнения задач обеспечивает многозадачность. В этом плане операционная система QNX предоставляет разработчику огромный простор для выбора той дисциплины выделения ресурсов процессора задаче, которая обеспе­чит наиболее подходящие условия для выполнения критически важных приложе­ний, а обычным приложениям обеспечит такие условия, при которых они будут выполняться за разумное время, не мешая работе критически важных приложе­ний.

К выполнению своих функций как диспетчера ядро приступает в следующих слу­чаях:

- какой-либо процесс вышел из блокированного состояния;

- истек квант времени для процесса, владеющего центральным процессором;

- работающий процесс прерван каким-либо событием.

Диспетчер выбирает процесс для запуска среди неблокированных процессов в по­рядке значений их приоритетов в диапазоне от 0 (наименьший) до 31 (наиболь­ший). Обслуживание каждого из процессов зависит от метода его диспетчериза­ции (приоритет и метод диспетчеризации могут динамически меняться во время работы). В QNX существуют три метода диспетчеризации:

- очередь (First In First Out, FIFO) — раньше пришедший процесс раньше об­
служивается;

- карусель (Round Robin, RR) — процессу выделяется определенный квант вре­
мени для работы, после чего процессор предоставляется следующему процессу;

- адаптивный метод (используется чаще других).

Метод FIFO наиболее близок к невытесняющей многозадачности. То есть процесс выполняется до тех пор, пока он не перейдет в состояние ожидания сообщения, в состояние ожидания ответа на сообщение или не отдаст управление ядру. При переходе в одно из таких состояний процесс помещается последним в очередь про-

Сетевая операционная система реального времени QNX - student2.ru Сетевая операционная система реального времени QNX______________________ 345

цессов с таким же уровнем приоритета, а управление передается процессу с наи­большим приоритетом.

В методе RR все происходит так же, как и в предыдущем, с той разницей, что пери­од, в течение которого процесс может работать без перерыва, ограничивается не­ким квантом времени.

Процесс, работающий в соответствии с адаптивным методом, ведет себя следую­щим образом:

- если процесс полностью использует выделенный ему квант времени, а в систе­
ме есть готовые к исполнению процессы с тем же уровнем приоритета, его при­
оритет снижается на 1;

- если процесс с пониженным приоритетом остается необслуженным в течение
секунды, его приоритет увеличивается на 1;

- если процесс блокируется, ему возвращается исходное значение приоритета.

По умолчанию процессы запускаются в режиме адаптивной многозадачности. В этом же режиме работают все системные утилиты QNX. Процессы, работающие в разных режимах многозадачности, могут одновременно находиться в памяти и исполнять­ся. Важный элемент реализации многозадачности — приоритет процесса. Обычно приоритет процесса устанавливается при его запуске. Но есть дополнительная воз­можность, называемая вызываемым клиентом приоритетом. Как правило, она реа­лизуется для серверных процессов (исполняющих запросы на какое-либо обслужи­вание). При этом приоритет процесса-сервера устанавливается только на время обработки запроса и становится равным приоритету процесса-клиента.

Сетевой интерфейс в операционной системе QNX является неотъемлемой частью ядра. Он, конечно, взаимодействует с сетевым адаптером через сетевой драйвер, но базовые сетевые службы реализованы на уровне ядра. При этом передача сооб­щения процессу, находящемуся на другом компьютере, ничем не отличается с точ­ки зрения приложения от передачи сообщения процессу, выполняющемуся на том же компьютере. Благодаря такой организации сеть превращается в однородную вычислительную среду. При этом для большинства приложений не имеет значе­ния, с какого компьютера они были запущены, на каком исполняются и куда по­ступают результаты их работы.

Все службы операционной системы QNX, не реализованные непосредственно в яд­ре, работают как обычные стандартные процессы в полном соответствии с основ­ными концепциями микроядерной архитектуры. С точки зрения операционной системы эти системные процессы ничем не отличаются от всех остальных. Как, впрочем, и драйверы устройств. Единственное, что нужно сделать, чтобы новый драйвер устройства стал частью операционной системы, — изменить конфигура­ционный файл системы так, чтобы драйвер запускался при загрузке.

Наши рекомендации