Context Switching: PCB, 스케줄링 알고리즘

이번 글에서는 Context SwitchingProcess Control Block 그리고 스케줄링 알고리즘 에 대해 전체적으로 알아보도록 하겠습니다.

1. Context Switching의 개념

Context Switching 은 운영체제에서 Process 간에 CPU 자원을 전환하는 과정입니다. 즉, 한 프로세스에서 다른 프로세스로 CPU를 할당하기 위해, 현재 실행 중인 프로세스의 상태를 저장하고, 새로운 process의 상태를 복원하는 과정입니다. 이 과정은 멀티태스킹 환경에서 필수적인 요소로, 여러 프로세스가 CPU를 공유하도록 합니다.

Context Switching은 기본적으로 두 가지 단계로 이루어집니다:

Wed 02h1 12:3001:00h1 01:3002:00h1 02:3003:00h1 03:3004:00h1 04:3005:00h1 05:30P1 실행 상태 저장 (P1) 프로세스 선택 상태 복원 (P2) P2 실행 P1SchedulerP2Context Switching 과정
  1. 현재 프로세스의 상태 저장: CPU에서 실행 중인 프로세스의 레지스터 상태, 프로그램 카운터(PC), 그리고 스택 정보 등을 저장합니다.
  2. 새로운 프로세스의 상태 복원: 새로 CPU를 할당받은 process의 상태를 복원하여 실행을 시작합니다.

이 과정은 운영체제의 스케줄러가 관리하며, CPU 자원의 효율적인 배분을 위해 중요합니다.

2. Process Control Block(PCB)

여러 프로세스가 동시에 실행되는 멀티태스킹 환경에서, 각 프로세스는 다른 프로세스의 상태에 영향을 미치지 않도록 독립성을 유지해야 합니다. PCB는 각 프로세스가 독립적으로 실행될 수 있도록 필요한 모든 상태 정보를 저장하여, 다른 프로세스의 실행에 방해받지 않도록 합니다. 이는 프로세스 간에 상호 간섭을 방지하고, 안정적인 시스템 운영을 보장하빈다.

PCB 는 운영체제에서 각 프로세스를 추적하고 관리하기 위해 사용하는 데이터 구조입니다. PCB는 프로세스에 대한 모든 상태 정보를 포함하고 있으며, Context Switching 시 핵심적인 역할을 합니다.

프로세스가 실행 중일 때, 운영체제는 각 프로세스의 상태를 관리해야 합니다. CPU에서 하나의 프로세스가 실행되는 동안 다른 프로세스로 전환되면, 현재 프로세스의 상태(레지스터 값, 프로그램 카운터 등)를 저장하고, 새로운 프로세스의 상태를 복원해야 합니다. 이를 위해 PCB에 프로세스의 상태 정보가 저장됩니다. 만약 PCB가 없다면, 이 상태 정보를 어디에 저장할지 모호해지며, Context Switching이 불가능하게 됩니다.

PCB에 저장되는 정보는 다음과 같습니다:

항목 설명
프로세스 ID (PID) 프로세스를 고유하게 식별하는 값
프로세스 상태 프로세스가 현재 어떤 상태에 있는지 (예: 실행, 대기, 종료 등)
프로그램 카운터(PC) 다음에 실행될 명령어의 주소
CPU 레지스터 CPU에서 프로세스를 실행하는 데 필요한 레지스터의 상태
메모리 관리 정보 프로세스에 할당된 메모리 영역, 페이지 테이블 등
I/O 상태 정보 프로세스가 사용하는 I/O 장치 정보
우선순위 프로세스의 우선순위 정보
스케줄링 정보 스케줄링 큐에서의 위치나 대기 시간 등

PCB는 프로세스가 실행되는 동안 언제든지 변경될 수 있는 상태 정보를 포함하고 있으며, Context Switching 시 이 정보가 커널 공간에 저장 되어 새로운 프로세스가 실행될 수 있도록 합니다.

