Мифы о безопасном ПО: уроки знаменитых катастроф - [6]

Шрифт
Интервал

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

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

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

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

Особенности ПО как предпосылки для инцидентов

В комплексе не использовалась какая-либо стандартная операционная система: была разработана специальная мультизадачная ОС реального времени, для компьютера PDP-11/23 с 32Kбайт и написанная на языке ассемблера. Специальный планировщик координировал деятельность всех одновременно исполняющихся процессов. Задачи, запускавшиеся каждые 0.1 сек., разделялись на «критические», исполнявшиеся первыми, и «некритические». К критическим отнесены три приоритетных задачи (рис. 1):

* «Servo», ответственная за все операции, связанные с эмиссией радиационных пучков и доставкой их к месту назначения;

* «Housekeeper», выполнявшая верификацию всех параметров и ответственная за блокировку работы в случае возникновения нештатной ситуации, а также за сообщения о таких ситуациях;

* «Treat», управлявшая самим процессом лечения, который был разделен на 8 операционных фаз. В зависимости от значения переменной Tphase вызывалась одна из восьми подпрограмм, по окончании работы которой Treat в зависимости от значений нескольких разделяемых с другими критическими и некритическими задачами переменных, вырабатывала план на новый цикл.


>Рис. 1. Взаимодействие задач и подпрограмм в ПО для Therac-25.

Одна из вызываемых Treat подпрограмм Datent (Data entry) через разделяемую «флаговую» переменную Data_entry_complete взаимодействует с «некритической» задачей Keyboard Handler, которая управляет вводом информации с клавиатуры, исполняясь параллельно с Treat. Keyboard Handler распознает момент окончания ввода и сигнализирует об этом, изменяя значение Data_entry_complete. В свою очередь, Datent проверяет значение этой переменной. Если оно не изменилось, то значение Tphase остается равным «1», и на следующем цикле Treat опять запустит Datent; если же значение Data_entry_complete изменилось, то Datent меняет значение Tphase с «1» на «3»; в результате после окончания работы Datent монитор Treat вызовет подпрограмму Set Up Test, выполняющую проверку считающихся уже установленными параметров.

Необходимо упомянуть еще одну переменную MEOS (Mode/Energy Offset), разделяемую между Datent, Keyboard Handler и еще одной некритической задачей Hand. Старшие байты MEOS используются подпрограммой Datent для установки одного из двух режимов облучения и величины энергии испускаемого потока, в то время как младшие используются параллельно работающей задачей Hand для установки коллиматора в положение, соответствующее выбранному режиму и энергии.

Оператор мог после ввода параметров режима и энергии редактировать эти величины по отдельности. Однако, здесь присутствовал тонкий момент разработчики установили: об окончании процесса ввода (и редактирования!) параметров свидетельствует то, что все параметры заданы и курсор находится в командной строке, на предмет чего каждые 8 сек. (величина выбрана, исходя из некоторых технических соображений, связанных с инерционностью приборов) производится опрос переменной Data_entry_complete. Если в пределах этих 8 сек. курсор покидает командную строку и после быстрого редактирования параметров успевает вернуться на нее, то Keyboard Handler этого события просто не заметит, и соответственно, никак переменную Data_entry_ complete не изменит.

Иными словами, потенциально существует возможность для следующей последовательности действий:

* Keyboard Handler отследил местонахождение курсора на командной строке и установил флаг Data_entry_complete;


Рекомендуем почитать
Никола Тесла. Три феномена гения

В последние годы своей жизни Никола Тесла печально и прозорливо говорил: «Сколько людей называли меня фантазером… Нас рассудит время!» В 1880-х годах позапрошлого века его идею переменного тока специалисты назвали бредом, а ныне весь мир пользуется устройствами, работающими благодаря этому открытию. Многие его гениальные проекты опередили время настолько, что и спустя столетие не смогли быть воспроизведены без чертежей и записей, которые ученый сознательно уничтожил, отказавшись от идеи сверхмощного оружия как сдерживающего фактора в развязывании мировой бойни.


Звездные корабли воображения

Брошюра подписной научно-популярной серии "Новое в жизни, науке, технике" библиотечки "Космонавтика, астрономия" издательства "Знание", № 2 1988 г.Автор брошюры, ученый и известный писатель-фантаст, обсуждает роль научной фантастики в прогнозировании в области космонавтики и астрономия и сопоставляет некоторые приемы, используемые писателями-фантастами, с методами научно-технического прогнозирования.


Геракл — праотец славян, или Невероятная история русского народа

Существует легенда о происхождении скифов от связи Геракла с полуженщиной-полуехидной, приключившейся на берегах Днепра-Борисфена. Об этом писал еще отец истории Геродот. Упоминал об этом мифе и Лев Гумилев. Однако особенностью данной книги является углубленное изучение всех аспектов возможных причин возникновения этого мифа. В рамках своего труда автор проводит сенсационные параллели между Гераклом и героем древнерусских былин Ильей Муромцем, между библейским Эдемом и садом Гесперид, находит изображение Геракла на Збручском идоле и делает вывод, что Геродотовы будины, гелоны, навры — праславяне, поклонявшиеся Гераклу как богу.


Наблюдения НЛО в СССР (выпуски 1-3)

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


Неоткрытые звезды

Статья 1988–1989 гг. о ленинградской ветви фантастической «новой волны» — о писателях семинара Б. Стругацкого.Имеет историческое значение.


Александр Александрович Малиновский (Богданов)

Его имя мало кто знает, хотя весьма популярны и прославлены имена Винера и Берталанфи, развивавших его идеи.