CPU 스케줄링

  • 운영체제가 프로세스들에게 공정하고 합리적으로 CPU 자원을 배분하는 것
  • 컴퓨터 전체 성능과도 직결되는 중요한 문제

  • CPU를 그저 차례대로 돌아가며 사용하는 것 보다 각각의 상황과 요구에 맞게 배분하는 것이 더 효율적
  • 그러므로 프로세스 우선 순위에 따라 실행됨 
  • 프로세스 우선순위는 사용자가 직접 설정할 수도 있고 운영체제가 내부적으로 정해준 우선 순위가 있기도 함

 

 

 

프로세스  우선순위(priority)


  • 입출력 작업이 많은 프로세스(=입출력 집중 프로세스)의 우선순위는
    CPU 작업이 많은 프로세스(=CPU 집중 프로세스)의 우선순위보다 높음 
    • 프로세스마다 비디오 재생, 디스크 백업과 같이 입출력작업을 많이 하는 프로세스도 있고,
      컴파일 작업이나 복잡한 수학 연산과 같이 CPU를 주로 사용하는 프로세스도 있음 
    • 입출력작업이 많은 프로세스는 CPU 집중 프로세스보다 대기 상태에 많이 머무르게 됨
    • 그렇기 때문에 입출력 집중 프로세스를 빨리 처리해버리고, CPU 집중 프로세스에게 CPU를 더 많이 할당 

 

  • 프로세스 우선순위는 PCB에 저장됨 
  • 프로세스 우선순위가 높은 프로세스는 더 빨리 더 자주 실행됨
  • 프로세스 우선순위는 간단한 명령어(우측 위)나 프로그램(아래)을 통해 확인할 수 있음 

window - 프로세스 익스플로러에서 Priority 확인

 

 

 

스케줄링 큐(Scheduling Queue)


  • PCB 마다 우선순위가 적혀있지만, 운영체제 입장에서는 다음에 CPU를 사용할 프로세스를 선정하기 위해 일일히 PCB 값을 찾아보는 건 비효율적임
  • 이는 CPU뿐만 아니라 입출력장치나 메모리도 해당되는 이야기

  • 그래서 특정 자원을 이용하고 싶어하는 프로세스들을 큐에 삽입한 뒤, 줄을 세워서 자원을 이용하도록 만듦
  • 원래 Queue는 자료구조 관점에서는 선입선출(FIFO) 구조이지만, 스케줄링Q에서 이야기하는 Q는 반드시 선입선출일 필요는 없음! 즉, 먼저 삽입되었다고 해서 먼저 처리되는 것이 아닌 우선순위에 따라 처리됨

 

 

 

준비큐와 대기큐

  • 스케줄링 큐에 여러 종류가 있지만, 대표적으로 대기큐와 준비큐가 있음
    • 준비큐 : CPU를 이용하고자 하는 프로세스들이 기다리는 줄
    • 대기큐 : 입출력장치를 이용하고 싶은 프로세스들이 기다리는 줄 

 

 

 

  • 대기큐는 보통 입출력장치별로 있는 경우가 많음
  • 그래서 같은 장치를 요구한 프로세스들은 같은 큐에서 대기함
  • 예를 들어 PID 123번 하드 디스크 입출력 완료 인터럽트를 받으면, 하드디스크 대기 큐에서 PID 123번 PCB를 찾은 뒤 준비 큐로 이동시킴 

 

 

 

프로세스 상태 다이어그램

 

 

 


 

 

선점형과 비선점형 스케줄링


  • 어떤 프로세스가 실행 중인데, 갑자기 급하게 실행해야하는 프로세스가 나타나면 어떻게 관리할까?
    • 현재 CPU를 사용 중인 프로세스로부터 CPU 자원을 빼앗아 다른 프로세스에 할당
      OR
    • 현재 CPU를 사용 중인 프로세스의 작업이 끝날 때까지 프로세스 기다리기

 

 

선점형 스케줄링(Preemptive Scheduling)

  • 현재 CPU를 사용 중인 프로세스로부터 CPU 자원을 빼앗아 다른 프로세스에 할당
  • (+) 어느 한 프로세스의 자원 독점을 막고 프로세스들에게 골고루 자원을 배분할 수 있음
  • (-) 그만큼 문맥 교환 과정에서 오버헤드가 발생할 수 있음

  • 프로세스 상태 다이어그램에서
    실행 상태에 있던 프로세스가 타이머 인터럽트가 발생하면 준비상태로 바뀌는데,
    이런 것도 운영체제가 이 프로세스로부터 CPU 자원을 딱 뺏어서 다음 차례의 프로세스한테 CPU 자원을 넘겨주는 것이므로 이것도 선점형 스케줄링임 

