LISTORY

[윈도우즈 시스템 프로그래밍] 스케줄링 알고리즘과 우선순위 본문

IT/윈도우 프로그래밍

[윈도우즈 시스템 프로그래밍] 스케줄링 알고리즘과 우선순위

LiStoryTeller 2018. 7. 7. 18:16


뇌를 자극하는 윈도우즈 시스템 프로그래밍 책 관련 유투브 강의 정리이다.


이번에 정리할 내용은 스케줄링 알고리즘과 우선순위 부분이다.


⊙ YouTube 주소 ⊙ ☞   스케줄링 알고리즘과 우선순위



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


프로세스의 스케줄링


⊙ 일반 OS와 리얼타임(Real Time) OS의 차이점


이 내용을 다루는 이유는 이 책이 OS에 관련된 책이기 대문이다.


중요한 내용이지만, 스케줄러와 연관되어 있는 내용이기에 지금 설명된다고 한다.


일반 OS와 리얼타임 OS를 결정하는 요인은 스케줄러가 어떻게 동작하냐에 따라 결정된다.


그렇다면 스케줄러는 각각의 OS에서 어떻게 스케줄링을 할까?


일단, Real Time OS 의 경우, 응답성이 좋다.


예를 들어보자.


우리 컴퓨터를 사용 시, 익스플로러도 여러 개 띄워두고, 음악도 틀어둔 채로, 검색을 하려고 검색창을 띄웠다.


이런 경우 컴퓨터의 성능이 아주 좋으면 바로 검색창이 출력되겠지만, 보통 좀 느리다.. 이런게 일반적인 OS 이다.


하지만 Real Time은 바로바로 응답을 한다.


일반 OS와 RealTime OS를 이야기 할때 속도 이야기를 많이 하곤 하는데, 사실 속도는 비교 대상이 될 수 없다. 그건 제품 기준이다.


일반 OS와 Real Time OS에서 동시에 A 라는 프로그램을 실행했다고 가정해보자.


실행 시켰을 때 먼저 시작되는 것은 초반 스타트가 빠른(응답성이 좋은) Real Time OS 이다.


하지만 스타트가 빠르다고 해서 계속 빠른 것은 아니다. 둘중 누가 먼저 실행이 되는지는 별개의 문제므로 알 수 없다.


일반 OS가 먼저 실행됐다 하면 그쪽의 CPU 성능이 좋은 것이다. 실행 속도에 관련해서는 CPU를 보는 것이 맞다.


최종적인 속도는 CPU에 의존적인 거고, Real Time OS인지 아닌지는 스타트 타이밍을 가지고 결정짓는다.



이 상황에서, 시작이 빨랐다는건 Real Time OS의 cpu가 빠른거 아니냐는 의문을 가질 수 있다.


이건 OS가 선점형 OS인가, 비선점형 OS인가에 따라 다르다.


선점형 OS, 비선점형 OS를 설명하기 전에 타임 슬라이스에 대해 먼저 설명하겠다.



 타임 슬라이스


타임 슬라이스란 일정한 시간 간격이다.


일반 OS에서 우선순위가 같은 둘 이상의 프로세스 실행했을 경우, 번갈아가며 실행된다.


이 기준을 A 프로세스가 3초 B 프로세스가 3초 , C 프로세스가 3초라 해보자.


우리는 시계가 있지만 컴퓨터의 경우, 우리처럼 눈으로 시간을 볼 수 없으므로 clock 실행한다.


쉽게 말하자면 클럭이 발생한다. 이 클럭과 클럭 사이의 시간을 일초라 가정해보자.


이제 타임슬라이스라는 것을 정해보자.


타임슬라이스가 3초다? 그럼 세클락이 하나의 타임슬라이스가 된다. 즉, 클럭 관점에서 봐야한다. 


근데 보통 우리가 이야기할때 0.1 미리세컨드를 타임슬라이스라 한다. 


왜냐하면 타임슬라이스를 클럭 단위로 말하려면 클럭 사이의 시간도 알아야 하기 때문이다.


시스템 관점에서 타임 슬라이스는 클락으로 나타낸다.


