Process States (or Process Life Cycle)
이는 프로세스가 가질 수 있는 상태를 가르키며, 프로세스의 life cycle을 보여준다.
프로세스는 프로그램이 실행되기 위해 메인메모리에 적재된 프로그램의 instance라고 할 수 있다.
2023.12.27 - [개발환경] - [CE] Process versus Thread
[CE] Process versus Thread
Process versus Thread Process (프로세스) Process는 자신을 위한 독립된 메모리 공간 등의 리소스를 차지한 상태에서 실행 중인 프로그램의 instance 라고 볼 수 있음. 독립된 execution unit (실행 단위)이며, sel
ds31x.tistory.com
다음 그림은 프로세스의 life cycle을 7-state 로 나타낸 다이아그램임.

Ready와 Suspended Ready를 묶어 Ready로 표현하고,
Asleep와 Suspeded block을 묶어 Sleep로 표현한
5-state diagram도 있음.
위 그림의 OS에서 프로세스의 life cycle이고, Linux의 ps로 확인가능한 프로세스 상태하고는 약간의 차이가 있음:
| Linux / ps 관점 | ps 상태문자 | 7-state process model |
desc. |
| 생성중 | 거의 관찰 불가 | created | 너무 짧아서 관측이 불가 |
| Running | R | running | 단, R 은 ready 도 포함. |
| Ready / Runnable | R | ready | ps 상에선 running 과 ready 구분 불가 |
| Interruptible Sleep | S | asleep | 대체로 대응 signal로 깨어날 수 있는 대기 socket 입력 대기, sleep(), wait(), pipe 입력 대기 등 |
| Uninterruptible Sleep | D | asleep | 대체로 대응 signal로도 즉시 깨어나지 않는 대기. disk I/O, filesystem, 일부 device I/O 대기 등 |
| Stopped by job control (Stopped) |
T | suspended ready 와 직접 대응 아님 |
완전히 동일하진 않음. |
| Tracing stopped | t | suspended ready 와 직접 대응 아님 |
완전히 동일하진 않음. |
| Zombie | Z | terminated 이후 parent 회수 대기 |
7-state 기본 상태와 별도. |
| Dead | X | terminated | 너무 짧은 내부 상태라서 관찰하기 어렵다 Linux ps 매뉴얼에서도 dead - should never be seen으로 설명. |
| Swapped-out ready | ps 상태 문자로 직접 식별 어려움 |
suspended ready | 현대 Linux는 process전체를 swap-out 하지 않고 page단위로 처리하므로 독립된 매핑은 없음: 굳이 애기하면 R |
| Swapped-out blocked | ps 상태 문자로 직접식별 어려움 |
suspended blocked | ps는 memory residency를 표시하지 않기 때문에 S,D로 표기되긴 하나 이를 구분하여 표시 하지 않음. |
- Linux의 interruptible/uninterruptible sleep을 교과서 모델에서는 asleep으로 묶을 수 있음
- ps의 T/t 는 signal 또는 디버거 때문에 stopped인 상태인 반면
- 7-state process model 의 suspended ready는 ready 상태였으나 suspend되어 active 영역 밖에 있는 상태임.
- 둘 다 cpu를 당장 할당받지 못한 상태로 사용자/os 의 resume 또는 continue 가 있어야 다시 실행된다는 공통적을 가짐.
- 하지만 Linux의 T/t 는 메모리에 남아있을 수 있으나, suspended ready는 메모리에 남아있지 않음.
T/t는 “실행 가능하지만 외부적으로 멈춰 있음”이라는 점에서 suspended ready와 유사하다.
하지만 T/t는 swap-out 상태가 아니라 stopped/traced 상태이므로 7-state의 suspended ready와 완전히 동일하지 않음.
https://dsaint31.tistory.com/234
[Linux] ps 명령어
linux에서 현재 동작하고 있는 process들에 대한 정보(목록 및 상태)를 보여줌.ps auxBSD 형식으로 현재 동작하고 있는 모든 프로세스에 대한 아래의 정보를 출력함.a : BSD 계열 옵션으로 터미널에 연관
dsaint31.tistory.com
1. Created (or New) State
해당 프로세스의 관리를 위해 필요한 모든 정보를 저장하게 되는 Process Control Block (PCB)를 OS가 생성한 상태임
(PCB는 main memory에서 OS의 kernel에 할당된 영역에 존재함.)

