본문 바로가기

학부 수업/운영체제

Chapter04

1. 스케줄링의 단계

- 스케줄링 : 여러 프로세스들이 번갈아 사용해야 하는 자원이 있을 경우, 주어진 시점에서 어떤 프로세스가 이 자원을 사용할 수 있도록 해줄 것인가를 결정하는 것

- 스케줄링이 요구되는 시점을 기준으로 장기, 중기, 단기 스케줄링 세 가지로 나뉜다.

- 장기 스케줄링(작업 스케줄링) : 어느 작업을 커널에 등록시켜 프로세스를 만들어 줄 것인가를 결정하는 것. 요청된 일을 프로세스로 만들어 시스템에 알려진 일거리로 추가하느냐를 결정하는 것으로 다중 프로그래밍의 정도를 조절하는 역할, 대부분 FIFO방식

- 중기 스케줄링 : 보류 상태의 프로세스들 중에서 어느 프로세스에게 메모리를 할당해 줄 것인가를 결정

- 단기 스케줄링 : 준비 상태에 있는 프로세스들 중에서 어드 프로세스에게 CPU를 할당할지를 결정하는 것

 

2. 스케줄링의 목적과 기준

- 스케줄링의 목적 : CPU를 할당받을 프로세스를 잘 골라 실행시켜줌으로써 전체적으로 시스템의 성능을 높이자는 것

- 어떤 것들이 성능을 평가하는 기준인가에 따라 

  1. 사용자의 관점
    • 응답 시간 : 대화형 시스템에서 프로세스의 요청에 대해 시스템이 최초로 출력을 내주기 시작할 때까지 걸린 시간, 직접적으로 시스템의 성능을 느낄 수 있는 지표
    • 반환 시간 : 일괄 처리의 경우 요청으로부터 결과를 돌려받는 데까지 걸린 시간
    • 예측가능성 : 요청한 일이 얼마 후 쯤에는 완료할 수 있을 것이라는 예측
  2. 시스템의 관점
    • 처리량 : 단위 시간에 완료되어진 프로세스의 개수
    • 활용도 : 주어진 시간동안 특정 자원이 실제로 가동된 시간의 비율로 계산한 지표
  3. 기타사항
    • 공평성 : CPU사용 시간을 공평하게 나누어 주었는지 여부
    • 특정 프로세스가 장시간 CPU를 받지 못하는 경우는 최대한 피하도록 한다.
    • 시스템에 있는 여러 자원들을 가급적 균형있게 사용하도록 한다.

- 스케줄링 정책을 만들 때 고려해야 할 기준들

  1. 연산 위주(CPU-bound) 프로세스와 입출력 위주(I/O-bound) 프로세스 중, 어떤 종류의 프로세스를 더 우대할 지를 고려
  2. 시스템이 사용될 환경에 따라 응답 시간을 우선으로 할 지, 처리량을 우선할지 고려
  3. 특정 프로세스에게 우선적으로 빠른 응답시간을 보장해야 하는 경우가 있다면 이를 가능케 하는 기능 제공
  4. 프로세스의 크고 작음에 따라 어떤 것을 우선적으로 처리할 지의 기준을 가지고 있어야 한다.

3. 스케줄링 기법들

- 스케줄링이 가동되어야 할 시점들

  1. 프로세스가 실행상태에서 대기 상태로 전환될 때. 대표적인 예가 입출력 요청 시 - 비선점
  2. 프로세스가 실행 상태에서 준비 상태로 전환될 때. 시간 종료와 같은 인터럽트 발생 시 - 선점
  3. 프로세스가 대기 상태에서 준비 상태로 전환될 때. 예를 들어, 입출력의 종료 시 - 선점
  4. 프로세스가 수행을 마치고 종료될 때 - 비선점

 

 

- 스케줄링 기법 분류

  1. 비선점 스케줄링 : 한 프로세스가 CPU를 할당 받았을 때 CPU를 스스로 반납할 때까지 계속 사용하도록 허용하는 방법
  2. 선점 스케줄링 : CPU를 할당 받아 실행 중인 프로세스로부터 CPU를 선점하여(빼앗아) 다른 프로세스에게 할당할 수 있는 방식

 

 

