설물리블링크 [993175] · MS 2020 (수정됨) · 쪽지

2024-03-07 21:24:50
조회수 4,092

코딩을 신중하게 해야하는 이유

게시글 주소: https://susitest.orbi.kr/00067537108

예전에 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)

  1. 유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.