관리 메뉴

사과하는 제라스

6. CPU Scheduling 본문

대학 전공 공부/운영체제

6. CPU Scheduling

Xerath(제라스) 2022. 11. 2. 02:00
728x90
반응형

OS의 중요 기능 2가지 중 하나인 'HW 자원에 대한 배분'

∴ OS가 각 프로세스들에게 CPU를 어떻게 배분?? 이걸 알아야 함.

 

(CPU) Scheduling이란?

: 어떻게 프로세스들에게 CPU의 사용을 할당할 것인가.

 

- Multiprogramming이란 기법이 발전하게 되면서 CPU Scheduling이 발전함.

-> 멀티프로그래밍: Memory 내의 Ready State의 프로세스들 중 하나에 CPU를 할당하는 방법.

 

- CPU 스케줄링 목표: CPU 사용률과 처리량의 최대화

CPU-I/O Burst Cycle

프로세스 수행 사이클

- CPU-I/O Burst Cycle

: 프로세스가 CPU Burst와 I/O Burst를 번갈아 가며 수행을 함.

- CPU Burst: CPU로 연산을 수행하는 시간

- I/O Burst: I/O 처리를 위해 기다리는 시간

 

- Process 분류에 따른 CPU Burst 특징

- CPU-Bound Process: 짧은 주기의 긴 CPU Burst

- I/O-Bound Process: 긴 주기의 짧은 CPU Burst

 

CPU Burst Time으로 어떤 프로세스, 시스템이든 간에 대체로 3~5ms 정도 CPU Burst를 사용하고 이후는 계속해서 차지를 거의 안함.

그렇다면 언제 실행 대상인 프로세스가 바뀔까...??

일단 Scheduling의 결정(돌리는 프로세스에 대한 변경)은

1. Running -> Waiting 상태로 바뀔 때(Interrupt나 I/O 대기 상태가 됨)

2. Running -> Ready 상태로 바뀔 때

3. 수행이 종료되었을 때

4. Ready -> Running 상태로 바뀔 때

이뤄진다.

 

스케줄링의 종류

1. 비선점형 스케줄링(Non-preemptive Schekduling)

: 실행 중인 프로세스의 CPU 사용을 강제로 멈추게 하지 않고 자연스럽게 프로세스가 CPU 사용을 그만둘 때 다른 프로세스를 실행시키는 스케줄링 기법.

- [Running -> Waiting], [Ready -> Running] 일 때 수행 가능하며 요즘 잘 안 쓰이는 방식임.

 

2. 선점형 스케줄링(Pre-emptive Scheduling)

: OS가 프로세스들의 스케줄링에 적극 개입, 일정 시간을 넘어서 점유하고 있는 프로세스를 강제로 멈춰서 다른 프로세스들의 실행을 보장해주는 스케줄링 기법.

 

스케줄링 정하는 기준

1. CPU 사용률: 전체 시스템 시간 중 CPU가 작업을 처리하는 시간의 비율. 크면 Good.

2. 처리량(Throughput): CPU가 단위 시간 당 처리하는 프로세스의 개수. 크면 Good.

3. 응답 시간(Response Time): 상호작용하던 System에서 요청 후 첫 응답이 올 때까지의 시간. 짧으면 Good.

4. 대기 시간(Waiting Time): 프로세스가 Ready Queue에서 대기하는 시간의 총합. 짧으면 Good.

5. Turnaround Time: 프로세스가 시작해서 끝날 때까지 걸리는 총 시간

 

이러한 기준들을 고려하여 이상적인 스케줄러를 만드는데 사실 현실적으로 모든 조건 만족하는 것은 만들기 Hard!

∴ 시스템의 용도에 따라 스케줄링의 요구사항을 맞춤 -> 이에 알맞은 스케줄링 알고리즘이 필요함.

ex. 슈퍼 컴퓨터: CPU 사용률 / 개인용 컴퓨터: 응답시간 / 워크 스테이션: 처리량

 

스케줄링 알고리즘(Scheduling Algorithms)

1. FCFS(First-Come, First-Served) Scheduling

: 먼저 CPU 할당을 요청한 프로세스에 CPU를 먼저 할당한다.

- 비선점형 스케줄링

