Apple is Apple
article thumbnail
Published 2024. 7. 20. 13:11
[OS] 4 - 프로세스 간 통신 CS/OS

프로세스 간 통신 (Inter-Process Comunication - IPC)

시스템의 프로세스는 독립적으로 동작하거나 협력적으로 동작한다.

협력적으로 동작하는 것에 주목해보자, 혼자서 동작해도 문제가 없지만 왜 협력적으로 동작하는 걸까?

다음과 같은 장점이 있어 협력적으로 동작하게 된다.

  1. 정보 공유
  2. 계산 속도의 향상
  3. 편의성

이러한 장점을 살리기 위해 프로세스는 협력적으로 동작하는데, 그러기 위해서는 데이터를 주고 받아야 한다. 어떻게 데이터를 주고 받아야 하나?

--> IPC (Inter-Process Communication)을 통해 프로세스 사이에서 데이터를 주고 받는다.

 

IPC에는 크게 2가지 모델이 있다.

  1. Shared Memory - 한 메모리를 공유해서 메모리를 통해 정보 공유
  2. Message Passing - 한 프로세스에서 다른 프로세스로 메세지(데이터 전달체)를 전송

Message Passing과 Shared Memory의 비교

IPC 데이터 전송 패러다임 (Producer-Consumer Problem)

Shared Memory Solution 

  - Producer 프로세스는 Consumer 프로세스에 정보를 제공한다. Consumer 프로세스에서 Producer의 프로세스의 정보가 사용된다.

  • 양 프로세스간 데이터를 전달하기 위해 중간에는 공유 메모리인 "버퍼"가 존재한다.
  • 버퍼의 사이즈는 고정 값일 수도 있고, 제한이 없을 수도 있다
  • 단, 두 프로세스가 버퍼에 동시에 접근 중일 때, 데이터 동기화 문제(불일치)가 생길 수 있다.
  • 버퍼의 종류
    1. Zero Capacity - 크기가 0인 버퍼
    2. Bounded Capacity - 버퍼의 크기가 n으로 유한함
    3. Unbounded Capacity - 버퍼의 크기가 무한함

Shared Memory in IPC

 

Message Passing

- Message Passing은 두 가지 명령어에 의해 동작한다.

  • send(msg) - Message를 보내는 명령어, 크기는 고정 or 유동적
  • receive - Message를 받는 명령어
  • A 프로세스와 B 프로세스가 Message Passing은 한다고 하면, 우선 두 프로세스 사이에 Link를 생성한다. 그 후, 링크와 명령어를 통해 메세지를 주고 받으며 데이터 교환을 한다.

Message Passing in IPC

Message Passing의 구현 방법

  1. Direct Communication
    • 프로세스 이름을 명시하고 이름을 토대로 메세지를 전달
    •  ex) A, B 프로세스가 있을 때
      • send(B, msg) - B 프로세스로 msg를 전달 
      • receive(A, msg) - A 프로세스로부터 msg를 수신  
    • 링크는 자동생성되고, 정확하게 1개의 링크만 존재한다.
    • 링크는 단방향이 될 수도 있고, 양방향이 될 수도 있다. (목적에 따라서 변경될 수 있음)
  2. Indirect Communication
    • Direct방식과 다르게 프로세스의 명시를 통해 보내지 않고 매개체인 "MailBox"를 통해 수발신을 함
    • mailbox는 고유의 아이디를 갖고 있으며,  프로세스는 이 mailbox를 공유하면서 커뮤니케이션을 함
    • mailbox는 두 프로세스뿐만 아니라 더 많은 프로세스간 커뮤니케이션을 할 수있음 (링크가 여러개)
    • 링크는 단방향이 될 수도 있고, 양방향이 될 수도 있다. (목적에 따라서 변경될 수 있음)
    • 명령어
      • send(M, msg) -  mailbox "M"을 전송
      • receive(M, msg) - mailbox "M"을 수신
      • mailbox 생성 및 삭제 명령어  

Message Passing의 동작 방식 

  1. Blocking - 데이터를 보내면 수신 측에서 받을 때 까지 프로세스를 블로킹함 (다른 동작을 할 수 없음)
  2. Non - Blocking - 보내면 수신측과 관계없이 다른 동작을 할 수 있음

Client - Server 사이의 커뮤니케이션

Socket

Socket은 프로세스가 데이터 송수신을 하기 위한 창구역할을 한다. 

프로세스가 데이터를 받기 위해, Socket을 열어 데이터를 쓰고, Socket을 받아 Socket 내부의 데이터를 활용한다.

Socket은 IP 주소와 Port번호 정의된다.

통신은 한 쌍의 Socket에 의해 구성된다.

직접 IP, Port를 이용해서 링크를 만들고, 스트림 데이터를 보내고 받는 쪽에서는 받은 데이터를 재해색해야하는 불편함이 있다.

Socket

Remote Procedure Call (RPC)

RPC는 네트워크 시스템 내에서 프로세스 사이에서 함수 Calling 처럼 데이터를 주고 받는 방식이다.

IDL 방식을 통한 RPC

사진 출처: Provided by Operating Systems Concepts, 10th Edition (Abraham Silberschatz, Peter Baer Galvin, Greg Gagne)

위 그림에서 처럼 클라이언트는 서버의 someMethod라는 일반 메소드를 호출하는 것처럼 원격지 프로시저를 호출하는 것이다. (다른 공간의 메소드를 호출가능)

 

동작방식

  1. 클라이언트, 서버에는 Stub이라는 요소가 있다. 
  2. 클라이언트 입장에서는 본인 프로세스 공간의 함수를 호출하는 것처럼 보이는데, 사실은 클라이언트 Stub에 정의된 함수를 호출하는 것이다.
  3. Stub은 marshalling을 통해 데이터 타입을 맞춘 후 RPC를 실행한다.  (클라이언트-서버 간 OS, CPU 아키텍쳐의 차이가 있다면 바이트 입력 순서가 달리지기 때문에 입력 순서를 보장해야한다.) 
  4. 서버는 서버 Stub을 통해 수신된 호출에 대한 처리를 진행하고 , 결과를 데이터 변환을 한 후 (위와 동일한 이유) 리턴한다.
  5. 클라이언트는 서버가 전송한 데이터를 받는다.

 

 

사진 출처: Provided by Operating Systems Concepts, 10th Edition (Abraham Silberschatz, Peter Baer Galvin, Greg Gagne)

'CS > OS' 카테고리의 다른 글

[OS] 6 - CPU Scheduling (1)  (0) 2024.08.23
[OS] 5 - Thread  (0) 2024.08.06
[OS] 3 - 프로세스  (0) 2024.06.21
[OS]2 - 핵심 컴포넌트  (0) 2024.06.17
Operating System basic  (1) 2024.04.22
profile

Apple is Apple

@mjjjjjj