멀티태스킹 (Multi-tasking)
Task라는 개념은 프로세스의 개념보다 조금 확장된 개념이라고 생각하면 됩니다. 이러한 Task가 하나의 프로세서 상에서 운영체제의 스케쥴링 방식에 따라 조금씩 번갈아가면서 수행되는 것이 멀티태스킹의 개념입니다. 빠른 속도록 조금씩 번갈아 가면서 Task들을 조금씩 처리하다보면 유저가 느끼기에는 마치 '동시'에 처리되는 것처럼 보이기 때문에 붙은 이름입니다. 우리가 컴퓨터로 워드를 작성하면서 멜론 PC버젼으로 노래를 들을 수 있는 것도 멀티 태스킹입니다.
이때 멀티태스킹의 스케쥴링 방식에 몇 가지가 있는데, 다음과 같습니다.
- 멀티프로그래밍 방식 (Multi-programming)
- 시분할 방식 (Time-sharing)
- 실시간 시스템 방식 (Real-time)
위와 같은 스케쥴링 방식을 사용해서 멀티 태스킹이 이루어지게 됩니다. 스케쥴링 방식에 대해서는 다른 글에서 다루도록 하겠습니다.
이러한 멀티태스킹은 두 종류로 나눌 수 있습니다.
하나는 비선점형 멀티태스킹, 나머지 하나는 선점형 멀티태스킹입니다.
프로그램은 실행되면 프로세스가 되고 프로세스는 역시 여러 쓰레드를 실행시키는데 여러 프로그램에서 만들어지는 이 쓰레드는 CPU라는 한정된 자원을 서로 사용하고자 경쟁중인 관계에 있습니다. 그러므로 운영체제는 CPU의 시간을 나누어 여러 쓰레드들에게 돌아가며 실행하도록 하는데, 이 때 CPU를 차지하고 있는 쓰레드가 자신이 이제 CPU 연산이 필요 없음을 나타냈을 때에만 운영체제가 이를 회수할 수 있는 경우를 비선점형(Non-preemptive) 멀티태스킹이라고 합니다. 단어가 좀 어려울 수 있는데 preemption이 '선점하다, 빼앗다'의 의미이므로 non이 붙으면 '선점할 수 없는, 중간에 빼앗을 수 없는' 이라는 뜻으로 생각하면 쉽겠습니다.
반대로, 프로세스가 CPU를 차지해서 사용하더라도 운영체제가 타이머나 여타 트리거를 통해 개입하여 강제로 CPU 사용을 빼앗아 올 수 있는 경우를 선점형(Preemptive) 멀티태스킹이라고 합니다.
쉽게 말해 운영체제가 응답없는 프로세스를 강제로 죽이고 자시고 할 수 있으면 선점형, 그게 안 돼서 닥치고 리셋해야만 하는 경우라면 비선점형입니다. 선점형 멀티태스킹은 스케줄러에 따라 차이가 지긴 하지만, 원론적으로는 보통 시간을 따로 정해 놓고 이 시간마다 선점(preemption)이 일어나는데, 이때의 시간 단위를 퀀텀 혹은 슬라이스라 합니다. 퀀텀이 너무 낮으면 프로세스 바꾸는데 소모되는 리소스가 커지고, 퀀텀이 너무 높으면 반응 속도가 느려집니다. 보통 빠른 타수의 사람이 키를 입력하는 속도가 약 100ms 정도이기 때문에, 퀀텀도 이정도 수준에서 좀더 낮게 결정되는 경향이 있습니다. 리눅스의 경우 퀀텀을 따로 설정할수도 있긴 하지만, 어차피 리눅스에서 디폴트로 사용하는 CFS 스케쥴러는 상황을 보면서 작동하기때문에 퀀텀대로만 선점을 하지는 않습니다.
현행 대부분의 OS들, 즉 Windows, 리눅스, OS X 등은 모두 선점형 멀티태스킹인데 이유를 생각하면 당연합니다. 범용 운영체제인 만큼 여러 프로그램들을 실행시켜야 할텐데 그 프로그램들은 모두 검증된 프로그램이 아니고 버그도 갖고 있습니다. 만약 어떤 프로그램이 이러한 이유로 자원을 가진 채로 버그에 빠지거나 자원을 독식하려 한다면 멀티태스킹이 제대로 이루어지지 않을 것입니다.
다음에는 멀티태스킹 스케쥴링 방식의 한 종류인 멀티프로그래밍에 대해 정리하도록 하겠습니다.
'컴퓨터공학' 카테고리의 다른 글
멀티 스레딩이란? (0) | 2016.02.15 |
---|---|
멀티 프로그래밍이란? (0) | 2016.02.12 |
멀티 프로세싱이란? (2) | 2016.02.12 |
CPU, 프로세서, 코어... 같은 용어인가? (4) | 2016.02.12 |
Thread(쓰레드)란 무엇인가? (0) | 2016.02.11 |
이 글을 공유하기