가능한 상태변화
- Created (or New)상태에서 main memory 에 공간이 충분하면 Ready 상태가 된다 (이 상태변화를 admit이라고 칭함)
- main memory 공간이 부족하면 swap 영역에 할당되어 Suspended Ready 상태가 된다.
어떤 job을 main memory에 올릴지를 결정하는
Long-term Scheduler에 의해
선택된 프로세스들이 Ready State가 된다.
즉, Job Scheduler라고도 불리는 Long-term Scheduler에 의해
Ready Queue에 어떤 프로세스가 올려질지가 결정됨.
2. Ready State
프로세스가 생성된 상태로 프로세스가 실행되기 위한 모든 resource를 CPU만 제외하고 할당받은 상태임.
Process Scheduling에 의해 CPU 에 할당되기 전의 대기 상태로 즉시 실행이 가능한 상태임.
Von Neuman Architecture에서
모든 실행될 명령어의 집합(프로그램)은 main memory에 올려져야 함.
CPU 할당을 대기하고 있는 Ready State의 프로세스 들은 ready queue에 들어가 있는 상태임.
- ready queue에서는 FIFO가 기본이나, 사용하는 Process Scheduling에 따라 다름.
- Process Scheduling은 다음을 참고: https://dsaint31.me/mkdocs_site/OS/process_sched/
- FCFS (First Come, First Served), SJF (Shortest Job First), Round Robin 등이 있음.
- Process Scheduling 을 하는 스케쥴러를 Short-term Scheduler라고도 부름.
가능한 상태변화
- Ready 상태에서 CPU를 할당받게 되면,
PCB의 정보가 CPU내의 register로 복사되고 실제 실행이 되는 running상태가 됨.
(이 상태변화를 dispatch라고 칭함) - 이 상태에서 main memory가 부족해지는 등의 이유로 Suspended Ready 상태가 될 수도 있음
(이 상태변화를 swap out 또는 suspend 라고 함)
3. Suspended Ready
main memory에 할당될 공간 등의 부족으로 인해 main memory에 할당을 대기하고 있는 상태.
main memory에 할당될 데이터(memory image라고 불림)를 main memory 대신
swap 공간 (=virtual memory)에 할당된 상태임.
가능한 상태변화
- main memory에 공간이 충분해지면 Ready 상태가 된다. (이를 swap in 또는 Resume 이라고 부름)
어떤 프로세스를 Swap-out 시킬지와 Swap-in 시킬지의 결정은
Medium-term Scheduler에 의해 결정됨.
참고로 현대 Linux는 process전체를 swap-out 하지 않고 page단위로 처리하기 때문에 거의 발생하지 않음.
Suspended Blocked도 마찬가지로 현대 Linux ps에서 별도 상태 문자로 표시되지 않는다.
4. Running State
프로세스가 실제로 수행되는 상태임.
(하나의 core에서는 오직 하나의 process만이 Running State임.)
참고로, 이 상태에서 다른 상태가 되는 모든 경우에 해당 프로세스와 관련된 cpu의 register의 정보로 PCB가 업데이트 됨
(이 과정을 context switching이라고 부름).
가능한 상태변화
- 프로세스들에 할당된 time 이 종료(time out interrupt 발생)되면 다시 Ready State가 됨.
(이 상태 변화를 preemption 이라고 함)- Preemption(선점)은 현재 Running State에 있는 process가 스스로 CPU를 반납한 것이 아니라,
- OS scheduler에 의해 CPU 사용권을 강제로 회수당하는 것을 의미함.
- 혹은 I/O 작업 요청처럼 특정 resource의 할당이 필요한 경우 해당 resource가 할당되는 event를 기다리는 Asleep State가 됨.
(Blocked 라고도 불리며, 이 상태 변화를 sleep 또는 block이라고 부름) - 또는 이 상태에서 실행 결과로 해당 프로세스에 주어진 job이 종료된 경우엔 terminated 상태가 된다.
Time Slicing과 Time Quantum
- Time Slicing은 대표적인 process scheduling 방식의 하나로, 각 프로세스에 고정된 시간을 할당하여 CPU를 공정하게 분배하는 메커니즘을 의미함.
- Round Robin 방식(time slicing의 대표적인 예)의 process scheduling에서 각 프로세스가 cpu에서 실행되도록 지정된 고정된 시간을 Time Quantum 이라고 부름.
- Time Qunatum이 지나치게 짧으면 context switching 이 너무 빈번하게 발생하여 실제 수행보다 더 긴 시간을 context switching에 보내게 되어 성능 감소로 이어짐.
- 반대로 너무 길면, 컴퓨터 시스템의 responsiveness(반응성)이 떨어진다.
결론적으로 Time Quantum은 Time Slicing (CPU시간을 분배하는 메커니즘)에서 프로세스에게 할당한 CPU사용시간이라고 할 수 있음.
5. Asleep State
프로세스가 다른 자원이 필요하여 이를 요청하고 할당(~event)을 기다리는 상태(event wait)이다.
프로세스가 요청하는 각 resource별로 Queue가 존재(e.g. I/O Queue)하며 해당 Queue에서 resouce를 대기함
가능한 상태변화
- 요청한 자원을 할당 받으면(=event completion) 실행을 계속할 수 있게 되나 곧바로 Running 상태가 되지는 못하고, 다시 Ready 상태가 된다. (이 상태변화를 wake up이라고 부름)
- Asleep 상태에서 main memory 공간 부족 등이 발생하면 swap out되어 Suspended Blocked 상태가 될 수도 있다.
6. Suspended Blocked State
프로세스가 특정 자원을 요청하고 나서 해당 자원의 할당을 기다리는 상태인 점은 Asleep State와 같으나
main memory를 할당받지 못하여 정보가 swap 영역에 있는 상태를 가르킴.
가능한 상태변화
- 요청한 자원을 할당 받으면 Suspended Ready 상태가 된다 (이 상태변화를 wake up이라고 한다.)
- main memory를 할당 받을 경우 swap in이 일어나서 Asleep 상태가 된다.
다만
현대 Linux에서는 전통적인 의미처럼 process 전체를 swap-out하여 Suspended Blocked 상태로 관리하는 경우는 거의 없고,
page 단위로 memory와 swap을 관리한다.
따라서 일반적인 ps 명령의 상태 문자만으로는 Asleep 상태와 Suspended Blocked 상태를 직접 구분하기 어렵다.
7. Terminated State
프로세스의 수행이 종료된 상태로, 할당받은 자원들을 반납이 이루어지고 해당 프로세스는 소멸됨.
(OS는 이 과정에서 비슷한 job수행들을 위해 커널의 일부 PCB 정보는 남기고 프로세서 관리를 위한 정보를 수집함)
종료된 프로세스의 데이터가 OS가 의도치 않게 main memory에 남아 소멸이 제대로 이루어지지 않을 경우를
Zombie State라고도 부름.
같이 보면 좋은 자료
https://itwiki.kr/w/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4_%EC%83%81%ED%83%9C
IT위키
IT에 관한 모든 지식. 함께 만들어가는 깨끗한 위키
itwiki.kr
https://vmilsh.tistory.com/374
운영체제 프로세스 생애주기(Process Lifecycle)에 대해서
안녕하세요? 허니입니다. 운영체제의 프로세스 생애주기(Process Life Cycle)에 대해 포스팅을 하려고 합니다. 프로세스 라이프사이클은 마치 한 사람의 삶의 모습과 닯아 있기 때문에 이해하기 쉬운
vmilsh.tistory.com
Linux 커널 관점에서 이해하는 Session, Process Group, Process, Thread와 Job Control의 실제 동작
1. Linux 커널 관점에서의 Inclusion Heirarchy of Execution Unitssession └─ process group └─ process └─ thread (= task (=task_struct), kernel scheduling unit)Linux 커널에서스케줄링의 최소 단위(scheduling entity)는 thread(task
ds31x.tistory.com
https://dsaint31.tistory.com/234
[Linux] ps 명령어
linux에서 현재 동작하고 있는 process들에 대한 정보(목록 및 상태)를 보여줌. 프로세스의 상태 (STAT)는 다음의 값과 의미를 가짐.R : Running 또는 Runnable(ready), 실행상태 (혹은 실행대기)S : (Interruptible)
dsaint31.tistory.com
'CE' 카테고리의 다른 글
| [CE] Concurrency (동시성)과 Parallelism (병렬성) (0) | 2024.05.28 |
|---|---|
| [CE] Terms: HDD, Partition, Volume, Drive and File System. (0) | 2024.05.15 |
| [CE] Virtual Machine, Web Browser and Bytecode. (0) | 2024.04.22 |
| [CE] From Switch To RAM (0) | 2024.04.10 |
| [CE] Compilation 의 종류 (0) | 2024.01.18 |