프로그램1, 프로그램2, 프로그램3이 있다고 가정하자
각 프로그램은 실행 시간이 초 단위로 차이가 난다면 최적의 스케쥴링 알고리즘은 세 프로그램을 연속적으로 프로그램을 실행함으로 CPU를 100% 사용하는 방법이다.
이를 위해서는 프로세스 상태에 대해서 알아야 한다.
프로세스 상태
- running state: 현재 CPU에서 실행 상태
- ready state: CPU에서 실행 가능 상태(실행 대기 상태)
- block state: 특정 이벤트 발생 대기 상태
- block -> ready -> running
- new: 프로세스가 생성중인 상태
- exit: 프로세스가 종료된 상태
- 프로세스가 가지고 있는 시스템 자원들을 반납하는 과정
프로세스 상태간 관계
- CPU가 running 상태 프로세스가 파일 읽기를 요청
- 요청이 완료될때까지 프로세스가 동작을 못하므로 프로세스 block 상태
- CPU가 running 상태의 프로세스를 Ready 상태로 변경
- 요청 완료 후 프로세스스가 ready 상태로 변경
큐를 적용한 프로세스 상태와 스케쥴러
- 레디 상태의 1번 프로세스를 FIFO 로직에 의해 큐에서 pop => CPU 할당
- CPU에 1번 프로세스가 올라와 있으므로 1번 프로세스의 상태는 running
- 1번 프로세스의 단위 실행이 완료되면 ready 상태 큐의 맨 뒤로 들어감
- 다음 순서인 2번 프로세스가 CPU 할당되고 running 상태
- 2번 프로세스의 단위 실행이 완료되고 wait이 존재하므로 block 큐로 들어감
- 3번 프로세스 CPU 할당되고 running 상태
- 3번 프로세스 단위 실행되고 ready 상태 큐의 맨 뒤로 들어감
- 1번 프로세스 pop -> CPU 할당 -> 1번 프로세스 종료 상태
- 2번 프로세스 blcok 상태 유지
- 3번 프로세스 pop -> CPU 할당 -> 단위 실행 후 block 상태 큐로 들어감
....
idle : CPU가 아무 실행도 하지 않는 상태