SWD Software Ltd. - официальный дистрибьютор QNX на территории России и стран бывшего СССР Операционная система реального времени QNX
Инструменты для создания надёжных встраиваемых систем и
интеллектуальных устройств любой сложности
QNX Software Systems - разработчик встраиваемой операционной системы QNX
  Стандартная версия

OC QNX - реальное время, реальные возможности...

Операционная система ЭВМ представляет собой совокупность программ, выполняющих две основные функции:

1. управление ресурсами системы, обеспечение (в случае необходимости) их распределения между несколькими пользователями и контроль за выделением ресурсов для одновременного выполнения многих задач;

2. предоставление набора услуг, обеспечивающего пользователю интерфейс, который отвечает его потребностям лучше, чем интерфейс физической машины; этим интерфейсом является интерфейс "виртуальной машины", который предоставляет набор средств для управления потоками информации, а также для реализации прикладного программного обеспечения.

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

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

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

Любой пользователь, в первую очередь, оценивает те возможности, которые система может ему предоставить, и насколько она может облегчить его участь при разработке прикладной системы. "На каких аппаратных платформах и с какой скоростью она работает ? Какое периферийное hardware поддерживает ? Какие возможности предоставляет для организации сетей ? Обеспечивает ли совместимость с какими-либо другими операционными системами ? Какие в ней есть инструментальные средства для разработки прикладных систем ?" - вот далеко не полный список вопросов, ответы на которые хочет получить пользователь при знакомстве с новой ОС.

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

В начале 80-х в университете Waterloo (Ontario, Canada) в результате исследований, проводимых в одном из отделов, была разработана новая операционная система, позволяющая организовать работу в реальном масштабе времени. Изначально, двое ее авторов были приверженцами различных платформ: Intel и Motorola, и благодаря этому, первая версия этой системы одинаково хорошо работала на обеих платформах. Когда они решили выйти с этой системой на рынок, за основу, все же был взят Intel. Первая версия системы (названная тогда

QUNIX) была выпущена в 1981 году. Это произошло еще до того, как IBM создала свой PC, и возможно, поэтому, событию не было уделено достаточно внимания среди широкого круга пользователей. Однако, это событие не прошло незамеченным для промышленных и военных структур. Фирма Quantum Software Systems Ltd. (с марта 1993 года - QNX Software Systems Ltd.), организованная авторами новой ОС, начала разработку коммерческого варианта операционной системы QNX. Она выступила родоначальником многих современных технологий программирования. Когда UNIX вышел на арену со своей технологией макроядра, концепции микроядра с IPC (Inter Process Communications) на основе передачи сообщений, заложенные в QNX в 1980 году, уже не были новинкой.

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

Процессы

ocqnx3.gif - 9.9 K
Рис.1 Ядро ОС QNX

В QNX размер ядра составляет около 10 Кбайт и обеспечивает поддержку 14 основных системных вызовов для предоставления сервиса по четырем направлениям:

1. IPC.

2. Диспетчеризация процессов.

3. Обработка прерываний.

4. Перенаправление сообщений по сети.

QNX поддерживает три основных типа IPC: сообщения, proxies и сигналы.

IPC на основе передачи сообщений базируется на трех основных примитивах Send(), Receive() и Reply(). Например, процесс A посылает сообщение процессу B с помощью функции Send(), принимающий процесс (B) находится в состоянии ожидания при помощи функции Receive(). После приема сообщения, процесс B, с помощью функции Reply(), отвечает процессу A, который находится в состоянии ожидания ответа. После чего посылающий процесс (A) разблокируется и продолжает работу. Такой механизм взаимных блокировок позволяет легко синхронизировать выполнение взаимодействующих процессов. Весь остальной сервис, предоставляемый в плане взаимодействия процессов (конвееры, очереди сообщений и т.п.), основывается на этом механизме. QNX копирует сообщения непосредственно из адресного пространства передающего процесса в адресное пространство принимающего, без создания дополнительных буферов. Поэтому “доставка” сообщений выполняется, практически, со скоростью, которую может позволить аппаратное обеспечение.


Рис.2 Диаграмма производительности механизма передачи сообщений в зависимости от объема сообщений (в байтах) для различных аппаратных платформ.

Proxy - является специальным видом сообщения, которое позволяет посылающему процессу избегать блокированного состояния. В данном случае посылающий процесс сигнализирует о каком-либо событии с помощью функции Trigger() и, не дожидаясь ответа, продолжает работу.

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

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

  • какой-либо процесс вышел из блокированного состояния
  • истек квант времени для процесса, владеющего CPU
  • работающий процесс прерван каким-либо событием

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

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

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

