다중 프로그래밍

다중 프로그래밍(Multi-programming)이란 CPU 작업과 입출력 작업을 병행하는 것이다. CPU 이용과 처리량을 향상시킬 수 있다.

스케줄링과 다중 프로그래밍 
작업 스케줄링의 중요한 측면 중 하나는 다중 프로그래밍을 할 수 있는 능력이다. 왜냐하면 비다중 프로그래밍 시스템에서는 입출력을 기다리는 동안 CPU가 유휴 상태가 되어 비효율적이지만, 다중 프로그래밍 시스템에서는 주기억장치에 적재된 여러 개의 프로그램들을 CPU가 항상 수행하도록 하여 CPU 이용률을 증진시키기 때문이다. 운영체제는 기억장치에 있는 작업들 중에서 하나를 택해서 실행하기 시작한다. 이 작업에는 키보드로 입력하게 될 명령, 입출력 조작이 끝나는 것과 같은 어떤 일을 기다려야 할 필요가 있는데, 이러한 경우 비다중 프로그래밍 시스템에서는 CPU가 유휴 상태로 놓이지만 다중 프로그래밍 시스템에서는 운영체제가 다른 작업으로 전환하여 그것을 수행하도록 한다. 또 그 작업이 어떤 것을 기다려야 된다면 CPU는 또 다른 작업으로 전환된다. 이와 같은 과정이 반복되다 보면 결국 첫 번째 작업은 기다리는 것이 끝나 CPU를 다시 차지하게 된다. 따라서 수행해야 할 작업이 있는 한 CPU는 유휴 상태가 되지 않는다.

다중 프로그래밍 운영체제에서 여러 개의 작업들이 수행할 준비를 갖추고 있다면 이 작업들 중에 하나를 선택하기 위해서는 결정이 필요한데, 이것이 CPU 스케줄링이다.

종류

고정분할 다중 프로그래밍 
기억장치의 영역을 고정된 크기로 분할하여 사용하는 다중 프로그래밍 방식이다. 초기의 시스템들이 고정분할 다중 프로그래밍을 사용하였기 때문에 단편화가 많이 발생했다.
 절대번역과 적재
 절대어셈블러와 컴파일러에 의해 번역되며 정해진 영역 내에서만 실행된다. 분할마다 별도의 작업큐를 사용한다.
 재배치가능번역과 적재
 모든 분할들에 대하여 하나의 작업큐를 사용한다. 절대번역과 적재보다 기억장치의 관리가 효율적이지만, 번역기와 로더는 보다 복잡하다.

동적분할 다중 프로그래밍 
고정된 경계를 제거하고 각 작업에 필요한 양만큼 할당한다. 고정분할보다 기억장치의 낭비가 적다. 통합과 집약이 필요하다.

각주 

운영체제 기술