[운영체제 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 |