본문 바로가기
CONCEPT/OS

[OS] 프로세스 상태와 계층 구조, 프로세스 생성 기법

by 1005 2025. 3. 14.
프로세스 제어 블록(PCB)에 기록되어 관리됨.

 

 
* 생성 상태
 - 운영체제를 통해 이제 막 메모리에 적재되어 PCB를 할당 받은 상태
 - 준비가 완료되었다면 준비 상태로 변경됨.
 
* 준비 상태
 - 당장이라도 CPU를 할당 받아 실행할 수 있지만 자신의 차례가 아니기에 기다리는 상태
 - 자신의 차례가 된다면 실행 상태로 변경 (=디스패치)
 
* 실행 상태
 - CPU를 할당 받아 실행 중인 상태
 - 할당된 시간 모두 사용 시(타이머 인터럽트 발생 시) 준비 상태로 변경됨.
 - 실행 도중 입출력장치를 사용하면 입출력 작업이 끝날 때까지 대기 상태로 변경됨.
 
* 대기 상태
 - 프로세스가 실행 도중 입출력장치를 사용하는 경우
 - 입출력 작업은 CPU에 비해 느리기에 이 경우 대기 상태로 접어듬.
    -> 입출력 작업은 처리가 느리니까 CPU를 다른 프로세스가 사용할 수 있도록 비켜주는 것.
 - 입출력 작업이 끝나면(=입출력 완료 인터럽트를 받으면) 준비 상태로 변경됨.
 
* 종료 상태
 - 프로세스가 종료된 상태 
 - PCB 폐기, 프로세스의 메모리 영역 정리
 

프로세스 상태 다이어그램

 


프로세스 계층 구조


- 부모 프로세스와 자식 프로세스는 별개의 프로세스이므로 각기 다른 PID를 가짐.
- 일부 운영체제에서는 자식 프로세스 PCB에 부모 프로세스 PID(PPID= Parent PID)를 명시하기도 함.
 
* 똑같은 프로그램을 두 번 실행 했을지라도 그 둘의 PID는 다름.
* 자식 프로세스는 또 다른 자식 프로세스를 낳고 그 자식 프로세스가 또 다른 자식 프로세스를 낳고 ,,,
   => 프로세스의 계층적인 구조 형성
 

"PSTree" 명령어를 통해 최초의 프로세스 확인 가능함. 옛날 운영체제는 최초의 프로그램이 init 프로세스 였지만 최근에는 systemd라고 하는 프로세스가 최초의 프로세스로써 사용됨. macOS는 launchd가 최초의 프로세스이다.

참고) 아래 내용은 프로세스 생성 기법으로 windows 운영체제와는 큰 관련이 없음. unix 와 관련된 내용임.
 
Q) 부모 프로세스는 자식 프로세스를 어떻게 만들어 내고, 자식 프로세스는 어떻게 자신만의 코드를 실행할까?
: 복제와 옷갈아입기 라고 하는 두 가지 과정을 거쳐서 생성됨.

자식은 부모를 복사하지만 PID와 저장된 메모리의 위치는 다름!
exec() 명령어를 통해서 부모 프로세스가 갖고 있는 프로그램의 내용과 자식 프로세스가 갖고 있는 프로그램의 내용이 달라지게 됨.

댓글