new
: 프로세스 생성 중
- 커널 공간에 PCB가 만들어진 상태 (메모리 할당 받기 전)
ready
: 프로세스가 CPU를 기다리는 상태
- 프로세스가 메모리에 적재된 상태로 필요한 자원을 모두 얻은 상태
runnig
: 프로세스가 CPU를 할당받아 명령어를 수행중인 상태
- CPU가 하나인 경우, 여러 프로세스가 동시에 실행되도 실제로 실행중인 프로세스는 매 시점 하나 뿐이다.
blocked
: 프로세스가 CPU를 할당받아도 당장 실행할 수 없는 상태
- 현재 프로세스가 I/O작업 등을 처리 중인 상태
프로세스가 running
상태에서 디스크 I/O작업을 하는 동안은 CPU를 점유하고 있어도 다음 명령어를 수행하지 못하기 때문에 CPU를 낭비하지 않기 위해서 I/O 작업을 하는 프로세스는 CPU를 반납하고 Device Queue에 들어가게 된다.
terminated
: 종료시스템 콜을 받고 PCB가 할당 해제되기 직전의 상태
- 프로세스의 실행이 완료되고 할당된 CPU를 반납한 상태. 커널 공간내의 PCB는 남아있다. 완전히 종료되면 더 이상 프로세스가 아니다.
suspended
: 프로세스의 중지 상태
- 메모리를 강제로 뺏긴 상태로 특정한 이유로 프로세스의 수행이 정지된 상태. 외부에서 다시 재개시키지 않는 이상 다시 활성화 될 수 없다. (blocked
는 잠시 중지되어있다 끝나면 다시 ready
상태로 돌아온다.)
suspended ready
: ready
상태에 있던 프로세스가 디스크로 스왑아웃suspended blocekd
: blocked
상태에 있던 프로세스가 디스크로 스왑아웃new
→ ready
: new
상태에서 OS에 의해 승인을 받아 프로세스가 생성되면 해당 프로세스의 PCB가 Ready Queue에 올라온다.
ready
→ running
: Ready Queue에 있는 프로세스들 중에서 스케줄링 알고리즘에 의해 선택받은 프로세스가 CPU를 할당받는다.
running
→ ready
: CPU를 할당받아 명령어를 수행하다 특정 이유로 다른 프로세스에게 CPU를 주고(dispatch) 다시 CPU를 기다린다.
1. time out : 정해진 시간만큼 CPU를 사용하고 CPU를 반납
2. interrupt : 우선순위가 높은 프로세스가 Ready Queue에 존재하는 경우, 그 프로세스에게 CPU를 할당
running
→ blocked
: 현재 CPU를 받아 명령어를 수행중인 프로세스가 I/O 작업을 해야하는 경우 CPU를 반납하고 Device Queue에 들어가게 된다.
blocked
→ ready
: I/O 작업을 위해 Device Queue에 있던 프로세스가 작업을 마치면 CPU에게 인터럽트를 발생시켜 끝났음을 알리고 프로세스는 Ready Qeueu에 들어가게 된다.
running
→ terminated
: 프로세스 실행이 완료되면 자원을 반납한다.
blocked
, ready
→ suspended blocked
, suspended ready
: 대표적으로 메모리가 부족하여 blocked
, ready
상태의 프로세스들이 디스크로 swap되는 경우가 있다.
suspended blocked
→ suspended ready
: suspended blocked
인 프로세스가 blocked되었던 조건을 만족하게 되면 suspended ready
상태로 바뀌게 된다.
어떤 프로세스에게 자원을 할당할 지 결정하는 운영체제 커널의 모듈을 지칭한다.
프로세스를 스케줄링하기 위한 큐에는 세가지 종류가 존재한다.
Job Queue : 프로세스의 상태와 무관하게 시스템 내의 모든 프로세스를 관리한다. 따라서 작업 큐에 내에 존재한다고 해서 반드시 메모리를 가지고 있는 것은 아니다.
Ready Queue : 현재 메모리 내에 있으면서 CPU를 할당받기를 기다리고 있는 프로세스들을 관리한다.
Device Queue : Device 입출력 작업을 대기하고 있는 프로세스들을 관리한다. 장치 큐에 속한 프로세스들은 blocked
상태가 된다.
이 각각의 큐에 프로세스들을 넣고 빼주는 스케줄러에도 크게 세 가지 종류가 존재한다.
어떤 프로세스를
Ready Queue
에 넣을 것인가?
작업 스케줄러라고도 부르며 어떤 프로세스에 메모리를 할당하여 Ready Queue
로 보낼지 결정하는 역할을 한다. 디스크에서 하나의 프로그램을 가져와서 커널에 등록하면 프로세스가 되는데, 이 때 디스크에서 어떤 프로그램을 가져와 커널에 등록할지 결정한다.
메모리와 디스크 사이의 스케줄링을 담당하며 프로세스에 메모리 및 각종 리소스를 할당한다.
메모리에 동시에 몇 개의 프로그램이 올라갈 것인지를 제어하며 장기스케줄러에 의해 프로세스의 상태가 new
에서 ready
로 전이된다.
Ready Queue
에 넣어주게 된다.어떤 프로세스에게 CPU를 할당해 줄 것인가?
어떤 프로세스를 다음 순서에 실행 상태로 만들 것인지 결정한다.
CPU와 메모리 사이의 스케줄링을 담당하며 ReadyQueue
에 존재하는 프로세스 중 어떤 프로세스를 running
상태로 만들 것인지 결정한다.
일반적으로 스케줄러라고 하는 것은 단기 스케줄러를 의미하며, 단기 스케줄러는 미리 정한 스케줄링 알고리즘에 따라 CPU를 할당할 프로세스를 선택한다.
단기스케줄러는 ms 이하의 시간 단위로 매우 빈번하게 호출되므로 수행 속도가 충분히 빨라야 한다.
메모리에 적재된 프로세스의 수를 관리한다
너무 많은 프로세스에게 메모리를 할당해 시스템의 성능이 저하되는 경우를 해결하기 위해 메모리에 적재된 프로세스의 수를 동적으로 조절하기 위해 추가된 스케줄러이다.
메모리의 여유 공간 마련을 위해 프로세스 중 일부로부터 메모리를 통째로 할당 해제 하여 디스크의 스왑 영역에 저장해두는데, 이와 같은 행위를 스왑 아웃(swap out
) 이라고 한다.
장기 스케줄러와 마찬가지로 메모리에 올라와 있는 프로세스의 수를 조절하는 역할을 하며 현대의 운영체제에서 거의 사용되지 않고 있다.
Reference
https://kosaf04pyh.tistory.com/191
https://kosaf04pyh.tistory.com/190