프로세스는 하나만 도는 것이 아니다. 프로세스가 나눠지게 되면 독립적으로 스케쥴에 의해 돌아간다. 프로세스들끼리 통신하여 다른 프로세스에게 정보를 공유한다. 하나의 CPU에는 한개의 프로세스가 돈다. CPU 4개가 있다면 fork를 해서 정보를 공유하고 돌린다. 서로 협업해서 동작한다.
Shared Memory
공유하는 메모리를 만들어놓고 서로 통신한다. 운영체제에 요청(system call)하면 프로세스가 직접 shared memory를 만들거나 만들어져 있는 메모리에 join한다. 이 후에는 운영체제가 관여하지 않는다.(운영체제는 판만 깔아줌)
Message passing
메시지를 만들어 요청하면 IPC가 있는 운영체제가 전달한다. (없는 운영체제도 있다.) 커널을 통해 정보를 전달하고 수신한다.
Producer-Consumer Problem
정보를 생산하는 프로세스(생산자)와 정보를 소비하는 프로세스(소비자)가 동시에 동작할 때 일어나는 것이다. 보통 정보를 생산하는 속도가 소비하는 속도를 따라가지 못할 때 발생하고 이를 해결하기 위해 버퍼(buffer)를 사용한다. 크기에 한계가 있는 것을 유한 버퍼(bounded buffer), 버퍼의 시작과 끝을 이어붙여 크기가 무한한 것을 무한 버퍼(unbounded buffer)라고 한다.
2개의 프로세스가 있는데 pipe mechanism을 통해서 연결되어 있다. 한쪽 끝에서 데이터를 넣으면 다른 쪽 프로세스에서 읽어갈 수 있는 inter-process communication의 일종이다.
Ordinary pipes
parent 자식 process들 간에만 만들어질 수 있다. Unidirectional은 한쪽 끝에서 넣으면 다른 쪽에서 읽을 수 있다. Full duplex와 half duplex는 설명할 수 없다. 하지만 Bidirectional일때는 가능하다.
Named pipes
아무 임의의 process랑 만들어질 수 있다. Bidirectional이다.