Last update: @1/7/2023
•
프로세스 상태
◦
프로세스가 가질 수 있는 대표적인 상태
▪
생성 상태(new)
: 프로세스를 생성 중인 상태로, 이제 막 메모리에 적재되어 PCB를 할당받은 상태
•
생성상태를 거쳐 실행할 준비가 완료된 프로세스는 곧바로 실행되지 않고 준비상태가 되어 CPU의 할당을 기다림
▪
준비 상태(ready)
: 당장이라도 CPU를 할당받아 실행할 수 있지만, 아직 자신의 차례가 아니기에 기다리고 있는 상태
•
준비 상태인 프로세스가 실행 상태로 전환되는 것을 디스패치(dispatch)라고 함
▪
실행 상태(running)
: CPU를 할당받아 실행 중인 상태
•
실행 상태인 프로세스는 할당된 일정 시간 동안만 CPU를 사용할 수 있음
•
이때 프로세스가 할당된 시간을 모두 사용한다면(타이머 인터럽트가 발생하면) 다시 준비 상태가 됨
•
실행 도중 입출력장치를 사용하여 입출력장치의 작업이 끝날 때까지 기다려야 한다면 대기 상태가 됨
▪
대기 상태(blocked)
: 입출력장치의 작업을 기다리는 상태를 대기 상태
•
입출력 작업이 완료되면 해당 프로세스는 다시 준비 상태로 CPU 할당을
기다림
•
대기상태가 되는 게 꼭 입출력 작업만 있는 것은 아니고, 일반적으로 표현하자면 특정 이벤트가 일어나길 기다릴 때도 대기상태가 됨. 다만 대부분의 원인이 입출력 작업 때문임
▪
종료 상태(terminated)
: 프로세스가 종료된 상태
•
프로세스가 종료되면 운영체제는 PCB와 프로세스가 사용한 메모리를 정리함
프로세스 상태 다이어그램(process state diagram)
•
프로세스 계층 구조
◦
프로세스는 실행 도중 시스템 호출을 통해 다른 프로세스를 생성할 수 있음
◦
이때 새 프로세스를 생성한 프로세스를 부모 프로세스(parent process), 부모 프로세스에 의해 생성된 프로세스를 자식 프로세스(child process)라고 함
◦
부모 프로세스와 자식 프로세스는 엄연히 다른 프로세스이기에 각기 다른 PID를 가짐
◦
일부 운영체제에서는 자식 프로세스의 PCB에 부모 프로세스의 PID인 PPIDParent PID가 기록되기도 함
◦
컴퓨터가 부팅될 때 실행되는 최초의 프로세스가 자식 프로세스들을 생성하고, 생성된 자식 프로세스들이 새로운 프로세스들을 낳은 형식으로 여러 프로세스가 동시에 실행됨
◦
이 과정을 도표로 그리면 트리 구조를 띄는데, 이를 프로세스 계층 구조라고 함
◦
최초의 프로세스
▪
운영체제별 최초의 프로세스
•
유닉스: init
•
리눅스: systemd
•
macOS: launchd
▪
최소의 프로세스 PID는 항상 1번이며 모든 프로세스 최상에 있는 부모 프로세스임
▪
확인하는 법 - 터미널에서 pstree 입력(brew에서 설치해야 했음)
•
프로세스 생성 기법 - 복제 및 옷 갈아입기
: 부모 프로세스는 fork를 통해 자신의 복사본을 자식 프로세스로 생성해내고(복제), 만들어진 복사본(자식 프로세스)은 exec를 통해 자신의 메모리 공간을 다른 프로그램으로 교체함(옷 갈아입기)
◦
fork를 통해 생성된 자식 프로세스는 메모리 내의 내용, 열린 파일의 목록 등 부모 프로세스의 자원들이 상속됨. PID값과 저장된 메모리 위치는 다름
◦
exec는 자신의 메모리 공간을 새로운 프로그램으로 덮어쓰는 시스템 호출됨. 코드 영역과 데이터 영역의 내용이 실행할 프로그램의 내용으로 바뀌고, 나머지 영역은 초기화됨
◦
부모 프로세스가 자식 프로세스를 fork한 뒤에 부모 프로세스, 자식 프로세스 누구도 exec를 호출
하지 않는 경우도 있음. 이 경우 부모 프로세스와 자식 프로세스는 같은 코드를 병행하여 실행하
는 프로세스가 됨