1. 프로세스
- 실행 중인 프로그램입니다.
- 운영체제에서 작업의 기본 단위입니다.
- 비동기적인 행위를 일으키는 주체입니다.
- 프로그램 코드 외에도 현재의 활동 상태를 갖습니다.
- 호출한 함수의 반환 주소, 매개변수 등을 저장하기 위해 스택을 사용합니다.
2. PCB
- 한 개의 프로세스에 관한 모든 정보를 구조체로 가지고 있는 것입니다.
- 프로세스가 생성될 때 함께 생성되고 프로세스가 종료될 때 함께 삭제됩니다.
3. 프로세스 종류
운영체제 프로세스
- 사용자 작업 처리를 위해 시스템 관리 기능을 담당합니다.
- 프로세스 실행 순서를 제어하거나 사용하고 있는 프로세스가 다른 사용자나 운영체제 영역을 침범하지 못하게 감시하는 기능을 갖습니다.
- 사용자 프로세스를 생성하거나 입출력 프로세스를 생성합니다.
사용자 프로세스
- 사용자 응용프로그램을 수행합니다.
- 사용자 코드를 수행합니다.
병행 프로세스
- 프로세스 여러 개가 동시에 실행됩니다.
독립 프로세스
- 한 프로세스가 시스템의 다른 프로세스에 영향을 주지 않거나 다른 프로세스의 영향을 받습니다.
협동 프로세스
- 다른 프로세스에 영향을 주거나 다른 프로세스에 의해 영향을 받습니다.
- 서로 통신하기 위한 수단과 동기화할 수 있는 기능이 필요합니다.
4. 프로세스 상태
생성
- 프로세스의 작업 공간이 메인 메모리에 생성됩니다.
- 운영체제 내부에 프로세스의 실행정보를 관리하기 위한 프로세스 제어 블록(PCB)이 만들어집니다.
- 프로세스의 이름(식별자)을 결정하고, 영역을 할당받고, PCB를 생성, 초기화하고, 이후 준비 상태 전이가 발생하여 준비 큐에 삽입합니다.
준비
- 프로세스가 CPU 할당을 기다리는 상태입니다.
- 단일 프로세서 시스템에서 여러 개의 프로세스들이 동시에 이 상태에 있을 수 있습니다.
- 대기 상태의 프로세스들은 CPU 할당을 위한 스케줄링에서 제외됩니다.
실행
- 프로세스가 CPU를 할당받아 작업을 수행하고 있는 상태입니다.
- 단일 프로세서 시스템에서는 오직 하나의 프로세스만 이 상태에 있을 수 있습니다.
- 다중 프로세서 시스템에서는 실행 상태의 프로세스가 여러 개 있을 수 있습니다.
대기
- 프로세스가 어떤 이벤트가 일어나기를 기다리는 상태입니다.
- 프로세스의 실행 과정에서 여러 번 이 상태에 속하게 됩니다.
종료
- 프로세스가 작업 수행을 끝낸 상태입니다.
- 프로세스에 할당된 모든 자원을 OS에 돌려주면 관련 PCB가 삭제됩니다.
5. 프로세스 상태 변이
time run-out(interrupt) : 실행 -> 준비
- 시간 할당량을 사용하는 일반적 우선순위 기반 스케줄링에서 실행 상태 프로세스의 시간 할당량이 모두 소진되었을 때 우선순위가 높은 다른 준비 상태의 프로세스가 있다면 실행 중이던 프로세스는 커널에 의해 스케줄링되기를 기다리는 준비 상태로 전이됩니다.
block : 실행 -> 대기
- 실행 상태의 프로세스가 동기식 입출력 요청을 하면, 일반적으로 해당 프로세스는 입출력이 완료될 때까지 CPU를 반납하고 대기 상태로 전이됩니다.
- 프로세스가 파일 읽기, 쓰기, 또는 다른 I/O 요구, 페이지 교환 수행을 커널에 요청하고 파일의 내용이 파일 캐시에 없는 경우 실행 상태에서 대기 상태로 전이됩니다.
wake-up : 대기 -> 준비
- 대기 상태의 프로세스가 요청하였던 입출력이 완료되면 해당 프로세스는 준비 상태로 전환하였다가 CPU를 할당받게 됩니다.
dispatch : 준비 -> 실행
- 프로세스 생성 상태에서 프로세서만 할당 받으면 실행 상태로 전이됩니다.
- 준비 프로세스 중 하나가 CPU 할당을 받아 실행 상태로 전이됩니다.
- 스케줄링 알고리즘에 의해 수행됩니다.
exit : 실행 -> 종료
- 실행 중인 프로세서가 작업을 완료하거나 실행이 중단됩니다.
6. 문맥 교환(context switching)
- CPU를 다른 프로세스에 바꾸어 주는 과정은 이전 프로세스의 상태를 저장하고 새로운 프로세스에 대해 상태를 적재하는 것을 요구합니다.