Контроль хода программы

Контроль хода программ опирается на общие принципы их построе­ния и заключается в проверке правильности выполнения линейных и цик­лических участков программ, разветвлений, правильности обращения к стандартным подпрограммам и т. д.

Современные программы, предназначенные для решения задач управления, строятся по модульному принципу. Каждый модуль незави­сим от других модулей и характеризуется функциональной завершенно­стью. В своем составе модули содержат линейные, разветвляющиеся и циклические участки. Правильность выполнения отдельных модулей и их участков может контролироваться различными программными методами. При этом, как правило, используются особенности решаемой задачи. Однако в некоторых случаях можно предложить специфические программ­ные методы контроля, учитывающие особенности самой структуры про­граммы (т. е. наличие разветвлений, циклов, переходов к стандартным подпрограммам и т. д.).

На различных этапах управления из модулей формируется рабочая программа.

Процесс формирования возложен на так называемую планирующую программу, которая периодически оценивает состояние устройства (процессоров, оперативной и внешней памяти, каналов обмена и т. д.) и на основании анализа определяет набор и последовательность включения моду­лей э работу.

Управляющая программа (супервизор) непосредственно следит за ходом выполнения рабочей программы и реагирует на отклонения процесса от нормы (прерывает работу по сигналам контроля, обеспечивает исправление ошибок и т. д.).

Ошибки в выполнении планирующей а управляющей программ могут привести к полному нарушению процесса управления. Поэтому контроль работы этих программ весьма желателен.

При контроле хода программы невозможно учесть специфику самой задачи, поэтому методы контроля в основном сводятся к различным вари­антам дублирования и проверке искусственно созданных контрольных со­отношений.

Контроль линейных участков программ состоит в проверке факта выполнения данного участка. Он может быть организован следующим образом: каждому линейному участку программы присваивается определенное кодовое слово (ключ участка), этот ключ записывается в выбранную ячейку оперативной памяти перед началом выполнения участка, одна из последних команд участка проверяет наличие «своего» ключа. Если про­верка показала, что кодовое слово не соответствует участку, то фиксирует­ся факт ошибки. Данный метод контроля достаточно эффективен и прак­тически достоверно позволяет убедиться в том, что выполнен именно тре­буемый участок.

Аналогичный способ проверки может быть применен для контроля отдельных модулей, стандартных подпрограмм и других блоков программ, имеющих только один выход.

Данный метод контроля целесообразно использовать в тех случаях, когда длина участка достаточно велика.

Контроль разветвляющихся участков программ включает в себя контроль правильности работы узла разветвления и проверку факта реали­зации только одной ветви.

В правильности работы узла разветвления можно убедиться, если внутри ветви вторично проверить условия разветвления. Совпадение ре­зультатов двух проверок будет свидетельствовать о правильности работы узла.

Покажем на простом примере, как можно осуществить такую про­верку. На рис. 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;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.012 сек.