시작은 미미하나 끝은 쥬쥬하리라.

Study/Windows System Programming

[Window System Programming] Chapter 09. 스케쥴링 알고리즘과 우선순위

코딩뚜벅이 2024. 1. 20. 17:05

2-9 스케쥴링 알고리즘과 우선순위

  • 프로세스 스케쥴러
  • 스케쥴링 알고리즘
  • 프로세스 스케쥴러의 동작 시점

프로세스 스케쥴러

스케쥴러

일반 OS와 리얼타임 OS를 결정짓는 역할

-> 스케줄러의 동작 방식에 따라 일반 OS가 되기도, 리얼타임 OS가 되기도 함

 

리얼타임 OS : 실시간으로 동작을 처리하며 응답성이 좋은 OS

-> A라는 프로그램을 리얼타임 OS와 일반 OS가 동시에 실행한 경우, 리얼타임 OS가 더 빠르게 처리

-> 최종적으로 동작 처리를 마무리하고 실행하는 것은 CPU 성능에 의존적(리얼타임 OS가 무조건적으로 빠르진 않음)

 

타임 슬라이스

프로세스는 클럭을 기준으로 동작하고, 이 클럭이 모여서 타임 슬라이스를 형성

-> 프로세스에게 할당된 러닝 시간의 기준을 의미

ex) 타임 슬라이스가 3클럭으로 정해진 프로세스는 3클럭의 시간만 동작 후 Ready 상태로 전환, 다른 프로세스가 Running

 

선점형 OS, 비선점형 OS

프로세스의 선점을 허용하는지의 여부를 기준으로 구분

 

선점형 OS : 프로세스의 타임 슬라이스가 끝나면 다음 프로세스가 자동적으로 실행

-> 우선순위를 고려해서 동작하던 프로세스를 스케쥴러가 강제로 밀어냄

 

비선점형 OS : 사용자가 "특정 프로세스가 동작을 포기하겠다."는 코드를 명시하지 않으면 우선순위가 높은 프로세스라도 동작을 양보하지 않음

-> 코드를 명시하지 않으면 스케쥴러가 개입해서 프로세스를 밀어내지 않아 스케쥴러의 개입이 적음

 

RTOS

Soft RTOS : 일반적인 OS보다 하는 작업이 특화되어 있어 응답성이 좋은 RTOS

Hard RTOS : 응답성이 좋은 개념이 아닌, 데드라인이 있어서 해당 기간까지는 무조건 응답을 마무리하는 RTOS

ex) 자동차의 ABS 등 크리티컬한 상황을 마주할 수 있는 시스템에 들어가는 OS : Hard RTOS

->  RTOS의 디자인은 일반 OS보다 난이도가 높으며 전혀 다름 알고리즘과 스케쥴러를 통해 디자인

 

 


 

스케쥴링 알고리즘

라운드 로빈

동일한 우선순위의 프로세스들에게 평등하게 적용하는 방식

 

 

 

-> 같은 우선순위를 가진 큐 내부에서는 동등한 우선순위를 부여

-> 타임 슬라이스에 따라 돌아가면서 실행

-> 낮은 우선순위의 프로세스들이 그에 맞게 실행 시간이 차등 분배되는 것이 아닌 아예 Blocking 상태에 있음

-> 우선순위가 높은 상태의 프로세스라더라도 I/O 연산을 하기 때문에 높은 우선순위의 프로세스가 Blocking 상태에 들어가면 그 시간동안 낮은 우선순위의 프로세스가 동작

 

우선순위 기반 방식

우선순위가 높은 프로세스에게 특권을 부여하는 방식

 


 

프로세스 스케쥴러의 동작 시점

1. 매 타임 슬라이스마다 동작

하나의 타임 슬라이스가 마무리되면 다른 프로세스로 동작을 이동시켜주어야 함

-> 타임 슬라이스 사이에 컨텍스트 스위칭이 발생

-> 타임 슬라이스 도중에 컨텍스트 스위칭이 발생할 수 있는지는 디자인하기 나름

ex) 타임 슬라이스의 클럭이 짧아서 스케줄러가 자주 동작하는 경우

-> 굳이 타임 슬라이스 사이에 스케줄러의 동작을 허용하지 않아도 충분

ex) 타임 슬라이스의 클럭이 길어서 스케쥴러가 자주 동작하지 않는 경우

-> 상황에 따라서 타임 슬라이스 사이에 스케쥴러의 동작을 허용해야할 경우가 있을 수 있음

 

-> 기본적으로 스케쥴러의 동작이 적게 일어나면서 효율적인 프로세스 관리가 되는 것이 좋은 스케쥴러

 

2. 프로세스가 생성 및 소멸될 때마다 동작

생성 : 프로세스의 정보를 확인하고 해당 프로세스를 어떤 상태에 둘 것인가를 위해 스케쥴러가 동작

소멸 : 다른 프로세스를 동작시켜야하기 때문에 스케쥴러가 동작

 

3. 현재 실행 중인 프로세스가 블로킹 상태에 놓일때 마다 동작

현재 실행 중인 프로세스가 Blocking 상태에 들어가면 우선순위에 따라 다른 프로세스를 동작시키기 위해서 스케쥴러가 동작