OC ЭВМ Время на переключение, (микросекунды)
QNX 4.2 60 MHz ALR Pentium 28
HP-RT 1.1 100 MHz HP-747x 34
QNX 4.2 66 MHz IBM 80486DX2 44
QNX 4.2 33 MHz IBM 80486DX 80
DEC OSF/1 V1.3 150 MHz DEC 21064 93
SunOS 4.1.3 50 MHz SuperSPARCv8 95
DEC 3000 150 MHz DEC 21064 100
AIX 3.2 62 MHz RS6000 102
HP-UX 9.x 66 MHz snake 106
SunOS 4.1.3 40 MHz viking 128
Ultrix 4.3 40 MHz Digital MIPS R3000 132
Linux 0.99.13p 66 MHz Gateway 80486DX2 171
SunOS 4.1.1 33 MHz Sun SPARC 198
386BSD 0.1 33 MHz IBM 80486DX 210
AIX 3.2 50 MHz RIOS 212
SunOS 4.1.3 50 MHz SPARCv7 230
Unicos Cray Y/MP 373
QNX 4.2 16 MHz IBM 80386SX 525
Solaris 2.3 50 MHz microSPARCv8 595

Время переключения контекстов в различных OS.

Данные, находящиеся в этой таблице, взяты из телеконференции comp.os.qnx и собраны в таблицу сотрудниками фирмы "SWD - Real Time Systems". (Исходный текст тестовой программы, доступен по запросу всем желающим).

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

ЭВМ Задержка, (микросекунды)
Pentium/60 3
486DX2/66 5
486DX/33 8
386DX/33 15


Показатели задержки по времени между возникновением события и началом непосредственной его обработки.

В плане распределенных вычислений, с QNX пока трудно соревноваться какой-либо ОС. Она может обеспечивать одновременную передачу данных по 3 сетям, сочетая разнообразный набор сетевого оборудования. Так, на одном компьютере, в одно и тоже время могут использоваться Arcnet, Ethernet и Token Ring. Кроме того, сеть можно организовать без использования сетевых карт, ограничившись интерфейсом RS232. Хотя, в определенном смысле, это является скорее расширением, чем ограничением. Так как, подсоединив модем к своему компьютеру, Вы можете организовать полноценную сеть с узлами, территориально удаленными на любое расстояние.

Для обеспечения передачи данных по сети она использует администратор сети (Net), который взаимодействует непосредственно с ядром. Когда ядро получает запрос на передачу данных процессу, находящемуся на удаленном узле, он переадресовывает этот запрос Net, в подчинении которого находятся драйверы всех сетевых карт. Имея перед собой полную картину состояния всего сетевого оборудования, Net может отслеживать состояние каждой сети и динамически перераспределять нагрузку между ними. В случае, когда одна из сетей выходит из строя, информационный поток автоматически перенаправляется в другую доступную сеть, что очень важно при построении высоконадежных систем. Кроме поддержки своего собственного протокола, Net обеспечивает передачу пакетов TCP/IP, SMB и многих других, используя то же сетевое оборудование. Производительность QNX в сети приближается к производительности аппаратного обеспечения. Тесты, проведенные с различными сетевыми картами (Corman Arcnet, NE2000 и Thomas-Conrad 100Mbit TC3045-CX), вставляемыми в шину ISA, показали следующие результаты:


Рис.3 Диаграмма производительности QNX сети в зависимости от объема передаваемых данных (в байтах) для различных типов аппаратного обеспечения.

Немаловажным фактором обеспечения работы в реальном масштабе времени является производительность файловой системы.

Fsys - это менеджер ресурсов, который обеспечивает пользователю POSIX - стандартную файловую систему в среде QNX. Основным ее преимуществом по сравнению с файловой системой UNIX является живучесть, уменьшенная фрагментарность файлов и увеличенная скорость работы. Сами файлы в QNX организованы по принципу набора участков, ссылки на которые находятся в дескрипторах файлов и в отдельных участках дисковой памяти. Он создает следующую дисковую структуру: для отслеживания свободного дискового пространства он использует битмэп, а для организации данных - массив расширений для каждого файла. Такая структура позволяет процессам пользователя осуществлять доступ к данным на диске со скоростью, близкой к скорости аппаратного обеспечения. На 33 MHz 486 чтение производится со скоростью 2.2 M/sec, запись - 1.85 M/sec. На 60 MHz Pentium чтение - 2.8 M/sec, запись - 2.5 M/sec.Для этого теста использовался Buslogic BT-445S VESA Localbus SCSI контроллер.

