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