Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PGTU / 5 семестр / Надежность / Nadezhnost_4-ya_redaktsia.doc
Скачиваний:
424
Добавлен:
29.03.2015
Размер:
12.07 Mб
Скачать

Активное обнаружение ошибок

Не все ошибки можно выявить пассивными методами, поскольку эти методы обнаруживают ошибку лишь тогда, когда на входах появляются со­ответствующие данные. Можно делать и дополни­тельные проверки, если спроектировать специальные программные средства для активного поиска признаков ошибок в системе. Такие средства называютсясредствами ак­тивного обнаружения ошибок(или системами встроенного контроля) и будут более подробно рассмотрены в подразд. 4.3.

Активные средства обнаружения ошибок обычно объединяются в диагностический монитор: параллельный процесс, который перио­дически анализирует состояние системы с целью обнаружить ошиб­ку. Большие про­граммные системы, управляющие ресурсами, часто содержат ошибки, при­водящие к потере ресурсов на длительное время. Например, управление памятью операционной системы сда­ет блоки памяти «в аренду» програм­мам пользователей и другимчастям операционной системы. Ошибка в этих самых «других час­тях» системы может иногда вести к неправильной работе блока управления памятью, занимающегося возвратом сданной ранее в аренду памяти, что вызывает медленное вырождение системы.

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

Иногда желательно, чтобы в чрезвычайных обстоятельствах мо­нитор выполнял диагностические тесты системы. Он может вызывать определенные системные функции, сравнивая их результат с зара­нее определенным и проверяя, насколько разумно время выпол­нения. Монитор может также пе­риодически предъявлять системе «пустые» или «легкие» задания, чтобы убе­диться, что система функ­ционирует хотя бы самым примитивным образом.

Исправление ошибок и устойчивость к ошибкам

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

Хотя методы исправления/устойчивости и имели ограниченный ус­пех в нескольких системах, в большинстве случаев их лучше из­бегать. Число возможных ошибок в большой системе так велико, что может счи­таться практически бесконечным. Разрабатывая ме­тоды исправле­ния/устойчивости, мы вынуждены пытаться предуга­дать лишь несколько типов ошибок, чтобы реализовать средства, предназначенные для борьбы с ущербом от этих ошибок. В лучшем случае наша система будет исправлять ничтожный процент своих потенциальных ошибок. К тому же эти средства сами довольно сложны, так что благодаря им исходное количество ошибок в системе только возрастет. Более того, они сами будут, несомненно, со­держать ошибки. Наконец, если некоторые средства исправления/устой­чи­вости все-таки заработают, они тем самым станут маскировать ошибки (делая их менее заметными), и последние, возможно, никогда не будут устранены обслуживающим персоналом, а это – явно нежелательное след­ствие.

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

Соседние файлы в папке Надежность