CPU 스케쥴링

목적: OS가 CPU를 쉬지 않고 일을 계속 시키기 위해 프로세스들을 스케쥴링한다.

  • burst : 일을 진행하는 상태. I/O burst(입출력을 처리하는 상태)와 CPU burst(원래 프로세스를 처리하는 상태)


CPU 스케쥴러

  • 메모리에 있는 프로세스들 중에 실행할 준비가 되어있는 ready 상태의 프로세스를 선택하고, 그 프로세스에 CPU를 할당
  • 스케쥴러가 결정하게 되는 상황
  1. 한 프로세스가 실행 상태에서 대기 상태로 전환될 때
    • 입출력 요청이나 자식 프로세스가 실행되어 부모가 wait할 때
    • 선점형/협조적 스케쥴링
  2. 프로세스가 실행 상태에서 준비 완료 상태로 전환될 때
    • 인터럽트가 발생했을 때
    • 비선점형/비협조적 스케쥴링 (경쟁)
  3. 프로세스가 대기 상태에서 준비 완료 상태로 전환될 때
    • 입출력 종료 시
    • 선점형
  4. 프로세스가 종료될 때
    • 선점형

디스패쳐

  • CPU 제어를 단기 스케쥴러가 선택한 프로세스한테 전해주는 모듈
  • 디스패쳐가 하는 일
    1. context switch
    1. 사용자 모드로 전환
    2. 프로그램을 다시 시작하기 위해 사용자 프로그램의 적절한 위치로 이동
  • 디스패치 지연
    하나의 프로세스를 중지하고 다른 프로세스를 실행시킬 때까지 소요되는 시간
    최소화해야 함

CPU 스케쥴링에 고려되는 기준

⬆️클수록 더 고려됨/⬇️작을수록 더 고려됨

  1. CPU 이용률 ⬆️
  • 최대한 CPU를 바쁘게 사용해야 하기 때문에
  1. 처리량 ⬆️
  • 단위 시간 당 완료된 프로세스의 개수 (최대한 많은 프로세스를 하고자 할 때?)
  1. 총 처리 시간 ⬇️
  • 프로세스의 제출 시간과 완료 시간의 간격
  1. 대기 시간 ⬇️
  • 준비 완료 큐에서 대기하면서 보낸 시간의 합
  1. 응답 시간 ⬇️
  • 하나의 요구를 제출한 후 첫 번째 응답이 발생할 때까지의 시간

스케쥴링 알고리즘

1. 선입 선처리 스케쥴링

  • CPU를 먼저 요청하는 프로세스가 먼저 CPU를 할당 받는다

  • FIFO구조인 큐로 관리한다

  • 프로세스의 순서에 따라 성능의 차이가 많이 난다 (운!)

2. 최단 작업 우선 스케쥴링

  • 프로세스들을 수행하는 데에 드는 시간(CPU Burst)이 가장 짧은 순으로 스케쥴링한다
  • 처리해야할 프로세스를 한 번에 다 알지 못해서 예측이 어렵다

  • 선점형인 경우
    각 프로세스가 도착했을 때 기존 프로세스와 새로 들어온 프로세스 중 남은 시간이 가장 짧은 프로세스에 CPU가 할당됨
    새로 프로세스가 도착하지 않는 경우 남은 프로세스 중에서 선택
  • 비선점형인 경우 (한 번 CPU를 할당받으면 작업이 끝날때까지 프로세스가 전환되지 않는다)
    CPU의 작업이 끝난 시점에 가장 소요 시간이 짧은 프로세스가 CPU를 할당받는다

3. 우선 순위 스케쥴링

  • 우선순위가 높은 프로세스를 먼저 CPU에 할당한다
  • 우선순위에 따라 스케쥴링할 수 있는 장점이 있지만
    중간에 우선순위가 높은 프로세스가 들어오면 우선순위가 밀릴 수 있다(기아상태)
    기아상태를 방지하기 위해 프로세스의 대기 시간이 일정 시간을 지나면 우선순위를 올려주는 등의 조치를 취한다 (Aging)

4. 라운드 로빈 스케쥴링

  • 시간 할당량의 단위로 시간을 정의해서 프로세스를 나누는 방식
  • 한 번에 한 프로세스에게 시간 할당량만큼의 CPU를 할당한다
  • 시간 할당량에 따라서도 성능이 달라진다
  • 적절한 할당량을 정해야함

5. 다단계 큐 스케쥴링

  • 프로세스 타입에 따라 몇 개의 큐로 나눠 프로세스를 분류
    포그라운드(대화형), 백그라운드(일괄처리)
  • 큐 별로 별도의 스케쥴링 알고리즘을 가짐
    예) 포그라운드 - RR / 백그라운드 - FCFS
  • 각 큐는 낮은 우선순위의 큐보다 절대적인 우선순위를 갖는다
    우선순위가 높은 큐가 비어야 하위 큐의 프로세스가 실행됨
  • 각 큐는 일정 비율로 지정하여 CPU 시간을 나누어 사용한다

6. 피드백 큐 스케쥴링

  • 프로세스가 큐들 사이를 이동하는 것을 허용함
  • 프로세스를 CPU 버스터 성격에 따라 구분
  • Aging
  • 구현이 어렵다
  • 파라미터
profile
안녕하세요. Chat JooPT입니다.

0개의 댓글