- FCFS(First Come Fisrt Service) 스케줄링

  • 준비 큐에 먼저 도착한 프로세스에게 먼저 CPU를 할당해주며, CPU를 할당받은 프로세스는 스스로 CPU를 반납할 때까지 CPU를 독점하여 사용하는 비선점 방식
  • 프로세스가 CPU를 독점하여 사용하기 때문에 아주 긴 프로세스가 실행될 경우 뒤에 있는 프로세스들은 오래 기다려야 하므로 대화식 시스템에 적합하지 않으며, 평균 응답 시간이 길어지는 단점이 있다.
  • 반면에 준비 상태 프로세스들의 개수와 크기를 짐작할 수 있다면 각각의 프로세스들이 언제쯤이면 실행될 수 있을지를 예측할 수 있고, 도착 순서만이 실행 순서를 결정짓는다는 관점에서 공평하다고 할 수 있다.
  • 평균 응답 시간이 짧다고 모든 프로세스의 응답 시간이 짧아진다는 것은 아니지만 보편적으로 그럴 확률을 높일 수 있다

 

 

- SPN(Shortest Process Next) 스케줄링

  • 준비 큐에서 기다리고 있는 프로세스 중에서 가장 짧은 것을 먼저 실행시켜 주는 비선점 방식
  • 평균 응답 시간을 최소화할 수있지만 실행 시간이 긴 프로세스가 CPU를 할당 받지 못하고 계속해서 대기하는 무한 대기 현상이 발생할 수 있다.
  • FCFS와 비교했을 때 전체적으로 빠른 응답시간을 기대할 수 있으나, 긴 프로세스일수록 그 편차가 커져 예측가능성은 오히려 떨어질 것이다.
  • 에이징 : 무한대기 가능성을 낮추는 방법, 기다린 시간만큼 우선순위를 높이는 것
  • 각 프로세스들의 크기를 실행 전에는 정확히 알 수 없음에도 그 크기를 가지고 스케줄링 해야한다.
  • 지수 평균 : 프로세스의 크기를 실행 전에 추정해보는 방법

 

 

- SRT(Shortest Remaining Time) 스케줄링

  • SPN을 선점 방식으로 운영하는 것
  • 새로 도착하는 프로세스의 실행 시간 크기는 완료까지 남은 시간과 같으며, CPU를 할당받아 실행된 양만큼 완료까지 남은 시간은 줄어들게 될 것이다.
  • 준비큐에서 완료까지 남은 CPU요구량이 가장 짧은 것을 먼저 실행시켜주는 방식이며, 실행 도중 남은 실행 시간이 더 적은 프로세스가 준비 큐에 들어올 경우 현재 실행중인 것을 중단하고 새 프로세스에게 CPU를 할당하는 선점 방식이다.
  • 잦은 선점으로 인한 문맥교환의 부담이 있다.
  • 반환 시간을 놓고 따져보면 SRT가 SPN보다 우수함
  • Future-knowlege 스케줄링 : 처음 1초동안 CPU를 쉬게 하여 처음 1초 동안 미래를 알 수 있다면

 

 

- HRRN(Highest Response Ratio Next) 스케줄링

  • SPN과 SRT방식의 약점인 수행 시간이 긴 프로세스의 무한 대기 현상을 방지하기 위한 기법.
  • 준비 큐에 있는 프로세스들 중에서 응답률이 가장 높은 프로세스에게 높은 우선순위를 주며, 비선점식 방식이다.
  • 응답률이란 프로세스의 크기 즉, CPU요구량에 대한 대기 시간의 비율로 다음과 같이 계산된다.

우선순위=응답률

 

 

  • 이 기법을 사용하면 프로세스가 기다리는 시간이 길어질수록 우선순위가 높아지므로 수행 시간이 긴 프로세스도 머지않아 CPU를 할당받을 수 있게된다.
  • CPU 요구량이 분모에 있어큰 프로세스일수록 우선순위가 낮으므로 평균 응답 시간을 단축할 수 있다.
  • 실행되지 못하고 기다리는 동안 대기 시간은 계속 증가할 것이므로 스케줄링을 할 때마다 준비 큐의 모든 프로세스들에 대해 응답률을 계산하여 CPU를 줄 프로세스를 선정하고, 선택된 프로세스는 자발적으로 CPU를 내놓지 않는 한 실행을 계속할 수 있다.

 

 

