프로그래밍/운영체제

[운영체제] CPU Scheduling

kwon92 2020. 6. 15. 00:53

프로그램의 path는 보통 이미지 처럼 실행된다.

 

왼쪽이 CPU 가 사용하는 인스트럭션 기계어들이다.

 

쭉 실행을 하다가 read file 같은 I/O 작업을 만나게되면

오래걸리는 작업이기 때문에 CPU 를 놓고 I/O 작업을 하고 I/O 작업이 끝나면 ready 상태로 CPU 할당을 기다린다.

 

CPU 만 연속적으로 쓰면서 인스트럭션을 실행하는 게CPU burst 라 하고,

I/O 를 사용하는게 I/O burst 라 한다.

 

 

 

I/O 바운드 잡은 사람과 인터렉션을 많이 해서 I/O를 많이 사용한다.

 

CPU 바운드 프로세스는 I/O 가 많이 없기때문에 연속적으로 CPU 를 사용하는 프로세스다.

 

이 두 종류들의 프로세스를 CPU 가 잘 사용하기 위해선 CPU 스케줄러가 필요하다.

 

 

누구에게 CPU 를 줄지 결정하는게 스케줄러다.

하드웨어가 아닌 운영체제 안에서 스케줄링을 하는 소프트웨어다.

 

CPU 스케줄러는 누가 쓸지 결정을 하고

디스패처는 CPU 의 제어권을 프로세스에게 넘기는 친구

 

-CPU 스케줄링이 필요한 경우

1. I/O 작업을 위해 시스템콜을 발생시켜서 Blocked 상태로 가는 프로세스가 발생할때

 

2. 할당 시간이 만료되서 Timer 에게 제어권을 뺏겼을때

 

3. I/O 요청을 한 프로세스의 I/O 작업이 끝났을 때 레디 상태로 바꿧을때

- I/O 작업이 끝나도 바로 CPU 제어권을 주지 않는다. Ready 상태로 바꿀때는 인터럽트 라인에 요청이 왔기때문에

운영체제에 제어권이 넘어가고, 운영체제가 Ready 상태로 바꿔주지만, 바로 제어권을 주진 않는다.

인터럽트 당한 프로세스에게 제어권을 먼저 주게 된다. (우선순위가 아닐경우에 얘기)

 

4. 프로세스가 종료되었을때

 

 

CPU 스케줄링 알고리즘 종류

 

nonpreemitive 알고리즘 (비선점형)과

 

preemtive 알고리즘 (선점형)으로 나뉜다. - 거의 preemtive 를 쓴다.

 

어떤게 좋은 알고리즘인지 구분할수 있게 해주는 성능 척도

 

위에 2가지가 시스템 입장에서의 성능척도고

나머지가 프로그램 입장에서의 성능척도다.

 

시스테 입장에서는 CPU 를 얼마나 잘 사용하고 ,처리 할 수 있는지를 보고

프로세스 입장에서는 프로그램을 얼마나 빨리 끝낼 수 있는지를 본다.

 

CPU util - 전체 시간중에서 CPU 가 놀지 않고 이용한 비율

Throughput - 주어진 시간동안 몇개의 작업을 완료했나

 

Turnaround time - CPU 를 쓰러와서 다 쓰고 나갈때까지의 시간, 줄 서서 다 쓰고 나갈때까지의 총합 시간

Waiting time - CPU 를 쓰기 위해 큐에서 기다리는 시간 waiting time 은 선점형 알고리즘일때 CPU를 뺏겨서 다시 줄 스는 시간  

Response Time  - 요청을 받고 첫 응답 할 때 까지의 시간

 

 

- 먼저 온 고객을 먼저 서비스

비선점형 스케줄링 받으면 끝날때까지 사용된다

아주 짧은 작업도 하염없이 기다려야한다. 효율적이지 못하다.

 

Waiting time 의 평균이 크다.

FCFS 는 들어온 순서에 따라 결과값이 크게 달라진다.

 

 

- CPU 를 사용하고자 하는 시간이 가장 짧은 job 에 우선순위를 준다.

선점형과 비선점형으로 나눌수있다.

 

비선점 - 짧은애를 CPU 가 실행을 하고 있다가  더 짧은 애가 와도 일을 끝까지 처리한다.

선점 - CPU 를 수행하고 있다가도 더 짧은 애가 오면 CPU 를 빼앗긴다

SRTF 라 부르기도 한다 (CPU 를 사용하는 중간에 들어올 수 도 있어서 남은 시간을 비교하게 된다)

 

평균 waiting time 이 가장 낮다.

 

SJF 는 2가지 문제점이 있다.

1. starvation - 짧은 job 을 선호해서 CPU 사용시간이 긴 job 은 영원히 기다려야 할 수 도있다.

2. CPU 사용시간을 미리 알 수 없다는것 (추정은 할 수 있음)

 

우선순위 스케줄링

우선순위가 가장 높은 애에게 CPU 를 준다.

우선순위 정수 값을 같이 프로세스에 포함시킨다. 작은 숫자가 우선순위가 높게 

 

비선점형 - 더 높은 우선순위가 와도 진행중인 CPU 를 끝내고 다음 job 을 실행한다

선점형 - 더 높은 우선순위가 오면 CPU 를 뻇어서 준다

 

마찬가지로 starvation 문제가 생길 수 있는데,

이걸 해결하기 위해 Aging 을 사용한다.

 

Aging - 우선순위가 낮은애라도 오래 기다리면 우선순위를 높여주는 방식

 

라운드로빈

현대 컴퓨터가 사용하는 CPU 스케줄링 방법이다.

 

각 프로세스가 동일한 크기의 할당 시간을 가지게 된다.

선점형 스케줄링 방식이다.

CPU 를 빼앗기면 레디 큐의 가장 뒤에 다시 줄을 선다.

 

CPU 를 줬다 뺏었다 하기 때문에

모든 job 들이 금방금방 CPU 를 받게 된다.

 

기다리는 시간이 job 의 CPU 사용시간에 비례하게 된다.