[OS] Chapter 3. Processes : 프로세스 간 통신

지코·2025년 5월 20일

OperatingSystem

목록 보기
4/4
post-thumbnail

📌 프로세스간의 통신 (Interprocess Communication)

  • 동시에 실행되는 프로세스들은 독립적인 프로세스들이거나 협조하는 프로세스들이다.
  • 독립적인 프로세스들은 다른 프로세스들과 공유할 자원이 없고 각자의 메모리 영역을 가지고 있기 때문에, 적절한 CPU 할당만 된다면 운영하는 데 문제가 없다.
  • 협조하는 프로세스들은 주로 부모-자식 프로세스 관계이다. 다른 프로세스에게 영향을 주거나, 영향을 받는 관계를 말한다. 특히 다른 프로세스들과 자원을 공유하는 프로세스들을 협조하는 프로세스들이라고 한다.

IPC: Inter-Process Communication

  • 서로 협조하는 프로세스들은 IPC 메커니즘을 필요로 한다.
  • IPC 메커니즘은 그들이 서로 데이터를 주고 받을 수 있게 한다.

IPC의 두 가지 근본적인 모델

  1. 공유 메모리(shared memory)
  • 두 프로세스가 서로 공유하고자 하는 자원을 공유 메모리에 저장한다.
  1. message passing
  • 두 프로세스가 메시지 큐를 통해 메시지를 전달하고 받을 수 있다. 중간에 개입하는 매체를 운영체제의 커널(kernel)이라고 보면 된다.

📌 공유 메모리 시스템에서의 IPC

"생산자-소비자 문제"를 살펴보자.

  • 생산자-소비자 문제는 협조하는 프로세스들 간의 기본적인 문제이다.
  • 생산자는 정보를 생산하며, 소비자는 생산자가 생산한 정보를 소비한다.
    ex> 웹 서버가 생산한 HTML 파일을 브라우저가 소비함.

공유 메모리를 사용한 해결책은?

  • 생산자와 소비자 프로세스 모두 동시에 돌아가도록 허용한다. CPU를 사이좋게 할당받으면서 동시에 실행되도록 한다.
  • 이때 buffer 라는 아이템을 사용한다. 생산자는 버퍼를 채울 수 있고, 소비자 프로세스는 버퍼에 채워진 자원을 가져가 사용할 수 있다.
  • buffer 는 보통 bounded buffer로 크기 제한이 있기 때문에, 버퍼가 가득 찰 경우 생산자 프로세스는 wait 상태가 된다. 반대로, 버퍼가 비어있을 경우 소비자 프로세스가 wait 상태가 된다.
  • 이러한 버퍼를 공유 메모리로 만들면 된다❗️➡️ 보통 큐로 구현.

📌 메세지 패싱 시스템에서의 IPC

🤔 공유 메모리를 사용할 때의 문제점은?

  • 협조하는 프로세스들은 메모리의 한 영역을 공유해야 한다.
  • 애플리케이션 프로그래머가 공유 메모리에 접근하고 조작하기 위한 코드를 명시적으로 작성해야 한다.

🔮 그래서 메세지 패싱 방식은

  • 운영체제가 서로 메세지를 주고 받는 프로세스들에게 메세지 패싱 시설을 통해 서로 통신할 수 있는 수단을 제공한다.
  • 프로세스들은 메세지를 던지기만 하면 되고, 수단은 운영체제가 관리한다.

메세지 패싱 시설은 위와 같이 send(message)receive(message) 의 두 가지 연산을 사용한다. 이 연산을 할 때 두 프로세스 사이에 연결되어 있는 communication link를 활용한다.

Communication link가 실행되는 방식

  • direct or indirect communication
  • synchronous and asynchronous communication
  • automatic or explicit buffering

1️⃣-1. 직접적인(Direct) communication

  • 의사소통하고자 하는 수신자와 송신자의 이름을 명시적으로 기재해야 한다.
  • send(P, message): 프로세스 P에게 메세지를 송신.
  • receive(Q, message): 프로세스 Q로부터 메세지를 수신.
  • 이 경우, 단 하나의 communication link가 자동으로 생성된다.

    1️⃣-2. 비직접적인(Indirect) communication
  • 메세지는 port로 보내지고, port로부터 받을 수 있다.
  • port는 프로세스들에 의해 메시지를 배치하고 메시지를 제거할 수 있는 추상적인 객체이다.
  • send(A, message): 포트 A에게 메세지를 송신.
  • receive(A, message): 포트 A로부터 메세지를 수신.
  • 이 경우 두 프로세스가 같은 포트를 사용할 때만 단 하나의 communication link가 생성된다.
  • 또한 이 경우 생성되는 링크는 두 개 이상의 프로세스들과 연결될 수 있으며, 여러 개의 링크가 생성되는 것 또한 가능하다.

🧐 여기서 운영체제는 무얼 하는가?

  1. port생성(create)한다.
  2. port를 통해 메세지를 송신(send)하고 수신(receive)한다.
  3. port삭제(delete)한다.

2️⃣-1. synchronous(blocking) I/O

  • 송신자는 버퍼에 저장된 메세지의 수신이 완료될 때까지 block된다.
  • 수신자는 메세지 수신이 가능하기 전까지는 block된다.

    2️⃣-2. asynchronous(non-blocking) I/O
  • 송신자는 버퍼에 메세지를 보낸 후, 다른 일 처리가 가능하다.
  • 수신자는 유효한 메세지를 수신하거나, null을 리턴하고 다른 일 처리를 한다.

Reference

🦖 운영체제 공룡책 강의

profile
꾸준함이 무기

0개의 댓글