프로세스의 생성
- UNIX 기반 OS에서는 fork() system call을 호출해서 프로세스를 생성한다.
- fork()는 자식 프로세스를 생성하는 system call이기 때문에 부모 프로세스의 주소 공간을 복사한다.
- fork()한 이후 부모 프로세스를 진행할 수도 있고, 자식 프로세스가 종료되는 것을 wait()할 수도 있다.
- wait()를 호출하면 자식 프로세스가 종료될 때까지 블록 상태로 기다렸다가 종료되면 블록이 풀린다.
프로세스 생성 횟수
fork()를 n 번 했을 때 생성된 프로세스도 다음 fork() 내용을 수행하기 때문에 총 실행되는 프로세스의 수는 2^n이 된다.
IPC
동시에 여러 프로세스가 실행될 때 프로세스는 독립적으로 실행될 수도 있고, 서로 협력하여 실행할 수도 있다.
Independent Process 끼리는 데이터를 공유하지도 않고 각자 할 일을 하지만, coordinating Process는 서로 메세지를 주고 받으며 데이터를 공유하므로 서로에게 영향을 줄 수 있다.
이런 coorperating process 간 통신을 IPC(Inter Process Communication)라고 한다.
Shared Memory (a)
모든 프로세스가 공유하는 메모리 자원으로 같은 데이터를 사용하므로써 서로에게 영향을 줄 수 있다.
각 프로세스는 고유한 메모리 영역을 가지고 있으며 고유 영역은 다른 프로세스가 접근할 수 없다. 따라서 데이터를 공유하기 위해서는 공유할 수 있는 메모리 영역이 필요다. 이 영역을 Shared Memory라고 부른다.
Message passing (b)
Message queue를 통해 A가 데이터를 넣고, B가 데이터를 가져올 수 있다.
Messaging passing 방식은 P1이 P2에게 send()하면 OS가 내부적으로 P2에게 메세지를 보낸다. 메세지를 주고받을 때는 아래 두 가지 방식이 있다.
- Blocking: 송신 또는 수신이 완료될 때까지 Block 된 상태로 기다리는 방식
- Non-Blocking: 송신 또는 수신이 완료될 때까지 다른 일을 계속 진행하는 방식
Producer Consumer Problem
Shared Memory와 Massage passing 방식에서 발생할 수 있는 문제이다.
생성자의 생성 속도가 소비자의 소비 속도보다 빠르면 Buffer가 가득차서 오버플러우가 발생할 수 있고, 반대로 소비자의 속도보다 생성자가 너무 느리면 소비자가 계속 기다려야하는 문제가 발생한다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!