
Системы реального времени.-7
.pdf
|
Название ОС |
тексты |
|
|
|
|
|
|
(Компания) |
Исходные |
|
|
|
|
|
|
Продолжение табл. 5.3 |
||
|
Software |
|
|
|
Systems) |
|
|
|
Nucleus |
|
|
|
Plus/RTX |
X |
|
|
(Accelerated |
||
|
|
|
|
|
Technology) |
|
|
|
Allegro |
|
|
|
(Allegro |
X |
|
|
Systems |
||
|
|
|
|
|
Limited) |
|
|
|
ARTK |
X |
|
|
(Alsys GmBH) |
||
|
|
|
|
|
VCOS |
|
|
|
(AT&T) |
|
|
|
BOX |
|
|
Поддержка WinAPI
150
WindowsРазработка под |
POSIX APIПоддержка |
Работа из ПЗУ |
приоритетыФиксированные |
многозадачностьПриоритетная |
З а памяти |
льность |
Многопроцессорность |
Сетевые средства |
коммуникацииМежзадачные |
общую памятьСвязь через |
синхронизацияМежзадачная |
процедурУдаленный вызов |
задачУдаленный запуск |
мониторингУдаленный |
Удаленная отладка |
X |
|
X |
|
X |
|
X |
|
X |
X |
|
X |
|
|
|
|
|
|
|
|
X |
X |
X |
|
X |
X |
X |
|
|
|
|
|
|
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
|
X |
|
|
X |
|
|
|
X |
|
|
X |
X |
|
X |
X |
X |
|
|
|
|
X |
|
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
741

Название ОС |
тексты |
WinAPI |
|
|
|
(Компания) |
|
|
Окончание табл. 5.3 |
Поддержка |
||
|
Исходные |
|
|
(Brainstorm |
|
|
|
Engineering) |
|
|
|
MIPS Kernel |
X |
|
|
(CAC) |
|
||
|
|
||
UNOS |
|
|
|
(Charles River |
X |
|
|
Data Systems) |
|
|
|
CMX (CMX |
X |
X |
|
Company) |
|||
|
|
||
RTXC |
|
|
|
Embedded |
X |
|
|
Systems |
|
||
|
|
||
Products) |
|
|
|
HP RT |
X |
|
|
(Hewlett |
|
|
151
WindowsРазработка под |
POSIX APIПоддержка |
Работа из ПЗУ |
приоритетыФиксированные |
многозадачностьПриоритетная |
а памяти |
ульность |
Многопроцессорность |
Сетевые средства |
коммуникацииМежзадачные |
общую памятьСвязь через |
синхронизацияМежзадачная |
процедурУдаленный вызов |
задачУдаленный запуск |
мониторингУдаленный |
Удаленная отладка |
|
|
|
|
X |
X |
X |
X |
|
X |
X |
X |
|
X |
|
X |
|
X |
X |
X |
X |
X |
|
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
|
X |
|
X |
X |
X |
|
X |
X |
X |
X |
|
|
X |
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
X |
|
X |
X |
X |
X |
X |
|
X |
X |
X |
X |
X |
X |
X |
X |
|
X |
|
|
X |
X |
X |
X |
X |
|
X |
|
X |
|
|
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
841

152
Название ОС (Компания)
Packard) OS/Open
(IBM) VRTX
(Microtec
Research) RMOS
(Siemens)
Исходные тексты |
Поддержка WinAPI |
WindowsРазработка под |
POSIX APIПоддержка |
Работа из ПЗУ |
приоритетыФиксированные |
многозадачностьПриоритетная |
Защита памяти |
Модульность |
Многопроцессорность |
Сетевые средства |
коммуникацииМежзадачные |
общую памятьСвязь через |
синхронизацияМежзадачная |
процедурУдаленный вызов |
задачУдаленный запуск |
мониторингУдаленный |
Удаленная отладка |
|
|
X |
X |
X |
X |
|
|
X |
|
X |
X |
|
X |
X |
|
|
X |
|
|
X |
|
X |
|
X |
|
|
X |
X |
X |
|
X |
X |
|
|
|
|
X |
X |
|
X |
|
X |
X |
X |
X |
X |
X |
X |
X |
|
|
|
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
153
Существующие ОСРВ обслуживают довольно внушительный парк микропроцессоров. Приведем некоторые наименования микропроцессоров из этого парка: Intel Pentium, Intel 80x86, NEV V53, NEV V25, Z 80 (180), 80x96, 80x51, i960, i860, 68060, 68040, 68030, 68020, 68010, 68000, Z180, 68340, 68332, 68331, 68302, PowerPC6604, PowerPC6603, PowerPC6601, Power PC 403, 68HC16, 68HC11, MIPS R4000, 68360, AM294xx, AM292xx, AM290xx, SPARC, VA X family, Alpha, Inmos T4xx, T8xx, ARM, ARM THUMB, TMS320C5x, TMS320C4x, TMS320C3x, TMS320C2x, 56xxx DSP, AD2106x и др.
Вопросы для самопроверки
1.На каких процессорах может работать OC Linux?
2.Какие способы существуют для реализации механизма preemption?
3.В чем особенность системы RT-Linux?
4.Приведите основные аргументы за и против использования Windows NT в качестве ОСРВ.
5.Какие расширения Windows NT, которые поддерживают реальное время, вы знаете?
6.Классифицируйте в виде таблицы собственно ОСРВ по категориям: self-hosted, host/target и те, которые могут выступать
ив том и другом варианте.
7.Опишите основные функциональные возможности ОС LynxOS.
8.Какие механизмы синхронизации реализованы в ОС LynxOS 5.0?
9.Опишите реализацию атомарных переменных и операций в ОС LynxOS 5.0.
10.Какие барьеры памяти реализованы в ОС LynxOS 5.0?
11.Опишите ОС функциональные возможности OS-9.
12.Опишите ОС функциональные возможности VxWorks.
13.Опишите уровневую структуру VSPWorks.
14.Опишите ОС функциональные возможности SoftKernel.
15.Опишите ОС функциональные возможности CHORUS.
154
16.Опишите ОС функциональные возможности pSOS.
17.Опишите ОС функциональные возможности ОС2000.
18.Приведите преимущества и недостатки специализированных ОСРВ.

