프로세스 생성
부모 프로세스가 자식 프로세스를 생성한다.
- 하나의 부모 프로세스가 여러 자식 프로세스를 생성하므로 트리와 같은 구조로 형성
프로세스를 사용하기 위해서는 메모리와 같은 자원이 필요하다.
- 부모와 공유하는 프로세스
- 운영체제로 부터 할당 받는 프로세스
Execution에도 2가지로 분류 된다.
- 부모와 자식은 공존하며 수행
- 자식이 종료될 때까지 부모가 기다리는 모델
생성 순서
- 자식은 부모의 공간을 복사한다.
- fork() 시스템 콜을 통해 새로운 프로세스를 생성
- 부모를 복사 후 주소 공간 할당
- exec() 시스템 콜을 통해 새로운 프로그램을 메모리에 올린다.
종료 순서
- 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려준다 (exit 시스템 콜)
- 자식이 부모에게 output data를 보낸다. (wait 시스템 콜)
- 마지막으로 할당된 각종 자원들이 운영체제에게 반납됨
- 부모 프로세스가 자식의 수행을 강제 종료 (abort 시스템 콜)
- Ex. 자식이 할당 자원의 한계치 넘어섬
- 자식에게 할당된 태스크가 더 이상 필요하지 않는 경우
- 부모가 Exit 해야 하는 경우
* COW ( Copy - on - Write)
내용이 있을 때 작성을 시작한다.
프로세스 복제 Fork()
프로세스를 복제하기 위해 사용하는 것이 fork 시스템 콜이다.
여기서 fork()는 부모 프로세스의 컨텍스트를 복사하는 것이므로,
동일한 코드를 복제하더라도 PC값이 동일하므로 해당 fork() 이후 부터 동작하게 된다.
따라서 무한루프로 동작하지 않지만 문제점이 있다.
- 동일한 컨텍스트를 가지고 있으므로 누가 원본인지 모른다.
- 동일한 제어 흐름을 가지고 있다.
Fork()는 값을 반환하는데 0이면 child, 양수이면 parent를 나타내므로 이 값을 통해 자식과 부모를 알 수 있다.
새로운 프로세스 Exec()
fork()를 하게 된다면 결국 동일한 프로그램을 실행하게 된다. 물론 반환 값을 통해 분류할 수는 있지만 새로운 프로세스를 실행하는 것은아니다.
이를 위해서 있는 것이 Exec()이다.
프로세스 중단 wait()
자식 프로세스가 종료되길 기다리면서 block상태로 변경
자식 프로세스가 종료되면 ready 상태로 변경
프로세스 종료 Exit()
프로세스가 종료될 때 사용하는 시스템 콜
자발적 종료
- 마지막 statement 수행 후 exit 시스템 콜로 종료
비자발적 종료
- 키보드로 kill, break (ctrl + c)등
- 부모 프로세스가 자식 프로세스 강제 종료하는 경우
프로세스 간 협력
독립적 프로세스
프로세스는 각자의 주소 공간을 가지고 자신의 주소 공간만 보며 수행, 따라서 원칙적으로는 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못한다.
협력 프로세스
협력 메커니즘 (IPC, Interprocess Communication)을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미침
IPC, Interprocess Communication
Message passing : 커널을 통해 메세지를 전달
- Direct Comunication : 통신하려는 프로세스의 이름을 명시적으로 표시
- Ex) Send(process2, msg) -> recieve(process1, msg)
- Indirect Communication : mailbox(or port)를 통해 메세지 간접 전달
- Ex) send(mail box, msg) -> recieve (mailbox ,msg)
Shared memory : 주소 공간을 공유하는 방법
바로 사용할 수 있는 것이 아닌 kernel에게 shaed memory를 사용한다고 알려준 후 동일한 메모리를 가지게 하여 사용
'운영체제' 카테고리의 다른 글
CPU Scheduling (0) | 2023.03.02 |
---|---|
운영체제 - Thread (0) | 2022.08.06 |
운영체제 - 프로세스 (0) | 2022.08.06 |
운영체제 - I/O 구조 (0) | 2022.08.03 |
운영체제 - 저장소 (0) | 2022.08.03 |