📖 WIPIVERSE

🔍 현재 등록된 정보: 43,391건

프로세스 스케줄링

프로세스 스케줄링은 운영체제가 CPU를 효율적으로 사용하기 위해 프로세스들에게 CPU 사용 시간을 할당하는 전략 및 기법을 의미한다. 다중 프로그래밍 환경에서 여러 프로세스가 동시에 실행되기를 기다릴 때, 어떤 프로세스에게 먼저 CPU를 할당할지 결정하는 중요한 역할을 수행한다. 효율적인 프로세스 스케줄링은 시스템의 응답 시간을 단축하고, 처리량(throughput)을 증가시키며, 모든 프로세스에게 공정한 자원 할당을 보장하는 데 기여한다.

목표:

프로세스 스케줄링의 주요 목표는 다음과 같다.

  • CPU 활용률 최대화: CPU가 항상 작업을 수행하도록 유지하여 시스템 자원을 최대한 활용한다.
  • 처리량 증대: 일정 시간 동안 완료되는 프로세스의 수를 늘려 시스템의 효율성을 높인다.
  • 응답 시간 최소화: 사용자의 요청에 대한 응답 시간을 줄여 시스템의 반응성을 향상시킨다. 특히 대화형 시스템에서 중요하다.
  • 반환 시간 최소화: 프로세스가 시작되어 완료될 때까지 걸리는 총 시간을 최소화한다.
  • 공정성 보장: 모든 프로세스가 공정하게 CPU 자원을 할당받도록 하여 특정 프로세스가 불이익을 받지 않도록 한다.

스케줄링 알고리즘:

다양한 프로세스 스케줄링 알고리즘이 존재하며, 각 알고리즘은 서로 다른 장단점을 가진다. 주요 스케줄링 알고리즘은 다음과 같다.

  • 선입선처리 (FCFS, First-Come, First-Served): 먼저 도착한 프로세스에게 먼저 CPU를 할당하는 가장 단순한 방식이다. 구현이 간단하지만, 짧은 프로세스가 긴 프로세스를 기다려야 하는 '콘보이 효과(Convoy Effect)'가 발생할 수 있다.
  • 최단 작업 우선 (SJF, Shortest Job First): 실행 시간이 가장 짧은 프로세스에게 먼저 CPU를 할당하는 방식이다. 평균 반환 시간을 최소화하지만, 프로세스의 실행 시간을 미리 알아야 한다는 단점이 있다. 예측이 어려운 경우, '추정'을 통해 SJF를 적용하기도 한다.
  • 우선순위 스케줄링 (Priority Scheduling): 각 프로세스에 우선순위를 부여하고, 우선순위가 높은 프로세스에게 먼저 CPU를 할당하는 방식이다. 우선순위가 낮은 프로세스가 무한정 기다리는 '기아 현상(Starvation)'이 발생할 수 있으며, 이를 해결하기 위해 '에이징(Aging)' 기법을 사용하기도 한다.
  • 라운드 로빈 (Round Robin): 각 프로세스에게 동일한 시간 할당량(time quantum)을 부여하고, 할당량 동안 작업을 완료하지 못하면 준비 큐의 맨 뒤로 보내는 방식이다. 공정성이 높고 응답 시간이 빠르지만, 시간 할당량의 크기에 따라 성능이 달라질 수 있다.
  • 다단계 큐 스케줄링 (Multilevel Queue Scheduling): 프로세스를 여러 개의 큐로 나누고, 각 큐마다 다른 스케줄링 알고리즘을 적용하는 방식이다. 큐 간의 우선순위를 부여하거나, 큐에 CPU 시간을 할당하는 방식으로 운영된다.
  • 다단계 피드백 큐 스케줄링 (Multilevel Feedback Queue Scheduling): 다단계 큐 스케줄링의 변형으로, 프로세스가 큐 사이를 이동할 수 있도록 한다. CPU를 많이 사용하는 프로세스는 하위 큐로 이동하고, I/O 작업을 많이 수행하는 프로세스는 상위 큐로 이동시켜 시스템의 효율성을 높인다.

스케줄링 기준:

스케줄링 알고리즘을 선택할 때는 다양한 기준을 고려해야 한다. 주요 기준은 다음과 같다.

  • 공정성: 모든 프로세스가 공정하게 자원을 할당받아야 한다.
  • 균형: 시스템의 모든 자원이 균형 있게 사용되어야 한다.
  • 강제성: 중요한 프로세스는 반드시 제 시간에 실행되어야 한다.
  • 예측 가능성: 시스템의 동작을 예측할 수 있어야 한다.
  • 정책 강제성: 시스템의 정책을 준수해야 한다.

문맥 교환 (Context Switching):

프로세스 스케줄링 과정에서 CPU가 한 프로세스에서 다른 프로세스로 전환될 때 발생하는 작업이다. 이전 프로세스의 상태(CPU 레지스터, 프로그램 카운터 등)를 저장하고, 새로운 프로세스의 상태를 복원하는 과정을 포함한다. 문맥 교환은 시스템의 오버헤드를 발생시키므로, 스케줄링 알고리즘은 문맥 교환 횟수를 최소화하는 방향으로 설계되어야 한다.