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

남우진·2025년 1월 25일

프로세스

목록 보기
2/6

Operating System Concepts, 10th Edition을 읽고 정리하기 위해 작성하는 글입니다.


프로세스 스케줄링이란?


멀티프로그래밍의 목적은 CPU 활용도를 극대화하기 위해 항상 일부 프로세스를 실행하는 것이고, 타임 쉐어링의 목적CPU 코어를 프로세스 간에 자주 전환하는 것이다. 프로세스 스케줄러(process scheduler)멀티프로그래밍과 타임 쉐어링의 목적을 달성하기 위해 실행할 사용 가능한 프로세스를 선택한다.

멀티프로그래밍과 타임쉐어링의 목적을 균형있게 맞춰야 하는데 이를 I/O 바운드(I/O-bound)나 CPU 바운드(cpu-bound) 프로세스를 통해 이루어질 수 있다.

  • I/O 바운드(I/O-bound) 프로세스계산을 하는 것보다 I/O를 하는 데 더 많은 시간을 소비한다.
  • CPU 바운드(cpu-bound) 프로세스는 I/O 요청을 드물게 생성하고 계산을 하는 데 더 많은 시간을 사용한다.

스케줄링 큐(Scheduling Queue)


프로세스가 시스템에 들어오면 ready 큐에 들어간다음, 코어서 실행될 준비를 한다. ready 큐의 헤더에는 첫 번째 PCB의 포인터가 포함되고, 각 PCB에는 ready 큐의 다음 PCB를 가르키는 포인터 필드가 포함된다.

시스템에는 ready 큐를 제외한 다른 큐들도 포함된다.

  • ex) wait 큐는 프로세스가 I/O 요청 완료와 같은 이벤트를 기다릴 때 배치되는 큐이다.

위의 그림은 ready, wait 큐가 작동하는 과정을 보여준다.


프로세스 스케줄링큐잉 다이어 그램(queueing diagram)으로 보통 표현되는데 여기에는 ready, wait 큐의 집합이 존재한다.

위의 그림은 프로세스 스케줄링을 큐잉 다이어 그램으로 나타낸다. 여기서 원모양은 큐를 제공하는 리소스를 나타내고, 화살표는 시스템에서 프로세스의 흐름을 나타낸다.

  • 맨 처음 새 프로세스는 ready 큐에 배치되어 스케줄러의 의해 선택되거나 대기한다.
  • CPU 코어에 프로세스가 할당되면 여러 이벤트 중 하나가 발생할 수 있다.
    • I/O 요청 후 I/O wait 큐에 배치되는 경우
    • 자식 프로세스를 생성한 뒤 자식 프로세스가 종료될 때 까지 wait 큐에 배치되는 경우
    • 인터럽트나 타임 슬라이스 만료코어에서 강제로 제거된다음 다시 ready 큐에 배치되는 경우

프로세스는 종료될 때 까지 이 사이클을 반복하고, 종료되면 모든 큐에서 제거된다음 PCB와 리소스가 할당 해제된다.


CPU 스케줄링(CPU Scheduling)이란?


CPU 스케줄러ready 큐에 있는 프로세스 중에서 선택하여 그 중 하나를 CPU 코어에 할당한다. 또, 새 프로세스를 CPU 코어에 자주 할당해야 한다.

I/O 바운드 프로세스는 보통 I/O 요청을 기다리기 전에 몇 밀리초 동안만 실행되고, CPU 바운드 프로세스는 더 오랜 시간 동안 CPU 코어가 필요하지만 스케줄러는 오랜 시간 동안 코어에 프로세스를 할당하는 방식 보다는 강제로 프로세스를 제거하고 다른 프로세스가 실행되도록 설계한다.

  • CPU 스케줄러는 최소한 100ms 마다 한번씩 실행된다.

일부 운영 체제에는 스와핑(swapping)이라고 하는 중간 형태의 스케줄링이 존재하는데, 스와핑의 핵심은 메모리에서 프로세스를 제거하여 멀티프로그래밍의 정도를 줄이는 것이 유리할 수 있다는 점이다.

스와핑에서 프로세스는 메모리에서 디스크로 현재 상태가 저장되고, 나중에 디스크에서 메모리로 다시 상태가 복원된다. 스와핑은 일반적으로 메모리가 과도하게 커밋되어 해제해야할 때만 필요하다.


컨택스트 스위치(Context Switch)란?


인터럽트가 발생하면 CPU 코어에서 실행 중인 프로세스의 현재 컨텍스트를 저장하여 처리가 완료되면 해당 컨텍스트(context)를 복원할 수 있어야 하며, 이때 프로세스를 일시 중단한 다음 다시 시작한다.

  • 컨텍스트는 프로세스의 PCB에 표현된다.

CPU 코어를 다른 프로세스로 전환하려면 현재 프로세스의 상태 저장다른 프로세스의 상태 복원을 수행해야하는데 이 작업을 컨텍스트 스위치(context switch)라고 한다.

컨텍스트 스위치가 발생하면 커널은 PCB에 저장된 이전 프로세스의 컨텍스트를 저장하고 예약된 새 프로세스의 컨텍스트를 로드한다.

위의 그림은 P0P_0P1P_1 프로세스 간의 컨텍스트 스위치를 보여준다.

  1. P0P_0이 실행중에 인터럽트나 시스템 콜이 발생하여 P0P_0의 상태를 PCB0PCB_0에 저장한다.
  2. 그런 다음 PCB1PCB_1에서 P1P_1의 상태를 복원하여 P1P_1을 실행한다.

컨텍스트 전환 시간하드웨어에 크게 의존한다.

  • ex) 프로세서가 여러 개의 레지스터 집합을 제공하면 컨텍스트 전환은 현재 레지스터 집합에 대한 포인터만 변경하면 된다.

0개의 댓글