Search

10-2 프로세스 상태와 계층 구조

Last update: @1/7/2023
혼자 공부하는 컴퓨터구조 + 운영체제

운영체제

09 운영체제 시작하기

10 프로세스와 스레드

11 CPU 스케줄링

12 프로세스 동기화

13 교착 상태

14 가상 메모리

15 파일 시스템

프로세스 상태
프로세스가 가질 수 있는 대표적인 상태
생성 상태(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를 호출 하지 않는 경우도 있음. 이 경우 부모 프로세스와 자식 프로세스는 같은 코드를 병행하여 실행하 는 프로세스가 됨