ЖУРНАЛ СТА №1/2000

ет не главную роль. Функциональные возможности такой системы наращи- ваются не путем добавления новых функций в ядро, а за счет подключе- ния новых процессов, обеспечиваю- щих дополнительный сервис. Поэтому поддержка файловой системы, сетевой обработки, графического интерфейса и других сервисов не является функци- ей микроядра, как в большинстве ОС. Эти сервисы обеспечиваются отдель- ными процессами. Целью создания ОС на основе микроядра яв- ляется не желание сделать ее как можно меньше по разме- ру, а стремление обеспечить бо' льшую гибкость за счет модульности структуры. Не- большой размер является, несомненно, положитель- ным, но всетаки побочным эффектом. Компактное ядро Neutrino имеет очень небольшой раз- мер — менее 32 кбайт, вы- полняя нескольких основ- ных служб операционной си- стемы: ● службы обмена сообщени- ями между потоками всей системы; ● службы синхронизации потоков; ● службы диспетчеризации потоков; ● службы управления таймерами и ап- паратными прерываниями. В отличие от потоков (процессов), само ядро Neutrino не подлежит дис- петчеризации. Код ядра исполняется только при вызове функции ядра ка- кимнибудь потоком или при обработ- ке аппаратного прерывания. Все ос- тальные службы операционной систе- мы реализованы посредством стан- дартных процессов. Пользователь имеет возможность создавать необхо- димую ему конфигурацию операцион- ной системы путем добавления или удаления необходимых в данной реа- лизации процессов. В QNX/Neutrino не существует различия между пользо- вательскими и системными процесса- ми: и те и другие используют одинаковые механизмы взаи- модействия с ядром ОС. Драй- веры устройств в QNX/Neutri- no не отличаются от осталь- ных процессов в системе, и их можно создавать и отлажи- вать, как обычные пользова- тельские приложения. Микроядерная структура присутствовала и в предыду- щих версиях ОС QNX, однако она, в отличие от Neutrino, не могла работать без менеджера процессов. Так как ядро QNX/Neutrino обеспечивает достаточ- ный набор функций для управления потоками, то пользователь имеет воз- можность создать конфигурацию, со- стоящую из одних только пользова- тельских потоков, не включая в ядро менеджер процессов (рис. 1). Все это необходимо для реализации встроенных систем реального време- ни. Дополнительно к этим функциям в ядре реализован механизм обмена со- общениями, являющийся отличитель- ной чертой ОС QNX. Введено новое понятие «пульс» — краткое служебное сообщение, не требующее ответа и ис- пользуемое для асинхронных передач. Ядро управляет объектами и поддер- живает 57 вызовов для поддержки по- токов, сообщений, сигналов, тайме- ров, обработчиков прерываний, при- митивов синхронизации (семафоров, критических секций, условных пере- менных). Все вызовы ядра являются полностью прерываемыми. Прерыва- ния отключаются на 8 команд при вхо- де в код ядра, на 14 команд при выходе из него и на 40 команд при возникно- вении исключения. Микроядро Neutrino обеспечивает перераспределение процессорного вре- мени между потоками (процессами) за счет различных механизмов диспетче- ризации. Исполнение потока приоста- навливается всякий раз при возникно- вении одного из следующих условий: ● поток вызывает функцию ядра; ● происходит аппаратное прерывание; ● возникает исключение. П ОДДЕРЖКА МУЛЬТИПРОЦЕССОРНОСТИ При работе QNX/Neutrino мы уви- дим почти линейный рост производи- тельности при добавлении дополни- тельных процессоров (всего до 8). Это достигается за счет того, что все сис- темные вызовы QNX/Neutrino могут вытесняться при необходимости обра- ботать вызов от нити с более высоким приоритетом даже в процессе переда- чи сообщений. Такое качество микро- ядра в совокупности со сравнительной простотой и малым размером позволя- ет минимизировать невытесняемые последовательности кода в системе. Это влечет за собой ряд положитель- ных последствий. Вопервых, улучша- ются временные характеристики сис- темы. Вовторых, невысокие требова- ния к памяти упрощают разработку встроенных систем низшего уровня. Втретьих, уменьшается количество блокировок в коде, необходимых для поддержки симметричных мультипро- цессорных архитектур (SMP) и повы- шается эффективность использования дополнительных процессоров (рис. 2). Кроме того, реализация SMP QNX/Neutrino допускает ручное рас- пределение процессов между процес- сорами, что позволяет добиться еще большей эффективности в контроли- руемой среде исполнения. Д ИСПЕТ ч ЕРИЗАЦИЯ ПРОЦЕССОВ Решение о том, какой поток вновь получит управление, принимает ОБ ЗО Р / П Р О Г Р АММНО Е ОБ Е С П Е Ч Е НИ Е 33 СТА 1/2000 www.cta.ru Рис. 1. Микроядро QNX/Neutrino Рис. 2. Поддержка многопроцессорных конфигураций в QNX/Neutrino

RkJQdWJsaXNoZXIy MTQ4NjUy