[OS] IPC(Inter Process Cooperation)

parkheeddong·2023년 3월 22일
0

Operating System

목록 보기
12/63

1. Process 간 Cooperation이 필요한 이유

하나의 Application을 보다 효과적으로, 빠르게 수행하기 위해 혹은 한 Application에 대해 정보를 공유하기 위해 여러 프로세스 간의 cooperation이 필요한 경우가 있다. 또는 편의성을 위해 여러 프로세스가 필요하기도 하다.

2. Inter Process Cooperation의 기법

1) Message Passing : 메시지 패싱 기반 통신(Send, Receive)

(1) Pa와 Pb 프로세스가 서로 메세지를 주고받고자 할 때, Pa가 send 시스템 콜을 해서 Pb에게 메시지를 보냈다고 하자. Pb는 receive 시스템 콜을 했을 것이다.

message가 도착할 때까지 Pb는 기다리고 있다가, 받으면 잘 받았다고 send_ack를 보낸다. Pa는 메시지를 보낸 후부터 send_ack가 올때까지 기다린다.

(2) Send, Recieve는 blocking과 non blocking 스타일로 나뉜다.

blocking은 메시지를 send하고 ack가 올 때까지 기다리는 것, recieve를 한 후 메시지 올 때까지 기다리는 것을 의미한다.
non blocking은 이렇게 기다리는 구간이 없는 것을 의미한다.

(3) Buffering Mechanism

버퍼링 메커니즘도 필요하다. 메시지를 보낸 후 커널이 버퍼에 보관하고 있다가 Application Process에게 넘겨주는 것이다. 이러한 과정은 커널 안에 구현되어 있다.

2) Shared Memory : 공유메모리 기반 통신 (Read, Write)


메모리 공간 안에 고정 영역에 Pa가 보내려는 메시지를 write하면, Pb가 read하면 된다. 두 프로세스가 같이 접근할 수 있는 메모리가 있다면, Read와 Write Primitive를 가지고도 메시지를 전달한 것과 같은 통신 효과를 가진다.
(이러한 공유메모리 공간이 없을 경우, Message Passing 기법으로 통신해야 한다.)

3) RPC (Remote Procedure Call)

하나의 프로세스 Pa가 자신 local host안 address space에 있는 function이 아니라 외부 다른 host(다른 machine)의 function을 사용하려고 한다고 생각해 보자. 이것은 사실 불가능한 과정이다. 그렇지만 이것을 가능하게 해주는 것이 바로 'Remote Procedure Call'이다.

이를 위해선 client machine에는 client stub이, server machine에는 server stub이 있어야 하고, 두 커널 위에 RPC Runtime이 깔려 있어야 한다.

client가 client stub을 호출하면 client stub은 function parameter을 packing해서 message로 만들고, RPC Runtime에 보낸다. 커널을 통해서 상대 server machine의 RPC Runtime이 이를 받고, server stub에서 parameter를 unpacking을 하고 stub에서 server 함수를 콜 한다. 함수의 return value를 다시 stub에서 받아서 paramemter packing을 하고 message로 만든다. 그리고 커널을 타고 RPC Runtime을 통해서 client stub으로 오고, stub은 그 값을 unpack 해서 client에게 return한다.

  • RMI : RPC의 자바 버전
  • LRPC(Lightweight RPC: 경량 RPC. RPC가 Remote Host로 나가는 것이 아니라, local host에서 RPC 콜을 할 때에는 오버헤드를 줄인 상태로 보내기 위해 만든 것이 LRPC이다.

4) DSM(분산 공유 메모리) = 분산 공유 가상 메모리

물리적으로 공유메모리가 없는 경우에 공유메모리가 있는 것처럼 만드는 것이다. 각각의 Machine Host가 따로 있고, 각각의 메모리공간을 따로 가지고 있는 경우를 생각해보자. 각각의 machine은 자신의 local memory에만 접근할 수 있다.
이 때 Node1 머신의 프로세스가 Node3 머신의 프로세스에게 메시지를 전달하고 싶을 때, (메시지 페싱을 할 수도 있겠지만) 공유메모리 기법을 사용하려면 각각의 메모리 공간을 묶어서 마치 전체 공유메모리 공간이 있는것처럼 가상 메모리를 만든다. 그리고 각각의 맵핑 매니저는 각각의 메모리를 가상 공유메모리의 주소에 맵핑을 해준다.
그래서 Node1이 메모리에 작성하고, Node3가 읽어갈 수 있도록 하는 것이다.

그러나 사실 물리적 메모리가 없기 때문에 커뮤니케이션 네트워크를 타고 메시지가 전달되어야 한다. 따라서 메시지 패싱 패러다임을 밑에 깔아두고, 그 위에 마치 공유메모리가 있는 것처럼 소프트웨어 레이어를 얹은 것을 'DSM'이라고 한다.

0개의 댓글