Таким образом ОСРВ SPOX имеет необходимые механизмы для создания отказоустойчивой распределенной операционной системы реального времени, концепция построения которой описана в главе 2.
4.3 Аппаратно-зависимые компоненты ОСРВ
Модули маршрутизации, реконфигурации, голосования реализованы как аппаратно-независимые процедуры операционной системы. Модули оперируют данными, заданными в конфигурационном файле, что не привязывает их к конкретной топологии. Реализованные методом структурного программирования на языке Си, модули могут быть перенесены на большинство платформ, включая и TMS320C30.
Модуль коммуникации оперирует высокоуровневыми функциями обмена, опирающимися на драйвера операционной системы. Обмен данными осуществляется через последовательные порты с помощью встроенных механизмов передачи маркера между соседними процессорными элементами.
Зависимость программного обеспечения в рамках рассматриваемой операционной системы возникает на этапе самодиагностирования процессора с целью получения информации о своем состоянии.
4.3.1. Модуль диагностики ПЭ
Модуль диагностики, реализованный в виде набора функций, возвращающих код ошибки, призван решать следующие задачи: 1. На этапе инициализации: . Тестирование регистров общего назначения процессора; . Проверка правильности выполнения арифметических, логических и др. операций; . Занесение в соответствующую таблицу контрольных сумм неизменных во время выполнения программ областей памяти (исполняемый код, константы), размещение которых в памяти проводится на этапе сборки рабочего кода в соответствии с картой памяти; 2. Во время рабочего цикла, тестирование может проводиться как с прерыванием вычислений функциональных задач, так и непосредственно во время их выполнения, если предусмотрено процессорное время на выполнение этих тестов. При этом может осуществляться: . Тестирование регистров общего назначение; . Проверка правильности выполнения арифметических, логических и др. операций; . Вычисление контрольных сумм указанных областей памяти и сопоставление их с вычисленными на этапе инициализации.
4.3.1.1. Тестирование регистров общего назначения
Этот тест выполняется первым для проверки регистров повышенной точности (R0-R7) и вспомогательных регистров (АR0-АR7). Тестирование сводится к проверке регистров на запись/чтение из памяти/в память и проверке правильности перемещения данных из регистра в регистр. Тест разбивается на два этапа: . Проверка вспомогательных регистров (целочисленные значения). Проверка реализована по следующему алгоритму:
1. Инициализировать две целочисленные переменные начальным и ожидаемым значением тестирования;
2. Загрузить начальное значение в регистры (АR0-АR7).
3. Произвести операцию сложения так, что в каждом последующем регистре оказалась сумма предыдущих.
4. Запись в стек модифицированных регистров.
5. Произвести операцию сдвига влево содержимого стека на N разрядов в соответствии с номером записанного регистра.
6. Записать данные из стека в регистры.
7. Произвести операцию сложения так, что в каждом последующем регистре оказалась сумма предыдущих.
8. Сравнить содержимое регистра АR7 с ожидаемым, заранее рассчитанным значением. . Проверка регистров повышенной точности (значения с плавающей точкой) проводится аналогично.
Функция register_test реализована на языке Ассемблер в соответствии с архитектурой и системой команд TMS320C30.
4.3.1.2. Проверка правильности выполнения арифметических, логических и др. операций
Данный тест разделен на три различных модуля. Вместе они проверяют следующие числовые операции:
1. Логические, сдвиг, циклический сдвиг.
2. Операции с плавающей запятой, выполненные над одним значением и соответствующие параллельные команды.
3. Операции с плавающей запятой и целочисленные, выполняющие сложение, вычитание, и умножение и соответствующие параллельные команды.
В тестах проверяются команды, перечисленные в Таблице 4.1.
Таблица 4.1
Перечень тестируемых команд
| Тест |Команды | |1 |2 | |Тест 1|ROL – циклический сдвиг влево, | | |ROLC – циклический сдвиг влево через перенос, | | |ROR – циклический сдвиг вправо, | | |RORC – циклический сдвиг вправо через перенос, | | |AND3 || STI – поразрядное логическое И с сохранением, | | |LSH3 || STI – логический сдвиг с сохранением, | | |NOT || STI – дополнение с сохранением, | | |OR3 || STI – поразрядное логическое ИЛИ с сохранением, | | |XOR3 || STI – поразрядное исключающее ИЛИ с сохранением, | | |ABSI || STI – абсолютное значение целого с сохранением, | | |NEGI || STI – отрицание целого с сохранением, | | |ASH3 || STI – арифметический сдвиг с сохранением, | |1 |2 | | |NOT – поразрядное логическое дополнение, | | |ABSI – абсолютное значение целого числа, | | |NEGB – отрицание целого с заемом, | | |ASH – арифметический сдвиг, | | |NEGI – отрицание целого, | | |TSTB3 – проверка битовых полей, | | |CMPI3 – сравнение целых, | | |STI || STI – сохранение целых, | | |LDI || LDI – загрузка целых, | | |XOR – поразрядное исключающее ИЛИ. | |Тест 2|STF – сохранить значение с плавающей точкой, | | |LDF – загрузить значение с плавающей точкой, | | |LDE – загрузка значения экспоненты с плавающей точкой, | | |LDM – загрузка значения мантиссы с плавающей точкой, | | |FIX – преобразование в целое, | | |FLOAT – преобразование в значение с плавающей точкой, | | |ABSF – абсолютное значение числа с плавающей точкой, | | |NEGF – отрицание значения с плавающей точкой, | | |NORM – нормирование значения с плавающей точкой, | | |RND – округление значения с плавающей точкой, | | |POPF – выталкивание значения с плавающей точкой из стека, | | |PUSHF – загрузка в стек значения с плавающей точкой, | | |ABSF || STF – абсолютное значение числа с плавающей точкой с | | |сохранением значения с плавающей точкой, | | |FIX || STI – преобразование в целое с сохранением, | | |FLOAT || STF – преобразование в значение с плавающей точкой с | | |сохранением значения с плавающей точкой, | | |PUSH – загрузка целого в стек, | | |POP – выталкивание целого из стека, | | |LDF || STF – загрузить значение с плавающей точкой с | | |сохранением значения с плавающей точкой, | |1 |2 | | |NEGF || STF – отрицание значения с плавающей точкой с | | |сохранением значения с плавающей точкой, | | |STF || STF – сохранения значений с плавающей точкой, | | |LDF || LDF – загрузка значений с плавающей точкой. | |Тест 3|SUBF3 – вычитание значений с плавающей точкой, | | |SUBF3 || STF – значения с плавающей точкой с сохранением | | |значения с плавающей точкой, | | |SUBB – вычитание целых с заемом, | | |SUBC – условное вычитание целых, | | |SUBF – вычитание значений с плавающей точкой, | | |SUBRB – вычитание целых в обратном порядке с заемом, | | |SUBRF - вычитание с плавающей точкой в обратном порядке, | | |SUBI3 || STI – вычитание целых с сохранением, | | |ADDC – сложение целых с переносом, | | |ADDF – сложение значений с плавающей точкой, | | |ADDF3 – сложение значений с плавающей точкой, | | |ADDF3 || STF – значений с плавающей точкой с сохранением | | |значения с плавающей точкой, | | |ADDI3 || STI – сложение целых с сохранением, | | |MPYF- умножение значений с плавающей точкой, | | |MPYF3 – умножение значений с плавающей точкой, | | |MPYI – умножение целых, | | |MPYF3 || STF – умножение значений с плавающей точкой с | | |сохранением значения с плавающей точкой, | | |MPYF3 || ADDF3 – умножение и сложение с плавающей точкой, | | |MPYF3 || SUBF3 умножение и вычитание с плавающей точкой, | | |MPYI3 || STI – умножение целых с сохранением, | | |MPYI3 || ADDI3 – умножение и сложение целых, | | |MPYI3 || SUBI3 – умножение и вычитание целых, | | |CMPF – сравнение значений с плавающей точкой, | | |CMPF3 - сравнение значений с плавающей точкой. |
Проверка осуществляется с помощью фиксированного набора значений с целью тестирования команд в различных пределах. Вывод о успехе/неуспехе делается на основе контрольного суммирования результатов и сопоставления с ожидаемым значением.
4.3.1.3. Проверка содержимого памяти
Данный тест формирует по одному из самых простых алгоритмов так называемый CRC (Cyclic Redundancy Check) блока памяти, указанный в параметрах теста. Правильный (ожидаемый) CRC подтверждает правильность данных (кода) в указанной, неизменной (nonvolatile) в процессе исполнения задач области памяти.
Формирование CRC происходит по следующему алгоритму: 1. Инициализация начального значения CRC нулем; маска контрольных битов выбирается произвольно, например - 80200003(Н). 2. Наложить маску на CRC и суммировать по модулю два значения контрольных битов. 3. Сдвинуть CRC влево на 1 разряд и прибавить результат шага 2. 4. Сложить результат с очередным словом блока тестируемых данных. 5. Если блок закончился шаг 6, иначе шаг 2. 6. Сравнить полученный CRC с ожидаемым.
Ожидаемые значения могут быть получены на этапе инициализации. Функция crc_test реализована на языке Ассемблер в соответствии с архитектурой и системой команд TMS320C30.
5. Перспективы развития специализированных отказоустойчивых ОСРВ
Предложенная в работе концепция организации отказоустойчивых вычислений, является лишь первым шагом в создании универсальной, аппаратно- независимой, многофункциональной распределенной ОСРВ.
Очевидно, что создание отказоустойчивых, адаптивных систем необходимо для надежного функционирования критически важных приложений множества различных управляющих систем. Однако усложнение структуры вычислительных систем, а соответственно и алгоритмов поддержки отказоустойчивости (а в общем случае и живучести), ведет к увеличению размера ОС и ее времени реакции. Поэтому, следует по-прежнему придерживаться структурного подхода при проектировании управляющих систем и использовать заранее определенные функции ОСРВ, характерные для данного вида систем управления.
Дальнейшее наращивание функций ОСРВ может вестись в нескольких направлениях: 1. Голосование, проводимое на уровне элементарной проверки, в общем случае может не удовлетворять условиям функционирования управляющих систем вследствие погрешностей и возможного отличия функциональной информации, поступающей на обработку в ФЗ разных ПЭ. Поэтому при голосовании, особенно на последних стадиях деградации целесообразно применять помехоустойчивое оценивание, например методом наименьших квадратов (МНК).
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14