프로세스간 통신

데브tty·2021년 9월 29일
0

운영체제

목록 보기
2/2

협동하는 프로세스

서로 공유, 간섭하는게 없는 프로세스들은 통신이 필요하지 않다. 스케줄링을 잘 되는 경우 아무 문제없이 작동된다. 그러나 서로 독립적이지 못한 프로세스들은 문제가 생길 수 있다.

IPC(Inter Proccess Communication)

독립적이지 않은 프로세스간에는 IPC 매커니즘이 필요하다. 이것은 데이터를 보내고 받는것과 같은 행위를 말한다. IPC를 구성하는 방법은 Shared Memory와 Message Passing 방법이 있다.

Shared Memory

메모리 상에 공유공간을 두어 두개 이상의 프로세스가 Shared Memory 영역을 참고하여 통신 하는 방법이다. Shared Memory 영역은 운영체제가 관리한다.

POSIX Shared Memory : UNIX 계열의 Interface, Memory Mapped Files를 사용한다.

Message Passing

운영체제에게 맡기는 방법이다. Kernel에 Message Que를 활용하여 프로스세간 통신을 하는 방법이다.

Pipes : UNIX 계열 IPC 통신 초기 매커니즘, 두개의 프로세스가 단순히 통신하는 방식이다. 단 방향으로 통신된다. 양뱡향 통신을 위해선 Pipe를 2개 만들면 된다. Pipe 통신을 위해선 부모, 자신 관계를 가져야한다. 네트워크에선 소켓이라고 부른다.


생산자 소비자 문제(Shared Memory)

생산자 소비자 문제를 해결하면 기본적인 프로세스간 통신 문제를 해결 할 수 있다. 생산자는 정보를 생산, 소비자는 정보를 소비하는 역할을 한다.

예를들어 Youtube가 생산자, 영상을 보는 사람이 소비자라고 칭하자. 그러면 Youtube는 영상을 계속 생산할것이고, 소비자는 영상을 계속 보는 행위를 통해 정보를 소비한다. 이 경우 Shared Memory 방식을 채택하여 Buffer를 활용하면 문제를 해결 할 수 잇다.

생산자(Youtube)는 계속 Buffer를 영상으로 채운다.
소비자(시청자)는 Buffer에 들어있는 영상을 시청함으로써 Buffer을 비운다.

Shared Memory를 활용한 기술은 1:1 통신에서는 굉장히 쉬운 일이나 N:M의 통신에서 활용하기엔 생각해야 될 문제가 많다.

생산자 소비자 문제(Message Passing)

위에 상황과 동일하다고 가정하자. Message Passing은 API처럼 Send와 Receive만 호출하여 공유되는 부분은 운영체제가 관리할 수 있도록 한다. 이는 개발자의 입장에서 편리함을 제공한다.

Shared Memory도 운영체제에서 관리 할 수 있다. 다만 여기서 언급된 Shared Memory는 모종의 이유로 개발자가 직접 개발한 시스템이라고 하자.


Direct Communication 방식

Reciever와 Sender를 직접 명시하여 누가 보냈는지, 누가 받는지를 정의하는 방법이다. Communication Link는 자동적으로 생성된다. 이는 링크의 갯수가 1개임을 보장한다.

Indirect Communication 방식

Sender는 특정 공간에 데이터를 넣는다. Receiver는 특정 공간에서 데이터를 가져온다.

특정 공간은 MailBox, port라고 부른다.

2개 이상의 프로세스가 MailBox를 공유할 때 Communication Link가 성립한다. 이 Link는 2개 이상의 프로세스를 이루어 줄 수 있다.

Blocking Send(Synchronous) : 모든 정보를 다 보낼때 까지 다른 작업을 하지 않고 기다린다.
Non-blocking Send(Asynchronous) : 보내 놓고 나머지는 OS에서 처리하도록 한 후 다른 작업을 진행한다.
비동기 전송은 완료에 대한 확신을 할 수 없다. 상황에 맞게 동기 혹은 비동기 전송 방식을 취해야 한다.

Socket

물리적으로 떨어져 있는 PC 2대 이상을 연결하여 통신하는 방법. Socket 통신은 네트워크로 연결하여 데이터를 주고 받는다. 이과정에서 수 많은 프로토콜을 정의해야한다.

RPC

RPC는 IPC의 확장적인 개념이다.
추가적으로 더 확인해 보자.

RPC는 원격지에 있는 함수를 호출 할 수 있는 기능을 말한다. RPC는 현업에서 많이 쓰인다.
Stub : ??
Marshals : ??

profile
dev띠

0개의 댓글