프로세스 상태와 계층 구조

Sundae·2023년 8월 26일
0

운영체제

목록 보기
4/15

프로세스 상태


프로세스는 여러 상태를 거치며 실행된다. 그리고 운영체제는 프로세스의 상태를 PCB를 통해 인식하고 관리한다.

프로세스의 상태를 표현하는 방식은 운영체제마다 조금씩 차이가 있지만, 프로세스의 대표적인 상태는 아래와 같다.

생성 상태

막 메모리에 적재되어 PCB를 할당받은 상태. 즉, 프로세스를 생성 중인 상태를 생성 상태(new)라고 한다.

준비 상태

준비 상태(ready)는 CPU를 할당받아 실행 하기 전 자신의 차례를 기다리는 상태이다. 이때 준비 상태인 프로세스가 실행 상태로 전환되는 것을 디스 패치(dispatch)라고 한다.

실행 상태

실행 상태(running)는 현재 실행 중인 상태를 의미한다. 실행 상태 프로세스는 할당받은 시간만큼만 CPU를 사용할 수 있다. 이때 타이머 인터럽트가 발생하면 다시 준비 상태가 된다. 또한, 실행 도중 입출력 장치를 사용하고 입출력장치의 작업이 끝날 때까지 기다려야할 때 대기 상태로 전환된다.

대기 상태

프로세스는 실행 도중 입출력장치를 종종 사용하는데, 이때 입출력장치는 CPU보다 처리 속도가 매우 느리기에 입출력 작업을 요청한 프로세스는 입출력 인터럽트를 받을 때까지 기다려야 한다. 이상태를 대기 상태(blocked)라고 한다.
이후에 해당 프로세스는 다시 준비 상태가 되어 CPU 할당을 기다린다.

종료 상태

종료 상태(terminated)는 말그대로 프로세스가 종료된 상태이다. 이때 운영체제는 프로세스의 PCB와 메모리를 정리한다.


아래는 프로세스 상태를 도표로 표현한 것인데, 아래와 같은 도표를 프로세스 상태 다이어그램(process state diagram)이라고 한다.

아래와 같이 컴퓨터 내의 프로세스는 여러 상태를 거치며 실행된다. 운영체제는 이 상태를 PCB에 기록하며 관리한다.

프로세스 계층 구조


프로세스는 실행 도중 다른 프로세스를 생성할 수 있다. 이때 프로세스를 새로 생성한 프로세스를 부모 프로세스(parent process)라고 하고, 부모 프로세스에 의해 생성된 프로세스를 자식 프로세스(child process)라고 한다.

그리고 둘은 다른 프로세스이기에 PID 또한 다른 PID를 가진다.
일부 운영체제에서는 자식 프로세스의 PCB에 부모 프로세스의 PID인 PPID(Parent PID)가 기록되기도 한다.

부모 프로세스로부터 생성된 자식 프로세스는 또 다른 자식 프로세스를 생성할 수 있다. 많은 운영체제에서는 이와 같이 프로세스가 프로세스를 생성하는 계층적인 구조를 사용하여 프로세스를 관리한다.

프로세스 생성 기법


부모 프로세스가 자식 프로세스를 만드는 방식은 forkexec를 통해 진행된다.

부모 프로세스는 fork라는 시스템 호출을 통해 자신의 복사본을 자식 프로세스로 생성한다. 자식 프로세스는 부모 프로세스이 복사본이기 때문에 부모 프로세스의 자원들이 자식 프로세스에게 상속된다. 이때 자식프로세스는 상속을 받되, PID값이나 저장된 메모리 위치는 다르다.

이렇게 fork를 통해 복사본이 만들어진 뒤에 자식 프로세스는 exec라는 시스템 호출을 통해 자신의 메모리 공간을 새로운 프로그램으로 덮어쓴다.
다시 말해, exec를 호출하면 코드 영역과 데이터 영역의 내용이 실행할 프로그램으로 바뀌고 나머지 영역은 초기화 된다.

profile
성장 기록 / 글에 오류가 있다면 댓글 부탁드립니다.

0개의 댓글