운영체제는 여러 프로세스를 효율적으로 실행하기 위해 스케줄링 알고리즘을 사용합니다. 각 프로세스의 우선순위, 대기 시간, 실행 상태 등은 모두 PCB에 기록되어 있습니다. 이 정보는 프로세스를 관리하고, 어떤 프로세스를 언제 실행할지 결정하는 데 필수적인 역할을 합니다.

3. 스케줄링 알고리즘

운영체제는 여러 프로세스 간의 CPU 자원을 관리하기 위해 다양한 스케줄링 알고리즘 을 사용합니다. 각 알고리즘은 프로세스의 우선순위, 대기 시간, 처리량 등을 고려하여 CPU를 효율적으로 분배합니다. 주요 스케줄링 알고리즘에는 다음과 같은 것들이 있습니다:

3.1 FIFO (First In, First Out)

FIFO는 가장 먼저 도착한 프로세스를 먼저 실행하는 방식입니다. 큐에서 프로세스를 순차적으로 처리하므로, 간단하고 직관적 입니다. 그러나 병목 현상 이 발생할 수 있으며, 긴 프로세스가 대기 시간이 길어지는 문제 가 발생할 수 있습니다.

Wed 0201:0002:0003:0004:0005:0006:0007:0008:0009:0010:0011:0012:0001:0002:0003:00P3 P2 P1 P4 프로세스FIFO 스케줄링 예시
  • 위 그림에서는 P3, P2, P1, P4 순으로 도착했다고 가정합니다.

3.2 Round Robin (RR)

Round Robin은 타임 슬라이스 또는 퀀텀 이라고 불리는 일정 시간만큼 프로세스를 실행한 후, 다른 프로세스에게 CPU를 양도하는 방식입니다. 시간이 중요한 시스템에서 유용하며, 공평한 자원 분배 가 가능합니다. 그러나 컨텍스트 스위칭 비용 이 상대적으로 높을 수 있습니다.

Wed 0201:0002:0003:0004:0005:0006:0007:0008:0009:0010:0011:0012:0001:0002:0003:0004:00P1 P2 P3 P4 P1 P2 P3 P4 프로세스Round Robin 스케줄링 예시

이 다이어그램은 각 프로세스가 순차적으로 CPU를 할당받는 모습을 시각적으로 나타냅니다. P1, P2, P3, P4는 각각 동일한 시간을 할당받고, 타임 슬라이스가 끝날 때마다 Context Switching이 일어납니다.

3.3 SJF (Shortest Job First)

SJF는 실행 시간이 가장 짧은 프로세스를 먼저 실행하는 알고리즘입니다. 이 알고리즘은 최소 대기 시간을 보장하지만, 긴 프로세스가 계속 대기 하게 되는 기아 현상 을 초래할 수 있습니다.

Wed 0201:0002:0003:0004:0005:0006:0007:0008:0009:0010:0011:0012:0001:00P2 P1 P3 P4 프로세스SJF 스케줄링 예시

3.4 Priority Scheduling

Priority Scheduling은 각 프로세스에 우선순위를 부여하고, 우선순위가 높은 프로세스를 먼저 실행하는 방식입니다. 그러나 이 방식도 기아 현상 을 발생시킬 수 있습니다. 다양한 우선순위 기반 정책을 사용할 수 있습니다.

Wed 0203:0006:0009:0012:0003:0006:00P2 P1 P3 P4 프로세스Priority Scheduling 예시
  • 위 그림에서, 프로세스의 우선순위는 P2 > P1 > P3 > P4라고 가정합니다.

3.5 멀티레벨 큐 스케줄링

이 방식은 여러 개의 큐를 사용하여, 각 큐가 다른 스케줄링 알고리즘을 따르는 방식입니다. 프로세스의 특성에 맞게 적절한 큐로 분류하여 효율적으로 스케줄링할 수 있습니다.

Wed 0201:0002:0003:0004:0005:0006:0007:0008:0009:0010:0011:0012:0001:0002:0003:0004:0005:00P1 P2 P3 P4 High PriorityLow PriorityMultilevel Queue Scheduling 예시

