process를 생성하는 부분에 대해 중점적으로 볼 것임
process 생성(fork -> exec)
: process 생성한다 = Parent process(원래 존재하는 process)가 children process(자식 프로세스)를 생성하는 것
부모는 자식이 종료될 때까지 기다릴 수도 있고, 둘이 경쟁 관계일 수도 있다.
But, parent process와 children process는 관계만 이럴 뿐 독립적으로 작동한다.
프로세스는 자원을 부모 프로세스로부터 받거나 운영체제로부터 받는다.
- process는 thread와 달리 주소 공간 공유하지 않기 때문에 복사해줘야 함.
- PCB도 별도로 만들어주고 부모꺼 복사.(code+data+stack 모두 복사)
- 자식은 복사본에 자신의 프로그램 올림 => "exec()"
(중요) PID는 복사하지 않음 !!!(별도의 프로세스이므로 프로세스 ID도 별도로 존재해야 하기 때문)
process 종료(exit & abort)
<exit()>
: 자식 프로세스가 자발적 종료
: 자식 프로세스가 마지막 명령 수행 후 부모 프로세스에게 결과를 보내면서 종료한다고 말하고 종료
<abort()>
: 강제 종료(자원 고갈/불필요/부모 종료 등..)
* 부모가 종료되기 전에 자식을 종료시킨다.
시스템 콜
1. fork()
: 부모 프로세스가 자식 프로세스를 생성하기 위해 system call
fork() 시스템콜
fork() 부분에서 A(부모)와 A'(자식) 가 어떻게 다르게(독립적으로) 실행되는지에 대해 중점적으로 볼 것
2. exec()
: 자식에게 새로운 기능을 시킬 때 사용(덮어씌우기)
execlp("새로운 프로세스", "새로운 프로세스", 인수, 인수 ,....., (char*)0)
* fork() & exec() 차이점 주목
A: 부모, A': 자식
execlp에 date 대신 PPT 파일이 들어있으면 fork()->exec() 거쳐 date라는 새로운 프로세스가 실행되는 것이다.
(A'는 이제 없어짐)
3. wait()
: 자식 프로세스가 종료될 때까지 sleep 시키고 종료되면 다시 ready(여러 가지 부모-자식 관계 중 부모 sleep 방식)
ex. vi editor
: wait()는 어느 지점에서 쓰이는가에 중점을 두고 볼 것
- &가 붙었을 때 => wait() 수행x(부모는 wait하지 않고 백그라운드로 수행)
- &가 안 붙었을 때 => wait() 수행o
시험 나옴
4. exit()
<자발적 종료>
- 마지막 statement 수행 후 exit() 시스템콜 통해
- 프로그램에 명시적으로 적어주지 않아도 main함수 끝나면 컴파일러가 알아서 종료시켜줌
- ctrl c로 종료하는 경우: 프로그램이 ctrl c받고 종료해야겠다고 판단해 종료
<비자발적 종료>
- 부모 프로세스가 자식 프로세스를 강제 종료시킴
: 자식 프로세스가 한계치를 넘어서는 자원 요청
: 자식에게 할당된 태스크가 더 이상 필요하지 않을 때
- 키보드로 kill, break 등을 친 경우
- 부모가 종료하는 경우 -> 부모 종료 전에 자식이 먼저 종료
프로세스 간 협력
독립적 프로세스
: 원칙적으로 각 프로세스는 독립적으로 수행
(자원을 얻기 위해 경쟁)
협력 프로세스
: 경우에 따라 가능
=> 중요x
프로세스 간 협력 매커니즘(IPC = Interprocess Communication)
두 가지 방식
1. message passing: 프로세스 P가 Q에게 메시지 전달
=> 운영체제가 대신 system call
- direct communication: 수신자 명시해 직접 전달
- indirect communication: 수신자 명시하지는 않고 port/mailbox를 매개로 간접 전달(P가 넣어두면 Q가 열어봄)
2. shared memory: P와 Q가 memory 공간 공유
=> 운영체제가 shared memory를 만들어줌
ex. thread는 한 프로세스 내에서 메모리 공간을 공유하기 때문에 가능
'학교 강의 > 운영체제' 카테고리의 다른 글
[Chapter 3] Process (0) | 2025.04.19 |
---|---|
[Chapter 2] System Structure & Program Execution (0) | 2025.04.18 |
[Chapter 1] Introduction to Operating Systems (0) | 2025.04.10 |
[Chapter 5] CPU scheduling (0) | 2025.04.07 |