155
6МИКРОЯДРО ОС QNX NEUTRINO 6.1 Введение
Микроядро ОС QNX Neutrino реализует основные функции стандартов POSIX, используемые во встраиваемых системах реального времени, а также базовые службы обмена сообщениями. Те функции, которые не реализованы в микроядре, выполняются дополнительными процессами или разделяемыми библиотеками.
На самых нижних уровнях микроядра расположено всего несколько базовых объектов, а также четко отрегулированные процедуры для управления ими. Это является основой, на которой строится ОС QNX (рис. 6.1).
Интерфейс |
Микроядро |
Объекты |
Поток |
|
Соединение |
Планирование |
|
|
Синхронизация |
|
Поток |
|
Диспетчер |
|
|
|
|
Сигнал |
|
сообщения |
|
|
|
Сообщение |
|
|
Канал |
|
Таймер |
|
Вектор |
|
|
|
|
Таймер |
|
|
Часы |
|
Импульс |
|
|
|
Прерывания |
|
Канал |
Рис. 6.1 — Микроядро ОС QNX Neutrino
156
ВОС QNX Neutrino большинство служб по обеспечению работы в реальном времени и по планированию потоков реализовано прямо в микроядре. Эти службы могут работать без использования дополнительных модулей.
Вмикроядре ОС QNX существуют системные вызовы (kernel calls), которые служат для управления следующими объектами:
∙потоками;
∙сообщениями;
∙сигналами;
∙часами;
∙таймерами;
∙обработчиками прерываний;
∙семафорами;
∙блокировками взаимного исключения, мьютексами;
∙условными переменными;
∙барьерами.
ОС QNX целиком построена на основе таких вызовов, причем ядро ОС полностью вытесняемо (preemtable), в том числе и во время обмена сообщениями между процессами.
В микроядро включены службы, которые порождали наиболее короткую ветвь исполняемого кода. Операции, требующие значительных ресурсов (например, загрузка процесса), были переданы внешним процессам и потокам, в которых работа по переключению на контекст другого процесса пренебрежительно мала в сравнении с работой по обработке запроса, выполняемой внутри этого потока.
Оценим работу, которая выполняется между переключениями контекстов во время обмена сообщениями, и учтем высокую скорость их переключений в минимизированном ядре. Очевидно, что объем времени, расходуемый на выполнение этих действий, настолько минимален, что становится пренебрежительно малым в сравнении с работой, производимой для обработки запросов от механизма обмена межзадачными сообщениями.

