다양한 기록

프로세스와 프로세스의 상태 본문

운영체제

프로세스와 프로세스의 상태

라구넹 2024. 3. 17. 23:03

프로세스란?

 

(메모리, CPU에 올라가서) 실행중인 프로그램

 

필요한 것

- CPU: 레지스터에 대한 정보를 알아야 함. (PC를 알면 어디까지 실행했는지 알 수 있을 것)

- 메모리: 어드레스 스페이스 - 텍스트, 데이터, 스택, 힙

- I/O 정보

 

프로그램의 시작

- 로드: 코드와 스태틱 데이터 가져오고, 이때 사용하는 포맷을 기반으로 함(ELF) 등

           보통, 필요한 코드를 싹 들고오지는 않고 Lazily하게 필요할 때 들고옴.

           * 함수 만들었다고 그걸 다 쓰는 경우보단 필요한 경우에 뽑아서 쓰는게 많기 때문

 

- 동적할당: 스택 세그먼트, 파라미터 초기화, 힙 세그먼트

 

- 초기화: 파일 디스크립터, I/O나 관련된 스트럭쳐 시그널

 

- 메인 함수로 점프: main()

 

프로세스 스테이트

new(created, embryo): 프로세스 만들겠다고 선언된 상태, 아직 디스크에 있음

new        --<admitted>->                                              ready : 승인되면 레디

ready     --<dispatch, 혹은 스케쥴>->                          running : CPU에 물리적으로 올라감

running  --<preemptive, timeout>->                        ready : 할당된 시간 종료

running  --<wait, sleep>->                                           wating(blocked): I/O나 특정 이벤트 발생 시 대기하는 상태로 돌입

wating    --<wakeup>->                                                ready : 기다리던 상황이 발생하면 다시 레디로 돌입

running   --<exit>->                              terminated(zombie) : 프로세스 종료 상태

 

PCB의 process state는 enum으로 정의되어 있음

그런데 위에서 말한 순서는 지켜져야 함, enum 막 대입해서 집어넣고 하지 않음

예외) 터미널에서 Ctrl + C 하면 이건 외부적 요인으로 Kill 하는 거니까 저 순환을 따르지 않음

 

PCB (Process Control Block)

각 프로세스에 관련된 정보를 가지고 있는 자료구조

프로세스 스테이트, pid, PC 등 레지스터 정보(컨텍스트 스위칭 용도*), 스케쥴링 정보,

메모리 정보, 오픈된 파일, IO 정보, CPU와 메모리 사용 정보 등..

 

* 컨텍스트 스위칭: 스케쥴링 시스템에 의해 다른 프로세스가 스케쥴링될 때, 현재 프로세스가 어디까지 실행되었는지 정보를 저장해두고 바꿔야 하는데 그때의 정보를 컨텍스트라 하고, 이걸 스위칭한다는 의미.

다음 명령이 어딘지 알면 어디까지 실행되는지 알 수 있으니 PC 레지스터 정보를 알면 됨.