윈도 '죽음의 블루스크린' 사라진 이유

일반입력 :2013/10/01 13:22    수정: 2013/10/02 10:18

마이크로소프트(MS) 윈도 운영체제(OS)의 오랜 사용자라면 블루스크린을 기억할 것이다. 부지불식간에 나타나 윈도 PC를 작동불능 상태로 만들었던 악명높은 '죽음의 블루스크린(BSOD)'이다.

사용자를 분노하게 했던 블루스크린은 언제부턴가 윈도에서 거의 사라졌다. 지난 수년간 MS가 이 흉물스러운 코드를 근절하기 위해 노력한 덕이다.

30일(현지시간) 미국 지디넷에 따르면, MS는 최근 마이크로소프트캠브리지연구소에서 열린 행사에서 OS의 코드 오작동을 줄인 방법에 대해 설명했다.

MS는 죽음의 블루스크린 버그를 없애기 위해 자동화된 툴과 윈도XP 사용자들에게 수집한 방대한 파손보고를 활용했다.

윈도XP의 오작동 대부분은 디바이스 드라이버 때문에 발생했다. 약 85%의 오작동이 드라이버에서 빚어졌다. 비디오카드 같은 하드웨어 기기를 OS에서 제어하도록 해주는 디바이스 드라이버는 OS 커널과 기기 사이의 소통을 가능하게 한다.

보통 디바이스 드라이버는 디버깅이 매우 까다롭다. 드라이버의 코드가 수많은 회사에 의해 작성되고, 오픈소스가 아니기 때문이다. 드라이버 제조사와 MS 간의 상호작용은 복잡한 작업이다.

바이런 쿡 MS캠브리지연구소 책임연구원은 생태계에서 디바이스 드라이버의 수가 기하급수적으로 늘어났고, 그것은 MS가 아니라 우리의 파트너에 의해 작성됐다라고 설명했다.

그는 시스템이 반드시 준수해야 할 수많은 규칙이 있는데, 그렇지 않으면 전체 시스템은 기능을 멈출 것이다라고 덧붙였다.

MS의 윈도사업부는 이 같은 드라이버 문제를 해결하기 위해 윈도XP 사용자들에게서 드라이버 관련 오작동만 수집하는 알고리즘을 만들었다. 이 알고리즘은 오류를 드라이버 제작사와 원인에 따라 자동으로 분류했다.

MS의 목표는 어떤 드라이버가 문제를 야기하는지 파악하고, 무엇이 가장 일반적인 치명적 오류를 야기하는지 살피는 것이었다.

MS는 이를 통해 드라이버가 윈도XP 오류를 일으키는 3가지 원인을 찾아냈다.

첫째로 드라이버가 윈도OS에서 애플리케이션프로그래밍인터페이스(API)를 파괴하는 것이다. 이 API는 윈도커널과 드라이버 간의 통신을 제어한다. 한 예로 드라이버가 윈도 커널 API에 'IoCompleteRequest' 호출을 두번할 때 죽음의 블루스크린이 나타난다.

두번째 주요 원인은 메모리 커럽션(memory corruption)에 의한 오류다. 드라이버 파일이 허락되지 않은 메모리 공간에 데이터를 쓸 때 발생한다. 세번째 원인은 드라이버가 시스템에 무한 루프를 발생시키는 경우였다.

디바이스 드라이버의 버그수를 줄이기 위해 MS는 '데이터 중심 프로그램 조합'이라 불리는 작업에 착수했다. 목표는 수학과 논리학을 사용해 정당성검증 툴을 만드는데 있었다.

가능한 모든 테스트 케이스를 열거하기보다 정당성 검증 발견을 자동화하는데 초점을 뒀다. 버그가 근절될 수 있는 비율을 높이기 위해서였다.

MS는 소프트웨어 에러를 자동으로 탐지하고 부수는 세개의 툴을 개발했다. 첫째는 슬램(slam)이라 불리는데, SW가 사용하는 인터페이스와 관련된 부분을 체크한다. 슬램은 스태틱 드라이버 검증 툴을 위한 검증엔진으로 사용됐고, 현재 윈도드라이버개발도구의 일부를 이루고 있다.

다른 하나는 슬레이어란 툴로, 메모리 커럽션을 해결하기 위한 SW다. 슬레이어는 디바이스 드라이버와 관련된 데이터 구조를 분석하고, 드라이버에 모든 메모리 주소가 적절히 할당됐는지를 점검한다.

이 툴을 이용해 MS는 써드파티에 의해 제작된 드라이버의 수많은 버그를 찾아냈다. 그를 통해 윈도드라이버 개발도구의 일부로 제공됐던 샘플 디바이스 드라이버의 버그도 찾아냈다.

쿡은 만약 당신이 디바이스 드라이버 작성자라면 당신이 하는 건 우리의 코드를 복사해 붙여넣기하고, 수정하는 것이라며 샘플의 버그는 인프라스트럭처를 통해 전파돼기 때문에 매우 나쁘다라고 설명했다.

MS는 샘플에서 버그를 수정했을 뿐 아니라, 드라이버 개발자들에게 코드 속에서 버그를 찾아낼 수 있도록 슬레이어를 제공한다.

관련기사

무한루프 오류에 대한 해법으론 '터미네이터'란 이름의 SW가 만들어졌다. 윈도 디바이스 드라이버를 위한 종료 프로버다. 3만5천줄 이상의 코드로 이뤄진 드라이버에서 작동한다.

바이런 쿡 책임연구원은 최근의 윈도OS인 윈도7이나 윈도8의 안정성은 MS의 드라이버 안정화 작업 덕이다라며 그 작업들은 윈도 커널팀이 디바이스 드라이버가 중요하다는 규칙을 명확히 하는데 도움을 줬다고 강조했다.