뇌를 자극하는 윈도우즈 시스템 프로그래밍(저자, 윤성우)
01. 프로세스의 스케줄링
운영체제를 학습하기 위해서 먼저 RTOS(Real Time OS)와 여태 말한 운영체제(OS)의 차이에 대해서 살펴보자. RTOS와 OS의 차이는 응답성(응답속도)에 있다. 하지만 이 부분에서 간과하면 안되는 점이 있다.
일반 OS는 범용적인 사용을 위해서 디자인이 되어있다. 워드 작업을 하면서 영화를 볼 수 있고, 인터넷을 할 수 있다. 반면에 RTOS는 사용 영역이 제한적이다. 핸드폰에 들어가는 RTOS는 키 입, 출력이 없으면 하는 일이 거의 없다. 전력 소모를 줄이기 위해서 내부 프로세스의 전력 소모량을 최소화 시키기도 한다.
정리하면, RTOS는 무조건적으로 일반 OS에 비해서 속도가 빠른 것이 아니다. 사용되는 목적이 구체적이고 단순하다보니 일반 OS에 비해서 가볍기 때문에 차이가 나타나는 것이다.
01. A. Soft RTOS vs Hard RTOS
위에서 설명했듯이 하는 일이 특화되어 있고 응답성이 일반 OS에 비해서 좋은 RTOS는 대부분 Soft RTOS다. 하지만, 전통적으로 가리키는 RTOS는 Hard RTOS를 의미한다. Hard RTOS는 응답성이 좋은 정도뿐만 아니라, 데드라인이 중요하다.
데드라인은 크리티컬한 상황에서 발생한다. 0.1초라도 늦게 동작되면 인명 피해의 가능성이 있는 시스템이 있다면, 데드라인을 지키는 것은 굉장히 중요할 것이다. 이때 시스템에서 충족시킬 수 있는 능력을 지니는 RTOS가 Hard RTOS다.
01. B. 선점형Preemptive OS와 비선점형Non-Preemptive OS
OS 구분 시, 응답성을 통해서 RTOS와 OS를 구분하듯이, 프로세스의 실행을 다른 프로세스로 넘기는 방식에 따라서 선점형 OS와 비선점형 OS를 구분한다.
먼저, 비선점형 OS는 현재 실행중인 프로세스보다 높은 우선순위의 프로세스가 등장한다고 해서 실행 대상을 바로 변경하지 않는다. 높은 우선순위의 프로세스가 실행되기 위해서 현재 실행중인 프로세스가 명시적으로 CPU를 양보하거나, I/O 작업 등으로 블로킹 상태에 놓일 때 까지 기다려야 한다. 이러한 특징은 인터렉티브한 프로그램 구현 시 프로그래머 의존도가 높아지는 문제점을 가진다.
그에 반해서 선점형 OS는 현재 실행 중인 프로세스보다 높은 우선순위의 프로세스가 등장하면 스케줄러에 의해 실행순서가 적극적으로 조정된다. 이러한 특징은 멀티 프로세스 기반 OS에 적합하다. 스케줄러에 의해서 실행순서가 적절히 조절되니, 프로그래머의 개입이 줄기 때문이다.
01. C. 우선순위Priority 스케줄링 알고리즘
이제 Windows에서 채택하고 있는 대표적인 선점형 스케줄링 알고리즘 두 가지를 살펴보자. 우선순위 스케줄링 알고리즘이란, 프로세스마다 우선순위를 부여해서 높은 우선순위의 프로세스를 먼저 실행하는 방식이다. 우선순위 2와 우선순위 7에 해당하는 프로세스를 동시에 실행시키면 어떨까?
알고리즘은 다양한 디자인이 가능하지만, 보편적인 운영체제에서는 우선순위가 2인 프로세스는 결코 실행되지 않는다. 이러한 상황을 기아Starvation 상태라고 한다. 그렇다고 해서 우선순위 2인 프로세스가 무조건적으로 실행되지 않는 것만은 아니다.
실행되지 않는 관점에서는 우선순위가 높은 프로세스를 먼저 실행해야 하기 때문에라고 답할 수 있고, 실행되는 관점에서 설명하자면 높은 우선순위 프로세스가 I/O 관련 작업을 하는 과정에서 우선순위가 낮은 프로세스도 실행 기회를 얻을 수도 있기 때문이다.
메세지 출력, 메세지 출력 회수, 등 다양한 작업들이 I/O 작업에 해당된다. 대부분의 프로그램들이 상당 기간을 I/O 작업에 할애하는데, 이 덕분에 우선 순위가 낮은 프로세스도 실행 기회를 얻을 수 있기 때문에 실행 가능성이 존재하는 것이다.
01. D. 라운드 로빈Round-Robin 스케줄링 알고리즘
우선순위 스케줄링 알고리즘에서는 우선순위에 따라서 실행한다고 설명했는데, 우선순위가 동일하다면 어떨까? Windows에서는 이러한 상황에 대비하여 라운드 로빈 스케줄링 알고리즘도 적용해서 사용하고 있다.
같은 우선순위의 프로세스들간 형평성 유지를 위해서 정해진 시간 간격만큼만 실행하고 우선순위가 동일한 다른 프로세스에게 CPU의 할당을 넘기는 방식을 제공한다. 실행의 최소 단위 시간 간격을 가르켜서 퀀텀Quantum 혹은 타임 슬라이스Time Slice라고 하는데, 동일 우선순위의 모든 프로세스들은 이러한 타임 슬라이스를 기준으로 CPU의 할당을 넘기게 된다. 참고로 타임 슬라이스를 어느 정도로 두느냐에 따라서 운영체제의 성격이 달라지기도 한다.
01. E. 스케줄링 알고리즘에 의해 스케줄링이 진행되는 시점
다음과 같은 세 가지 관점에서 생각해보자. 첫 번째는 라운드 로빈 방식의 스케줄링 알고리즘 적용에 대한 관점이다. 정해진 시간이 지나면 다음 프로세스에 실행 순서를 넘겨야 한다. 실행 순서를 넘기기 위해서는 스케줄러가 동작해야 한다. 그렇다면, 스케줄러는 프로세스의 실행시간 간격에 해당하는 매 타임 슬라이스마다 동작해야한다.
두 번째는 우선순위 방식 스케줄링 알고리즘 적용에 대한 관점이다. 우선순위가 높은 순서대로 프로세스는 실행이 되어야 한다. 새로운 프로세스가 생성될 때 마다 현재 실행중인 프로세스와의 우선순위 비교가 필요하다. 그렇다면 스케줄러는 새로운 프로세스가 생성되는 시점과 현재 실행 중인 프로세스가 종료되는 시점에서 동작해야 한다.
세 번째는 블로킹 상황이다. 현재 실행중인 프로세스가 블로킹 상태에 놓이게 된다면 다음에 실행될 프로세스 선정을 위해 스케줄러가 작동되어야 한다.
▶ Priority Inversion
: 프로세스의 우선순위가 뒤바뀌는 현상을 말한다. 현재 실행중인 프로세스에서 모종의 이유로 우선순위가 낮은 프로세스를 실행시켜야 할 때, 우선순위 스케줄링 알고리즘에 의거하여 원치 않은 프로세스가 실행되는 것을 방지하고 원하는 프로세스를 실행하기 위해서, 실행을 원하는 프로세스에 현재 실행중인 프로세스의 우선순위를 넘기고 Blocking 상태로 전이되는 것을 의미한다.
▶ Windows 운영체제의 우선순위 계층
우선순위 상수 명 설명 IDLE_PRIORITY_CLASS 기존 우선순위 4 NORMAL_PRIORITY_CLASS 기존 우선순위 9 HIGH_PRIORITY_CLASS 기존 우선순위 13 REALTIME_PRIORITY_CLASS 기존 우선순위 24 ABOVE_NORMAL_PRIORITY_CLASS NORMAL_PRIORITY_CLASS < (ABOVE) < HIGH_PRIORITY_CLASS BELOW_NORMAL_PRIORITY_CLASS IDLE_PRIORITY_CLASS < (BELOW) < NORMAL_PRIORITY_CLASS
'독서 > 뇌를 자극하는 윈도우즈 시스템 프로그래밍' 카테고리의 다른 글
[스터디] 시스템 프로그래밍 - Chapter 11. 쓰레드의 이해 (3) | 2023.10.30 |
---|---|
[스터디] 시스템 프로그래밍 - Chapter 10. 컴퓨터 구조에 대한 세 번째 이야기 (2) | 2023.10.25 |
[스터디] 시스템 프로그래밍 - Chapter 8. 프로세스간 통신(IPC) 2 (2) | 2023.10.04 |
[스터디] 시스템 프로그래밍 - Chapter 7. 프로세스간 통신(IPC) 1 (2) | 2023.10.04 |
[스터디] 시스템 프로그래밍 - Chapter 6. 커널 오브젝트와 오브젝트 핸들 (2) | 2023.10.03 |