4. 선점형 vs 비선점형 스케줄링

운영체제에서 스케줄링은 크게 선점형(Preemptive)비선점형(Non-Preemptive) 방식으로 나눌 수 있습니다. 이 두 가지 방식은 프로세스가 CPU를 할당받고 사용하는 방식에 따라 다릅니다.

4.1 선점형 스케줄링

선점형 스케줄링에서는 CPU를 사용 중인 프로세스를 강제로 중단시키고, 다른 프로세스에게 CPU를 할당할 수 있습니다. 타임 슬라이스 또는 우선순위 등의 기준에 따라 프로세스가 강제로 중단되며, 다른 프로세스가 실행됩니다.

  • 예시: Round Robin, Priority Scheduling(우선순위가 높을 때 선점 가능)

4.2 비선점형 스케줄링

비선점형 스케줄링에서는 한 프로세스가 CPU를 할당받으면, 해당 프로세스가 실행을 완료할 때까지 CPU를 계속 사용할 수 있습니다. 프로세스가 종료되거나 I/O 작업을 요청할 때까지 다른 프로세스는 CPU를 사용할 수 없습니다.

  • 예시: FIFO, SJF

Comparison

항목 선점형 스케줄링 비선점형 스케줄링
응답 시간 응답 시간이 더 빠르다. 타임 슬라이스가 지나면 다른 프로세스가 실행된다. 응답 시간이 늦을 수 있다. 실행이 끝날 때까지 다른 프로세스가 대기해야 한다.
공정성 공정하다. 각 프로세스가 일정 시간 동안 CPU를 할당받을 기회를 가진다. 공정성 부족. 긴 프로세스가 실행을 끝낼 때까지 다른 프로세스가 기다려야 한다.
시스템 효율성 높은 시스템 효율성. CPU 자원을 더 잘 활용할 수 있다. 낮은 시스템 효율성. CPU가 유휴 상태로 남을 수 있다.
기아 문제 낮다. 프로세스가 타임 슬라이스에 의해 자주 실행된다. 높다. 긴 프로세스가 우선 실행되면 다른 프로세스가 대기하게 된다.
실행 관리 복잡성 더 복잡하다. 프로세스 상태를 자주 저장하고 복원해야 하므로 오버헤드가 발생한다. 비교적 단순하다. 프로세스의 상태를 저장하는 일이 적다.
적합한 환경 멀티태스킹 환경에서 적합하며, 타임 공유 시스템에서 주로 사용된다. 프로세스가 종료될 때까지 기다릴 수 있는 환경에서 적합하며, 배치 처리 시스템에서 주로 사용된다.

5. Context Switching의 비용

Context Switching은 시스템의 성능에 비용 을 초래합니다. 이 비용은 두 가지 주요 요소로 나눌 수 있습니다:

  1. CPU 오버헤드: 프로세스 상태를 저장하고 복원하는 데 드는 시간이 CPU 오버헤드로 발생합니다.
  2. 메모리 오버헤드: Context Switching 중에 메모리 상에서 프로세스의 상태를 저장하고, 복원하는 데 시간이 소모됩니다.

최적화 방법

  • 우선순위 조정: 프로세스 간의 우선순위를 효율적으로 관리하여, 불필요한 Context Switching을 최소화할 수 있습니다.
  • 타임 슬라이스 조정: 적절한 타임 슬라이스를 설정하여, 너무 짧은 시간으로 반복되는 Context Switching을 방지할 수 있습니다.

6. 결론

Context Switching은 멀티태스킹 운영체제에서 필수적인 기능이며, 이를 통해 여러 프로세스가 CPU를 효율적으로 공유할 수 있습니다. 하지만 이 과정은 비용이 발생하며, 최적화가 필요합니다. PCB는 각 프로세스의 상태 정보를 관리하는 중요한 데이터 구조로, Context Switching 과정에서 핵심적인 역할을 합니다. 또한, 스케줄링 알고리즘은 프로세스들 간의 CPU 자원 배분을 효율적으로 관리하는 중요한 도구입니다.