이전 포스터에서 운영체제의 구조에 대해 알아보았다. 이번에는 운영체제의 대표 역할 중 하나인 프로세스 스켸줄링에 대해 알아볼 예정이다.


프로세스 스케쥴링(Process Scheduling)


한 가지 작업만 가능했던 컴퓨터가 발전을 하면서 이제는 모든 곳에서 사용이 되는 도구가 되어버렸다. 1인 PC는 기본이고 소형 전자제품에도 전부 컴퓨터가 들어가있다. 컴퓨터를 이용해 한 가지 작업만 하는 시대는 이미 역사 속으로 사라졌다. 현재 필자가 블로그를 쓰면서 노래를 듣고, 인터넷 검색을 하는 등 여러 작업을 동시에 진행한다. 이처럼 OS는 컴퓨터가 여러 동작을 동시에 할 수 있도록 프로세스 스케률링을 제공한다.


프로세스 스케쥴링 종류에는 다음과 같다.

  • 배치 처리 시스템(Batch Processing System)
  • 시분할 시스템(Time-Sharing System)
  • 멀티 프로그래밍(Multi-Programming)
  • 멀티 태스킹(Multi-Tasking)


배치 처리 시스템(Batch Processing System)

역사로 보는 운영체제에서 1960년도 초기에 언급되었던 프로세스 스케쥴링이다. 컴퓨터가 개발된 후에 프로그램의 수가 많아지는 시기에 출현한 가장 간단한 스케쥴링이다. 컴퓨터가 1대이고 여러 사람들이 각자 실행해야하는 프로그램이 있다고 할 때, 프로그램을 순차적으로 배열하여 하나의 프로그램이 끝나면 자동으로 다음 프로그램을 실행시키는 시스템이다. 과거에는 컴퓨터가 매우 희소해서 여러 사람들이 1대를 공유해야했기 때문에 고안되었다. 자료구조 중 하나인 큐(Queue)를 이용해 구현할 수 있다.

장점

  • 본인의 프로그램을 실행시키기 위해 이미 실행중인 프로그램이 끝날 때까지 기다릴 필요가 없다.
  • 컴퓨터가 꺼지지 않는 이상 계속해서 연속으로 프로그램을 실행시킬 수 있다.

단점

  • 지금은 상상도 하지 못할 정도로 비효율적이다.
  • 각 프로그램의 실행시간과 무관하게 등록한 순서대로 실행한다.
  • 프로그램의 실행시간 예측을 하지 않았다.


사진1. 배치 처리 시스템(예시)
출처 : https://fastcampus.co.kr/courses/2466/clips/


위 사진에서 파란색 프로그램이 12시간, 노란색 프로그램이 1시간이 걸린다고 할 때, 순서에 따라 노란색 프로그램은 1시간 또는 13시간 걸리는 문제가 발생한다.


시분할 시스템(Time-Sharing System)

배처 처리 시스템의 비효율성을 해결하기 위해 등장한 스케쥴링 기술로 다중 사용자가 하나의 컴퓨터를 사용할 때 각각의 응답 시간을 최소화하는 시스템이다. 시간을 일정 시간으로 쪼개서 매 단위시간 동안 각각의 다른 사용자의 응답을 처리한다. 멀티 프로그래밍과 혼용해서 사용한다.


사진1. 시분할 시스템(예시)
출처 : https://fastcampus.co.kr/courses/2466/clips/

장점

  • 사용자들 각각의 응답시간을 최소화할 수 있다.
  • 실행시간이 모두 다를 때 비교적 짧은 시간의 프로그램은 배치 처리 시스템보다 평균적으로 더 빨리 끝난다.

단점

  • 프로그램이 바뀌는 과정을 구현하는 것이 비교적 복잡하다.


시분활 시스템의 경우 여러 사람이 동시에 사용할 때에 중점을 둔다.


멀티 태스킹(Multi-Tasking)

단일 CPU에서 여러 응용 프로그램이 동시에 실행되는 것처럼 보이도록 하는 시스템이다. 노래를 들으면서 문서작업을 하고, 인터넷 검색을 하는 등 여러 작업을 동시에 실행할 수 있도록 하는 시스템이다. 보통 10~20ms 단위로 실행 응용 프로그램이 바뀌면서 실행이 된다.(현재는 기술이 더 발전해서 더 빨리 바뀔수도?) 사람의 경우 10ms정도의 대기시간은 느끼지 못하기 때문에 동시에 실행되는 것처럼 보인다.


시분할 시스템멀티 태스킹의 경우 기술적인 원리는 비슷하지만 목적의 차이가 있다. 시분할 시스템의 경우 다중 사용자에게 초점이 맞춰져있는 반면 멀티 태스킹은 작업에 초점이 맞춰져있다. 사실 두 가지를 칼같이 구분해서 사용하지는 않는다.


멀티 태스킹과 멀티 프로세싱

대부분 혼용해서 사용하지만, 굳이 나누자면 다음과 같다.

  • 멀티 태스킹 : 단일 CPU에서 여러 작업을 한 번에 실행되는 것처럼 보이도록 하는 시스템
  • 멀티 프로세싱 : 여러 CPU에 하나의 프로그램을 벙렬로 실행시켜 실행속도를 극대화하는 시스템


실제로 시분할 시스템, 멀티 프로그래밍, 멀티 태스킹 등 위에서 언급된 기술들은 유사한 의미로 통용된다. 핵심은 여러 응용 프로그램을 실행하고 마치 동시에 실행을 하는 것처럼 보이도록 하는 것이다. 또한 CPU를 쉬지 않고 사용하여 짧은 시간 안에 많은 응용 프로그램이 실행완료될 수 있도록 하는 것이다. 여러 응용 프로그램이 실행된다는 것은 곧 다중 사용자 기능을 지원하는 것과 일맥상통한다.


정리하면 다음과 같다.


  • 시분할 시스템 : 다중 사용자 지원, 컴퓨터 응답시간 최소화
  • 멀티 태스킹 : 단일 CPU에서 여러 응용 프로그램을 동시에 실행하는 것처럼 보이게 하는 시스템
  • 멀티 프로세싱 : 여러 CPU에서 하나의 응용 프로그램을 병렬로 실행하게 해서 실행속도를 높이는 기법
  • 멀티 프로그래밍 : 최대한 CPU를 일정 시간 당 최대한 많이 활용하는 시스템


지금까지 프로세스 스케쥴링에 대해 알아보았다. 물론 각각 다른 단어들이 나오지만, 사실 목표는 동일하기 때문에 굳이 나눠서 생각할 필요는 없는 것 같다. 단지 여러 프로그램을 효율적으로 사용할 수 있는 방법이라는 것만 알고 있으면 될 것 같다. 그리고 위 개념들의 전제는 단일 CPU일 때의 상황이다. 현재는 한 컴퓨터에 CPU가 많은데, 여러 CPU를 사용하는 기법에 대해서는 나중에 알아볼 예정이다.


읽어주셔서 감사합니다.(댓글과 수정사항은 언제나 환영입니다!)