1 개요
한 번에 2가지 이상의 일을 동시에 처리하는 것으로 "다중과업화"라고도 한다.
2 운영체제의 멀티태스킹
컴퓨터는 최초에는 한 번에 하나의 작업만을 처리할 수 있었으나, 프로세서와 운영체제를 발달시키면서 한 번에 여러가지 작업을 처리할 수 있게 되었다[1].
현대의 운영체제는 여러가지 일을 동시에 돌릴 수 있게 하는데, 기본적인 원리는 단순하다. 한 가지 일을 하다가, 잠시 멈추고 또 다른 일을 하고, 또 멈추고 다른 일을 하다 보면 언젠가는 결국 모든 일을 마치게 된다. 이 동작이 엄청 빨라지면 한 번에 여러가지 일을 하는 것처럼 보이게 되는 것이다. 그림 24장을 그려놓고 1초대로 돌리면 그것이 움직이는 것처럼 보이는 것 마냥, 한 번에 여러가지 동작을 엄청 빨리 하면 그것이 분신술처럼 보이게 되는 것이 바로 멀티태스킹의 원리이다. 유저 프로그램들은 마치 동시에 실행되는 것처럼 보이지만, 커널 내부에서는 주기적으로 CPU를 운영체제가 각각의 프로그램에 적절히 분배하는 작업이 반복되고 있다. 이렇게 프로세스들을 적절히 분배하는 작업을 스케줄링이라고 한다. 결국 사람의 약점을 이용한 원리
물론 여러 개의 CPU의 경우 정말로 CPU의 코어만큼의 작업이 동시에 이루어질 수 있다. 그러나 일반적으로 2~8개의 코어로는 당연히 수십~수백 개의 프로세스[2]를 모두 처리하지 못하므로 각 CPU 코어에서도 작업을 교체하는 일이 수시로 벌어진다. 물론 n개 코어에서 n개의 프로세스가 동시에 실행되긴 하므로 잘만 하면 멀티 코어를 통해 성능을 끌어올릴 수 있다. 즉, 일감을 적절히 여러 프로세스에 분배하여 돌리면 이론 상 여러 개의 코어를 동시에 사용할 수 있으므로 실제로 성능 향상을 가져온다. 이를 위해서는 프로그래밍 시 멀티 코어를 활용하는 설계가 필요하다. 그렇지 않으면 코어 하나만 미칠 듯이 돌아가고 나머지 코어들은 시덥지 않은 프로세스들을 깨작깨작 처리할 뿐이다.
그러나 이런 동시 처리는 구현하기 까다롭고 적용할 수 있는 부분도 한정적이다. 멀티코어를 고려하여 프로세스 여러 개에 각 일감을 적절히 싣더라도 2개 코어를 써서 프로그램이 2배 빨라지지는 않는다. 가장 큰 이유는 모든 작업을 '동시'에 처리할 수는 없기 때문이다. 예를 들어 A라는 작업을 수행하는 데 B라는 작업의 결과가 필요하다면, 필연적으로 B를 먼저 수행한 후에만 A를 수행할 수 있다. A와 B를 같이 돌려 봤자 A는 B가 끝나기 전까지 기다릴 수밖에 없다. 때문에 작업에 따라서 멀티태스킹으로 인한 효율이 천차만별이다.
또 다른 속도 증가치가 정비례하게 증가하지 않는 이유는 운영체제가 한 프로세스를 처리하다가 다른 프로세스로 넘어갈 때 컨텍스트 스위칭이라는 작업이 수반되기 때문이다. 즉, 바로 다른 프로세스로 바꿀 수 있는게 아니라 중간에 작업 전환을 하는데도 시간이 필요하다는 이야기. 각각의 프로세스는 자신이 사용하고 있는 컴퓨터의 자원(CPU 레지스터, 메모리 페이지 테이블, 파일 디스크립터 테이블 등등)들이 있는데 프로세스 전환 시 사용 중인 자원들도 전환해야 한다. 물론 데이터를 버릴 수는 없으니 작업 중인 데이터를 저장하고, 다른 프로세스에서 쓸 데이터를 가져오는데 이 시간이 걸린다. CPU 아키텍쳐 및 운영체제, 메모리 사용량에 따라 다르지만 대개 몇 백 ns에서 몇 us 정도의 시간이 걸린다고 보면 된다. [3] 이러한 전환 작업은 사람이 전혀 느낄 수 없을 정도로 짧고 유저 프로그램에게조차도 짧은 시간이지만, 커널 개발자에게는 꽤 비싼 작업으로 여겨지는 듯. 물론 멀티 프로세스를 기반으로 하는 서버에서나 고려해볼만한 상황이고 유저 입장에서는 찰나라고 봐도 될 정도로 짧다. [4]
멀티태스킹에는 두 종류가 있는데 첫 번째는 비선점형 멀티태스킹, 두 번째는 선점형 멀티태스킹이다.
프로그램은 실행되면 프로세스가 되고 프로세스는 역시 여러 쓰레드를 실행시키는데 여러 프로그램에서 만들어지는 이 쓰레드는 CPU라는 한정된 자원을 서로 사용하고자 경쟁중인 관계에 있다. 그러므로 운영체제는 CPU의 시간을 나누어 여러 쓰레드 들에게 돌아가며 실행하도록 하는데, 이 때 CPU를 차지하고 있는 쓰레드가 자신이 이제 CPU 연산이 필요 없음을 나타냈을 때에만 운영체제가 이를 회수할 수 있는 경우를 비선점형 멀티태스킹이라고 하고, 프로세스가 CPU를 차지해서 사용하더라도 운영체제가 타이머나 여타 트리거를 통해 개입하여 강제로 CPU 사용을 빼앗아 올 수 있는 경우를 선점형 멀티태스킹이라고 한다. 쉽게 말해 운영체제가 응답없는 프로세스를 강제로 죽이고 자시고 할 수 있으면 선점형, 그게 안 돼서 닥치고 리셋해야만 하는 경우라면 비선점형이다. 선점형 멀티태스킹은 스케줄러에 따라 차이가 지긴 하지만, 원론적으로는 보통 시간을 따로 정해 놓고 이 시간마다 선점(preemption)이 일어나는데, 이 시간 단위를 퀀텀 혹은 슬라이스라 한다. 퀀텀이 너무 낮으면 프로세스 바꾸는데 소모되는 리소스가 커지고, 퀀텀이 너무 높으면 반응 속도가 느려진다. 보통 빠른 타수의 사람이 키를 입력하는 속도가 약 100ms 정도이기 때문에, 퀀텀도 이정도 수준에서 좀더 낮게 결정되는 경향이 있다. 리눅스의 경우 퀀텀을 따로 설정할수도 있긴 하지만, 어차피 리눅스에서 디폴트로 사용하는 CFS 스케쥴러는 상황을 보면서 작동하기때문에 퀀텀대로만 선점을 하지는 않는다.
현행 대부분의 OS들, 즉 Microsoft Windows, 리눅스, OS X 등은 모두 선점형 멀티태스킹인데 이유를 생각하면 당연하다. 범용 운영체제인 만큼 여러 프로그램들을 실행시켜야 할텐데 그 프로그램들은 모두 검증된 프로그램이 아니고 버그도 갖고 있다. 만약 어떤 프로그램이 이러한 이유로 자원을 가진 채로 버그에 빠지거나 자원을 독식하려 한다면 멀티태스킹이 제대로 이루어지지 않을 것이다. 다만 Windows 95에서는 16비트 프로그램에서는 비선점형 멀티태스킹으로 작동하는데 이는 운영체제 구조상 어쩔 수 없었던 부분이다. 기존 16비트 시절의 Windows(1.0~3.1)가 비선점형으로 만들어졌기 때문.[5]
프로세스의 스케줄링을 구현하는데도 여러가지 알고리즘이 존재한다. 리눅스에서는 O(1) 스케쥴러가 사용되다가 2.6.23 버전부터 CFS(Completely Fair Scheduler)가 도입되었다.
모바일 운영체제인 iOS에선 패스트 스위칭과 멀티태스킹이 공존하는 형태이다. 자세한 내용은 항목 참조.
3 일상생활에서의 멀티태스킹
사람에게도 멀티태스킹 업무 처리 능력을 요구하는 직종이 많은데, 이 경우에는 그냥 여러가지 일을 떠맡기는 꼴이다. 남성보다는 여성이 상대적으로 멀티태스킹 능력이 뛰어나다. 평균적으로 여성의 간뇌가 남성보다 발달되어 있기 때문이다. 업무에서든 가사에서든, 남자는 여러가지 일이 쌓여 있으면 스트레스를 받고 한 번에 하나씩 빨리 처리해서 개수를 줄이려 하는 반면, 여자는 동시에 여러가지 일을 처리하는 데서 스스로 만족감을 느끼는 경향이 더 크다고 한다.
다만 여성이 남성보다 멀티태스킹 능력이 뛰어나다는 설은 논란이 있는 편이다. 한 가지 일에서 여러 가지 일을 맡을 때 집중도가 떨어지는 폭이 여성보다 남성이 큰 것일 뿐, 한 가지 일을 하든 여러 가지 일을 하든 남성의 집중도가 높다는 설도 있다.
중국 촉한의 재상 비의나 조선시대의 류성룡 등이 이런 멀티태스킹 능력이 뛰어났다는 일화가 남아 있다. 각각 항목에도 있지만, 그 일화가 공통적으로 바둑을 두면서 정무를 처리했다는 일화라는 게 공통점.
전자 기기의 경우, 각기 다른 기기를 동시에 사용하면 뇌의 기능을 저하시킨다.[6]
4 관련 항목
5 기타
- 스타크래프트에서 화면지정이나 부대지정 등을 이용하여 동시에 여러가지 일을 하는 것도 멀티태스킹이라고 한다. 자세한 사항은 멀티태스킹(스타크래프트) 문서 참조.