본문 바로가기
CS/OS

[OS] 3. 프로세스(1)

by 두둠칫 2020. 10. 30.

1. Process란?

프로세스가 메모리에 적재되는 모습, 이후 프로세스가 실행된다

- 프로세스는 실행된 프로그램의 인스턴스로써 각각은 PID로 구분한다

 

# Address space

1) Code : 프로그램의 Code가 저장되고 PC register가 가리킴으로써 순차적으로 코드가 실행됨

2) Data : 전역변수가 저장

3) Stack : Temporary data(params, local vars, return address 등)이 저장, SP register가 가리킴

4) Heap : Dynamic하게 할당되는 공간, 예를 들어 malloc으로 할당되는 공간

 

 

 

2. Process State Transition

* scheduler : ready state인 프로세스를 고르는 Module

* process hierarchy

- 프로세스는 또 다른 프로세스를 생성할 수 있다

- 즉, 트리 형태로 이루어지게 되며 시작 프로세스(Init Process)는 OS가 만들어 놓는다 

 

 

 

3. 프로세스 생성

- fork() : 현재 프로세스를 똑같이 복사하여 새로운 프로세스를 만든다

* 자식 프로세스는 부모의 address space를 복제받는다

* 부모 프로세스는 대부분의 resource와 privilege를 상속한다

 

- return

1) 생성 성공 시, 부모에게는 자식의 PID, 자식은 0

2) 생성 실패 시, 부모에게는 -1, 자식은 errno

 

- fork()시 child는 fork() 다음 instruction부터 실행

 

 

 

 

4. Replace Process Image

- exec() family : 현재 실행되고 있는 프로세스의 address space를 날리고(?) 요청한 프로그램으로 재시작

ex) 탐색기에서 롤 실행

> 탐색기라는 프로세스에서 롤을 클릭하면, 탐색기 프로세스를 복제한 뒤

> 새로 만들어진 탐색기 프로세스에서 exec()를 사용하여 롤 프로그램으로 replace

 

 

 

5. Process termination

1) 종류

- exit() : 스스로 죽

- abort(), kill() : 다른 process를 죽

- wait() : 자식 프로세스가 끝날 때까지 기다렸다가 반환값을 받고 종료함

 

2) 프로세스

- Zombie 프로세스 : terminate되었지만 부모가 wait()를 호출하지 않았을 때

                           해당 프로세스의 실행 결과는 alive 상태로 남음

- Orphan 프로세스 : 실행 중에 부모가 죽은 프로세스

* Orphan 프로세스가 생기지 않게 하기 위해 OS는...

 Cascading termination  부모 프로세스가 죽으면 자식 프로세스를 모두 죽임
 Reparenting  다른 프로세스의 자식 프로세스로 만들어줌
 (다양한 방식이 있지만 보통 Init 프로세스의 자식으로)

'CS > OS' 카테고리의 다른 글

[OS] CPU, Processor, Core, Process, Thread 그리고 관계 정리  (0) 2020.11.04
[OS] 5. Thread  (0) 2020.11.03
[OS] 4. 프로세스(2)  (0) 2020.11.02
[OS] 2. 시스템 구조  (0) 2020.10.28
[OS] 1. 개요  (0) 2020.10.28