Для улучшения целостности данных в работу файловой системы добавлен вызов функции fsync(). В большинстве UNIX систем, когда вы работаете с файлом в синхронном режиме, любой обмен данными с файлом влечет за собой обращение непосредственно к диску и изменение структуры данных, значительно снижая производительность. Вызов fsync(), описанный в POSIX 1003.4, позволяет вам работать с файлом в асинхронном режиме, вызывая fsync() только после прохождения критических участков (например, по окончании обмена) чтобы гарантировать, что все структуры данных на диске были изменены соответствующим образом.

Основные принципы архитектуры QNX остались неизменными с момента создания ее коммерческого варианта в 1982 году - микроядро, окруженное группой взаимодействующих процессов, которые обеспечивают высокоуровневый сервис ОС, но производительность QNX значительно возросла пройдя эволюционный путь от версии 1.00 до версии 3.15.

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

В 1989 году была начата разработка новой POSIX-стандартной версии QNX (4.0). Целью этого проекта было повышение производительности и гибкости, которые обеспечивали предыдущие поколения системы. Новая версия была выпущена в 1991 году.

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

Необходимость лучшей совместимости особенно актуальна для рынка ОС реального времени, который отличается большим разнообразием используемых процессоров и операционных систем. Кроме того, дополнительная проблема при создании таких систем заключается в том, что многие разработчики большую часть программ пишут на ассемблере, пытаясь обеспечить лучшую производительность. Недостаток такого подхода очевиден: для переноса таких программ на другую аппаратную платформу требуется полная их переработка. Использование компилятора C фирмы Watcom в среде ОС QNX позволило пользователям составлять свои критичные ко временным характеристикам программы на языке высокого уровня без снижения производительности.

В настоящее время QNX версии 4.21, представляет собой гибрид 16/32 - битовой операционной системы, которую пользователь может конфигурировать по своему усмотрению. Время, необходимое для полной инсталляции системы, которая занимает на диске менее 7 Mb, составляет всего 15 - 20 минут, в зависимости от быстродействия компьютера.

Существует поддержка SCSI устройств, c полным распараллеливанием доступа к дискам, стримерным лентам и CD-ROM. Это большой плюс для систем RAID, требующих количества устройств, большего, чем может поддержать одна карта.

Разнообразием различных графических интерфейсов QNX может порадовать любого разработчика. Это , в первую очередь, библиотека графических функций, в составе пакета Watcom C, полнофункциональная оконная система QNX Windows, выполненная в соответствии со стандартом Open Look, графический интерфейс для ограниченной в ресурсах встраиваемой системы - Photon, поддерживающий Motif стандарт и требующий всего 256K оперативной памяти, X Window - графический стандарт для всех открытых систем, и, наконец, если вам нужен доступ к популярному настольному программному обеспечению, вы всегда можете запустить Microsoft Windows с помощью утилиты Rundos.

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

На сегодняшний день, QNX используется, по крайней мере, в 200,000 систем, преимущественно там, где высокая производительность, гибкость системы и прекрасные сетевые возможности являются фундаментальными требованиями. Широкая область ее применения была обеспечена тем, что технология микроядра подходит для создания систем критичных ко времени и ресурсам, таких как управление процессами, медицина, обработка финансовых документов и т.д. Более чем 10-летняя проверка временем подтверждает ее жизнеспособность. Со времени первого появления QNX на рынке операционных систем, она была использована во многих тысячах проектах. Наиболее яркими примерами ее использования является всемирно известная система кредитных карточек VISA, система обработки видеоизображений фирмы Kodak, система управления ядерным реактором, разработанная приморским отделением канадской компании Atomic Energy of Canada Ltd., система автоматизации добычи нефти и газа фирмы Texaco, система управления движением городского транспорта в городе Оттава - Карлетон (Канада). На сегодняшний день ОС QNX охватывает 80% рынка Real Time ОС для PC. К 1994 году фирма QNX Software Systems Ltd. имеет дистрибьютеров в более чем 60 странах мира. Пользователями QNX являются такие фирмы, как Alcatel, Asea Brown Bovery, British Telecom, Canon, Honda, Mitsubishi, Panasonic, Saab, Siemens и Sony. В России QNX также успешно используется многими промышленными предприятиями. В настоящее время трудно найти отрасль в которой QNX еще не нашла себе применения. Разнообразные системы на базе QNX используются в медицине, фармацевтике, металлургии, автомобилестроении, коммуникациях, торговле, банках и в любых областях промышленности, где требуется распределенная обработка информации в реальном масштабе времени.

Ющенко C.В.
'Мир ПК' номер 5-6/95