[System Programming] 9장 스케줄링 알고리즘과 우선순위

프로세스의 스케줄링(Scheduling)

우리가 쉽게 접하는 대부분의 운영체제는 멀티 프로세스 기반 운영체제이다. 운영체제별로 제공되는 시스템 함수들은 조금씩 차이가 나지만, 결과적으로 둘 이상의 프로세스 생성을 위한 시스템 함수를 제공한다는 데 있어서는 일치한다.

프로세스란 실행되는 하나의 프로그램을 의미하는 것이고, 하나의 프로그램이 실행되기 위해서는 하나의 CPU가 필요하기 때문에 , 프로세스 수만큼 CPU가 존재할 수 있다면 가장 이상적일 것이다. 그러나 현실적으로 이는 불가능하며, 아직도 대부분의 개인용 컴퓨터에는 하나 정도의 CPU만 존재하고 있다.

실행 중인 모든 프로세스들에게 골고루 CPU를 할당하는 일이 필요한데, 이 일은 멀티 프로세스를 지원하는 운영체제에서 담당하는 일이다. 운영체제 일부분에 해당하는 스케줄러가 담당하는 일이다.

일반 OS 와 리얼타임 OS 의 차이점

RTOS 와 일반 OS 의 차이는 응답성(응답속도)에 있다. RTOS는 응답성이 Windows와 같은 일반 OS보다 좋다. 따라서 우리가 명령하는 일들을 신속히 처리한다.

하지만 오해하면 안된다.

RTOS는 일반 OS에 비해서 속도가 빠른 것이 아니다. 사용되는 목적이 구체적이고 제한적이다 보니, 보다 단순하게 디자인되어 있고 일반 OS에 비해서 훨씬 가볍다. 따라서 응답성이 좋을 뿐이다.

Sott RTOS vs Hard RTOS

ROTS는 일반 OS와 별반 차이가 없다. 다만 하는 일이 특화되다 보니 응답성이 일반 OS에 비해 좋은 것뿐이다.

이러한 RTOS를 가리켜 Soft RTOS라 한다.

우리가 접하는 대부분의 ROTS는 Soft RTOS이다.

그러나 전통적으로 말하는 RTOS 는 Hard RTOS를 의미한다.

HardRTOS에서 중요시 하는 것은 단순히 개선된 응답성이 아니라, __데드라인__이다.

데드라인은 정말로 시간에 크리티컬한 상황에서 발생한다. 예를 들어 자동차의 ABS 시스템은 시간에 크리티컬하다.

만약에 0.1초라라도 늦게 동작하면 이는 인명피해로 연결될 수 있다. 이처럼 데드라인이 중요한 시스템에서 이를 충족시킬 수 있는 능려을 지니는 RTOS를 가리켜 Hard RTOS라 란다.

선점형 OS 와 비선점형 OS

프로세스의 실행을 다른 프로세스로 넘기는 방식에 따라서 선점형 OS와 비선점형 OS를 구분한다.

비선점형 os 비선점형 OS는 현재 실행 중인 프로세스보다 높은 우선순위의 프로세스가 등장한다고 해서 실행의 대상을 바로 변경하지 않는다.

새로 등장한, 보다 높은 우선순위의 프로세스가 실행되기 위해서는 현재 실행 중인 프로세스가 명시적으로 CPU를 양보할 때까지, 혹은 I/O 작업 등으로 블로킹 상태에 놓일 때 까지 기다려야만 한다.

따라서 이러한 비선점형 OS의 경우에는 인터렉티브 한 프로그램 구현 시 프로그래머 의존도가 높아지는 문제점을 지닌다.

프로그래머는 자신이 개발한 프로그램이 주구장창 CPU를 독차지하지 않도록 신경을 써서 프로그래밍해야 한다. 과거 Window 3.x 시리즈가 비선점형 OS 였다.

선점형 os 선점형 OS 는 현재 실행 중인 프로세스보다 높은 우선선위의 프로세스가 등장하면 스케줄러에 의한 실행순서 조정이 적극 가해진다.

비선점형에 비해 스케줄러가 하는 일이 많다. 이러한 특성은 멀티 프로세스 기반 os에 적합하다.

왜냐하면 스케줄러에 의해서 실행순서가 적절히 조절되다 보니 프로그래머가 신경을 쓸 일이 거의 없어지기 때문이다.

RTOS는 물론, 오늘날 접하는 OS는 대부분 선점형이다.

우선순위 스케줄링 알고리즘

우선순위 스케줄링 알고리즘이란 각각의 프로세스마다 우선순위를 부여해서 우선순위가 높은 프로세스를 먼저 실행시키는 방식이다.

출처

윤성우, ⌜뇌를 자극하는 윈도우즈 시스템 프로그래밍⌟, 한빛미디어, 2006
유튜브, "한빛미디어", "뇌를 자극하는 윈도우즈 시스템 프로그래밍", https://www.youtube.com/watch?v=GVX-m3RF-K0&list=PLVsNizTWUw7E2KrfnsyEjTqo-6uKiQoxc Github, "system_programming", https://github.com/connieya/system_programming