Какое отрицательное явление в многозадачной среде привело к трагическим исходам во время лечении медицинским ускорителем Therac-25?

Терак-25 (англ. Therac-25) — аппарат лучевой терапии, медицинский ускоритель, созданный канадской государственной организацией Atomic Energy of Canada Limited (в дальнейшем AECL) и запущенный в серию в 1982 г. Этот аппарат был причиной как минимум шести передозировок радиации, некоторые пациенты получили дозы в десятки тысяч рад. Как минимум двое умерли непосредственно от передозировок.

Замеченные ошибки

В программном обеспечении Therac-25 были найдены как минимум четыре ошибки, которые могли привести к переоблучению.

1. Одна и та же переменная применялась как для анализа введённых чисел, так и для определения положения поворотного круга. Поэтому при быстром вводе Therac мог иметь дело с неправильным положением поворотного круга (так называемое состояние гонки).

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

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

4. Установка булевской переменной (однобайтовой) в значение «истина» производилось командой «x=x+1». Поэтому с вероятностью 1/256 при нажатии кнопки «Set» программа могла не пропустить информацию о некорректном положении диска.

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

Исправления

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

2. Добавлена программная ветвь, мгновенно перезапускающая систему, и независимая аппаратная цепь, которая делает то же.

3. Исправлены все найденные ошибки; добавлена перестраховка.

4. Непонятные сообщения об ошибках заменены осмысленными.

5. Положение диска дополнительно считывается потенциометром и передаётся на пульт управления.

6. Изменение положения диска и других частей аппарата теперь возможно только тогда, когда оператор удерживает специальную педаль.

7. В режиме рентгеновской терапии отклоняющие магниты для электронной терапии устанавливаются в такую конфигурацию, что отклоняют пучок электронов на 270°.

Причины

Причины аварии были такие:

 Излишняя надежда на программное обеспечение, из-за чего не было предусмотрено механических блокираторов.

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

 Самонадеянность AECL. Реальная работа началась только тогда, когда были переоблучены несколько человек. Например, в Гамильтоне причиной неисправности считали микропереключатели, хотя инженеры не нашли неисправности и не смогли повторить ошибку.

 Небезопасная манера программирования. В частности, в программном обеспечении было много «трюкачества», и программные модули практически не тестировались поодиночке (бо́льшая часть тестирования производилась на готовом аппарате). Следует заметить, что всё ПО было написано на ассемблере, хотя в данном случае более мудрым решением было бы использовать язык высокого уровня.

 Повторное использование программного кода с Therac-6 и Therac-20. В Therac-6 вообще не было рентгеновской терапии, в Therac-20 применялся механический блокиратор. Безопасность — это черта всей системы, а не одного только программного обеспечения. Зачастую безопаснее переписать ПО и получить простую и прозрачную систему, чем использовать имеющийся код.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: