3-3장. 프로세스에 대한 연산

기타/[운영체제]

2019. 3. 29. 21:36

[운영체제 3-3장. 프로세스에 대한 연산]

: 운영체제는 프로세스 생성 및 종료를 위한 기법을 제공해야한다.

 

[프로세스 생성(Process Creation)]

: 대부분의 운영체제에서 새로운 프로세스 생성시, 그전 프로세스(parent)를 복제(child)해서 사용한다. 트리구조.

- 프로세스 식별자(pid) : 프로세스마다의 고유한 값.

 

# 프로세스 트리 예시

: 부모 노드를 복제해서 자식 노드가 만들어짐

: 프로세스별 고유 식별자 존재.

 

 

 

 

 

 

 

 

 

 

 

<프로세스 생성 과정>

 # 작동순서

 

 

 

 

 

 

 

 1) fork() : 새로운 프로세스 생성 system call (부모 프로세스를 복사)

 2) 부모 프로세스는 wait에서 자식 프로세스 끝났다는 신호 올때까지 대기

 2) 자식 프로세스 실행

 3) exec() : 자식 프로세스의 내용을 새로운 프로그램으로 교체

 4) 자식 프로세스 끝나면 wait로 신호 보냄.

 5) 신호오면 부모 프소세스도 종료 ( 부모 프로세스는 자식 프로세스를 수습하는 역할 )

 

 

 # fork() 시스템 호출을 사용해 별도의 프로세스를 생성

 

 

 

 

 

 

 

 

 

 

 

 

- fork()를 실행하면 코드를 복사하여, 두개의 동일한 코드가 실행된다.(단 id = 부모, id = 자식)

- pid = fork() : 프로세스의 id를 리턴받음

- 이때, 부모에겐 자식 프로세의 id가 들어가고, 자식에겐 id = 0이 들어간다.

- 그리고 동일 코드 실행시, 

- else if(pid == 0) 에선 자식노드가 실행된다. (execlp : exec() 시스템 호출)

- else 에선 부모노드가 실행된다 (wait() 시스템 호출 실시.)

 

 

 

 

 

 

[프로세스 종료(Process Termination)]

: 프로세스가 마지막 문장의 실행 끝내고 exit() 시스템 호출을 사용해 OS에 자신의 삭제를 요청하면 종료.

 

- abort() 시스템 호출

 : 부모 프로세스가 자식 프로세스를 종료시킬때 사용.

 <해당경우>

   1) 자식이 자신에게 할당된 자원을 초과해 사용할때

   2) 자식에게 할당된 task가 더이상 필요 없을 때

   3) 부모가 exit하는데, OS가 부모가 exit해도 자식이 실행 계속하는거 허용하지 않을경우.

 

- 연쇄식 종료(cascading termination)

 : 트리를 보면, 가장 먼저 종료되는게 자식 노드인 leaf 노드이고 가장 마지막에 종료되는게 root 노드이다.

 : 이때 중간의 프로세스가 갑자기 종료되었을때, 그 프로세스의 자식 프로세스의 존재를 허용하지 않기 때문에 강제종료 시키는 것을 의미.

 

- pid = wait(&status) : 부모 프로세스가 어느 자식이 종료되었는지 구별할수 있게 종료된 자식 프로세스 식별자 반환

 

- 좀비(zombie) : 정상적이면 자식이 exit하기를 부모가 wait 해야하는데, 아직 부모가 wait하지 않은 경우

- 고아(orphan) 프로세스 : 부모가 wait하지 않고 종료되어버린 자식 프로세스

 

 

'기타 > [운영체제]' 카테고리의 다른 글

4-2장. 다중코어 프로그래밍  (0) 2019.04.05
4-1장. 스레드  (0) 2019.04.05
3-2장. 프로세스 스케줄링  (0) 2019.03.29
3-1장. 프로세스 개념  (0) 2019.03.27
[운영체제 2장 요약](작성중)  (0) 2019.03.27