Контроль хода программы
Контроль хода программ опирается на общие принципы их построения и заключается в проверке правильности выполнения линейных и циклических участков программ, разветвлений, правильности обращения к стандартным подпрограммам и т. д.
Современные программы, предназначенные для решения задач управления, строятся по модульному принципу. Каждый модуль независим от других модулей и характеризуется функциональной завершенностью. В своем составе модули содержат линейные, разветвляющиеся и циклические участки. Правильность выполнения отдельных модулей и их участков может контролироваться различными программными методами. При этом, как правило, используются особенности решаемой задачи. Однако в некоторых случаях можно предложить специфические программные методы контроля, учитывающие особенности самой структуры программы (т. е. наличие разветвлений, циклов, переходов к стандартным подпрограммам и т. д.).
На различных этапах управления из модулей формируется рабочая программа.
Процесс формирования возложен на так называемую планирующую программу, которая периодически оценивает состояние устройства (процессоров, оперативной и внешней памяти, каналов обмена и т. д.) и на основании анализа определяет набор и последовательность включения модулей э работу.
Управляющая программа (супервизор) непосредственно следит за ходом выполнения рабочей программы и реагирует на отклонения процесса от нормы (прерывает работу по сигналам контроля, обеспечивает исправление ошибок и т. д.).
Ошибки в выполнении планирующей а управляющей программ могут привести к полному нарушению процесса управления. Поэтому контроль работы этих программ весьма желателен.
При контроле хода программы невозможно учесть специфику самой задачи, поэтому методы контроля в основном сводятся к различным вариантам дублирования и проверке искусственно созданных контрольных соотношений.
Контроль линейных участков программ состоит в проверке факта выполнения данного участка. Он может быть организован следующим образом: каждому линейному участку программы присваивается определенное кодовое слово (ключ участка), этот ключ записывается в выбранную ячейку оперативной памяти перед началом выполнения участка, одна из последних команд участка проверяет наличие «своего» ключа. Если проверка показала, что кодовое слово не соответствует участку, то фиксируется факт ошибки. Данный метод контроля достаточно эффективен и практически достоверно позволяет убедиться в том, что выполнен именно требуемый участок.
Аналогичный способ проверки может быть применен для контроля отдельных модулей, стандартных подпрограмм и других блоков программ, имеющих только один выход.
Данный метод контроля целесообразно использовать в тех случаях, когда длина участка достаточно велика.
Контроль разветвляющихся участков программ включает в себя контроль правильности работы узла разветвления и проверку факта реализации только одной ветви.
В правильности работы узла разветвления можно убедиться, если внутри ветви вторично проверить условия разветвления. Совпадение результатов двух проверок будет свидетельствовать о правильности работы узла.
Покажем на простом примере, как можно осуществить такую проверку. На рис. 6.2 представлена блок-схема разветвляющейся программы с двумя ветвями. Блок 1 является узлом разветвления, который проверяет некоторое условие x< 0. Если разветвление произведено правильно, то вначале выполняется один из линейных участков (либо блок 2, либо блок 3). Если разветвление в блоке 1 произошло правильно и выполнялась первая ветвь, то условие x < 0, проверяемое в блоке 4, будет выполнено и произойдет переход к блоку 6. Аналогичным образом при выполнении второй ветви в блоке 5 при правильном разветвлении должно выполняться условие x > 0. Невыполнение условий и блоках 4 и 5 свидетельствует о наличии ошибки, и происходит передача управления блоку 7 анализа причин ошибки.
Другой метод проверки работы узла разветвления иллюстрируется блок-схемой, приведенной на рис. 6.3.
Рис. 7.2 Блок-схема разветвляющегося
участка программы с контролем (вариант 1)
Здесь имеются два узла разветвления - блоки 1 и 4. После выполнения первого разветвления в заранее выбранную ячейку памяти засылается одно из слов: или . Второй узел обеспечивает выход в одну из ветвей программы. В каждой из ветвей осуществляется проверка условия или где и - контрольные значения А\ и А2. Если происходит совпадение слов, то переходят к блоку 9, если несовпадение - к блоку 10.
Проверку факта реализации только одной из ветвей разветвления можно осуществить следующим образом. В оперативной памяти выбирается контрольная ячейка, в которую до выполнения разветвляющегося участка засылается нулевое слово. Каждой ветви в этой ячейке ставится в соответствие один разряд.
В процессе выполнения ветви предусматривается засылка единицы в этот разряд. Очевидно, после правильного выполнения разветвляющегося участка в контрольной ячейке должна быть единица только в одном из разрядов.
Описанные методы контроля правильности выполнения разветвляющихся участков программ целесообразно применять, когда отдельные ветви содержат достаточно большое число команд, иначе контрольные операции существенно увеличат объем программы и время ее реализации. Эти методы нечувствительны к ошибкам, возникшим в результате отказов, но последствия сбоев обнаруживают с высокой достоверностью.
Рис. 7.4 Блок-схема циклического участка программы с контролем (вариант 1)
циклических участков программ состоит в проверке числа повторений цикла. Известно, что существуют циклические программы с заранее известным и заранее неизвестным числом повторения. Методы контроля относятся только к циклическим программам первого вида и, по существу, сводятся к подсчету числа выполнений цикла различными способами. Рассмотрим некоторые из методов этого контроля.
Во многих случаях организация циклических участков осуществляется аппаратурно, при помощи индексных регистров или счетчиков.
Программный контроль циклического участка в этом случае можно осуществить за счет организации дополнительного программного счетчика. Существо контроля поясняется блок-схемой, приведенной на рис. 6.4.
В блоке 2 при каждом выполнении цикла к содержимому ячейки ср добавляется единица.
Блок 3 реализует проверку числа выполнения цикла аппаратурным способом. Здесь - текущее, а п - требуемое число повторений цикла.
Когда циклический участок будет выполнен заданное число раз, управление передается блоку 4, где проверяется содержимое программного счетчика (ячейки ). При правильном выполнении участка n= ( )
В тех случаях, когда подсчет числа выполнения циклов производится программным методом, можно организовать два счетчика циклов. Один из них поместить в начале, а другой - в конце цикла, и каждый раз сравнивать между собой содержимое счетчиков. На рис. 6.5 представлена блок-схема циклического участка, поясняющая суть описанного метода контроля. Здесь в ячейках и организованы два счетчика, а контрольная проверка осуществляется в блоке 4.
Если имеется возможность провести подсчет числа выполнения цикла двумя различными способами, то это также может быть положено в основу контроля.
Пусть, например, происходит интегрирование дифференциального уравнения на участке с шагом . Требуемое число повторений цикла в этом случае
Для организации контроля в этой задаче целесообразно на циклическом участке использовать программный или аппаратурный счетчики. По окончании вычислений проверяется, чему равно текущее значение аргумента . Если = , то реализованное число выполнения цикла равно требуемому. Блок-схема, поясняющая данный метод контроля, приведена на рис. 6.6.
Методы контроля циклических участков относительно просты и легко реализуются практически. Применение этих методов контроля с высокой вероятностью позволяет обнаружить ошибки, возникшие в результате сбоев. Осуществление контроля циклических участков нецелесообразно в тех случаях, когда они имеют малые размеры и введение дополнительных команд существенно увеличивает объем программы.
Контроль длительности выполнения модуля программы основывается на том факте, что каждый модуль программы выполняется за конечное время. Для организации контроля используются счетчики времени. Известно два типа счетчиков времени — суммирующие и вычитающие. На вход обоих типов счетчиков поступают импульсы (метки) времени. Суммирующий счетчик в каждый данный момент времени хранит текущее значение астрономического времени. Вычитающий счетчик предназначен для фиксации интервалов времени, записываемых в него в виде соответствующих кодовых слов. По мере поступления импульсов времени содержимое счетчика уменьшается. В тот момент, когда оно станет равно нулю, вырабатывается осведомительный сигнал.
Существо контроля состоит в том, что перед началом выполнения модуля программы вычитающий счетчик по команде устанавливается в положение, соответствующее допустимому времени выполнения модуля тд. Если программа реализуется нормально, то окончание ее работы наступит раньше момента появления осведомительного сигнала счетчика. Ошибки в работе модуля программы могут привести к увеличению длительности ее выполнения. При этом осведомительный сигнал счетчика прервет функционирование модуля программы, и в работу включится программа анализа ошибок.
Данный метод контроля весьма эффективен при обнаружении грубых ошибок, приводимых к «зацикливанию» программ. Положительным свойством его является то, что счетчик времени работает параллельно с основной программой и дополнительного времени на контроль почти не требуется.
Применение контроля целесообразно во всех случаях при условии наличия счетчика времени.
=
≠
Рис.6.4 Блок-схема циклического участка программы с контролем
(вариант 2)
Рис. 6.4 Блок-схема циклического участка программы с контролем (вариант 3)
Контроль правильности выполнения набора модулей и последовательности их включения осуществляется следующим образом. Если на
определенном интервале времени должен быть выполнен набор модулей программ, то контроль факта выполнения каждого из этих модулей можно реализовать с использованием меток. Каждый модуль в процессе своего выполнения оставляет метку, а после реализации всей совокупности модулей делается проверка наличия необходимых меток. В простейшем случае каждый модуль может заносить единицу в отведенный ему разряд ячейки памяти, которая предварительно ставится в нулевое состояние.
Если требуется, чтобы набор модулей выполнялся в строго определенной последовательности, то можно применить метод контроля по ключу Суть его состоит в том, что предварительно каждым двум модулям, выполняемым один за другим, присваивается некоторое слово, называемое ключом. Предыдущий модуль записывает этот ключ в заранее отведенную ячейку памяти, а последующий модуль проверяет наличие в ячейке именно этого ключа. При их совпадении в ячейку записывается новый ключ, проверяемый следующим модулем, и т. д.
Этот метод контроля характеризуется весьма высокой эффективностью и требует малых затрат как времени, так и дополнительных команд.
Контроль обмена информацией состоит в проверке правильности передачи информации из одного вида памяти в другой или от одного объекта к другому.
Правильность обмена часто проверяется контрольным суммированием всей пересылаемой информации с последующим сравнением полученной и эталонной контрольных сумм.
Наличие аппаратного контроля устройств передачи информации позволяет с малой задержкой обнаруживать ошибки в передаче информации. Это дает, в свою очередь, возможность либо повторить процесс обмена, не дожидаясь его конца, либо исправить ошибку, используя, например, корректирующие коды. Факт завершения обмена легко зафиксировать, если в качестве последнего пересылаемого слова использовать специальную метку. Поступление этой метки свидетельствует о завершении обмена, ее отсутствие - о том, что процесс обмена не доведен до конца.
Дата добавления: 2017-03-29; просмотров: 1198;