ABOUT
home
무료 콘텐츠
home
5️⃣

Multi process환경에서 process간 데이터를 어떻게 주고 받을까요?

[핵심 답변]
원칙적으로 process는 독립적인 주소 공간을 갖기 때문에, 다른 process의 주소 공간을 참조할 수 없습니다. 하지만 경우에 따라 운영체제는 process 간의 자원 접근을 위한 매커니즘인 프로세스 간 통신(IPC, Inter Process Communication)를 제공합니다.
프로세스 간 통신(IPC) 방법으로는 파이프, 파일, 소켓, 공유메모리 등을 이용한 방법이 있습니다.
[면접  TIP]
IPC는 면접에서도 굉장히 자주 나오는 질문 입니다. multi thread와 다르게 process끼리는 데이터 공유를 하고 있지 않습니다. 따라서 데이터를 주고 받기 위해서 IPC기법을 사용합니다. IPC는 크게 공유메모리 방식과 메시지 전달방식으로 나뉘는데 이 둘의 장단점과 차이점을 중심으로 공부해가시길 바랍니다.

IPC (Inter-Process Communication)

process는 각자 자신만의 독립적인 주소공간을 가지는데, 다른 process가 이 주소공간을 참조하는 것은 허용하지 않습니다. 그렇기 때문에 다른 process와 데이터를 주고받을 수 없습니다. 이를 해결하고자 운영체제는 IPC기법을 통해 process들 간에 통신을 가능하게 해줍니다.
process간 통신(IPC)에는 기본적으로 공유메모리(shared memory)메시지 전달(message passing)의 두 가지 모델이 있습니다.

공유메모리(shared memory)

공유 메모리 방식에서는 process들이 주소 공간의 일부를 공유합니다. 공유한 메모리 영역에 읽기/쓰기를 통해서 통신을 수행합니다. process가 공유 메모리 할당을 kernel에 요청하면 kernel은 해당 process에 메모리 공간을 할당해줍니다. 공유 메모리 영역이 구축된 이후에는 모든 접근이 일반적인 메모리 접근으로 취급되기 때문에 더이상 kernel의 도움없이도 각 process들이 해당 메모리 영역에 접근할 수 있습니다. 따라서 커널의 관여 없이 데이터를 통신할 수 있기 때문에 IPC속도가 빠르다는 장점이 있습니다.
공유 메모리 방식은 process간의 통신을 수월하게 만들지만 동시에 같은 메모리 위치에 접근하게 되면 일관성 문제가 발생할 수 있습니다. 이에 대해서는 커널이 관여하지 않기 때문에 process들 끼리 직접 공유 메모리 접근에 대한 동기화 문제를 책임져야 합니다.

메시지 전달(message passing)

메시지 전달 방법은 통상 system call을 사용하여 구현됩니다. kernel을 통해 send(message)와 receive(message)라는 두 가지 연산을 제공받습니다. 예를 들면, process1이 kernel로 message를 보내면 kernel이 process2에게 message를 보내주는 방식으로 동작합니다.
메모리 공유보다는 속도가 느리지만, 충돌을 회피할 필요가 없기 때문에 적은양의 데이터를 교환하는 데 유용합니다. 또, 구현하기가 쉽다는 장점이 있습니다.
대표적인 예시로는 pipe, socket, message queue등이 있습니다.
[꼬꼬무 문답]
Q. IPC의 예시를 들어주실 수 있나요?
Q. 공유메모리와 메시지 전달 모델의 장단점을 설명해 주세요.