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를 계속 사용하는 방식
스케쥴링 알고리즘
'OS' 카테고리의 다른 글
[OS] 디바이스 드라이버란 (0) | 2020.06.13 |
---|---|
[OS] 메모리 관리(Memory Management) (0) | 2020.06.10 |
[OS] 프로세스간 통신(Inter Process Communication) (0) | 2020.06.07 |
[OS] 프로세스의 생성과 쓰레드(Thread) (0) | 2020.06.07 |
[OS] 문맥교환(Context Switch) (0) | 2020.06.07 |