프로세스의 스케줄링
일반 OS와 RTOS의 차이점
RTOS는 빠른 응답성을 가지는 OS이다.
RTOS는 Deadline이 중요하다. 언제 끝날지 모르지만 빠르게 가 아니라, 항상 정해진 시간 안에 끝나야 하는 것을 목표로 설계되었다.
Soft Deadline을 가지는 RTOS를 Soft RTOS, Hard Deadline을 가지는 RTOS를 Hard RTOS라고 한다.
Soft Deadline은 Deadline을 넘기면 결과는 유효하지만 품질이 저하되거나 성능에 영향을 미치는 Deadline이다.
Hard Deadline은 Deadline을 넘기면 심각한 결과를 초래해 돌이킬 수 없는 결과를 만드는 Deadline이다.
RTOS는 응답성이 빠르지만, 하는 작업이 특화되어 있어, 일반 OS에 비해 범용성이 떨어진다.
선점형(preemptive) OS와 비선점형(Non-Preemptive)OS
비선점형 OS는 현재 실행중인 프로세스의 자원을 빼앗을 수 없지만
선점형 OS는 가능하다.
대부분의 현재 OS는 선점형 OS이다. Windows도 선점형 OS이다.
우선순위(Priority) 스케줄링 알고리즘
우선순위 스케줄링 알고리즘은 Priority에 따라 스케줄링할 프로세스를 고르는 알고리즘이다.
현재 실행중인 프로세스의 Priority보다 높은 프로세스 중 레디 큐에서 가장 높은 Priority의 프로세스를 실행한다.
따라서 현재 실행중인 프로세스보다 Priority가 낮은 프로세스는 무한히 실행되지 못하고 기다릴 수 있는데 이를 기아(Starvation)현상 이라고 한다.
하지만 기본적으로 프로세스는 CPU, IO를 반복하며 실행되고, IO시에는 프로세스가 Block 상태로 이동하기 때문에 Starvation상태는 드문 일이다.
라운드 로빈 스케줄링 알고리즘: 같은 시간(time slice)을 프로세스에 배정해 time slice만큼의 시간을 사용하면 다음 프로세스가 실행되도록 만드는 방법이다.
windows는 MultiLevel Feedback Queue(MLFQ) 기반의 스케줄링을 한다.
https://en.wikipedia.org/wiki/Multilevel_feedback_queue
Multilevel feedback queue - Wikipedia
From Wikipedia, the free encyclopedia Processing scheduling algorithm In computer science, a multilevel feedback queue is a scheduling algorithm. Scheduling algorithms are designed to have some process running at all times to keep the central processing un
en.wikipedia.org
스케줄링은 아래와 같은 상황에서 동작한다.
1. 매 Time Slice 마다
2. 프로세스가 생성, 소멸될 때마다
3. 현재 실행 중인 프로세스가 Blocked 될때마다
추가적으로 우선순위에 따라, 시스템 콜에 따라 일어날 수 있다.
Priority Inversion: 말그대로 우선순위 역전 상황이다. A, B, C 프로세스의 우선순위가 A>B>C 일 때
A는 실행중에 필요한 C의 반환값을 얻기 위해 Blocked로 들어간다.
이 때 B, C가 둘 다 Ready에서 대기중이라면 B가 우선순위가 더 높기 때문에, B가 실행된다.
따라서 A는 B보다 우선순위가 높지만 B가 끝날 때 까지 기다려야 하는 상황이 된다. 이를 Priority Inversion이라고 한다.
따라서 이를 해결하기 위해 A는 Blocked가 되면서 C의 우선순위를 잠시 A와 같게 끌어올린다.
Windows 프로세스 우선순위
Windows는 기본적으로 6단계의 우선순위 계층을 제공한다.
https://learn.microsoft.com/ko-kr/windows/win32/procthread/scheduling-priorities
일정 우선 순위 - Win32 apps
스레드는 예약 우선 순위에 따라 실행되도록 예약됩니다.
learn.microsoft.com
SetPriorityClass와 GetPriorityClass를 통해 프로세스의 우선순위 클래스를 Get, Set할 수 있다.
SetPriorityClass 함수(processthreadsapi.h) - Win32 apps
지정된 프로세스의 우선 순위 클래스를 설정합니다. 이 값은 프로세스의 각 스레드의 우선 순위 값과 함께 각 스레드의 기본 우선 순위 수준을 결정합니다.
learn.microsoft.com
SetPriorityClass 함수(processthreadsapi.h) - Win32 apps
지정된 프로세스의 우선 순위 클래스를 설정합니다. 이 값은 프로세스의 각 스레드의 우선 순위 값과 함께 각 스레드의 기본 우선 순위 수준을 결정합니다.
learn.microsoft.com
'C, C++ > 뇌를 자극하는 윈도우즈 시스템 프로그래밍' 카테고리의 다른 글
| [뇌를 자극하는 윈도우즈 시스템 프로그래밍] 11장 쓰레드의 이해 (0) | 2025.06.10 |
|---|---|
| [뇌를 자극하는 윈도우즈 시스템 프로그래밍] 10장 컴구조(3) (0) | 2025.06.08 |
| [뇌를 자극하는 윈도우즈 시스템 프로그래밍] 8장 IPC 2 (0) | 2025.06.08 |
| [뇌를 자극하는 윈도우즈 시스템 프로그래밍] 6장 - 커널 오브젝트와 오브젝트 핸들 (0) | 2025.05.20 |
| [뇌를 자극하는 윈도우즈 시스템 프로그래밍] 5장 - 프로세스의 생성과 소멸 (0) | 2025.05.20 |