본문 바로가기

CS

[운영체제] IPC란? (프로세스간 데이터 공유)

📝 IPC란? (Inter-process Communication)

프로세스 간에 통신하여 상호 커뮤니케이션을 하는 기법이다. 프로세스는 서로 직접적으로 소통할 수 없다.

그 이유는  프로세스들이 서로 공간을 쉽게 접근하면 프로세스의 데이터나 코드가 다른 프로세스에 의해 쉽게 바뀔 수 있기 때문이다. 이를 막기 위해 프로세스는 통신을 직접적으로 할 수가 없고, 서로의 공간을 접근할 수가 없어요.

그래도 프로세스간 커뮤니케이션은 필요하기 때문에 사용되는것이 IPC 기법이다.

 

📝 프로세스간 통신이 필요한 이유

성능을 높이기 위해 통신이 필요하다. 어떤 로직을 하나의 프로세스로만 수행하는 대신, 여러 프로세스가 수행해서 보다 빠른 성능을 기대할 수 있기 때문이다. 물론 이를 위해선 당연히 그 로직을 수행하는 과정에서 필요한 데이터들을 서로 공유할 수 있어야 한다.

 

 

📝 IPC 종류

📌 파일(FIle)

파일을 통해 데이터를 주고받는것도 IPC 기법중 하나이다. 하지만 이 방법은 실시간으로 직접 원하는 프로세스에 데이터를 전달하기 어렵다는 단점이 있다.

디스크에서 파일을 읽고, 프로세스에 적재되는 과정에서 컨텍스트 스위칭, 인터럽트 등 다양한 처리를 해야하기 때문이다.

 

📌 파이프(Pipe)

단방향 통신. 즉, 부모 프로세스 > 자식 프로세스 구조의 일방적인 통신 기법이다.

 

📌메시지 큐 (Message Queue)

파이프와 달리 어떤 프로세스간 통신이 가능하여 양방향 통신을 지원하는 기법이다.

FIFO 정책으로 데이터가 전송된다.

 

📌 공유메모리 (Shared Memory)

프로세스간 메모리를 공유하기 위한 용도이자 메모리를 아끼기 위한 보존 관리의 용도로 사용된다.

 

/** 리눅스 메모리 공간구조 설명

* 리눅스는 프로세스 공간이 완전 분리되어있다. 하지만 모든 프로세스는 커널 공간을 공유한다.

* 따라서 커널 공간에서 프로세스 간 공유가 가능하다.

* 공유메모리 기법은 커널 공간에 메모리를 만들고, 해당 공간을 변수처럼 쓰는 방식이다.

* 데이터를 버퍼에 넣어 처리하는 메시지큐 와 달리,

* 해당 메모리 주소를 변수처럼 접근하여 사용한다. 공유메모리 key를 통해 여러 프로세스가 접근을 가능케 한다.

*/

 

공유메모리의 생성요청은 최초 공유 메모리 영역을 만드는 프로세스가 커널에 공유메모리 공간의 할당을 요청함으로써 이루어지며, 만들어진 공유메모리는 커널에 의해서 관리된다.

때문에 한번 만들어진 공유메모리는 운영체제를 재부팅하거나, 직접 공유메모리공간을 삭제 시켜주지 않는 한

공유메모리를 사용하는 모든 프로세스가 없어졌다 하더라도 계속적으로 유지되게 된다.

 

 

* 장점

- IPC 기법중 처리속도가 가장 빠르다,

- 타 IPC 기법과 달리 메모리 자체를 공유하여 데이터 복사와 같은 불필요한 overhead가 발생하지 않는다.

 

*단점

- 반드시 같은 장치 위에 존재하는 프로세스끼리만 공유 메모리 사용이 가능하다.

- 데이터 불일치 문제를 해결해야 한다.

 

 

📌 소켓 (Socket)

본래 소켓은 네트워크 통신을 위한 기술이다. 기본적으로 클라이언트와 서버 등 다른 컴퓨터 간 네트워크 기반 통신을 위한 기술이다. 소켓은 이런 기법 외에도 하나의 컴퓨터 안에서 두개의 프로세스의 통신기법으로 활용되기도 한다.

소켓을 사용하면 로컬 컴퓨터간 통신시 계층을 타고 내려가며 송신을 하고,

아래 계층부터 위로 올라가 수신을 하는 방식이다.