독립적인 프로세스는 프로세스끼리 자원을 공유할 필요가 없기 때문에, CPU스케줄링을 잘해주면 프로세스간에 영향을 미치지 않는다.
하지만 프로세스간 협력이 필요한 경우엔 자원을 공유해야한다.
IPC란 프로세스들 사이에 서로 데이터를 주고받는 행위나 방법 또는 그 경로를 말한다. 각 프로세스는 자신의 독립적인 메모리 공간을 가지고, 그것을 보호하고 있기 때문에 통신을 위한 별도의 매커니즘이 필요하다.
1) 정보 공유 : 여러 사용자가 동일한 정보를 필요로 함
2) 계산 가속화 : 특정 작업을 빠르게 실행하기 위해 해당작업을 서브 task로 나누어 병렬로 실행할 수 있음
3) 모듈성 : 특정한 시스템 기능을 별도의 프로세스로 구분하여 모듈식 형태로 시스템을 구성할 수 있음
4) 편의성 : 여러 사용자들이 동시에 많은 작업을 수행할 수 있음
: 공유 메모리를 이용해 자원을 주고받는다. 커널 의존성이 낮기 때문에 속도가 빠르고, 유저레벨에서 사용 가능하기 때문에 통신이 자유롭다. 하지만 동일한 자원을 여러 프로세스가 바라보다보니, 동기화 이슈가 존재한다. 유효한 데이터를 잘 전달하기 위해선 동기화 기술이 필요하다.
프로세스가 공유 메모리 할당을 커널에 요청하면 커널은 해당 프로세스에 메모리공간을 할당한다.
: 메세지를 주고받는 방법이다. 커널을 통해 메세지를 전달하는 방식으로 자원을 주고받는다. 공유메모리처럼 무언갈 구축할 필요 없이 커널을 사용하기 때문에 구현이 쉽다. 하지만 커널을 사용하다보니 시스템콜이 필요하며, 이로인한 오버헤드가 발생할 수 있다. 큐는 버퍼의 역할을 하며 커널 레벨에 위치하기 때문에, 프로세스가 종료되어도 특정 함수를 사용하여 삭제하지 않는 한, 남아있다.
메세지 전달 방식은 프로세스가 직접 자원을 공유하지 않고 운영체제가 그 메커니즘을 제공한다.
커널은 send와 receive를 통해 channel 크기만큼의 메모리를 주고받는다.
하나의 프로세스가 파일을 쓰고 다른 프로세스에서 이를 읽는다.
통신을 위한 버퍼 메모리공간(버퍼)를 생성하여 프로세스가 데이터를 주고받을 수 있게한다. 이때 버퍼는 파일시스템에 생성되는 임시 공간이다
파이프의 특징으로는 입구와 출구가 없다는 점이 있다.
방향성이 없기 때문에, 두개의 프로세스가 통신할때는 읽기전용 파이프와 쓰기전용 파이프 총 두개를 쓰게 된다.
주로 파이프는 부모 프로세스와 자식 프로세스가 데이터를 교환할때 사용된다.
부모프로세스는 fork()를 통해 자식프로세스를 생성하며 파이프를 통해 데이터교환을 할 수 있다.
메세지 전달 모델과 공유메모리 모델은 한번에 하나의 프로세스만 해당 자원에 접근하다는 단점이 있다. 세마포어는 이를 극복하기 위한 통신방법이다.
세마포어는 상호배제 원리를 보장하는 알고리즘이다. 동기화 대상이 여러개일 경우에 주로 사용된다.