[운영체제] 프로세스간 통신 - IPC(inter process communication)

강민혁·2023년 3월 8일
1

기술면접 | 운영체제

목록 보기
10/32

프로세스간 통신 - IPC(inter process communication)에 대해 설명하세요

Keyword

공유 메모리, pipe, socket, message queue, memory map


Script

기본적으로 각 process는 서로 독립적인 메모리 공간을 할당받기 때문에, 서로 데이터를 공유할 수 없습니다. 하지만 중간에 각 process들이 모두 공유할 수 있는 메모리를 둔다면 서로 데이터를 공유할 수 있게 됩니다. 이것을 IPC라고 합니다.

사용목적에 따라서 여러 IPC 방식이 있고, 대표적으로 공유 메모리 방식, pipe 방식, socket 방식, message queue 방식, memory map 방식 등이 있습니다.


Additional

공유 메모리 (Shared memory)

process간 메모리 영역을 공유해서 사용할 수 있도록 허용하여 공유 메모리를 통해 process간의 통신을 가능하게 하는 방식이다. process가 공유 메모리 할당을 kernel에 요청하면, kernel은 해당 process에 메모리 공간을 할당하게 된다. 이후에는 다른 process들이 해당 공유 메모리에 접근할 수 있게 되고, read와 write가 모두 가능하다.

많은 데이터를 다수의 process에 배포할 수 있다는 장점이 있고, 중개자 없이 곧바로 메모리에 접근할 수 있기 때문에, 모든 IPC 중에서 가장 빠르게 작동한다.

pipe

통신을 위한 buffer 메모리 공간을 생성하여, process가 데이터를 주고 받을 수 있게 하는 방식이다.

pipe 방식에서 하나의 pipe는 단방향으로만 통신이 가능하기 때문에, 반이중(half-duplex) 통신이라고 부르기도 하며 송/수신을 위해서는 두개의 pipe를 만들어야 한다. 즉, 한 pipe에 해당하는 메모리에는 하나의 process는 write 권한만 있고, 다른 하나의 process는 read 권한만 있다는 것이다.

크게 익명 파이프 (Anonymous pipe)와 네임드 파이프(Named pipe)로 나눌 수 있다.

[익명 파이프 (Anonymous pipe)]

익명 파이프는 말 그대로 익명이기 때문에, 외부 process에서 이 pipe를 call할 수 없어서, 외부 process에서는 사용할 수 없다. 그래서 주로 부모/자식 process 사이에서 부모 process가 자식 process를 생성하는 경우, 파일 지정 번호를 상속 받아서 익명 파이프로 통신을 한다.

[네임드 파이프(Named pipe)]

네임드 파이프는 익명 파이프와는 다르게, 부모 process와 무관한 다른 process도 통신이 가능하다. FIFO라는 특수한 파일을 사용해서 서로 관련 없는 process간의 통신에 사용된다.

socket

socket 통신은 흔히 네트워크 통신 기법으로 많이 사용되는데, 양쪽 PC에서 임의의 PORT를 정하고 PORT 간의 통신을 통해 데이터를 주고 받습니다. 이 때, 각 PC의 PORT를 담당하는 socket은 하나의 Process가 되고, 해당 PORT의 통신을 담당하는 Process가 됩니다.

socket 통신은 원격에서 Process 간 데이터를 공유할 때 사용되는데, server/client 환경을 구축하는데 용이합니다. 또 전이중(Full Duplex, 양방향) 통신이 가능합니다.

Message Queue

Message queue는 named pipe와 비슷하지만, 다수의 process간의 message를 전달할 수 있다. 즉, pipe는 두개의 process가 서로 데이터의 흐름을 가지지만, message queue는 여러 process가 접근하면서 데이터를 다룬다.

사용예시로는 먼저 application이나 system 간의 통신에 사용될 수 있다. 만약 서버에 요청을 보냈을 때, 그 서버가 다운되어 있었다면, 요청이 전달되지 않지만, 중간에 message queue를 둔다면 서버가 요청을 처리할 수 있는 상태일 때 message queue에서 서버로 요청을 순차적으로 보낼 수 있다.

또 부하를 분산하거나 서버 부하가 많은 작업을 처리할 때도, message queue를 이용하면 더 효율적으로 처리할 수 있다.

memory map

마치 공유 메모리처럼 메모리 영역을 공유하며 process 간의 통신을 한다. 주로, 파일로 대용량 데이터를 공유해야할 때 사용하는데, OPEN FILE을 메모리에 mapping 시켜서 공유하는 방식이다.

FILE이 OPEN되면 해당 FILE의 데이터가 메모리에 올라가게 된다. 그리고 이 데이터에 같이 접근해서 데이터를 읽고 쓰는 작업을 하는 것이 memory map이다.

RPC (Remote Procedure Call)

분산 네트워크 망에서 많이 사용되는 방식으로, 현재는 MSA(Micro Software Archtecture)에서 micro service간에도 많이 사용되는 방식이다. 서로 다른 환경에서도 service간의 procedure call이 가능해져서, 언어에 구애받지 않고 환경에 대한 확장이 가능하며, 비즈니스 로직에 집중하여 생산성을 증가시킬 수 있다.

기본적으로 process는 자신의 주소 공간에 있는 함수만 호출할 수 있지만, RPC를 이용하면 다른 주소공간에서 동작하는 프로세스의 함수를 실행할 수 있게 된다.


Reference

Book - 혼자 공부하는 컴퓨터 구조+운영체제

[Linux] IPC 통신(PIPE, Message, Shared, Memory Map, Socket, RPC)

RPC(Remote Procedure call)에 대해 알아보자!

RPC란?

profile
with programming

0개의 댓글