Сетевая ОС реального времени QNX

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

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

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

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

2. Масштабируемость и эффективность, достигаемые оптимальным использо­ванием ресурсов и означающие ее применимость для встроенных (embedded) систем.

3. Расширяемость и надежность одновременно, поскольку написанный вами драй­вер не нужно компилировать в ядро, рискуя вызвать нестабильность системы.

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

5. Компактная графическая подсистема Photon, построенная на тех же принци­пах модульности, что и сама ОС, позволяет получить полнофункциональный графический интерфейс пользователя

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

механизм передачи сообщений между процессами (IPC);

редиректор прерываний;

блок планирования выполнения задач;

сетевой интерфейс для перенаправления сообщений (менеджер Net).

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

Определены в QNX еще и два дополнительных метода передачи сообщений – метод представителей (Proxy) и метод сигналов (Signal).

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

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

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

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

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

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

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

Если процесс блокируется, ему возвращается оригинальное значение приоритета.

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

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