오래 못 할 짓 하지 않기
[ 운영체제 ] 5. 프로세스 - Parent,child 본문
Process Creation
● Parent 프로세스가 Child 프로세스를 만든다.
- 모든 프로세스에 id가 있다. = Process identifier
- 프로세스들의 parent,child관계로 오른쪽 그림과 같이 트리를 만들 수 있다.
이와 관련된 명령어로는 다음과 같이 3개가 있다.
● fork()
: 새로운 Child process를 만들고, 그 프로세스의 Pid를 return받는다.
ex) int pid = fork() 하면 자식 프로세스의 pid가 변수에 저장된다.
※ 부모 프로세스에서만 변수 pid에 자식 pid가 저장됨, 자식 프로세스에서는 저 값이 0이다.
● exec()
: 프로그램을 실행한다.
근데 이제,, 여러 추가 기능을 곁들인
● wait()
: 자식 프로세스가 끝날 때까지 기다린다.
Process A 시작
→ fork()
→ wait() = 자식 끝날 때까지 기다림
→ Process A'(자식) 시작
→ 동작
→ 끝 = interrupt
→ Process A 재시작
위는 이거랑 같음
예제 1)
풀이
: pid_t pid = fork() // 이렇게 하면 부모 process에서는 pid = 자식 프로세스
▶ 바로 빨간색 명령어로 넘어가서, 자식이 끝날 때까지 기다린다.
자식의 pid는 0으로 시작.
▶ 파란색 명령어로 해당 명령어 실행
▶ 끝
▶ 빨간 명령어 실행될 예정인 거 실행
fork는 이걸 소환하는 process 를 복제한다.
- 두 프로세스는 같은 내용을 가졌지만 서로 다른 메모리 공간을 할당받는다.
Fork하면 프로세스끼리 파일 공유는 안 함
예제 2)
우선 fork전 상태 : gval = 11 / lval = 25
fork 후, parent process : gval = 11 / lval = 26
fork 후, child process : gval = 12 / lval = 25
exit()
상태를 종료 혹은 status를 child에서 parent로 바꾼다.
- 부모가 Terminate되었으면 OS가 Child를 계속 가지 못하게 함
= 프로세스가 Terminate되면, 이의 Childern도 Terminate 되어야 한다.
예제 3)
wait() = Child process가 terminte 될 때까지 기다린다.
● 좀비 프로세스 : 본인을 기다리는 parent process 가 없는 프로세스
● 고아(orphan) 프로세스 : wait() 없이 부모 프로세스가 Terminate된 프로세스
빨간색이 부모 프로세스
파란색이 자식 프로세스
부모 프로세스가 fork 해서 자식 Pid를 가져옴
▶ 조건문 else 로 진입
▶ 자식 PID 출력하고 30초 sleep
▶ 그러는 동안 자식 프로세스 진행 , 첫 if 실행
▶ 끝남
▶ 부모 프로세스 깨고 마지막 출력하고 끝남.
하나의 Child 프로세스가 Terminate될 때가지 기다린다.
특정 프로세스의 id를 넣고, 그 프로세스가 상태가 변할 때가지 실행을 하지 않고 기다린다.
예제 4)
빨간색 = 부모
보라색 = 1번자식
하늘색 = 2번자식
fork 하면 자식 Pid가져 옴 = 0은 아님
▶ 빨간 else로 들어감
▶ 1번 자식 Pid 출력하고 2번 자식 생성
▶ 이 때도 pid는 0이 아니므로 오른쪽 빨간색 else로 간다.
▶ 그 else에서 첫 출력은 2번 자식 pid를 출력하고
▶ 자식 프로세스가 끝나기를 기다린다.
▶ 1번 자식이 끝났다면, 끝났던 상태를 출력한다. = 3
▶ 또 하나 더 끝나는 거 기다렸다가, 2번 자식이 끝나면 그 상태를 출력.
1번 자식은 생성되고 보라색 if를 들어가서 return 3 하고 빠져나온다.
2번 자식은 부모가 1번 자식을 출력하고 그 뒤에 생성되어 하늘색 조건문에 들어가고 exit(7)로 빠져나온다.
예제 4)
(출처)
한동대학교 고윤민교수님 - 운영체제
'3학년 1학기 > 운영체제 (OS)' 카테고리의 다른 글
[ 운영체제 ] 7. Thread (0) | 2024.04.02 |
---|---|
[ 운영체제 ] 6. Inter Process Communication / PIPE (0) | 2024.04.01 |
[ 운영체제 ] 4. 프로세스 (0) | 2024.03.22 |
[ 운영체제 ] 3. OS Structure ( 디자인,Implementation ) (0) | 2024.03.19 |
[ 운영체제 ] 2. System call (0) | 2024.03.16 |