- 라운드 로빈(Round-Robin) 스케줄링

  • FCFS 스케줄링을 기반으로 하여 CPU를 할당하되 각 프로세스는 한 번에 쓸 수 있는 CPU 시간 크기 즉, 시간 할당량이 지나면 시간 종료 인터럽트에 의해 CXU를 뺏기게 되는 선점 방식이다.
  • CPU를 반환한 프로세스는 다시 준비 큐의 끝에 들어가게 되고, 준비 큐의 맨 앞에 있는 프로세스가 CPU를 할당받게 된다.
  • 이 기법은 FCFS 기법에서처럼 한 프로세스가 CPU를 독점하는 단점을 방지할 수 있다.
  • CPU의 선점에 따른 문맥교환의 오버헤드를 감수해야 한다.
  • 대화식 시스템, 시분할 시스템에 적합한 방식
  • 시간 할당량이 매우 크면 FCFS스케줄링 방식과 시스템이 성능이 같고 작을수록 문맥교환이 자주 발생해 문맥교환의 오버헤드가 커진다.

 

<가상 라운드 로빈>

  • 연산 위주의 프로세스가 입출력 위주의 프로세스보다 CPU사용에 있어 우대받게 되기 때문에 이를 보완하기 위해 입출력을 마친 프로세스가 들어가는 준비 큐를 따로 하나 두고 우선순위는 더 높게 하되, 이 큐에서 CPU를 받을 때는 이전 입출력이 발생했을 때 쓰지 못하고 남긴 시간 할당량만큼만 준다.
  • 물론 시간 할당량을 다 사용한 프로세스는 시간 종료 인터럽트와 함께 원래의 즌비 큐로 들어가도록 하므로 우선순위가 다른 준비 큐가 두 개 있는 경우이다.

 

 

- 다단계 큐(Multi-leve Queue) 스케줄링

  • 정적 우선순위를 사용하는 스케줄링을 구현
  • 같은 우선순위 값을 가지는 프로세스들을 위해 큐가 필요함과 동시에 서로 다른 우선순위의 프로세스들을 구별하고 관리하기 위해 우선순위의 개수만큼 큐가 필요하다.
  • 프로세스들은 자신의 우선순위 값에 해당하는 큐에 들어가게 되며, 우선순위가 낮은 하위 단계 큐의 작업은 실행 중이더라도 상위 단계 큐에 프로세스가 도착하면 CPU를 뺏기는 선점 방식이다.
  • 정적 우선순위이므로 큐들 간에 프로세스의 이동이 불가능함은 당연하다.

 

 

- 다단계 피드백 큐(Multi-level Feedback Queue, MFQ) 스케줄링

  • 짧은 프로세스들에게 유리하면서 입출력 프로세스를 우대할 수 있는 스케줄링 기법
  • 입출력 프로세스를 우대함으로써 CPU를 포함한 전체 자원들의 활용도를 높여 시스템의 성능을 높일 수 있다.
  • 동적 우선순위 기반의 선점 방식
  • 여러 단계의 큐가 있으며 각 단계마다 서로 다른 CPU 시간 할당량을 가지도록 하는데, 우선순위가 높은 단계의 큐일수록 시간 할당량은 작도록 한다.
  • 새로운 프로세스는 최상위 단계의 준비 큐에 들어간 후 FCFS의 순서로 CPU를 할당받아 실행되다가 그 큐의 시간 할당량이 끝나면 한 단계 아래의 준비 큐에 들어감으로써 결과적으로 우선순위가 한 단계 낮아지게 된다.
  • 각 단계에서도 그 단계 큐의 시간 할당량을 다 사용할 때까지 계속 실행된다면 다음 단계의 큐로 들어가게 되며, 마지막 단계에서는 더 내려갈 단계가 없으므로 라운드 로빈 방식으로 실행될 것이다. 
  • 어느 단계든 시간 할당량이 끝나기 전에 입출력응로 CPU를 내놓게 되면 다시 준비 상태가 되었을 때 한 단계 위의 큐에 들어가도록 함으로써 우선순위를 높여준다.
  • 중간 단계의 맨 앞에 있는 프로세스는 상위 단계의 큐들이 비어있는 경우에만 CPU를 받을 수 있고, 할당된 CPU는 시간 종료 인터럽트에 의해 선점되나 입출력이 발생하지 않는 한 그 큐의 시간 할당량까지 쓸 수 있다.
  • 다단계 큐와 차이점 : 중간 단계의 큐에서 일단 CPU를 받은 프로세스는 실행 중 상위 단계의 프로세스에 의해 선점되지 않고 부여받은 시간 할당량까지는 보장된다.
  • 상대적으로 짧은 프로세스들이 하위 큐까지 내려가지 않도록 함으로써 비교적 높은 우선순위를 유지할 수 있도록 해주며, 입출력은 우선 순위의 상향조정으로 이어져 입출력 위주 프로세스들이 선호됨을 알 수 있다.
  • 프로세스의 성격에 맞도록 우선순위를 조정해 줌으로써 적응성이 있는 스케줄링이 가능

 

 

