이번 글에서는 운영체제의 구조, 그 중에서 다중 프로그래밍(multi-programming)에 대해서 다루겠습니다.
운영체제 구조의 핵심은 다중 프로그래밍(multi-programming)입니다. 다중 프로그래밍(multi-programming)이란 CPU가 수행할 작업(코드와 데이터) 항상 하나 가지도록 구성함으로써 CPU 이용률을 증가시키는 것을 의미합니다.
보통 운영체제는 메모리 내에 있는 프로세스(process) 중에서 하나를 선택해서 실행을 시작하는데, 이 프로세스(process)는 입출력의 종료를 기다리는 등과 같이 어떤 일을 기다려야 하는 상황이 발생합니다. 즉, 어떤 프로세스(process)는 자신의 실행 주기내에서 CPU를 항상 필요로 하지 않습니다.
따라서 특정 프로세스(process)가 CPU를 필요로 하지 않는 순간, CPU를 필요로 하는 프로세스(process)로 교체해줌으로써 CPU의 이용률을 높일 수 있습니다. 이것이 다중 프로그래밍(multi-programming)의 개념입니다.
이와 같이 다중 프로그래밍 시스템은 여러 가지 시스템 자원을 효율적으로 이용하는 것이 목적이지만, 컴퓨터 시스템을 이용하는 사용자가 반영되어 있지 않습니다. 이 문제를 해결하기 위한 개념이 시분할 혹은 멀티태스킹(multi-tasking)입니다. 즉, 시분할 혹은 멀티 태스킹(multi-tasking)은 사용자 관점이 반영된 다중 프로그래밍(multi-programming)입니다.
보통 한 사용자의 각각의 동작이나 명령은 대체로 짧은 경향이 있기 때문에, 각 사용자는 단지 짧은 시간 동안만 CPU 시간이 필요합니다. 따라서 시분할 운영체제는 CPU의 이용을 한 사용자에서 다음 사용자로 빠르게 전환되도록 합니다. 즉, 각각의 사용자가 컴퓨터 시스템 이용에 있어서 연속성을 유지함과 동시에, 다수의 사용자가 하나의 컴퓨터 시스템을 공유할 수 있습니다.
시분할과 다중 프로그래밍 운영체제에서는 여러 프로세스(process)를 메모리에 동시에 유지합니다. 이 때, 디스크에서 메모리에 옮겨올 프로세스(process)를 선택하는 것을 작업 스케줄링(job scheduling)이라고 하며, 메모리에 있는 프로세스(process) 중에서 CPU가 실행할 프로세스(process)를 선택하는 것을 CPU 스케줄링(CPU scheduling)이라고 합니다.
이 글의 내용은 다음 운영체제 책(https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=46380306)을 참조했습니다.