IPC와 Shared Memory

두비니

·

2021. 5. 31. 19:18

 

 

 

 

1. IPC란?

 

IPC는 Inter-Process Communication의 줄임말로, 프로세스 간에 데이터 및 정보를 주고받기 위한 메커니즘입니다.

특히나 OS는 프로그램을 실행시키면서 하나의 프로세스가 독박으로 모든 걸 해결할 수 없기 때문에, 통신을 위한 메커니즘은 필수적이죠.

 

따라서 이런 통신을 할 때 사용하는 것을 IPC라고 합니다.

다른 것들에 알아보기에 앞서, 이런 IPC는 어떠한 상황에서 필요할까요? 크게 4가지로 나누어 볼 수 있습니다.

 

정보 공유: 여러 사용자가 동일한 정보에 흥미를 가질 수 있음에 따라, 병행적으로 접근할 수 있는 환경 제공

계산 가속화: task를 sub task로 나누고, 병렬 처리를 통한 계산 가속화

모듈성: 시스템 기능을 변도의 프로세스 또는 스레드로 나누어 모듈식 형태로 시스템 구성

편의성: 한 순간에 작업할 많은 task를 가질 수 있음

 

 

2. Shared Memory vs. Message Passing

 

이러한 IPC(Inter-Process Communication)을 위해 다양한 수단을 사용할 수 있습니다.

본격적으로 shared memeory에 대해서 알아보기 전에, Shared Memory와 Message Passing에 대해서 정리할 예정입니다. 간단한 차이점만 비교하고 shared memory에 대해서 봅시다.

 

공유 메모리(shared memory)

말그대로 "공유"되는 메모리입니다. 프로세스간에 공유가 되도록 설정해놓은 메모리이며, 모든 프로세스가 접근이 가능합니다.

아무래도 공유 메모리의 경우에는 처음 생성할 때만 시스템 호출을 사용하기 때문에 속도가 빠릅니다. (공유메모리 접근은 커널이 필요가 없다는 점도 속도에 영향을 미치는 것으로 알고 있습니다.)

속도가 빠르기때문에 아무래도 많은 양의 데이터를 전달하는 경우에 많이 사용됩니다.

그러나, 하나의 단점이 있다면 동기화(synchronization)기술이 매우 중요한 분야입니다.

 

 

메세지 전달(message passing)

메세지 전달은 공유 메모리와는 상당히 반대되는 개념입니다.

공유 메모리는 다같이 하나의 공간을 같이 쓰는 개념이라면, 메세지 전달은 필요한 공유자원을 그때그때 프로세스 사이에서 전달하는 방식입니다.

이런 방법의 장점은 우선 동기화를 전혀 고민할 필요가 없습니다. "같이 쓴다"의 개념이 없으니까요.

그리고 구현하기 편합니다. 복사 >> 보내기 기능만 구현하면 되니까요.

그러나 공유메모리에 비해 정말 느립니다. 단순히 생각해도 커널을 통해서 2번의 복사가 일어나니까요.

그래도 적은 양의 데이터를 전달하는 경우에 한해서는 사용되는 방법이라고 합니다.

 

 

3. Shared Memory

 

그럼 Shared Memory에 대해서 더 깊게 알아보도록 합시다.

앞서 이야기한 것처럼, shared memory는 여러 프로세스가 동시에 접근할 수 있는 메모리 영역입니다.

특징들은 앞서 미리 했으니 패스하도록 하겠습니다.

 

공유메모리를 사용하기 위해서는 다음 조건을 만족해야합니다.

 

- 메모리 보호 제약 해제

- 동시에 동일한 위치를 쓰지 않도록 프로세스들이 책임을 져야 함

 

그래서 다음 글에서는 shared memory를 실제 구현하기 위해서 필요한 함수들과 직접 코드를 통해 이해를 하는 것으로 하겠습니다.