- 작업의 수행 순서에 따라 대기시간이 변함. -> ∴ 대기시간이 짧아야 하는 작업의 경우엔 맞지 않은 알고리즘임

2. Short-Job-First Scheduling

: 다음 CPU Burst Time이 가장 짧은 프로세스에 CPU를 먼저 할당한다.

 

- 비선점형 스케줄링: 한번 CPU 할당 받으면 자신 CPU Burst Time 끝날 때까지 안 놓음.

 

- 선점형 스케줄링: CPU 할당 받아 수행 중이더라도 CPU Burst Time이 자신의 현재 남은 시간보다 짧은 시간인 프로세스가 생성되면 그거에 CPU를 양보함.(= SRTF(Shortest Remaining Time First Scheduling))

위와 같은 예시가 있다 하자.

1) 비선점형 스케줄링: 일단 제일 먼저 도착한 P1 실행 - 그러다 P2옴 - 무시하고서 계속 실행 - 그러다 P3옴 - 무시하고서 계속 실행 - 그러다 P4옴 - 무시하고서 계속 실행 - 7초일 때 P1 끝남 - 당시 제일 적은 Burst Time인 P3 실행 - 8초에 P3 끝남 - 그 다음엔 둘이 같으니 먼저 온거(P2) 실행 - 12초에 P2 끝남 - P4 실행 - 16초에 P4 끝남

대기 시간은

P1: 0초에 와서 0초에 시작함 -> 0초

P2: 2초에 와서 8초에 시작함 -> 6초

P3: 4초에 와서 7초에 시작함 -> 3초

P4: 5초에 와서 12초에 시작함 -> 7초

∴ 평균 대기시간: 4초

2) 선점형 스케줄링: 일단 제일 먼저 도착한 P1 실행 - 그러다 2초에 P2옴 - P1은 자기 남은 시간 5초보다 P2의 4초 Burst Time이 짧으니 P2 실행 - 4초에 P3옴 - P2의 남은 2초보다 P3의 1초가 짧으니 P3 실행 - 5초에 P3끝나면서 P4도 옴 - P1:5초, P2: 2초 남은 상황에 P4는 4초이니 P2, P4, P1 순으로 실행함.

대기 시간은

P1: 0초에 와서 실행하다 멈추고 9초 대기하다가 실행해서 완료 -> 9초

P2: 2초에 와서 실행하다 멈추고 1초 대기하다가 실행해서 완료 -> 1초

P3: 4초에 와서 바로 실행해서 완료 -> 0초

P4: 5초에 와서 대기하다가 7초에 시작함 -> 2초

∴ 평균 대기시간: 3초

3. Priority Scheduling

: 미리 주어진 우선순위에 따라 CPU를 할당한다

 

- 비선점형 스케줄링

- 선점형 스케줄링: 새로 생성된 프로세스가 현재 실행 중인 프로세스보다 높은 우선순위를 가지면 CPU를 양보함.

 

<문제점>

기아 상태(Starvation) 발생할 수 있음!!!!

: 왜 생기냐고? 낮은 우선순위 프로세스의 경우엔 계속 밀리잖아...그러다보면 계속 밀려서 수행이 아예 안될 수 있음.

 

- 해결책: Aging 기법

: 할당을 기다리는 시간에 따라 우선순위를 증가시키는 방법

ex. 대기시간이 길어지면 점점 우선순위 값을 높여줌으로서 기아 상태를 해소시킴

4. Round-Robin Scheduling

: Time Quantum(시간 단위, 보통 10-100ms임)을 정해두고 그만큼 수행 후 Ready Queue의 끝에 넣어두고 다음 프로세스로 넘기는 방식으로 순회한다

- 선점형 스케줄링

- 문맥 전환이 많지만 응답 시간이 짧다.

 

만약 n개의 프로세스가 있고 Time Quantum이 q시간이면...

각 프로세스는 최대 (n-1)*q 시간만 대기한다.(앞에가 모두 Time Quantum을 꽉꽉 채워서 끝낸다는 가정이 최악임.)

만약 q가 엄청 크면 FCFS와 비슷하게 동작하고 / q가 작은데 만약 context switching time이 이보다 크다면(즉, 오버헤드가 크다면) 효율이 매우 떨어짐. 

5. Multilevel Queue Shceduling

