코딩을 신중하게 해야하는 이유
예전에 Therac-25 라는 방사선 의료 기기가 있었는데요
이 기계에는 전자빔으로 종양을 제거하는 Electron 모드와
X선으로 피부 깊숙히 있는 종양을 제거하는 X-ray 모드가 있었다고 합니다.
그런데 X-ray 모드는 강력한 방사선을 조사하는* 방식이기 때문에 이를 균일하고 안전하게 하기 위해 턴테이블이라는 장치가 환자와 방사선 발사기 사이에 있어야 했습니다. 이 장치는 Electron 모드에는 필요하지 않았고 따라서 제때제때 턴테이블이 잘 움직여줘야 했죠. 그런데 여기서 버그가 있었습니다.
*: 빛이나 방사선을 쪼이다
Therac-25의 당시 코드를 대략적으로 설명하자면
if (만약) (시스템이 준비 되었다면)
in_progress를 0으로 맞추고
else (아니면)
in_progress를 늘려라
if (start key가 눌려져 있고, in_progress가 0이라면)
방사선을 조사해라
이런 식이었습니다
문제는 이때 in_progress 라는 변수가 8bit 변수였다는 겁니다
결국 이 변수가 255를 넘어가게 되면 0으로 오버플로우 되었고
턴테이블이 준비되지 않았음에도 방사선이 방출되어 사람이 이를 직격으로 맞게 되는 사고가 일어났던 겁니다.
결국 이 버그하나로 인해 3명이 사망하게 되었고, 3명은 평생을 심각한 방사능 피폭으로 시달려야했습니다. 이래서 코딩을 신중하게 해야 한다는 겁니다.
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
완벽하게 이해했습니다
오버플로우…
이해했습니다!
패트리어트 미사일도 자주나오는 비슷한 예인듯