Featured image of post 프로세스 스케줄링의 개념

프로세스 스케줄링의 개념

프로세스 스케줄링의 필요성과 스케줄링 큐, 컨텍스트 스위칭에 대하여

프로세스 스케줄링의 필요성

운영체제는 여러 프로세스를 관리하며 CPU의 효율적인 활용을 위해 프로세스 스케줄링을 수행한다.

프로세스 스케줄링은 여러 프로세스가 동시에 메모리에 존재하는 다중 프로그래밍 환경에서 더욱 중요하다. 다중 프로그래밍에선 항상 어떤 프로세스를 실행하도록 하여 CPU이용을 최대화해야 한다. 또한 시분할 시스템에서는 프로세스들 사이에서 CPU 코어를 빈번하게 교체하여 각 사용자에게 빠른 응답을 제공해야 한다. 이러한 목적을 달성하기 위해 프로세스 스케줄러는 코어에서 실행 가능한 여러 프로세스 중에서 하나의 프로세스를 선택한다.

다중 코어 시스템에서는 동시에 여러 프로세스를 실행할 수 있지만, 단일 코어 시스템에서는 동시에 하나의 프로세스만 실행할 수 있다.

스케줄링 큐

운영체제는 프로세스를 관리하기 위해 여러 개의 큐(queue)를 사용한다.

  • 준비 큐(Ready Queue)
    프로세스가 실행 준비를 마치고 CPU 할당을 기다리는 큐이다. 준비 큐는 일반적으로 연결 리스트(linked list)의 형태로 관리된다.

  • 대기 큐(Wait Queue)
    프로세스가 I/O 작업이나 특정 이벤트를 기다릴 때 들어가는 큐이다. 예를 들어 프로세스가 디스크나 네트워크 작업을 수행하는 동안, CPU는 다른 프로세스를 실행하여 유휴 시간을 최소화할 수 있다.

큐는 연결 리스트 형태로 관리되며, 프로세스 제어 블록(PCB)이 각 프로세스를 표현하고 큐에 연결된다. 프로세스가 I/O를 요청하면, 해당 프로세스는 준비 큐에서 제거되어 I/O 대기 큐로 이동한다. I/O 작업이 완료되면 프로세스는 다시 준비 큐로 이동하여 CPU를 기다리게 된다.

CPU 스케줄링

CPU 스케줄링(CPU Scheduling)은 준비 큐에 있는 여러 프로세스 중 하나를 선택하여 CPU를 할당하는 작업이다. 스케줄러는 프로세스가 CPU를 독점하지 않도록 주기적으로 실행되어 프로세스를 교체한다. 일반적으로 CPU 스케줄러는 매우 짧은 주기로 동작하여, 시분할 시스템에서는 프로세스들이 CPU를 빠르게 번갈아 사용하도록 한다.

프로세스는 보통 두 가지 유형으로 구분된다,

  • I/O 바운드 프로세스
    계산보다 입출력 작업에 더 많은 시간을 소비하는 프로세스이다. 이러한 프로세스는 CPU를 짧게 사용하고 자주 I/O 요청을 한다.

  • CPU 바운드 프로세스
    대부분의 시간을 계산에 소비하고 I/O 요청을 거의 하지 않는 프로세스이다. 스케줄러는 이런 프로세스가 CPU를 장기간 독점하지 않도록 중간에 강제로 중단시켜 다른 프로세스에게 CPU를 할당한다.

또한, 메모리가 부족한 상황에서는 프로세스를 디스크로 이동시켜 일시적으로 메모리에서 제거하는 스와핑을 통해 프로세스의 수를 줄이는 중간 스케줄링이 수행되기도 한다.

컨텍스트 스위칭

컨텍스트 스위치 다이어그램

컨텍스트 스위칭(Context Switch)이란 CPU가 하나의 프로세스에서 다른 프로세스로 전환될 때, 현재 프로세스의 상태를 저장하고, 새롭게 실행될 프로세스의 상태를 복원하는 작업이다. 컨텍스트 스위칭은 다음과 같은 과정을 포함한다:

  • 상태 저장(state save): 현재 실행 중인 프로세스의 CPU 레지스터 값과 상태 정보를 PCB에 저장한다.
  • 상태 복구(state restore): 다음 실행할 프로세스의 PCB에 저장된 정보를 CPU 레지스터와 상태에 복원한다.

컨텍스트 스위칭은 반드시 필요한 작업이지만, 시스템에 직접적으로 기여하는 작업이 아니므로 수행되는 동안은 시스템에 부하가 생긴다. 컨텍스트 스위칭 시간은 순수한 오버헤드로 간주되며, 보통 수 ms의 짧은 시간이지만 자주 발생하면 성능에 상당한 영향을 줄 수 있다.

일부 CPU 하드웨어는 여러 개의 레지스터 세트를 사용하여 컨텍스트 스위칭 속도를 높이기도 하지만, 메모리 관리 기법이 복잡할수록 컨텍스트 스위칭 시 수행해야 할 작업량도 증가한다.