- Fair-share 스케줄링

  • 지금까지 본 기법들은 스케줄링의 대상이 되는 모든 프로세스들을 하나의 그룹으로 취급했다.
  • 그룹별로 일정량의 CPU시간을 할애했을 때, 특정 그룹에 속한 프로세스의 과도한 CPU사용은 그 그룹 내의 다른 프로세스들에게만 불이익을 줄 뿐, 다른 그룹으로까지 파급되지 않도록 하겠다는 것

 

 

 

4. 실시간 스케줄링

  • 경성 실시간 시스템 : 작업이 마감시한 내에 완료되지 않으면 시스템이 중지되는 치명적인 결과 초래(일반적인 실시간이라는 의미)
  • 연성 실시간 시스템 : 작업이 마감시한 내에 종료되지 않으면 데이터의 손실 등 피해가 발생하지만 시스템은 계속해서 운영 가능한 시스템

 

<실시간 시스템에서 마감시한 내에 모든 프로세스들이 완료되도록 하는 방법>

  • 정적인 방법 : 프로세스들의 특징과 개수를 알 수 있는 경우에 유용
  • 동적인 방법 : 프로세스의 생성 시간이나 특성을 알 수 없는 경우에 사용된다.

 

- RM

  • 정적 스케줄링 방식으로 크기와 개수가 알려진 프로세스들이 각자 주기적으로 발생되는 환경에서 사용된다.
  • 프로세스들은 서로 독립적이고 주기적으로 수행되는 환경에서 각 프로세스의 마감시한으 각자의 주기와 같다고 가정하고 주기가 짧을수록 높은 우선순위를 받게 된다. 
  • 낮은 우선순위의 프로세스가 더 높은 우선순위의 프로세스가 도착할 경우 CPU를 빽시게 되는 선점 방식이며, 정적 환경에서 최적의 기법으로 알려져 있다.
  • 스케줄링 비용이 적게 드는 대신, 새로운 프로세스가 추가되는 환경에 바로 적응하지 못하고 이 프로세스를 추가하여 전체 스케줄링을 다시 해야 하는 단점이 있다.

 

 

- EDF

  • 프로세스의 마감시한이 가까울수록 우선순위를 높게 부여하는 선점 방식의 동적 스케줄링
  • 우선순위에 의해 실행 중 CPU를 뺏길 수 있으며, 한 프로세스의 실행이 완료될 경우에는 마감 시한이 가장 가까운 것을 찾아 스케줄한다.
  • 모든 프로세스가 주기적일 필요는 없으며 주기가 있을 경우에는 마감시한을 주기로, 그렇지 않을 경우는 마감시한이 알려져야 한다.
  • 새로운 프로세스의 동적인 수용이 허용되나, 그럴 때마다 가능한 스케줄을 찾기 위한 계산을 해야 하는 부담이 있다.
  • RM과 EDF모두 프로세스들이 상호 독립적이라는 가정을 하고 있기 때문에 공유 데이터를 통한 프로세스 간의 통신이 있는 경우에는 적용할 수 없다.

 

 

5. 윈도에서의 스케줄링

  • 윈도는 스레드 단위로 CPU를 할당하는 우선순위에 의한 선점 스케줄링 방식이다.
  • 두 개의 클래스로 구분하여 우선순위 16부터 31은 실시간 클래스를 위해, 0부터 15는 일반 클래스를 위해 배정한다.
  • 실시간 클래스에 속하는 16개의 큐는 정적 우선순위로 운영되므로 다단계 큐로, 일반 클래스의 16개 큐는 동적 우선순위를 위해 위에서 배운 MFQ로 구현된다.
  • 실시간 클래스의 다단계 큐 각각은 라운드 로빈 방식으로 스케줄링 되고 현재 실행 중인 스레드 보다 우선순위가 높은 스레드가 준비 상태가 되면 CPU가 선점된다.

'학부 수업 > 운영체제' 카테고리의 다른 글

Chapter05  (0) 2022.04.14
Chapter03  (0) 2022.03.23
Chapter02  (0) 2022.03.21
Chapter01  (0) 2022.03.20