Intro
각 프로세스는 우리의 RAM에서 이런 구성으로 할당이 되어 돌아간다.
* 참고(논외): 프로세스가 new상태일 때 값들이 세팅된다. 보조기억장치 내부에 Virtual Address Space(VAS, 가상 주소 공간)이 생성되는데, 거기에 이러한 값들을 준비둔다. 프로세스가 ready상태가 되기 전에 VAS의 값들을 메인메모리에 올린다.
매번 이렇게 RAM에서 활발히 돌아가고 있는 프로세스가
어떤 상태를 거쳐가며 실행되고 종료되는지!
즉 프로세스 상태도를 짚어볼 것이다.
프로세스 생성
프로세스 생성의 세가지 경우를 보자면...
1. OS가 생성
2. 현존하는 프로세스가 다른 프로세스를 생성 (부모 & 자식 프로세스)
3. 사용자 요청으로 생성
프로세스의 종료
프로세스는 정상 or 비정상종료 될 수 있다.
- 정상 종료
: 프로세스가 exit을 호출하여 종료
: 부모가 자식 프로세스 없애달라고 요청
- 비정상 종료
: 허용되지 않는(사용중인) 메모리 영역에 접근하려 할 경우
: Error 발생시
프로세스 상태도
5개의 상태로 표현한 상태도다.
상태도를 두분류로 먼저 크게 보자면 Running과 Not Running이겠다.
Running 상태
프로세스가 CPU 자원을 할당받아서 프로그램의 instruction을 수행하는 상태다.
프로세스 전환(by 멀티태스킹 정책)이 일어날 때 ready상태로 전환된다. 이를테면 타임쉐어링 정책에서 타임퀀텀이 지나 timeout되거나..
Not Running 상태들
Not Running은 다양한 이유로 Not Running이다.
■ Ready
프로세스가 실행되기를 Ready Queue에서 기다리는 상태임 (LinkedList)
Ready Queue에 있는 프로세스들은, 어떤 스케줄링 정책에 따라 ready상태를 running상태로 할당함.
■ Blocked(: wait, sleep)
이벤트가 발생되기를 기다리는 상태임. 이를테면 사용자 입력을 기다리는 상태.
그러니까 특정 이벤트를 기다려야 한다면, 불필요하게 CPU를 점유하며 기다리지 않고, blocked 상태로 전환하여 기다란다. 이벤트를 기다리는 상태인 blocked 프로세스는 이벤트가 발생되어야 ready상태로 전환되며 Ready Queue에 들어간다.
* Blocked 상태인 프로세스 관리법을 곧 더 알아보자.
(첨부예정)
■ New
fork를 통해 새 프로세스가 created된 상태가 new상태다.
new인 프로세스는 '프로세스 리스트'인 'Job Queue'에 들어간다.
* 프로세스는 interactive 또는 batch 모드로 실행될 수 있다. 어떻게 new 상태가 되든간에 Job Queue를 거치긴 하는데, interactive 모드로 실행된 경우 프로세스는 Job Queue에 들어갔다가 곧바로 admit되어서 Ready Queue에 들어간다. 반면 batch 모드인 프로세스는 Job Queue에서 대기하다가 CPU가 여유로울 때 Ready Queue로 간다.
■ Terminated (Zombie)
프로세스가 끝났거나 kill, exit 등으로 종료되면 terminated(zombie)상태다.
유의점은 메모리 할당이 저절로 풀리지 않는다는 점! zombie 프로세스는 자신이 사용한 자원 정보, 종료 정보 등을 가진다. 이 때 wait 시스템콜을 통해서 zombie상태의 정보를 모두 읽어온 후에야 완전히 메모리상에서 제거된다.
더 공부하며 글 보완 예정!
참조🌱
https://studyblog4244.tistory.com/99, https://studyblog4244.tistory.com/100
'컴퓨터구조 & OS' 카테고리의 다른 글
[OS] 터미널을 종료하면 프로세스도 종료된다 -- background로 실행하여 SIGHUP 시그널 피하기 (0) | 2024.02.26 |
---|---|
[운영체제] Process Control Block(PCB) (0) | 2023.10.06 |
[운영체제] 프로세스 스케줄링: 멀티프로그래밍 vs 타임쉐어링 (0) | 2023.09.27 |
[python] gpu(cuda) 프로세스 정리하기 (0) | 2023.09.12 |
[Nvidia][Docker] 컨테이너에서 GPU 돌리기! (0) | 2023.09.09 |