CPU는 결국 시스템내에 하나밖에 존재하지 않으므로, 일반적으로 여러프로그램이 동시에 수행되는 시분할

환경에서 CPU는 매우 효율적으로 관리되어야 한다.

 

그렇다면 시분할 시스템에서 타이머인터럽트에 의해, 혹은 I/O요청에의해 다른프로세스로의 CPU할당이 일어날때 굳이 스케줄링 기법이 필요한 이유가 무엇일까.

이에대해 잠시 CPU버스트와 I/O버스트를 알고 넘어가자.

 

 

CPU버스트란, 프로그램이 CPU를 직접 가지고 빠른 명령(add,Load등의 기계어)을 수행하며, 프로그램이 I/O를 한번 수행후 다음번 I/O를 수행하기까지 직접 CPU를 가지고 명령을 수행하는 일련의 작업이다.

 

I/O버스트란,  I/O 요청이 발생해 커널에의해 입출력 작업을 진행하는 비교적 느린 작업이다.

 

각프로그램은 두개의 작업을 모두 포함하나, 두개의 차지하는 비율이 균일하지는 않다.

CPU버스트가 빈번한 프로세스를 CPU 바운드 프로세스라고 하며, I/O버스트가 빈번한 프로세스를 I/O바운드 프로세스라고 한다. 이렇듯 CPU를 사용하는 패턴이 상이한 여러 프로그램이 동일한 시스템 내부에서 함께 실행되기 때문에 CPU스케줄링 기법이 필요하다.

 

예를들어 대부분의 프로세스들은 CPU연산보다 I/O작업을 처리하는 비중이 큰데, 이 경우 사용자에게 입력이 들어왔을때 CPU의 빠른처리를 필요로 한다. 대화형 작업이므로, CPU의 빠른 응답또한 중요하다는 것이다. 따라서 이경우는 CPU버스트가 짧은 프로세스에게 우선적으로 CPU를 사용할 수 있도록하는 스케줄링이 필요한 것이다. 이는 결국 빠른응답으로 인한 I/O장치의 이용률을 높여 효율을 높이는 결과를 가져온다. 

 

 

 

<CPU 스케줄링이 발생하는 경우>

 

1)실행상태의 프로세스가 I/O요청에 의해 봉쇄상태로 바뀌는 경우

2)실행상태의 프로세스가 타이머 인터럽트 발생에 의해 준비상태로 바뀌는 경우

3)I/O 요청으로 봉쇄상태에 있던 프로세스의 I/O작업이 완료되어 인터럽트가 발생하고 그 결과 이 프로세스의 상태가 준비상태로 바뀌는 경우

4)CPU에서 실행상태에 있는 프로세스가 종료되는 경우

 

<선점형(preemptive) 스케줄링과 비선점형(nonpreemptive) 스케줄링>

 

선점형 스케줄링 : 프로세스가 CPU를 계속 사용하기를 원하더라도 강제로 빼앗을수있는 방식

비선점형 스케줄링 : CPU를 휙득한 프로세스가 스스로 CPU를 반납하기 전까지는 CPU를 계속 사용하는 방식

 

 

 

 

스케쥴링 알고리즘

 

https://velog.io/@pa324/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EC%8A%A4%EC%BC%80%EC%A5%B4%EB%A7%81-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B8%B0%EB%B3%B8-uwk12tlqwj

 

운영체제 - 스케쥴링 알고리즘 기본

프로세스란 ? 실행중인 프로그램은 프로세스라고 한다. 메모리에 올려져서, 실행 중인 프로그램 모든 코드는 메모리에 올려진 후 한줄 씩 cpu에서 실행되는 구조이다. 코드이미지(바이너리) : 실�

velog.io