본문 바로가기
C/[서적] 뇌를 자극하는 윈도우즈 시프

Chapter 09. 스케줄링 알고리듬과 우선순위

by GameStudy 2022. 2. 5.

9.1 프로세스의 스케줄링

Prologue) API만 알고 문제 접근할 때와 스케줄링 + API 상태로 접근할때가 전혀 다르다.

 

9.1-1 일반 OS와 Real-Time OS의 차이점

  Note) 이 내용을 스케줄링 공부하는 과정에서 언급하는 이유는?

    일반 OS와 Real-Time OS를 결정하는 녀석이 스케줄러이기 때문.  

    스케줄러가 어떻게 동작하냐에 따라서 일반 OS가 되기도하고 

    Real-Time OS가 되기도 함.

 

  Note) 일반 OS Vs. Real-Time OS

    - Real-Time, 즉 실시간이라는 말은 "바로바로"에 해당함.

      다시 말해, 응답성이 좋다고 할 수 있음.

      ex. mp3 플레이어를 틀고 있다가, 크롬 키면 바로 뜰때 이게 응답성.

    - 아무리 성능이 좋은 컴퓨터도 크롬 많이 켜둔채로 

      무거운 게임을 켜면 응답성이 떨어지게 됨. 이게 일반 OS의 특성

    - 그래도 Real-Time OS는 바로바로 응답해야 함.

      다만, 바로 응답했다고 해서 작업을 빨리 끝내는 것과는 다른 얘기.

      응답성은 늦은 일반 OS이지만, 작업을 더 빨리 끝낼 수도 있음.

      작업속도는 오히려 CPU에 종속적인 이야기.

    - 즉, CPU에 일반 OS를 넣으면 일반 OS로 동작하고

      Real-Time OS를 넣으면 Real-Time OS로 동작함.

    - 그럼 어찌 되었든, 응답이 빠르단건 그만큼 CPU도 좋다는거 아닌가?

      와 같은 의문점이 생김.

    - 타임 슬라이스 개념이 있음. Clock 단위로 정해짐.

      ex. 3 Clock이 1 Time-Slice인 OS

    - 근데 이렇게 말하면 다시 또 시간 개념으로 바꿔서 말하기에

      대부분의 경우 아래와 같이 말함.

      ex. 1 Time-Slice가 3s인 OS

    - 만약 위 예처럼 3s가 하나의 타임 슬라이스라면

      3초에 한 번씩 프로세스의 실행 주기가 바뀐다고 생각하면 됨.

    - 여기서 일반 OS는 타임 슬라이스가 큼

      Real-Time OS는 타임 슬라이스가 작음. 그래서 응답성이 빠른 것.

    - 즉, A 프로세스가 실행이 되고 B 프로세스가 실행이 된다면

      하나의 타임 슬라이스 동안(위 예에서는 3s)은 A 프로세스가 실행됨

      바로 실행 우선권을 뺏기는게 아님.

    - 따라서 타임 슬라이스가 작으면 다른 프로세스가 빠르게 뺏을 수도 있음.

      물론 우선순위 정책도 중요한 요인 중 하나. CPU 성능과는 상관없음.

 

  Note) 선점형 OS Vs. 비선점형 OS

    - A프로세스는 우선순위 2, B프로세스는 우선순위 3으로 높다 해보자.

      그럼 A 프로세스는 자신의 타임 슬라이스만큼을 사용하고

      스케줄러는 A 프로세스를 밀어내버리고, B 프로세스를 바로 실행시켜줌.

      이게 선점형 OS

    - 위와 같은 상황에서, A 프로세스가 하나의 타임 슬라이스만큼 사용했다면

      A 프로세스가 볼일 다 봤다고 할때까지 스케줄러가 밀어낼 수 없는 OS를

      비선점형 OS라고 함. 즉, 프로그래머가 결정하는 것임. 드문 경우의 OS. 어려워짐.

    - 따라서 스케줄러는 선점형 OS인 경우에 더 많이 일하게됨.

      강제로 우선순위가 낮은 프로세스를 밀어내야하기 때문.

      반대로 비선점형은 비교적 적음. 밀어내는 일은 못하지만,

      우선순위에 따라 실행시켜주는 일은 함.

    - 중요한 것은, 두 OS가 뭔지 개념을 설명하는 것 보단 

      스케줄러의 관점에서 두 OS를 구분할 수 있냐가 중요함.

 