1 타임 슬라이스가 3클럭이고, 1클럭 단위가 1초이면 1타임 슬라이스는 3초가 된다.


여하튼 타임슬라이스가 3초라 한다 하면, 3초에 한번씩 프로세스의 실행 주기가 바뀐다는 것을 의미한다.


즉, 프로세스가 실행의 주기로 이동할 때, 타임슬라이스를 기준으로 이동시킨다.


여기서 일반 OS와 Real Time OS의 차이는, 일반 OS의 타임슬라이스가 훨씬 길다는 것이다.


Real Time의 경우, 타임슬라이스가 짧아서 응답성이 좋다.



 선점형 vs 비선점형 os


간단히 말하면 다음과 같다.


선점형 : 어떤 프로세스가 먼저 선점하냐에 따라 OS 결정

비선점형 : 선점할 수 없다.


우선순위가 2인 A 프로세스와 우선순위가 3인 B 프로세스가 있다고 가정해보자.


선점형은 우선순위가 높은것부터 실행한다.


만일, 프로세스 A가 진행중에 프로세스 B가 생성되면 A는 밀어내고 B를 실행한다. 이게 선점형 OS이다.


하지만 비선점형의 경우, 프로세스 A 진행 중 프로세스 B가 생성된다 해도 B가 실행되지 않는다.


프로세스 A가 명시적으로 양보하겠다 해야 B가 실행될 수 있고, 그 전까지는 기다려야 한다.


비선점형 OS는 양보를 바로 하지 않고 A가 명시적으로 선언해야 우선순위 대로 처리한다.


우리는 일반적으로 사용하는 OS는 선점형 OS 이다.


선점형 이냐 비선점형이냐 구분할 때에 기준은 스케줄러가 일을 더 많이 하느냐에 따라 달린다.


선점형일때 스케줄러가 훨씬 일을 많이 한다. 


비선점형은 스케줄러가 하는 일이 드물다. 


방금 예시를 봐도 프로세스 A가 포기해야 프로세스 B가 일을 할 수 있으므로 프로세스가 누가 일을 할 지 결정하지 않는다.


즉, 선점형은 스케줄러가 할 일이 많고 비선점형은 스케줄러가 제한적이다.



스케줄링 알고리즘


평등과 특권의 공존


스케줄러는 평등하고, 경우에 따라 특권을 부여하며 스케줄링을 한다.


우선순위가 동일한 프로세스에서는 평등하고 우선순위가 높으면 특권을 허용한다.


여기서 동일 우선순위를 주장하기 위해 라운드로빈 알고리즘을 사용하고


높은 우선순위를 주장하기 위해 우선순위 기반 알고리즘을 사용한다.


예시를 살펴보겠다.



이 부분은 운영체제마다 다르므로 절대적이지 않다. 


여기서 우선순위를 보자


우선순위 0 ~ 9 까지 10단계로 나뉘어져 있고 높을수록 높다.


OS가 이걸 내부적으로 어떻게 관리하는지 OS 디자인 측면에서 보자.


메모리블럭이 구성되어 있고, PRIORITY QUEUE를 사용하며 각각의 프로세스들은 LINKED LIST로 묶었다.


일단 높은 우선순위.. 특권을 먼저 생각해야 한다.


여기서 가장 높은 우선순위를 가지고 있는 프로세스들은 우선순위 7이다. 그럼 여기에 1순위를 둔다.


그리고 같은 우선순위의 각각의 프로세스들은 공평하게 실행되야 하므로 라운드로빈 알고리즘을 사용한다. 


그럼 우선순위 5에 있는 프로세스는? 이론상으로는 전혀 실행되지 않는다.


그냥 우선순위 7에 있는 애들만 계속 진행한다. 우선순위 7에 있는 프로세스들이 전부 블러킹에 빠져야 5가 기회를 받는다.


하지만 실제 실행 시간이 10초라 해도 CPU가 실행되는 시간은 5초도 안될정도로 짧기 때문에 


실제로는 우선순위 5의 프로세스들도 실행이 된다.








Comments