Методы блокового контроля правильности хода программ
Для уменьшения избыточности при контроле по весу перехода можно команды объединять в блоки по 3, 4, ..., h команд и записывать вес суммы по модулю два всего блока после каждой h-й команды.
Однако такое равномерное разбиение требует значительных преобразований ГСА, так как не учитывает ее структуру. Избежать этих преобразований можно за счет разбиения команд ГСА на блоки неравной длины.
Блоковый контроль программ по методу разбиения программы на фазы (блоки)
Как видно из предыдущих разделов, контроль программ с помощью цветов и веса перехода требует введения в программу значительной избыточности. В работе [23] был предложен метод контроля с разбиением программы на фазы, который позволяет заметно уменьшить эту избыточность. Суть метода заключается в следующем.
В ГСА выделяются узлы – вершины, к которым подходит более одной дуги. Отъединением от каждого узла всех подходящих к нему дуг граф разбивают на множество несвязанных подграфов. Последовательность команд, соответствующая каждому подграфу, представляет собой фазу. У каждой фазы только один вход и один или несколько выходов.
Пример 4.14. На рис. 4.43 приведена ГСА с разбиением на фазы.
Рис. 4.43. ГСА, разбитая на фазы
Узлами в данном случае являются вершины 1, 5, 6, 11. В фазу I входят вершины {1, 2, 3, 4, 13, 14}, в фазу II – вершина {5}, в фазу III – вершины {6, 7, 8, 9, 10}, в фазу IV – вершины {11, 12}.
Коды команд, входящих в фазу, участвуют в формировании сигнатуры последовательности команд, которая и записывается в конце фазы. При выполнении программы сигнатура последовательности команд вычисляется заново, и по достижении выхода из блока вычисленная сигнатура сравнивается с хранящейся.
Обработка команд перехода требует дополнительных действий: необходимо определить, был ли выполнен переход. С этой целью в схеме встроенного контроля имеется эмулятор программного счетчика, который при выполнении команд фазы увеличивается в соответствии с длиной команды для установления адреса следующей команды. При переходе выставленный процессором адрес сравнивается с содержимым эмулятора программного счетчика. Несовпадение адресов свидетельствует, что переход имел место.
Для минимизации затрат памяти на хранение сигнатур используется метод перемешивания адресов и сигнатур (хеширование). Команды перехода бывают двух видов: длинные, в которых адрес перехода располагается во втором слове команды, и короткие, в которых в младшем байте первого слова команды располагается величина смещения со своим знаком. Если последней командой блока является команда длинного перехода, то во втором слове команды вместо адреса перехода формируется перемешанный указатель перехода, представляющий собой результат операции сложения по модулю два над действительным адресом перехода и сигнатурой блока.
СВК представлена на рис. 4.44. Она работает следующим образом. Команда извлекается из памяти. Если это не последняя команда блока, то устройство контроля выхода адреса за границы программы проверяет допустимость адреса. Затем дешифратор кода операции определяет длину команды и соответствующим образом наращивает эмулятор программного счетчика. Команды из памяти передаются в процессор и одновременно в генератор сигнатуры. В качестве генератора сигнатур используется регистр сдвига с линейной логической обратной связью, реализующий деление на полином
Если это последние команды фазы (команды условного перехода), определяется тип команды. В случае короткого перехода следующее слово содержит инверсию сигнатуры. При поступлении этого слова на вход генератора сигнатур его регистр должен обнулиться. По равенству нулю и определяется правильность выполнения команд блока.
Рис. 4.44. Схема встроенного контроля по методу сигнатур блоков команд
В случае короткого перехода требуется после проверки скорректировать содержимое эмулятора программного счетчика.
В случае длинного перехода во втором слове команды содержится перемешанный указатель перехода. Блок восстановления адресов перехода восстанавливает адрес и передает его в процессор. В эмулятор программного счетчика после проверки правильности перехода загружается выставленный процессором адрес.
Характеристики метода зависят от способа формирования сигнатуры. Очевидно, что дополнительные разряды здесь в структуру команды не вводятся. tизб – (временная избыточность) зависит от состава команд программы:
где Nк.п – количество команд короткого перехода; N – общее количество команд в программе.
Вероятность обнаружения ошибок механизма дешифрации команд будет разной для двух случаев. Если была выбрана неправильная команда, когда мы находились внутри блока, вероятность обнаружения равна 0,5h, где h – длина сигнатуры. Если мы находились на последней команде блока и перешли по неправильному адресу, но попали на начальную команду блока, то дефект обнаружен не будет. Вероятность такой ситуации
,
где Nбл – число блоков, на которое разбивается программа; Nп – число команд перехода; N – общее количество команд в программе.
Задержка обнаружения дефекта для данного метода не является постоянной, и максимум ее равен максимальному количеству команд в блоке, как и количество команд, на которые требуется вернуться для восстановления после сбоя.
Также следует отметить значительное, по сравнению с предыдущими методами, усложнение аппаратуры, реализующей СВК, которая в данном случае не является самопроверяемой. Другим недостатком является задержка при определении достоверности выдаваемой информации.
Основное достоинство метода – незначительная временная и информационная избыточность.