다중작업

컴퓨팅 분야에서 멀티태스킹() 또는 다중작업(이하 멀티태스킹)은 다수의 작업(혹은 프로세스, 이하 태스크작업(task): 컴퓨터로 처리되는 일의 최소 단위)이 중앙 처리 장치(이하 CPU)와 같은 공용자원을 나누어 사용하는 것을 말한다. 엄밀히 말해 한 개의 CPU를 가진 개인용 컴퓨터가 특정 순간에 수행할 수 있는 태스크의 개수는 하나뿐이다. 따라서 멀티태스킹은 스케줄링이라는 방식을 사용하여 컴퓨터 사용자에게 병렬 연산이 이루어지는 것과 같은 환경을 제공한다. 스케줄링 방식은 CPU 사용시간을 일정한 기준에 따라 나누어 각 태스크가 사용할 수 있도록 분배한다. 분배받은 시간 동안 태스크가 CPU를 사용할 때 다른 태스크들은 자신의 차례가 오기를 기다린다. 분배받은 시간이 종료되어 태스크가 사용하던 CPU를 다른 태스크가 사용할 수 있도록 재배정하는 것을 문맥교환이라 하는데 스케줄링에서 이 문맥교환이 충분히 자주 발생하게 되면 컴퓨터 사용자는 병렬 연산이 이루어진 것처럼 느끼게 된다.

멀티태스킹은 다수의 CPU를 내장한 컴퓨터(즉, 멀티프로세서)에서도 유효한데, 멀티태스킹을 사용하게 되면 탑재한 CPU의 숫자보다 많은 수의 태스크를 동시에 수행할 수 있게 된다.

일반적으로 운영 체제는 아래 나열된 스케줄링 방식중 하나를 채택해서 사용한다.

 멀티프로그래밍 시스템에서는 현재 실행되고 있는 태스크는 다른 외부 이벤트를 기다려야 하는 상황이 되거나, 컴퓨터의 스케줄러가 강제로 실행 중인 태스크를 중단시킬 때까지 계속 진행된다. 멀티 프로그램 시스템은 CPU 사용률을 극대화할 수 있도록 설계되었다.

 시분할 시스템에서는 현재 실행되고 있는 태스크가 스스로 혹은 하드웨어 인터럽트 따위의 외부적인 이유로 중앙 처리 장치의 점유를 포기해야 한다. 시분할 시스템은 다수의 프로그램이 거의 동시에 수행될 수 있도록 해준다. "시간을 분할한다"라는 표현은 단말에 위치한 사용자가 함께 공유할 수 있는 IBM사의 TSO, CP/CMS와 같은 컴퓨터를 가리키기 위해 쓰였다.

 실시간 시스템에서는 외부 이벤트가 발생하였을 때 몇 개의 대기 중인 태스크들이 CPU를 점유할 수 있도록 보장해 준다. 실시간 시스템은 시간 내에 처리하여야 하는 산업 로봇과 같은 기계적인 장치를 제어하기 위해 사용된다.

동일한 시스템을 여러 명이 공유해서 쓰는 것을 나타내던 시분할이라는 용어는 개인용 컴퓨터와 워크스테이션의 발전으로 인해 멀티태스킹이라는 용어로 대체되어 특수한 경우를 제외하고 현재는 거의 사용되지 않는다.

 멀티프로그래밍 

CPU에 비하여 주변장치들은 상대적으로 매우 느리다. 만약 컴퓨터가 주변장치에 접근해야 하는 프로그램을 실행시키면 CPU는 아무것도 하지 못하고, 주변장치가 데이터 처리를 완료해 줄 때까지 기다려야 했다. 전산학 발전 초기단계에서 CPU 시간은 매우 귀중한 자원이었기 때문에 이러한 CPU 시간의 낭비는 매우 비효율적으로 보였다.

이러한 낭비를 막기 위해서 1960년대가 되면서 최초의 멀티 프로그래밍 시스템을 개발하려는 움직임이 있었다. 이 시스템에서는 몇 개의 서로 다른 프로그램들이 컴퓨터의 메모리에 불러들여진다. 첫 번째 프로그램이 실행되다가 주변장치의 처리를 기다려야 하게 되면, 이 프로그램의 문맥은 저장이 되고, 두 번째 프로그램이 실행될 기회를 얻게 된다. 이런식의 처리 과정이 모든 프로그램의 작업이 완료될 때까지 반복적으로 일어난다.

멀티프로그래밍은 프로그램이 적절한 시간안에 완료되는 것을 보장해주지는 못한다. 사실, 아주 먼 옛날의 프로그램도 주변장치에 접근할 필요없이 몇시간이고 잘 동작하였다. 이러한 컴퓨터 환경은 활성화된 단말기 앞에 사용자가 결과를 확인하기 위해서 대기하고 있지만 않다면 특별한 문제가 없었다. 사용자는 단지 컴퓨터를 조작하는 사람에게 천공카드 한묶음(프로그램)을 건네주고 떠났다가, 몇시간 후 출력된 결과를 확인하기 위해서 다시 돌아오면 되기 때문이다. 멀티 프로그래밍은 여러개의 순차 프로그램들이 처리될 때 대기시간을 크게 줄여주었다.

 같이 보기 
 동시 멀티스레딩
 프로세스
 프로세스 시간

 각주 

분류:운영체제 기술