[KOCW] 운영체제 - 반효경, 프로세스 관리
Process Management
Process Creation(프로세스 생성)
- 부모 프로세스(parent process)에 의해 자식 프로세스(child process)가 생성됨.
- 프로세스의 트리(계층 구조)생성
- 프로세스는 자원을 필요로 함.
- 이 자원은 OS로부터 받음.
- 부모프로세스와 자식프로세스가 자원을 공유하는 경우도 있지만, 원칙은 독립적이다.
- Copy-on-Write(COW): write가 발생할 때 copy함 -> 자식 프로세스가 그러함.
- 실행(Execution)
- 부모프로세스와 자식프로세스가 같이 실행되는 경우도 있고,
- 자식 프로세스가 끝날 때까지 부모 프로세스가 block되는 경우도 있다.
- 주소 공간(Address Space)
- 자식은 부모의 공간을 복사(모든 메모리/프로그램 카운터 등 복사)함. 여기에 새로운 프로그램 덮어씌움.
- fork(), exec()이 각각 복제와 덮어씌우는 시스템 콜임.
fork()
- fork()를 한 시점에 자식 프로세스는 부모 프로세스의 모든 데이터를 복제한다.
- 그리고 fork()가 된 시점 바로 다음부터 자식 프로세스가 실행된다.
- 이 때, 자식과 부모 프로세스를 구분하는 것은 프로세스ID다.
- 자식은 0, 부모는 양수
exec()
- fork()로 복제된 자식 프로세스, 혹은 자기 자신의 프로세스 중간에 exec()을 통해 새로운 프로그램으로 덮어씌운다.
- exec()이 된 이후에는 원래 있던 프로그램에 대한 데이터는 사라지고, exec()으로 실행되는 프로그램만 남아 실행된다.
Process Termination(프로세스 종료)
- 프로세스가 마지막 명령을 수행한 뒤 운영체제에게 알려줌 -> exit() 시스템 콜
- 자식이 부모에게 output을 보냄. -> wait() 에 의함
- 부모 프로세스가 자식 프로세스의 수행을 종료시킴 -> abort
- 자식이 할당 자원 한계치를 넘어섬
- 더이상 자식에게 할당한 태스크가 필요하지 않음
- 부모가 먼저 종료(exit)하는 경우
- 부모가 종료되면 자식은 수행X -> 부모가 종료되기 전 자식을 모두 정리
wait()
- 일반적으로 자식 프로세스가 있을 때 자식 프로세스가 끝날 때까지 기다릴 때 사용.
- pid(process id)에 따라 조건 분기를 나누고 부모 프로세스 블럭에 wait() 시스템 콜을 하는 방식으로 사용.
exit()
- 프로세스 종료시킬 때 사용.
- 자발적 종료: 마지막 문장 실행 후 exit()
- 비자발적 종료: 부모 프로세스가 자식 프로세스를 강제 종료하는 경우, 키보드로 kill, break 등을 한 경우, 부모 프로세스가 종료되는 경우.
프로세스간 협력
- 독립적 프로세스(independent process)
- 프로세스들은 각자 자신만의 공간을 가지고, 다른 프로세스의 수행에 영향을 미치지 않는 것이 원칙.
- 협력 프로세스(cooperating process)
- 협력 메커니즘을 통해 프로세스들끼리 영향을 미치는 것.
- 프로세스 간 협력 메커니즘(IPC: InterProcess Communication)
- message passing: 메시지 전달하는 방법. 커널을 통해 메시지 전달.
- shared memory: 주소 공간을 공유하는 방법. 이 또한 OS를 통해 공유할 수 있음.
- thread: 동일한 프로세스에서 주소 공간을 공유한다는 차원에서 스레드 또한 프로세스 간 협력 메커니즘으로 볼 수 있음.
Message Passing
- 프로세스 사이에 공유 변수(shared variable) 사용하지 않음.
- 커널을 통해 메시지 전달.
- Direct Communication
- 통신하려는 프로세스의 이름을 명시적으로 표시
- Indirect Communication
- mailbox(or port)를 통해 간접적으로 전달
출처
해당 내용은 KOCW 강의 중 이화여자대학교의 운영체제-반효경 강의의 내용을 정리한 것입니다.
댓글남기기