Операционная система SPOX.
SPOX поддерживает несколько различных вариантов архитектур:
дополнительные вычислительные среды для рабочих станций;
однородные встраиваемые системы;
неоднородные встраиваемые системы;
персональные компьютеры с процессором Intel Pentium под управлением Microsoft Windows 95.
Среда SPOX состоит из четырех основных компонентов (рис. 4.1):
ядро SPOX (SPOX-KNL) обеспечивает вытесняющую приоритетную многозадачность, высокоскоростную обработку прерываний, распределение памяти, различные механизмы межзадачного обмена информацией и синхронизации, а также независимый от устройств ввод-вывод. Результатами тестирования SPOX-KNL стали следующие цифры:
Время захвата семафора – 7.9 мкс;
Время переключения задач одинакового приоритета – 15 мкс;
Время реакции на прерывание – 33 мкс;
Время завершения прерывания – 1.4 мкс;
Задержка диспетчеризации (время вытеснения задачи с большим приоритетом задачу с меньшим) – 12.24 мкс;
Время переключения контекста – 7 мкс;
Минимальный размер системы 1532 слова.
модуль SPOX-LINK поддерживает «прозрачное» взаимодействие между целевой платформой и хост-системой и дающее доступ к основным ресурсам хост-машины, таким как консоли, файловые системы и сети;
библиотека (SPOX-MATH) содержит свыше 175 математических функций;
высокоуровневый отладчик SPOX-DBUG.
Рис.3.4 Структурная схема ОС SPOX
Все четыре подсистемы реализованы как библиотеки C-вызываемых перемещаемых модулей. При этом системные функции SPOX подключаются к объектному коду приложения на этапе связывания.
С помощью дополнительного модуля SPOX-MP становится возможной многопроцессорная обработка сигналов. Настройка на конкретную конфигурацию сети процессорных элементов задается в конфигурационном файле, что позволяет не привязываться к конкретной топологии в процессе разработки приложения. SPOX-MP обеспечивает динамическую передачу данных и сообщений по сети процессорных элементов, глобальное пространство имен, а также лавинообразную первоначальную загрузку сети.
Таким образом ОСРВ SPOX имеет необходимые механизмы для создания отказоустойчивой распределенной операционной системы реального времени, концепция построения которой описана в главе 2. Модули маршрутизации, реконфигурации, голосования реализованы как аппаратно-независимые процедуры операционной системы. Модули оперируют данными, заданными в конфигурационном файле, что не привязывает их к конкретной топологии. Реализованные методом структурного программирования на языке Си, модули могут быть перенесены на большинство платформ, включая и TMS320C30.
Модуль коммуникации оперирует высокоуровневыми функциями обмена, опирающимися на драйвера операционной системы. Обмен данными осуществляется через последовательные порты с помощью встроенных механизмов передачи маркера между соседними процессорными элементами.
Зависимость программного обеспечения в рамках рассматриваемой операционной системы возникает на этапе самодиагностирования процессора с целью получения информации о своем состоянии.
Модуль диагностики, реализованный в виде набора функций, возвращающих код ошибки, призван решать следующие задачи:
На этапе инициализации:
Тестирование регистров общего назначения процессора;
Проверка правильности выполнения арифметических, логических и др. операций;
Занесение в соответствующую таблицу контрольных сумм неизменных во время выполнения программ областей памяти (исполняемый код, константы), размещение которых в памяти проводится на этапе сборки рабочего кода в соответствии с картой памяти;
Во время рабочего цикла, тестирование может проводиться как с прерыванием вычислений функциональных задач, так и непосредственно во время их выполнения, если предусмотрено процессорное время на выполнение этих тестов. При этом может осуществляться:
Тестирование регистров общего назначение;
Проверка правильности выполнения арифметических, логических и др. операций;
Вычисление контрольных сумм указанных областей памяти и сопоставление их с вычисленными на этапе инициализации.
Этот тест выполняется первым для проверки регистров повышенной точности (R0-R7) и вспомогательных регистров (АR0-АR7). Тестирование сводится к проверке регистров на запись/чтение из памяти/в память и проверке правильности перемещения данных из регистра в регистр. Тест разбивается на два этапа:
Проверка вспомогательных регистров (целочисленные значения). Проверка реализована по следующему алгоритму:
Инициализировать две целочисленные переменные начальным и ожидаемым значением тестирования;
Загрузить начальное значение в регистры (АR0-АR7).
Произвести операцию сложения так, что в каждом последующем регистре оказалась сумма предыдущих.
Запись в стек модифицированных регистров.
Произвести операцию сдвига влево содержимого стека на N разрядов в соответствии с номером записанного регистра.
Записать данные из стека в регистры.
Произвести операцию сложения так, что в каждом последующем регистре оказалась сумма предыдущих.
Сравнить содержимое регистра АR7 с ожидаемым, заранее рассчитанным значением.
Проверка регистров повышенной точности (значения с плавающей точкой) проводится аналогично.
Функция register_test реализована на языке Ассемблер в соответствии с архитектурой и системой команд TMS320C30.
Данный тест разделен на три различных модуля. Вместе они проверяют следующие числовые операции:
1. Логические, сдвиг, циклический сдвиг.
2. Операции с плавающей запятой, выполненные над одним значением и соответствующие параллельные команды.
3. Операции с плавающей запятой и целочисленные, выполняющие сложение, вычитание, и умножение и соответствующие параллельные команды.
Проверка осуществляется с помощью фиксированного набора значений с целью тестирования команд в различных пределах. Вывод о успехе/неуспехе делается на основе контрольного суммирования результатов и сопоставления с ожидаемым значением.
Данный тест формирует по одному из самых простых алгоритмов так называемый CRC (Cyclic Redundancy Check) блока памяти, указанный в параметрах теста. Правильный (ожидаемый) CRC подтверждает правильность данных (кода) в указанной, неизменной (nonvolatile) в процессе исполнения задач области памяти.
Формирование CRC происходит по следующему алгоритму:
Инициализация начального значения CRC нулем; маска контрольных битов выбирается произвольно, например - 80200003(Н).
Наложить маску на CRC и суммировать по модулю два значения контрольных битов.
Сдвинуть CRC влево на 1 разряд и прибавить результат шага 2.
Сложить результат с очередным словом блока тестируемых данных.
Если блок закончился шаг 6, иначе шаг 2.
Сравнить полученный CRC с ожидаемым.
Ожидаемые значения могут быть получены на этапе инициализации. Функция crc_test реализована на языке Ассемблер в соответствии с архитектурой и системой команд TMS320C30. Предложенная в работе концепция организации отказоустойчивых вычислений, является лишь первым шагом в создании универсальной, аппаратно-независимой, многофункциональной распределенной ОСРВ.
Очевидно, что создание отказоустойчивых, адаптивных систем необходимо для надежного функционирования критически важных приложений множества различных управляющих систем. Однако усложнение структуры вычислительных систем, а соответственно и алгоритмов поддержки отказоустойчивости (а в общем случае и живучести), ведет к увеличению размера ОС и ее времени реакции. Поэтому, следует по-прежнему придерживаться структурного подхода при проектировании управляющих систем и использовать заранее определенные функции ОСРВ, характерные для данного вида систем управления.
Дальнейшее наращивание функций ОСРВ может вестись в нескольких направлениях:
Голосование, проводимое на уровне элементарной проверки, в общем случае может не удовлетворять условиям функционирования управляющих систем вследствие погрешностей и возможного отличия функциональной информации, поступающей на обработку в ФЗ разных ПЭ. Поэтому при голосовании, особенно на последних стадиях деградации целесообразно применять помехоустойчивое оценивание, например методом наименьших квадратов (МНК).
Основные трудности связаны с ошибочными измерениями или неверным результатом ФЗ при вызывающей сбой комбинации входных данных. Применение методов устойчивого оценивания к решению этой проблемы поможет избежать потерь времени на повторные измерения и расчет ФЗ, а также поможет внести определенность при несогласованности данных в процессе голосования.
Усовершенствование подсистемы сбора и анализа отказов для диагностирования множественных отказов на одном такте работы системы. Однако, следует учесть, что обнаружение большего числа отказов требует пропорциональное увеличение числа обменов между модулями голосования, а также числа процессорных элементов, участвующих при голосовании.
Расширить возможности самодиагностирования ПЭ подсистемой промежуточных тестов ввода-вывода, тестом таймеров и др.
Предусмотреть возможности резервирования ФЗ или отдельных ее частей для программного обнаружения отказа, локализации и передачи управления дублирующему фрагменту ФЗ.
Представленный в работе материал является попыткой систематизировать и реализовать основные принципы разработки системного программного обеспечения для отказоустойчивых вычислительных систем. Дальнейшее развитие реализованных в представленной работе принципов в еще более сложные системы позволит решать еще более широкий круг задач в рамках обеспечения надежности вычислительных систем.
Заключение
Подводя итоги прохождения производственной практики, мною было разработано специально разработанная операционная система реального времени для ОВС. В рамках решения поставленной задачи, по результатам аналитических исследований, были выделены основные свойства и механизмы распределенных операционных систем реального времени, необходимых для работы критически важных приложений. Это:
Время реакции системы;
Время переключения контекста;
Наличие средств диспетчеризации;
Наличие средств синхронизации, межзадачного и межпроцессорного взаимодействия;
Однако требования, предъявляемые к надежности вычислительных систем, таковы, что этих средств зачастую оказывается недостаточно. В ходе аналитической работы, была доказана необходимость и описана структура таких встроенных механизмов обеспечения отказоустойчивости ОСРВ, как:
Средства маршрутизации пакетов данных в сети ПЭ;
Средства высокоуровневого межпроцессорного обмена;
Протокол голосования, анализа отказов в ВС, и принятия консолидированного решения;
Средства реконфигурации ВС.
В ходе дальнейших исследований, был рассмотрен пример организации отказоустойчивых вычислений, и на основе логики принятия консолидированного решения, предложен эвристический алгоритм анализа результатов голосования узлов (ПЭ) ВС и средств диагностики.
Далее была предложена вероятностная модель отказоустойчивой ВС, рассчитаны ее надежностные характеристики, показавшие увеличение среднего времени наработки ВС на отказ в 2,5 – 3,5 раз с расширением ВС до 5-7 узлов, даны рекомендации по выбору типа ВС при ее проектировании.
В ходе практической реализации свойств отказоустойчивости, была создана программная модель, имитирующая многопроцессорную ВС, управляемую распределенной ОСРВ. Структура ПО модели включает в себя ПО узла ВС и ПО системы контроля и диалога с пользователем. Модель позволила отработать логику организации отказоустойчивых вычислений и проверить ее в различных ситуациях.
В заключение, перечислены основные перспективы наращивания возможностей системного ПО и усложнения принципов его работы.
Дальнейшее развитие реализованных в представленной работе принципов в еще более сложные системы позволит решать еще более широкий круг задач в рамках обеспечения надежности вычислительных систем.
Список использованных литератур
1. Затуливетер Ю.С. Введение в проблему параметризованного синтеза программ для параллельных компьютеров. -М., 1993 (Препринт/Институт проблем управления).
2. Харченко В.С., Лысенко И.В., Мельников В.А. Оценка и обеспечение живучести информационно-вычислительных и управляющих систем технических комплексов критического использования. Зарубежная радиоэлектроника. 1996. №1.
3. Э.В. Евреинов. Однородные вычислительные системы и среды. –М. Радио и связь, 1981.
4. А. Вильямс. Системное программирование в Windows 2000. –СПб. Питер, 2001.
5. С. Кейслер. Проектирование операционных систем для малых ЭВМ,-М., Мир, 1986.
6. А. Шоу. Логическое проектирование операционных систем.-М.,Мир, 1981.
7. К.А. Иыуду, С.А. Кривощеков, Математические модели отказоустойчивых ВС. –М., МАИ, 1989.
8. К.А. Иыуду. Надежность, контроль и диагностика вычислительных машин и систем. -М., Высшая школа,1989.
9. Л.П. Глазунов и др. Основы теории надежности автоматических систем управления. -М.,Энергоатомиздат, 1984.
10. Р.Л. Лонер, Г.Н. Уилкинсон, Устойчивые статистические методы оценки данных: Москва, Машиностроение, 1984
11. Артамонов Г.Т., Тюрин В.Д. Топология сетей ЭВМ и многопроцессорных систем. — М.: Радио и связь, 1991.
12. Е.С. Вентцель, Теория вероятностей. М. НАУКА, 1969.
13. В.Н. Агафонов. Спецификация программ. –М., Наука, 1987.
14. А. Мешков, Ю. Тихомиров. Visual C++ и MFC. –СПб. БХВ-Санкт-Петербург, 2001.
15. Л.Б. Богуславский. Управление потоками данных в сетях ЭВМ. -М., Энергоатомиздат, 1984.
16. В.И. Матов и др. Теория проектирования вычислительных машин систем и сетей. –М., МАИ, 1999.
17. В.В. Липаев. Надежность программного обеспечения АСУ. -М., Энергоиздат, 1981.
17. Д.И. Козлов и др., Управление космическими аппаратами зондирования земли. – М.: Машиностроение, 1998.
18. Б. Страуструп. Язык программирования С++. – Киев. ДиаСофт, 1993.
Достарыңызбен бөлісу: |