서로 다른 프로세스 간에 데이터를 주고 받는 메커니즘을 의미한다.
한 프로세스의 출력이 다른 프로세스의 입력으로 사용
될 수 있도록 한다.
데이터를 파일에 저장해서 공유하는 방식
장점
- 구현이 간단
- 디버깅 용이
- 모든 운영체제에서 지원
- 데이터가 영구적으로 저장되어서 프로세스가 종료되어도 데이터를 유지할 수 있다.
단점
- 동시에 여러 프로세스가 파일을 변경하려고 하면 충돌이 발생할 수 있다.
- 동기화 메커니즘 필요
파이프는 같은 시스템에서 실행 중인 프레스 간의 데이터를 전송하는데 사용되는 방식
소켓을 네트워크를 통해 실행 중인 프로세스 간에 데이터를 전송하는데 사용되는 방식
장점
- 실시간 데이터 전송이 가능하다.
- 파이프의 경우 부모-자식 프로세스 간의 통신에 이상적
- 소켓의 경우 네트워크를 통한 프로세스 간 통신에 이상적
단점
- 파이프는 같은 시스템에서만 사용할 수 있다.
- 소켓은 구현이 복잡하다.
프로세스 간에 데이터를 전송하는데 사용하는 방식
메세지는 큐에 저장되고 수신 프로세스가 준비되면 메세지를 수신한다.
장점
- 프로세스 간 데이터를 안정적으로 전송한다.
- 큐에 저장된 메세지는 프로세스가 준비될 때까지 기다리므로 별도의 동기화가 필요없다.
단점
- 구현 시 시스템 자원을 많이 소비한다.
- 큐가 가득 차면 메세지를 더이상 추가할 수 없다.
시스템 상의 공유 메모리를 통해 통신한다.
일정한 크기의 메모릴르 프로세스 간에 공유한다.
공유메모리는 커널에서 관리한다.
장점
- 데이터가 메모리 내부에서 직접 이동하기 때문에 통신 오버헤드가 상대적으로 적다.
- 데이터를 복사할 필요가 없어서 대용량 데이터 전송에서 효율적이다.
단점
- 동기화 문제
- 동시에 여러 프로세스가 접근할 수 있으므로 동기화 메커니즘(세마포어, 뮤텍스 등) 이 필요하다.
- 공유 메모리 영역은 모든 프로세스가 접근할 수 있으므로 보안적인 메커니즘이 필요하다.
- 운영체제와 밀접하게 관련이 있어서 이식에 제한적이다.
공유 리소스를 제어하는 방법
여러 프로세스가 동일한 리소스를 공유하도록 하되,
한번에 하나의 프로세스만 해당 리소스에 접근할 수 있도록하는 메커니즘
장점
- 여러 프로세스 또는 스레드 간의 동기화를 제공
- 공유 자원에 대한 동시 접근을 허용하는 수를 제한한다.
- 동시 업데이트와 같은 문제를 방지
- 데이터 일관성 유지
- 데드락 방지
데드락
: 두개 이상의 프로세스나 스레드가 서로를 대기하면서 발생하는 현상)- 스핀락에 대한 해결책
스핀락
: 공유 자원에 대한 동시 접근을 제어하는 락(lock)의 한 형태, 락이 해제될 때까지 능동적으로 대기("스핀"), 락이 필요할때 스레드는 락을 획득하려고 시도한다. 만약 다른 스레드가 락을 가지고 있는 경우 해당 스레드는 락이 해제될때까지 무한히 기다린다. 이를 스핀이라고 한다.
- 스핀락이 효과적인 상황
- 락이 금방 해제될 것이 예상되는 경우
- 스레드가 락을 기다리는 동안 다른 일을 할 수 없는 경우
- 고려 사항
- 스핀락은 CPU 자원을 많이 사용하므로 스핀 시간이 길어지면 성능 하락
- 스핀 시간이 긴 경우 다른 유형의 락(세마포어 등)을 고려하는 것이 좋다.
단점
- 복잡하다.
- 프로세스가 세마모퍼를 잠그고 종료하는 경우 다른 프로세스들이 영원히 기다리게될 수 있음
- 이를
locked semaphore
라고 한다.- 우선 순위의 역전
- 높은 우선 순위의 프로세스가 낮은 우선순위의 프로세스의 잠금 해제를 기다리는 상황이 발생