프로세스는 독립적인 주소공간을 가지므로 다른 프로세스의 자원을 참조할 수 없다. 이 때 OS가 프로세스간의 자원 접근을 위해 IPC(Inter Process Communication)을 제공한다. 프로세스간의 통신(IPC)에는 공유메모리(shared memory)와 메시지 전달(message passing)의 두개의 모델이 있다.
공유메모리는 프로세스들이 주소공간을 부분 공유한다. 프로세스가 커널에 공유메모리 할당을 요청하면 다른 프로세스에서 공유메모리에 할당된 데이터를 받아 사용할 수 있다. 대신 같은 메모리를 사용하기 때문에 동기화 문제가 생길 수 있다. 하지만 메모리 할당을 제외하고 kernel의 관여없이 통신할 수 있어 빠르다는 장점이 있어 사용한다.
메세지 전달은 시스템 콜을 사용하며 커널을 통해 send M(message), recieve M의 두가지 연산을 수행한다. 프로세스가 커널에 메세지를 보내면 커널이 recieve 한 다음 다른 프로세스에 send를 수행한다. 메모리를 공유하는것보다는 느리지만 충돌이 일어나지 않는다는 장점이 있다. 하지만 커널을 반드시 거쳐야하기 때문에 공유메모리에 통신이 비해서는 느리다는 단점이 있다.
멀티 프로세스와 멀티 스레드 환경에서 동기화 문제로 생기는 경쟁상태를 Race Condition이라 한다.
동기화 문제로 race condition(경쟁상태)가 생길 경우 해결을 위한 대표적인 두가지 기법이 이는데 바로 mutex, semaphore 기법이다.
그럼에도 불구하고 생기는 동기화 문제를 DeadLock이라 지칭한다. 여러개의 스레드가 서로 점유하는 지원들을 기다려 무한 대기 상태가 될 때 이를 DeadLock이라고 하며, 순서대로 상호배제, 점유대기, 비선점, 순환대기에 과정 따라 DeadLock이 발생한다.