[CS] 스케줄링

최민길(Gale)·2023년 7월 6일
1

CS 탐구

목록 보기
3/13

안녕하세요 이번 시간에는 운영 체제의 스케줄링에 대해서 알아보는 시간을 갖도록 하겠습니다.

스케줄링이란 CPU 시간을 여러 작업에 분배하여 효율적으로 작업을 수행하기 위해 사용되는 기술입니다. 운영체제 내의 스케줄러가 스케줄링 작업을 수행하며, 시스템의 작업 또는 프로세스들을 관리하고 실행 순서를 결정하는 역할을 담당합니다.

스케줄러는 크게 3가지로 구성됩니다.

  1. 장기 스케줄러
  2. 단기 스케줄러
  3. 중기 스케줄러

장기 스케줄러란 운영체제 내에서 실행할 프로세스를 선택하는 역할을 하는 스케줄러입니다. 시스템 부팅 시에 실행되며 메모리에 있는 프로세스 중 실행할 프로세스를 선택하여 준비 큐(작업 또는 프로세스를 수행하기 전 필요한 준비 작업을 대기시키는 큐) 또는 준비 리스트로 보내게 됩니다. 실행 가능한 프로세스들 중에서 가장 적절한 작업들을 선택하여 메모리에 할당하여 시스템의 성능을 향상시키고 자원을 효율적으로 사용합니다.

단기 스케줄러란 운영체제 내에서 프로세스들이 CPU를 사용하는 시간을 조절하는 역할을 하는 스케줄러입니다. 장기 스케줄러로 인해 프로세스가 준비 큐로 이동하게 되면 단기 스케줄러가 준비 큐 내에서 프로세스를 선택하고 CPU에 실행을 위임하게 됩니다. 이 때 프로세스의 우선 순위, 작엽량, 도착 순서 등을 고려하여 CPU에 할당하며 스케줄링 알고리즘을 사용하여 최적화할 수 있습니다.

중기 스케줄러란 현재 메모리에 있는 프로세스 중 일부를 디스크로 이동시키는 역할을 수행합니다. 장기 스케줄러와 단기 스케줄러 사이에 위치하며 시스템의 로드가 많아져 메모리에 여유 공간이 부족할 때 활성화됩니다. 메모리의 효율적인 사용을 위해 메모리 내의 프로세스 수를 제어하고 프로세스를 디스크로 스왑하는 작업을 수행합니다.

멀티태스킹 환경에서 CPU는 여러 프로세스 또는 스레드 간에 전환되며 작업을 수행하고, 이 때 각 작업은 타임 퀀텀(타임 슬라이스)를 할당받게 됩니다. 타임 퀀텀이란 각 프로세스마다 어느 정도로 작업하고 교체할 것인지에 대한 시간 주기로, 한 프로세스가 CPU를 독점하지 않도록 제한을 두는데 사용됩니다. 각 프로세스는 할당된 타임 퀀텀동안만 실행되며 그 이후에는 다른 프로세스가 실행되어 CPU 사용을 공정하게 분배하여 멀티캐스킹 환경에서 응답 시간을 향상시키는데 도움을 줍니다.

만약 타임 퀀텀이 적정값보다 작을 경우 다음의 문제가 발생할 수 있습니다.

  1. 컨텍스트 스위칭 비용 증가
    CPU에서 실행 중인 프로세스를 자주 전환해야 하기 때문에 컨텍스트 스위칭이 자주 발생하여 이로 인한 오버헤드가 발생할 수 있습니다.
  2. 응답 시간 증가
    각 프로세스가 CPU를 할당받는 시간이 짧아져 CPU를 기다리는 프로세스 수가 증가하여 응답 시간이 길어질 수 있습니다.
  3. 성능 저하
    적정 타임 퀀텀이 끝나기 전에 실행을 완료할 수 있는 프로세스가 타임 퀀텀이 짧아지게 되면서 다음에 다시 CPU를 할당받을 때까지 기다려야 하는 이슈가 발생하여 CPU의 활용도가 낮아져 시스템 성능 저하의 문제가 발생할 수 있습니다.

만약 타임 퀀텀이 적정값보다 클 경우 다음의 문제가 발생할 수 있습니다.

  1. 응답성 저하
    각 프로세스가 오랜 시간동안 CPU를 보유하게 되어 응답성이 떨어지게 됩니다.
  2. 대기 시간 증가
    작업 시작과 결과 확인 사이의 대기 시간이 늘어나 시스템이 크게 지연되어 사용성이 저하됩니다.
  3. 리소스 낭비
    프로세스에 과도한 시간이 주어지면 작업을 완료했거나 외부 이벤트를 기다리고 있는 경우에도 CPU 자원을 사용하게 되어 리소스 낭비 문제가 발생합니다.
  4. 멀티태스킹 성능 하락
    프로세스 간 컨텍스트 스위칭 빈도가 줄어들어 운영체제가 프로세스의 우선순위를 지정하고 효과적으로 관리하기 어려워집니다.
  5. 실행 제약
    즉각적인 실행 또는 주기적인 실행을 요구하는 작업들의 경우 원하는 시간 범위 내에서 충분한 CPU 시간을 할당받지 못하게 됩니다.

헷갈릴 수 있는 개념을 하나 잡고자 합니다. 바로 응답 시간과 대기 시간인데요, 응답 시간의 경우 요청을 받은 후 해당 요청에 대한 응답을 완료하는데 걸리는 시간으로 시스템의 성능과 효율성을 평가하는데 사용됩니다. 반면 대기 시간의 경우 사용자가 시스템이나 서비스를 사용하기 위해 기다려야 하는 시간으로 사용자의 만족도와 서비스 품질을 평가하는데 사용됩니다.

profile
저는 상황에 맞는 최적의 솔루션을 깊고 정확한 개념의 이해를 통한 다양한 방식으로 해결해오면서 지난 3년 동안 신규 서비스를 20만 회원 서비스로 성장시킨 Software Developer 최민길입니다.

0개의 댓글