1. 프로세스 상태 모델
- Running or Not Running (Ready State + Blocked State)
- 프로세스가 실행중이지 않을 경우 (Not Running) 두 가지 상태로 분류할 수 있다.
- 준비 상태 : 프로세서가 주어진 경우 실행 가능한 상태 (Multi Processing에서 Time Out등으로 후순위로 밀려나간 경우 등)
- 블럭 상태 : 프로세서가 주어져도 실행되지 못하는 상태. I/O 등의 이벤트를 기다리는 상태들. 이벤트가 완료되면 Running State로 돌아가는 것이 아닌 Ready State로 넘어가 Ready queue에서 순서를 기다린다.
- 결론적으로 Ready queue, Blocked queue의 두 가지 큐가 존재한다.
- 블럭 상태로 편입되는 경우가 다양한데, 원인에 따라 개별적인 Blocked queue를 두고 보관하면 더 효율적인 프로세스 관리가 가능하다. (Multiple Blocked Queue)
2. 서스펜디드 프로세스(Suspended Process)
- Suspended State? 메인 메모리에 보조기억장치로 밀려나간 프로세스. 블럭 상태에서 밀려나간 경우 Suspended Blocked State, 준비 상태에서 밀려나간 경우 Suspended Ready State로 분류한다.
- 왜 필요한가? 메인 메모리 내의 모든 프로세스가 입출력 이벤트 등의 이유로 Blocked State로 빠져버리는 경우, CPU는 입출력이 들어올 때 까지 대기하여 효율이 떨어지게 된다. 따라서 입출력을 대기하고 있는 프로세스를 보조기억장치(HDD, SSD)로 이동(Swap)시키는 것이다. 그렇게 불필요하게 메인 메모리를 차지하는 프로세스들을 정리하여 프로세스 처리 공간을 확보하는 것이다.
- 디버깅 등을 목적으로 명시적으로 Swap하는 경우도 있다.
- 정해진 시간에 실행되는 프로그램들은 임의로 Swapping하여 시간에 맞춰 메인 메모리로 호출하여 실행하기도 한다.
3. PCB (Process Control Block)
- 프로세스 자체에 대한 정보를 저장하는 자료구조. 각 프로세스마다 하나씩 존재한다.
- 사용자는 의식하지 못하지만, 운영체제가 프로세스를 생성한 후에 관리해야 하는 정보를 메인 메모리 공간 내에 저장한다.
- Contain Attributes
- 프로세스 식별자 (Identifier) : 0부터 1씩 증가되는 정수값을 할당.
- 상태 (State)
- 우선순위 (Priority)
- 중단점 (Program Counter) : 기타 레지스터 값을 저장
- 주소값 (Memory Pointer)
- 입출력 장치 정보
- 자원 통계 정보
- 통신 정보
- Process Descriptor
- 리눅스 환경에서의 PCB를 뜻한다.
- 원활한 공유를 위해 Task Struct 하위에 여러 개의 Struct로 분리하여 관리한다.
4. Process Scheduling
- CPU가 처리할 다음 프로세스를 지정해주는 작업
- PCB 내부의 상태, 우선순위 등을 종합적으로 고려하여 판단한다