‘선점’의 의미

@codemaru · May 03, 2010 · 7 min read

모든 스레드는 언제든지 다른 스레드에 의해 선점될 수 있다.

윈도우 비스타는 선점형 멀티태스킹 운영체제다.

이것은 윈도우 프로그래밍 책에 흔히 나오는 이야기다. 하지만 한글로 적혀 있음에도 단박에 이해되지 않는 문장들이다. 이런 표현들은 주로 외국어를 그대로 번역하는 과정에서 발생한 것들인데, 이제는 그것이 굳어져서 표준처럼 사용된다. 이런 연유로 초보자들이 보는 책에서도 그에 대한 시시콜콜한 설명을 붙인 경우는 흔치 않다. 상황이 이 지경에 이르다 보니 배우는 사람들은 그러려니 하고 넘어가는 경우가 다반사고, 업계에서 몇 년씩 일하고 공부한 사람들도 이 말이 무슨 의미냐고 물으면 얼버무리게 되는 웃지 못할 상황이 연출되곤 한다. 따라서 윈도우 프로그래밍 서적에 흔히 등장하면서도, 쉽게 이해할 수 없는 표현에 대해 차례로 살펴볼 필요가 있다. 먼저 이 글에서는 앞선 인용문에 등장한 선점(preemption)이라는 말의 의미와 이를 바탕으로 설계된 선점형 멀티태스킹 운영체제에 대해 설명한다.

선점되다(is preempted)

선점이란 말을 국어사전에서 찾아보면 ‘남보다 앞서 차지하는 것’이라고 나와있다. 이 표현에서는 수동형으로 사용되었기 때문에 남에게 뺏기는 것을 생각하면 된다. 그렇다면 무엇을 차지하고 뺏기는 것일까? 바로 CPU 시간이다. 컴퓨터의 CPU 자원은 한정적이다. 하지만 요즘 운영체제는 이런 한정적인 자원을 분할해서 수십 수백 개의 프로그램을 동시에 실행시키는 능력을 가지고 있다. 따라서 당연히 동시에 실행되는 코드들 사이에서는 CPU 자원을 차지하기 위한 경쟁이 발생할 수밖에 없다. 이런 경쟁 관계에서 다른 코드가 차지하고 있는 CPU 자원을 차지하는 것을 두고 선점했다라는 표현을 쓰고, 반대로 CPU 자원을 빼앗긴 코드에게는 선점됐다라는 표현을 쓴다.

그렇다면 ‘모든 스레드는 언제든지 다른 스레드에 의해 선점될 수 있다’라는 말이 내포하는 진짜 의미는 무엇일까? 단지 모든 스레드가 언제든지 다른 스레드에게 CPU 자원을 빼앗길 수 있다는 말을 하려고 했던 것일까? 물론 아니다. 이 말은 크게 두 가지 의미를 담고 있다. 하나는 모든 스레드가 동등한 레벨에서 경쟁한다는 것을 말하고자 함이다. 즉, 어느 한 스레드가 CPU 자원을 전적으로 독점할 수 없다는 이야기다. 다른 하나는 언제든지 스레드 실행이 중단될 수 있다는 것이다. 이 지점까지는 한번에 실행될 것이라는, 혹은 이 부분에서 다른 스레드에게 실행 권한이 넘어가진 않을 것이라는 가정을 전혀 할 수 없다는 것이다. 이런 이유로 개발자 입장에서는 독립적인 스레드의 실행 순서가 랜덤한 것처럼 보여지는 것이다.

선점형 멀티태스킹 운영체제

멀티태스킹 운영체제란 여러 프로그램을 동시에 실행시킬 수 있는 운영체제를 나타낸다. 앞에 붙어있는 선점형이란 말은 운영체제가 동시에 실행되는 다른 어떤 코드보다도 먼저 CPU 자원을 획득할 수 있음을 의미한다. 즉, 현재 실행되고 있는 코드를 운영체제는 언제든지 중단하고 운영체제 자신이 CPU 자원을 차지할 수 있다는 것이다. 이와는 달리 비선점형 멀티태스킹 운영체제란 현재 실행되고 있는 응용프로그램이 CPU 자원이 더 이상 필요 없다는 의사 표시를 한 경우에만 운영체제가 CPU 자원을 획득할 수 있는 구조를 말한다.

그렇다면 이 둘 중에 어떤 방식이 더 좋은 방식일까? 물론 각기 상황에 따른 장단점이 있게 마련이다. 하지만 우리가 흔히 사용하는 범용 운영체제 입장에서 놓고 본다면 비선점형 멀티태스킹 운영체제는 치명적인 약점이 있다. 바로 응용프로그램이 버그나 오류로 인해 CPU 자원을 포기하지 않고 계속 가지고 있는 경우에는 운영체제 또한 함께 중단되는 상황이 발생한다는 점이다. 범용 운영체제의 특성상 검증되지 않은 많은 프로그램들이 동시에 실행되는 경우가 많기 때문에 이러한 현상은 시스템을 굉장히 불안정하게 만든다. 이런 점 때문에 거의 대부분의 현대적인 운영체제는 선점형 멀티태스킹 방식을 사용한다.

@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중