프로세스 상태 다이어그램

 

 

 

비선점형 스케줄링(Non-preemptive Scheduling)

  • 현재 CPU를 사용 중인 프로세스의 작업이 끝날 때까지 프로세스 기다리기
  • 작업이 대기 상태나 종료 상태로 바뀌기 전까지는 다른 프로세스가 끼어들 수 없는 방식
  • (+) 선점형 스케줄링에 비해 문맥 교환에서 발생하는 오버헤드가 적다
  • (-) 모든 프로세스가 골고루 자원을 이용하기 어렵다

 

 


 

스케줄링 알고리즘


스케줄링 알고리즘은 굉장히 다양하고, 운영체제마다 다름. 

스케줄링 알고리즘을 있는 그대로 외우기 보단,

알고리즘의 아이디어(작동 방식, 장단점)에 집중하기

 

 

 

 

목차

  1. 선입 선처리 스케줄링
  2. 최단 작업 우선 스케줄링
  3. 라운드 로빈 스케줄링
  4. 최소 잔여 시간 우선 스케줄링
  5. 우선순위 스케줄링
  6. 다단계 큐 스케줄링
  7. 다단계 피드백 큐 스케줄링

 

 

 

1. 선입 선처리 스케줄링

= FCFS(First Come First Served) 스케줄링

  • 단순히 준비 큐에 삽입된 순서대로 처리하는 비선점 스케줄링
  • 먼저 CPU를 요청한 프로세스부터 CPU 할당
  • 단점 : 호위 효과
    프로세스들이 기다리는 시간이 매우 길어질 수 있음 

 

호위 효과의 예시

  • 위 사진과 같이 가장 먼저 실행되는 프로세스의 길이가 가장 길면, 뒤에 있는 프로세스들의 대기 시간이 증가해 전체적인 평균 대기 시간이 길어짐. 

 

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

= SJF (Shortest Job First) 스케줄링

  • 호위 효과를 방지하기 위해 CPU 사용이 긴 프로세스는 나중에 실행, CPU 사용 시간이 짧은 프로세스는 먼저 실행
  • 즉, CPU 사용 시간이 가장 짧은 프로세스부터 처리하는 스케줄링 방식 
  • 선점형 또는 비선점형으로 구현할 수 있지만, 기본적으로는 비선점형 스케줄링으로 분류됨 
  • 선점형으로 구현된 최단 작업 우선 스케줄링은 최소 잔여 우선 스케줄링 참고

 


3. 라운드 로빈 스케줄링

= RR(Round Robin) 스케줄링

  • 라운드로빈 : 차례대로 돌아가면서 무언가 하는 것
  • 선입 선처리 스케줄링 + 타임 슬라이스(time slice)
    • 타임 슬라이스 : 각 프로세스가 CPU를 사용할 수 있는 정해진 시간
  • 정해진 타임 슬라이스만큼의 시간 동안 돌아가며 CPU를 이용하는 선점형 스케줄링
    • 일단 큐에 삽입된 순서대로 프로세스들을 처리하되 정해진 시간만큼만 CPU를 쓰도록 하는 방식 
    • 정해진 시간을 모두 사용하였음에도 아직 프로세스가 완료되지 않았다면 다시 큐의 맨 뒤에 삽입(문맥 교환)
  • 타임 슬라이스가 중요함
    • 타임 슬라이스가 너무 크면, 호위 효과 발생
    • 타임 슬라이스 크기가 너무 작으면 문맥 교환에 발생하는 오버헤드 때문에 CPU 부담 증가 

 


 

4. 최소 잔여 시간 우선 스케줄링

= SRT (Shortest Remaining Time) 스케줄링

  • 최단 작업 우선 스케줄링 + 라운드 로빈 스케줄링
    • 최단 작업 우선 스케줄링 : 작업 시간이 짧은 프로세스부터 처리하는 스케줄링 알고리즘
    • 라운드 로빈 스케줄링 : 정해진 타임 슬라이스만큼 돌아가며 사용하는 스케줄링 알고리즘
  • 정해진 시간만큼 CPU를 이용하되, 다음으로 CPU를 사용할 프로세스로는 남은 작업 시간이 가장 적은 프로세스 선택

 


 