157
На рис. 6.2 показан механизм вытеснения в ядре для процессоров с архитектурой Intel x86 без поддержки SMP. Запрет прерываний или отсутствие вытеснения происходит только на короткие периоды времени (как правило, эти периоды не превышают порядка сотен наносекунд).
SYSCALL Вход
Операции
ядра, в том числе передача сообщ ений
Заверш ение
SYSEXIT Выход
Микро -
секунды
От ми кро-
секунддо ми ллис е- кунд
Микро -
секунды
Микро -
секунды
Прерывания
запрещены
Прерывания ра з-
решены, полное вытеснение
Прерывания
разрешены, в ы- теснения нет
Прерывания
запрещены
Рис. 6.2 — Механизм вытеснения в ОС QNX

|
158 |
6.2процессы |
Потоки и |
6.2.1Вызовы по управлению потоками
Вядре ОС QNX минимальной планируемой и выполняемой единицей является поток. Процесс можно рассматривать как объект, который содержит в себе эти потоки и определяет для их выполнения свое адресное пространство.
Вмикроядре ОС QNX реализован ряд вызовов по управлению потоками POSIX и соответствующие им вызовы микроядра (табл. 6.1).
Таблица 6.1 — Вызовы по управлению потоками POSIX и соответствующие вызовы микроядра [9]
POSIX-вызов |
Вызов микроядра |
Описание |
pthread_create() |
ThreadCreate() |
Создать поток |
pthread_exit() |
ThreadDestroy() |
Уничтожить поток |
pthread_detach() |
ThreadDetach() |
Отсоединить по- |
|
|
ток, чтобы не |
|
|
ждать его завер- |
pthread_join() |
ThreadJoin() |
шения |
Присоединить |
||
|
|
поток и ждать |
|
|
его кода завер- |
pthread_cancel() |
ThreadCancel() |
шения |
Завершить поток |
||
|
|
в следующей точ- |
отсутствует |
ThreadCtl() |
ке завершения |
Изменить харак- |
||
|
|
теристики пото- |
pthread_mutex_init() |
SyncTypeCreate() |
ка |
Создать мьютекс |
||
pthread_mutex_destroy() |
SyncDestroy() |
Уничтожить |
pthread_mutex_lock() |
SyncMutexLock() |
мьютекс |
Блокировать |
||
pthread_mutex_trylock() |
SyncMutexLock() |
мьютекс |
Условно блоки- |

159
Продолжение табл. 6.1 |
Вызов микроядра |
Описание |
POSIX-вызов |
||
pthread_mutex_unlock() |
SyncMutexUnLock() |
ровать мьютекс |
Снять блокиров- |
||
pthread_cond_init() |
SyncTypeCreate() |
ку мьютекса |
Создать услов- |
||
pthread_cond_destroy() |
SyncDestroy() |
ную переменную |
Уничтожить |
||
|
|
условную пере- |
pthread_cond_wait() |
SyncCondvarWait() |
менную |
Ожидать услов- |
||
pthread_cond_signal() |
SyncCondvarSignal() |
ную переменную |
Разблокировать |
||
|
|
один из потоков, |
|
|
блокированных |
|
|
на условной |
pthread_cond_broadcast() |
SyncCondvarSignal() |
переменной |
Разблокировать |
||
|
|
все потоки, бло- |
|
|
кированные на |
|
|
условной пере- |
pthread_getschedparam() |
SchedGet() |
менной |
Получить пара- |
||
|
|
метры планиро- |
|
|
вания и дисци- |
pthread_setschedparam() |
SchedSet() |
плину потока |
Установить па- |
||
|
|
раметры плани- |
|
|
рования и дисци- |
pthread_sigmask() |
SignalProcMask() |
плину потока |
Проверить и вы- |
||
|
|
вести маску сиг- |
pthread_kill() |
SignalKill() |
налов потока |
Отправить сиг- |
||
sem_post() |
SyncSemPost() |
нал потоку |
Увеличить зна- |
||
|
|
чение счетчика |
sem_wait() |
SynSemWait() |
на семафоре |
Уменьшить зна- |
||
|
|
чение счетчика |