9.1-2 스케줄링 알고리듬

  Note) 특권과 평등의 공존

    - (특권)높은 우선순위 -> 우선순위 기반

    - (평등)동일 우선순위 -> 라운드로빈 기반

 

  Note) 도식화

    - 일단 각 순위마다 우선순위 Queue가 있음. 예제그림에선 10 순위. 

      각 Queue에는 프로세스가 링크드 리스트로 연결되어 있음.

    - 일단 특권을 먼저 살펴봄. 예제그림에선 우선순위 7이 제일 높음

      그리고 평등을 살펴봄. 우선순위 7에있는 다섯개의 프로세스가 동일 우선순위.

      그럼 이 다섯 개의 프로세스가 동등한 시간 분배를 받아서 실행되게됨.

      이때 사용 되는 알고리듬이 라운드로빈 기반.

    - 그럼 우선순위 5인 프로세스들은 실행될까?

      이론적으로는 전혀 실행되지 않음. 우선순위 2는 말할것도 없음.

    - 근데 실질적으론 실행되기도 함. 왜일까?

      우선순위 7인 프로세스들 모두가 가끔 I/O 연산 하느라고 블로킹 상태로 빠질 때도 있음.

      이때 우선순위 5인 프로세스들이 실행되기도 함.

    - 생각해보자. 우리가 가장 많이 사용하는 크롬 웹 브라우저의 경우에

      우리가 검색하느라고 I/O 연산에 빠질때가 있음. 

      검색된 내용을 웹서버에 요청함. 이것도 I/O 연산.

      요청의 응답을 받아옴 이것도 I/O 연산.

      드디어 응답을 화면에 그려낼 때 CPU의 할당이 필요해짐.

      즉, 실질적으로 대부분이 I/O 연산임.

출처. 윤성우, "뇌를 자극하는 윈도우즈 시스템 프로그래밍"

 

 

9.1-3 스케줄링 진행시점

  Note) Case 1. 매 타임 슬라이스(Time Slice) 마다

    타임 슬라이스 사이에서도 컨텍스트 스위칭은 발생할 수 있는가?

    답은 Yes or No.

    타임 슬라이스가 너무 짧으면 성능저하가 일어날 수도 있음.

    매 타임 슬라이스마다 스케줄러가 일어나서 동작하기 때문에

    정작 다른 프로세스들이 실행될 기회를 오히려 박탈 당할지도.

    따라서 이 관점에서 볼때는 타임 슬라이스를 좀 더 길게 가져가려함.

    근데 또 타임 슬라이스가 만약 3초라면, 0.1초의 순간에 

    Case 2, Case 3 상황이 발생할 수 있음. 그럼 2.9초는 버려야하는가?

    그러지 않고 스케줄러가 일어나서 컨텍스트 스위칭을 하면 Yes라 할 수 있음.

    근데 타임 슬라이스가 좁다면, 0.2초 정도라면 Case 2, Case 3의 상황이라도

    곧 있으면 스케줄러가 깨어나기 때문에 No라고 대답할 수 있음.    

    즉, 운영체제마다 어떻게 디자인 되어 있는지 관찰 함으로써 알 수 있는 내용.

 

  Note) Case 2. 프로세스가 생성 및 소멸될 때마다

    생성될때는 프로세스를 ready에 넣고 바로 running을 가던지

    아니면 계속 ready에 두든, 관찰해야하기 때문인게 명확함.

    소멸될때는 만약 running 상태에서 소멸되었을 수도 있기때문에

    그렇다면 다른 프로세스를 running에 넣어줘야해서 스케줄링이 진행됨.

    

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

    특별히 I/O 연산에 의해 프로세스가 blocked 상태에 놓인다면 

    마찬가지로 running 상태에서 blocked 상태로 빠지기 때문에

    다른 프로세스를 running 상태로 밀어넣기 위해서 스케줄링이 진행됨.

    또한 I/O 연산에 들어간 프로세스를 blocked로 밀어내는 것도 스케줄러의 작업.

 

  Note) 스며들어 있는 철학은?

    결국 스케줄러도 프로세스라는 점. 스케줄러가 너무 자주 실행되면 성능 저하.

    즉, OS 사용자가 불편함을 못느끼는 한도 내에서 가급적 최소한의 실행만 추구.

 

9.2 Windows 프로세스 우선순위

 

Prologue) 지금까지 배운 내용으로 예제를 실습해보고

  다양하게 변경하고, 우선순위도 바꿔 봐야 체득할 수 있는 내용들.

  윈도우즈 운영체제는 나름대로 어떻게 스케줄링 하는구나를 느껴봐야 함.

 

Note) 우선순위는 사실 쓰레드 관점에서 바라봐야만 정확히 이해할 수 있음.

  지금 이 표는 그냥 예제 테스트할 때 우선순위를 변경해보라는 의미.

 

9.2-1 프로세스의 우선순위 계층

출처. 윤성우, "뇌를 자극하는 윈도우즈 시스템 프로그래밍"

 

 

 

 

댓글