: Ready Queue를 여러개로 분리하고 각 Queue마다 다른 스케줄링 알고리즘을 사용하는 기법

 

- Foreground Queue: 상호작용이 많은 프로세스를 위한 Queue -> 주로 Round-Robin 기법 사용

- Background Queue: CPU 연산 작업을 주로 수행하는 프로세스를 위한 Queue -> 주로 FCFS 사용 

 

핵심: 어떠한 알고리즘을 어떠한 몇 개의 Queue로 나눠서 사용할 건지, 각 Queue들을 OS에서 어떻게 관리할 것인지.

6. Multilevel Feedback Queue Scheduling

: Multilevel Queue에서 프로세스들이 서로 다른 Queue로 이동할 수 있도록 한 스케줄링 기법

-> 간단히 생각하면 수행하다가 원하는 스케줄링 방식의 Queue로 이동시키는 방식임.

 

- 필요 요소

1. Queue의 개수

2. 각 Queue마다의 스케줄링 기법

3. 언제 프로세스를 한 단계 높은 Queue로 옮길지.

4. 언제 프로세스를 한 단계 낮은 Queue로 옮길지.

5. 어떤 프로세스가 특정한 기능을 필요할 때 그걸 제공하는 Queue로 이동 시켜줄 방법.

 

예를 들면...

 

어떤 프로세스를 Round-Robin 방식으로 수행 중임.

근데 이게 time quantum인 8초를 지나도 안 끝내짐.

근데 나 이거 해야해.

그래서 tq가 16초인 Queue로 옮김.

근데 16초 지나도 안 끝나짐.

그럼 에이씨 몰라 넌 FCFS 형에 처한다!!하고 FCFS Queue로 옮김.

-> 이런 식으로 상황에 따라, 혹은 해당 프로세스의 기능에 따라 Queue를 옮겨서 수행하는 방식임.

 

Multiple Processor Scheduling

: 하나의 시스템에서 여러개의 CPU를 사용 시, CPU Scheduling이 복잡해진다

-> 각각의 CPU에 서로 다른 I/O 장치가 연결되어 있으면 그걸 하나의 시스템에서 사용하는데에 복잡하고, 각 CPU들이 서로 다른 종류이면 각 CPU마다의 명령어 셋, 처리 속도 등이 달라서 복잡해짐.

 

멀티 프로세싱에는 2가지가 있음.

 

1. 비대칭 멀티프로세싱

- 하나의 CPU만이 시스템 자료구조(스케줄링, I/O 작업 등)를 관리(즉, 각자 역할이 정해짐)

-> 모든 CPU가 서로 공유하며 접근하는 것보다 더 간단하게 데이터 공유가 이루어짐.

 

2. 대칭 멀티프로세싱

- 다같이 관리를 같이 함.

-> 서로 공유 및 멀티 스레딩 개념이 문제없이 해결되게 설계되어야 하고 비대칭에 비해 복잡함.

 

스케줄링 방식

1. Processor Affinity(친밀도)

: CPU는 지가 하던 프로세스 작업에 대해 계속 그것만 맡음

-> 이러면 캐시를 쌓고 그럼에 따라 더 효율적으로 수행 가능~

 

2. Load Balancing

: 하나의 CPU에 몰리지 않게 잘 조절해서 배정해주는 것.

ex1. CPU가 모두 동일하면 동일한 프로세스들을 수행할 수 있기에 나눠줘서 수행 가능.

ex2. CPU가 각각 Ready Queue를 갖고 있으면 일부 CPU에 몰릴 수도 있음.

ex3. CPU들이 하나의 Ready Queue를 두고서 사용하면 사용 가능한 CPU들에 차례로 프로세스를 배정해 줌.

-> 이렇게 다양한 가능성이 있으니 필요에 따라 설계해서 프로세스들이 하나의 CPU에 몰리지 않게 배정해줘야 함.

728x90
반응형

'대학 전공 공부 > 운영체제' 카테고리의 다른 글

8. Thread  (2) 2022.11.19
7. IPC(Inter Process Communication)  (0) 2022.11.17
5. Computer Architecture  (0) 2022.10.11
4. Process  (0) 2022.10.09
3. OS의 구조2  (1) 2022.10.07