5. 우선순위 스케줄링

  • 프로세스들에 우선순위를 부여하고, 우선 순위가 높은 프로세스부터 실행
  • 우선순위가 같은 프로세스들은 선입 선처리로 스케줄링
  • 최단 작업 우선 스케줄링, 최소 잔여 시간 스케줄링 모두 넓은 의미에서 우선 순위 스케줄링에 속한다고 볼 수 있음

 

기아 현상 (Starvation)

  • 우선순위 스케줄링의 근본적인 문제점
  • 우선순위 높은 프로세스만 계속 실행됨
  • 우선순위 낮은 프로세스는 준비큐에 먼저 삽입되더라도 실행이 계속 연기됨 

 

 

 

 

 

에이징 기법(aging)

  • 기아 현상을 방지하기 위한 기법
  • 오랫동안 대기한 프로세스의 우선순위를 점차 높이는 방식
  • 대기 중인 프로세스의 우선 순위를 마치 나이 먹듯 점차 증가시키는 방법
    • 우선순위가 낮아도 언젠가는 우선순위가 높아짐


 

6. 다단계 큐 스케줄링

= Multilevel queue 스케줄링

  • 우선순위 스케줄링의 발전된 형태
  • 우선순위별로 준비 큐를 여러개 사용하는 스케줄링 방식
    • 우선순위가 가장 높은 큐에 있는 프로세스를 먼저 처리
    • 우선순위가 가장 높은 큐가 비어 있으면 그 다음 우선순위 큐에 있는 프로세스 처리
    • 우선순위 0번이 가장 우선순위가 높으면 0번 먼저 다 처리하고 그 다음 우선순위1번 처리하는 방식 
  • 큐를 여러개 둠으로써 프로세스 유형별로 우선순위를 구분하는 것이 쉬워짐
    • 어떤 큐에는 입출력 집중 프로세스 삽입, 어떤 큐에는 CPU 집중 프로세스 삽입
    • 어떤 큐는 타임 슬라이스를 적게 지정, 어떤 큐는 크게 지정
    • 어떤 큐는 선입 선처리 방식 스케줄링, 어떤 큐에는 라운드로빈 스케줄링 적용 등
    • 큐 별로 스케줄링을 달리 적용해서 프로세스를 유형별로 관리하기 쉬워짐
  • 단점 : 기아 현상
    • 다단계 큐 스케줄링은 큐 간에 프로세스 이동이 불가능함
    • 그래서 우선순위가 낮은 프로세스는 계속 낮은 큐에 머물러 기아 현상 발생 

 

 

 


 

7. 다단계 피드백 큐 스케줄링

= Multilevel feedback queue 스케줄링

  • 다단계 큐 스케줄링의 발전된 형태
  • 큐 간의 이동이 가능한 다단계 큐 스케줄링

 

 

동작 방식

  1. 새롭게 준비 상태가 된 프로세스를 일단 가장 높은 우선순위에 삽입
  2. 일정 시간(타임 슬라이스)만큼 CPU를 할당 받아서 사용
  3. 실행이 끝났다면 끝. 하지만 실행이 끝나지 않았다면 그땐 한 칸 낮은 우선순위 큐로 이동 (0 → 1)
  4. 또 실행이 안끝났으면 한 칸 낮은 우선순위로 또 이동
  5. 실행이 끝날 때까지 반복 

 

  • 이 과정에서 자연스럽게
    CPU 집중 프로세스의 우선순위는 상대적으로 낮아지고 (실행에 오랜 시간이 걸리므로), 
    입출력 집중 프로세스의 우선순위는 상대적으로 높아짐 

 

 

 

 

다단계 피드백 큐에서의 에이징 기법  적용

  • CPU를 엄청 많이 사용하는 프로세스의 경우 우선순위가 낮아져 실행되지 못할 수 있음
  • 그러므로 일정 시간 이상 낮은 우선순위 큐에서 기다렸던 프로세스가 있다면 이 프로세스의 우선순위를 점차 높임으로써 에이징 기법을 적용함 

 

 

다단계 피드백 큐 스케줄링 정리

  • 어떤 프로세스의 CPU 시간이 길면 우선순위가 낮아지고,
    어떤 프로세스가 낮은 우선 순위 큐에서 너무 오래 기다리면 우선 순위를 높이는 방식
  • CPU 스케줄링 방식의 가장 일반적인 형태

 

 

 

 

 

출처 : 혼자 공부하는 컴퓨터구조 + 운영체제 (저자 강민철)