ARINC 653 Спецификация Годунов А.Н., Солдатов В.А. НИИСИ РАН, Москва

advertisement
Спецификация
ARINC 653
Годунов А.Н., Солдатов В.А.
НИИСИ РАН, Москва
Основные сведения
• Спецификация ARINC 653 определяет интерфейс (APEX –
APplication EXecutive) прикладного программного
обеспечения с операционной системой (ОС) на основе
концепции, обеспечивающей временное и
пространственное разделение ресурсов.
• Корпорация «Авиационное радио» (Aeronautical Radio,
Incorporated, ARINC) — компания, основанная в 1929 году.
Штаб-квартира в Аннаполисе (штат Мэрилэнд, США).
• Первая версия ARINC 653 вышла в октябре 1996 года. В
дальнейшем было опубликовано несколько дополнений,
последние из которых датируются декабрём 2014 года.
Состав
• Part 0 – Overview of ARINC 653 - общий обзор всех документов
спецификации.
• Part 1 – Required Services - описывает основные (обязательные)
требования
• Part 2 – Extended Services - дополнительные возможности.
• Part 3 – Conformity Test Specification For ARINC 653 Required
Services - тесты для проверки соответствия интерфейса
спецификации ARINC 653.
• Part 4 – Subset Services - подмножество интерфейсов.
• Part 5 – Core Software Recommended Capabilities рекомендации по организации ядра ОС.
Особенности
• Держателем ресурсов является раздел (partition), в рамках
которого возможно параллельное выполнение нескольких
процессов (process).
• Требуемые ресурсы и взаимосвязи между отдельными
частями системы определяются системным интегратором
при конфигурировании системы.
• Ресурсы выделяются только на этапе инициализации
раздела.
• Каждый раздел может находиться в одном из состояний
(DORMANT, WAITING, READY, RUNNING). Создание объектов
ОС возможно только при инициализации раздела
• Ошибки, в зависимости от их уровня и этапа выполнения
раздела, могут обрабатываться либо средствами ОС, либо
прикладной программой (с помощью процесса Error
Handler).
• Небольшое количество интерфейсных функций
• Для всех объектов ОС определено имя объекта,
идентификатор объекта и однотипный интерфейс функций.
Основные возможности
(Required Services)
•
•
•
•
•
•
Управление разделами (partition)
Управление процессами (process)
Управление временем
Управление памятью
Взаимодействие разделов (sampling и queuing порты)
Взаимодействие процессов (buffers, blackboards,
semaphores, events)
• Обработка ошибок (Health Monitor).
Управление разделами (partition)
• Разделы и выделяемые им ресурсы определяются системным
интегратором при конфигурировании системы.
• Загрузка и создание разделов возможны только на этапе
инициализации модуля, далее создание разделов невозможно,
но возможен рестарт.
• Спецификация ARINC 653 предусматривает как
пользовательские, так и системные процессы. Интерфейс
пользовательских процессов должен соответствовать ARINC
653. Интерфейс пользовательских процессов не определен.
• Каждый раздел может находиться в одном из четырёх режимов
(состояний): COLD_START, WARM_START, NORMAL, IDLE.
• В рабочий режим раздел переводится прикладной программой
в случае успешного завершения этапа инициализации.
• Для смены состояния раздела предназначена функция
SET_PARTITION_MODE().
Планирование разделов
• Планирование в ARINC 653 двухуровневое:
- планирование разделов;
- планирование процессов.
• Планирование разделов периодическое и определяется
расписанием. В расписании определяется длительность
основного периода (major frame), который разбивается на
непересекающиеся временные интервалы (окна).
• После завершения основного периода он повторяется снова до
окончания работы системы или до смены расписания.
• Для каждого окна назначается раздел, который может
выполняться в этом окне.
• Возможно использование разных расписаний на разных этапах
работы (дополнительная возможность)
• Все расписания определяются системным интегратором при
конфигурировании системы.
Функции управления
расписаниями
SET_MODULE_SCHEDULE() - установка расписания окон,
GET_MODULE_SCHEDULE_STATUS() - опрос идентификатора расписания окон
по имени,
GET_MODULE_SCHEDULE_ID() - опрос расписания.
Пример расписания
Основной период 10 мс (100 гц)
7 мс
5 мс
2 мс
Раздел A
2 мс
(200 гц)
Раздел B (100 гц)
3 мс
Раздел А (200 гц)
Раздел C (100 гц)
2 мс
3 мс
Управление процессами
(process)
• Для организации (псевдо) параллельных вычислений внутри
раздела используются процессы.
• Каждый процесс должен быть создан на этапе инициализации
раздела, когда планирование запрещено.
• Процесс может находиться в одном из состояний DORMANT,
WAITING, READY, RUNNING .
• После создания процесс находится в неактивном состоянии
(DORMANT) до тех пор, пока он не будет запущен функцией
START() или DELAYED_START().
• Уничтожить процесс невозможно, но можно его перевести в
неактивное состояние (DORMANT) функцией STOP() или
STOP_SELF().
• Процессы делятся на периодические и непериодические.
Функции управления
процессами
CREATE_PROCESS() – создание процесса;
START(), DELAYED_START() - запуск процесса на выполнение.
STOP(), STOP_SELF() - останов выполнения процесса.
SET_PRIORITY() - установка приоритета процесса;
LOCK_PREEMPTION() - запрещение переключения процессов.
UNLOCK_PREEMPTION() - разрешение переключения процессов.
SUSPEND_SELF(), SUSPEND() - приостановка процесса;
RESUME() - возобновление выполнения приостановленного процесса.
GET_PROCESS_ID(), GET_MY_ID() - опрос идентификатора процесса;
GET_PROCESS_STATUS() - опрос статуса процесса.
Служба времени
• Все процессы используют одни и те же часы, которые
отсчитывают время от пуска системы.
• Время измеряется в наносекундах и имеет тип
SYSTEM_TIME_TYPE (64-разрядное целое со знаком).
• Для задания интервалов времени можно использовать
значение INFINITE_TIME_VALUE (неограниченное время)
• Функции службы времени:
TIMED_WAIT() - временная приостановка процесса.
GET_TIME - опрос текущего системного времени.
PERIODIC_WAIT() - ожидание начала следующего периода.
REPLENISH() - изменение лимита времени выполнения процесса.
Периодические процессы
• При создании периодического процесса следует указать
период процесса и лимит времени. Лимит времени
ограничивает время работы процесса с начала периода.
• Периодические процессы используют следующие функции:
PERIODIC_WAIT() – ожидание начала следующего периода;
REPLENISH() – изменение лимита времени (deadline) потока.
• Текст главной функции периодического процесса:
void main_cycle() {
RETURN_CODE_TYPE ErrorCode; // код возврата
while(1) {
((ErrorCode = period_func(…)) != NO_ERROR) break ;
PERIODIC_WAIT(&ErrorCode) ;
if (ErrorCode != NO_ERROR) break;
}
. . .
}
Планирование процессов
• Процессы конкурируют за использование процессора только с
процессами одного и того же раздела.
• Выполняться могут только процессы в состоянии READY или
RUNNING
• Планирование процессов производится на основании
приоритетов процессов. Приоритеты процессов могут быть
динамически изменены.
• Планирование аналогично SCHED_FIFO в POSIX (SCHED_RR
отсутствует). Аналогом функции sched_yield() является
функция TIMED_WAIT().
• Планирование процессов текущего раздела может быть
запрещено (а затем разрешено) прикладной программой.
• Процесс может быть временно или постоянно приостановлен.
Взаимодействие разделов I
• ARINC 653 предусматривает только один способ взаимодействия
разделов - путем передачи сообщений через каналы. Каналы
могут использоваться для передачи сообщений:
– между процессами, выполняемыми на одном и том же
процессорном модуле;
– между процессами, выполняемыми на разных процессорных
модулях;
– между процессами и внешними устройствами.
• Такие ограничения на способы взаимодействия ARINCпроцессов делает их слабо взаимосвязанными и облегчает
восстановление (restart) процессов при сбоях.
• Интерфейс взаимодействия прикладных программ с каналами
не зависит от способа передачи данных по каналам.
Независимость интерфейса от способа передачи данных
повышает мобильность прикладных программ и удобна при
отладке.
Взаимодействие разделов II
• Каналы могут работать в двух режимах: с очередью
сообщений (QUEUING) и без очереди сообщений
(SAMPLING).
• У каждого канала один порт, передающий сообщения и
один или несколько портов, принимающих сообщения.
• У канала, работающего в режиме с очередью сообщений
может быть только один порт приёма сообщений.
• Создание портов и каналов производится при
инициализации.
• Каналы и порты описываются при конфигурировании
системы и их параметры нельзя изменить во время работы
системы.
Функции управления портами
Queuing порты
CREATE_QUEUING_PORT() - создание порта с очередью сообщений;
GET_QUEUING_PORT_ID() - опрос идентификатора порта с очередью;
GET_QUEUING_PORT_STATUS() - опрос состояния порта с очередью;
SEND_QUEUING_MESSAGE() - отправка сообщения в порт с очередью;
RECEIVE_QUEUING_MESSAGE() - получение сообщения из порта с очередью;
CLEAR_QUEUING_PORT() - сброс порта с очередью сообщений.
Sampling порты
CREATE_SAMPLING_PORT() - создание порта без очереди сообщений;
GET_SAMPLING_PORT_ID() - опрос идентификатора порта без очереди;
GET_SAMPLING_PORT_STATUS() - опрос состояния порта без очереди;
WRITE_SAMPLING_MESSAGE() - вывод сообщения в порт без очереди;
READ_SAMPLING_MESSAGE() - ввод сообщения из порта без очереди.
Взаимодействие процессов
• Семафоры (semaphores),
• События (events),
• Буфера (buffers),
• Доски объявлений (blackboards).
Различия между
ARINC и POSIX семафорами
• ARINC и POSIX используют разный интерфейс для работы с
семафорами.
• ARINC позволяет реализовать как целочисленные, так и
двоичные семафоры.
• В ARINC дисциплина обслуживания очереди к семафору
определяется пользователем (приоритетная или FIFO).
• Созданные в рамках одного раздела ARINC-семафоры могут
использоваться только процессами данного процесса и не
влияют на выполнение потоков других процессов.
• Каждый ARINC-семафор имеет имя, уникальное в пределах
данного процесса.
Интерфейс семафоров
• В ARINC предусмотрены следующие функции для управления
семафорами :
CREATE_SEMAPHORE() – создание семафора;
GET_SEMAPHORE_ID() – опрос идентификатора семафора;
GET_SEMAPHORE_STATUS() – опрос состояния семафора;
SIGNAL_SEMAPHORE() – останов выполнения процесса;
WAIT_SEMAPHORE() – захват семафора.
• Функция WAIT_SEMAPHORE() спецификации ARINC
обеспечивает ту же функциональность, что и три функции
POSIX: sem_wait(), sem_try_wait() и sem timedwait().
Обработка ошибок I
• Диагностика ошибок производится аппаратурой, ОС и
прикладной программой (RAISE_APPLICATION_ERROR()).
Обработка ошибок производится операционной системой и
прикладной программой.
• Реакция на ошибки определяется интегратором при
конфигурировании системы.
• Уровень ошибки определяется интегратором при
конфигурировании системы. Ошибки бывают уровня модуля
(MODULE), раздела (PARTITION), процесса (PROCESS).
• Ошибки уровня модуля и раздела обрабатываются ОС.
• Возможная реакция на ошибки уровня модуля: останов
модуля, рестарт модуля, игнорирование ошибки.
• Возможная реакция на ошибки уровня раздела: останов
раздела, рестарт раздела, игнорирование ошибки.
Обработка ошибок II
• Обработка ошибок уровня процесса определяется прикладным
программистом с помощью специального процесса обработки
ошибок (error handler).
• Процесс обработки ошибок создается с помощью функции
CREATE_ERROR_HANDLER() при инициализации раздела.
• Процесс обработки ошибок может остановить, а также
остановить и вновь запустить ошибочный процесс с помощью
функций STOP() и START(), а также повторно запустить или
остановить раздел с помощью функции SET_PARTITION_MODE().
• Для вывода сообщений об ошибке процесс обработки ошибок
может использовать функцию REPORT_APPLICATION_MESSAGE(),
а для получения сведений об ошибке – функцию
GET_ERROR_STATUS().
• Ошибки при работе процесса обработки ошибок трактуются как
ошибка уровня раздела.
Дополнительные возможности
(Extended Services)
• Функции работы с файлами (File System)
• Структуры данных Sampling портов
• Управление планированием разделов (использование
нескольких расписаний)
• Книги записей (Logbook)
• Дополнительные возможности sampling портов
• SAP-порты (Service Access Points)
• Управление именами (Name Service)
• Блоки памяти (Memory Blocks)
• Дополнительные возможности при обработке ошибок
(Health Monitor Extensions)
• Списки портов (Queuing Port List Service)
Доступ к файловым системам
• Средства доступа к файловым системам спецификации ARINC
аналогичны тем, которые предоставляет стандарт POSIX, но
при этом используется другой интерфейс.
• Запоминающие устройства для хранения данных должны
быть описаны при конфигурировании модуля.
• Имена нечувствительны к регистру, полное имя файла
содержит имя тома.
• Для каждого тома только один раздел имеет право на чтение
и запись, право на чтение могут иметь несколько разделов.
• Каждая функция имеет два аргумента для идентификации
ошибки: код возврата идентифицирует ошибку по
спецификации ARINC, в аргумент ERRNO записывается код
совпадающий со стандартом POSIX для аналогичной
функции.
Книги записей (logbook)
• Книги записей предназначены для хранения сообщений
(записей) между сеансами работы (при выключении питания)
во флэш-памяти.
• Одновременно можно использовать несколько книг записей,
но каждая книга записей может использоваться только одним
разделом.
• Используемые книги записей должны быть описаны при
конфигурировании системы.
• При создании книги записей область флэш-памяти связывается
с создаваемым объектом и все сообщения, ранее записанные
в эту область, становятся доступными для чтения.
• Функции записи WRITE_LOGBOOK() и OVERWRITE_LOGBOOK()
помещают выводимое сообщение в буфер. Копирование
сообщений из буфера во флэш-память производится не сразу, а
по мере возможности.
SAP-порты (Service Access Point)
• SAP-порты являются разновидностью портов с очередью
сообщений.
• В функции отправки сообщения может быть указан адрес
получателя; в функции получения сообщения получен адрес
отправителя.
• Дополнительная функция отправки позволяет указать адрес
источника сообщения, а дополнительная функция приема
сообщения позволяет получить адрес получателя.
• Основные функции для работы с SAP-портами:
CREATE_SAP_PORT(), GET_SAP_PORT_ID (), GET_SAP_PORT_STATUS() ,
SEND_SAP_MESSAGE (), RECEIVE_SAP_MESSAGE ()
• Дополнительные функции:
SEND_EXTENDED_SAP_MESSAGE (), RECEIVE_EXTENDED_SAP_MESSAGE()
Списки портов (queuing port list)
• Списки портов позволяют получать сообщения, прибывающие
по нескольким каналам в контексте одного процесса, без
постоянного опроса портов.
• Списки портов могут содержать только порты с очередью
сообщений, предназначенные для получения сообщений.
• Создание списка портов, а также добавление портов в список
возможно только на стадии инициализации раздела.
• Изменение уровня активности порта в списке возможно как на
стадии инициализации, так и в нормальном режиме работы.
• Функции для работы со списками портов:
CREATE_QUEUING_PORT_LIST(), ADD_PORT_TO_QUEUING_PORT_LIST(),
SET_PORT_ACTION_IN_QUEUING_PORT_LIST(),
GET_QUEUING_PORT_ACTION_STATUS(),
RECEIVE_MESSAGE_FROM_QUEUING_PORT_LIST(),
WAIT_FOR_MESSAGE_FROM_QUEUING_PORT_LIST()
Блоки памяти
• Блоки памяти создаются при инициализации модуля и
позволяют осуществлять доступ к ним из различных разделов.
• Блок памяти идентифицируется своим именем.
• Прова доступа из раздела к блоку памяти определяется при
конфигурации (доступ запрещён; разрешён на чтение;
разрешён на чтение и запись).
• Имеется единственная функция для работы с блоком памяти
GET_MEMORY_BLOCK_STATUS(), которая позволяет по имени блока
определить адрес и длину блока памяти, а также права
доступа.
Конфигурирование I
• Спецификация ARINC 653 требует составления конфигурации
системы. Конфигурирование производится интегратором (не
прикладным программистом).
• Описание конфигурации представляет собой документ на
языку XML.
• Последние версии ARINC 653 не определяют полную схему
XML-документа (как это было в первых версиях), а
определяют лишь отдельные ее элементы.
• Первая часть спецификации (Required Services ) описывает
элементы, относящиеся к конфигурированию:
- процессов;
- расписаний;
- обработки ошибок (Health Monitor).
Конфигурирование II
• Вторая часть спецификации (Required Services ) описывает
элементы, относящиеся к конфигурированию:
- расписаний;
- SAP-портов;
- томов (например, дисков) ;
- книг записей (logbook) ;
- блоков памяти.
Тесты проверки соответствия
(Conformity Test Specification)
• Дано описание тестов, предназначенных для
демонстрации соответствия ОС требованиям
спецификации.
• Даны указания по разработке тестов
• Даны рекомендации по организации процесса
тестирования.
• Документ охватывает только функции, описанные в
первой части спецификации (Required Services ).
Подмножество интерфейсов
(Subset Services )
• В четвёртой части спецификации определены функции,
которые можно использовать в рамках подмножества
интерфейсов, а также описаны особенности их реализации.
Одной из целей разработки подмножества было создание
более простых и надежных систем.
• В одном разделе может выполняться не более двух
процессов: один периодический и/или один
непериодический процесс.
• Приоритеты процессам не назначаются, периодический
процесс всегда более приоритетный, чем непериодический
процесс.
• В подмножестве отсутствуют средства взаимодействия
процессов внутри одного раздела (семафоры, события,
очереди сообщений и доски объявлений).
Операционные системы,
соответствующие спецификации
ARINC 653
• VxWORKS AE653 (Wind River),
• LynxOS-178 2.0 (LynuxWorks, Inc.),
• INTEGRITY-178B (Green Hills Software Inc.).
• ОС РВ Багет 3.х
СПАСИБО
THANK YOU
MERCI
DANKE
GRACIAS
GRAZIE
Список литературы I
1. IEEE Standard for Information Technology - Portable Operating System
Interface (POSIX) - Part 2: System Interface. - IEEE Std 1003.1-2004, vol. 2.
2. Avionics application software standard interface, Part 1 - Required services,
Aeronautical radio, Inc, March, 2007.
3. Годунов А.Н., Операционные системы реального времени Багет 3.0.
Программные продукты и системы, 2010 г., № 4. С. 15-19.
4. Безруков В.Л., Годунов А.Н., Назаров П.Е., Солдатов В.А., Хоменков И.И.
Введение в oc2000// Вопросы кибернетики / под ред. В.Б. Бетелина. –
М.: НИИСИ РАН, 1999. C.76-106.
5. Годунов А.Н., Солдатов В.А., Операционные системы семейства Багет
(сходство, отличия и перспективы). Программирование, 2014 г., № 5. С.
69-76
6. Герлиц Е.А., Кулямин В.В., Максимов А.В., Петренко А.К.,Хорошилов А.В.,
Цыварев А.В. Тестирование операционных систем//Труды Института
системного программирования РАН, том 26, 2014 г. Выпуск 1. С. 73-108.
Список литературы II
7. Wind river platform for safety critical ARINC 653//
http://www.windriver.com/products/platforms/safety_critical_arinc_653/res
ources/platform_sc_arinc653_ds.pdf
8. LynxOS-178 2.0// http://www.lynuxworks.com/rtos/lynxos-178.pdf
9. Safety Critical Products: INTEGRITY-178B RTOS//
http://www.ghs.com/download/datasheets/INT_178B.pdf
10. Tanenbaum A.S.; Herder J.N.; Bos H., Can we make operating systems reliable
and secure?// Computer, Volume 39, Issue 5, May 2006. P. 44 – 51.
Конфигурирование 1
• В спецификации ARINC 653 на языке XML-схема определяются
структуры и типы данных, необходимые для конфигурирования
любой системы, реализующей эту спецификацию.
• Модуль: имя; разделы; расписание; обработка ошибок.
• Раздел: имя; идентификатор; периодичность и длительность
выполнения; области памяти раздела; порты.
• Память: имя; тип (Ram, Flash, Input/output); размер; права
доступа; физический адрес; атрибут «кэш».
• Порт: имя; тип (QueingPort или SamplingPort); максимальный
размер сообщения; направление передачи сообщений в порте
(source или destination); для порта с очередью сообщений максимальное количество сообщений в очереди.
Конфигурирование 2
• Расписание: окна.
• Окно: ссылка на имя раздела; длительность окна; смещение
относительно начала основного периода; для периодического
процесса, точка старта этого процесса.
• Обработка ошибок: ошибки системы; ошибки модуля; ошибки
разделов; ошибки раздела.
• Ошибка системы: идентификатор; описание.
• Ошибка модуля: идентификатор этапа; описание этапа;
реакции на ошибку.
• Реакция на ошибку: идентификатор ошибки; действие.
• Ошибка разделов: имя раздела; реакции на ошибку.
• Ошибка раздела: идентификатор; имя; реакции на ошибку.
Download