Мифы о безопасном ПО: уроки знаменитых катастроф - [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;


Рекомендуем почитать
Ум первобытного человека

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


Капиталистическое отчуждение труда и кризис современной цивилизации

В монографии исследуются эволюция капиталистического отчуждения труда в течение последних ста лет, возникновение новых форм отчуждения, влияние растущего отчуждения на развитие образования, науки, культуры, личности. Исследование основывается на материалах философских, социологических и исторических работ.


Тайны продуктов питания

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


Социально-культурные проекты Юргена Хабермаса

В работе проанализированы малоисследованные в нашей литературе социально-культурные концепции выдающегося немецкого философа, получившие названия «радикализации критического самосознания индивида», «просвещенной общественности», «коммуникативной радициональности», а также «теоретиколингвистическая» и «психоаналитическая» модели. Автором показано, что основной смысл социокультурных концепций Ю. Хабермаса состоит не только в критико-рефлексивном, но и конструктивном отношении к социальной реальности, развивающем просветительские традиции незавершенного проекта модерна.


Вторжение: Взгляд из России. Чехословакия, август 1968

Пражская весна – процесс демократизации общественной и политической жизни в Чехословакии – был с энтузиазмом поддержан большинством населения Чехословацкой социалистической республики. 21 августа этот процесс был прерван вторжением в ЧССР войск пяти стран Варшавского договора – СССР, ГДР, Польши, Румынии и Венгрии. В советских средствах массовой информации вторжение преподносилось как акт «братской помощи» народам Чехословакии, единодушно одобряемый всем советским народом. Чешский журналист Йозеф Паздерка поставил своей целью выяснить, как в действительности воспринимались в СССР события августа 1968-го.


Сандинистская революция в Никарагуа. Предыстория и последствия

Книга посвящена первой успешной вооруженной революции в Латинской Америке после кубинской – Сандинистской революции в Никарагуа, победившей в июле 1979 года.В книге дан краткий очерк истории Никарагуа, подробно описана борьба генерала Аугусто Сандино против американской оккупации в 1927–1933 годах. Анализируется военная и экономическая политика диктатуры клана Сомосы (1936–1979 годы), позволившая ей так долго и эффективно подавлять народное недовольство. Особое внимание уделяется роли США в укреплении режима Сомосы, а также истории Сандинистского фронта национального освобождения (СФНО) – той силы, которая в итоге смогла победоносно завершить революцию.