프로세스 통신(Message Passing)

sun202x·2023년 1월 19일
0

운영체제

목록 보기
12/23
post-thumbnail

해당 게시글은 kocw에서 제공하는 금오공과대학교 최태영 교수님의 무료 강의를 공부하고 정리하기 위해서 만들어졌습니다.

Interprocess Communication(Message Passing)

  • Message passing은 커널이 대부분의 통신 관련 일을 처리해야 한다.
  • 그렇기 때문에 다양한 선택지를 사용자에게 제공해줄 수 있다.
  • 기본적으로 메세지를 보내는 쪽은
    • send system.call을 사용하고
  • 메세지를 받는 쪽은
    • receive system.call을 사용한다.
  • 커널은 이 두 개의 시스템 콜을 기본적으로 제공해 주어야 하는데,
  • 이 때 고려해야 할 점은 다음과 같다.
    • 메세지 크기의 한도를 정할지
      • 정해진 크기일 경우: fixed
      • 정해지지 않은 크기일 경우: variable
    • 프로세스간 cummunication link를 어떻게 제공할지
      • 커널은 프로세스 P와 Q 사이에 communication link라는 것을 가운데 제공해 주어야 한다.
      • communication link는 message queue이다.
      • communication link는 다양한 옵션을 가진다.
          1. link가 어떻게 생성될지
          • 명시적
          • 암시적
          1. link를 두 개의 프로세스만 제공할지 그 이상 제공할지
          • 둘 이상의 프로세스에게 제공해주려면 추가적인 기술을 제공해 주어야 한다.
          1. 두 프로세스 P, Q 사이에 몇 개의 link를 만들어 줄것인지
          1. link의 용량을 얼마나 제공할 것인지
          • message queue로 link가 제공 되는데, 이 때 queue의 크기를 얼마나 제공할지
          • 초당 얼마나 많은 데이터를 보낼수 있는지(속도)
            • 구현하는 디테일에 따라 다르다.
          1. message의 크기를 얼마나 제공할지
          1. link 를 통해 단방향 통신을 할지, 양방향 통신을 할지
      • 1, 2, 3은 정책의 따라 달라지는 옵션이고,
      • 4, 5, 6은 구현에 따라 달라지는 옵션이다.
  • 정책 옵션에 따라 양 극단으로 옵션을 사용하는 방식을 알아보자.

Direct Communication(직접적인 통신)

  • 전형적인 system.call이 send, receive
  • 목적지를 정확히 명시
    • send(Q, m)
    • receive(P, m)
  • 해당 방식을 사용하면 1, 2, 3번 옵션이 자연스럽게 결정된다.
      1. link를 커널이 생성 해준다는 암묵적인 약속이 생기고,
      1. 정확한 목적지를 명시 함으로써 두 프로세스에게만 링크를 제공한다.
      1. 두 개의 프로세스 사이에 또 다른 link가 있을 필요가 없다.

Indirect Communication(간접적인 통신)

  • 프로세스 P, Q 사이에 A라는 링크(mail box)를 두어 메세지를 전달한다.
  • P가 send 하면 mail box에 메세지가 전달되고,
  • Q는 mail box를 통해 메세지를 전달받는다.
  • 해당 방식의 1, 2, 3번 옵션을 살펴보면
      1. A라는 링크(mail box)를 생성해야 하므로 명시적으로 link를 생성해야 한다.
      • P이든 Q이든 A라는 link를 만들어야 한다.
      1. mail box는 메세지를 전달받고 주는 역할이기 때문에, 프로세스 Q가 프로세스 R에게 A link의 존재를 알려주면 R도 A link를 사용할 수 있다.
      1. 또한 반드시 P, Q만 통신하지는 않기 때문에 R과의 통신을 위한 또 다른 mail box를 둘 수 도 있다.

Direct, Indirect 방식 비교

  • Direct Communication은 현실에서 우편 시스템으로 볼 수 있고,
    • 우편을 보내려면 받는사람, 보내는 사람을 정확히 명시해야 한다.
  • Indirect Communication은 사서함과 같이 볼 수 있다.
    • 불특정 다수에게 사연을 받아서 사서함으로 받고 라디오 방송에서 진행하는 것과 같다.
  • mail box는 임시저장 장소이기 때문에, 메세지를 주고 바로 받을 수 있는 형태이다.
  • Indirect Communication 방식을 사용하면 한 가지 문제가 발생한다.
  • 프로세스 Q가 mail box에 메세지를 전달하고, 프로세스 Q와 R이 동시에 메세지를 가져가려고 하는 상황이 발생할 수 있다.
    • 둘 중 어느 프로세스에게 줘야 할지 결정해 주어야 한다.
  • 다음의 세 가지 방식으로 문제를 해결할 수 있다.
      1. 다양성 무시
      • 세 번째 프로세스는 무시하고 항상 Q에게 메세지를 준다.
      • 좀 더 엄격하게 다루는 방식
      • 다중 연결을 무시하는 방식이라 mail box의 장점이 사라진다.
      1. 항상 순서가 생기도록 만드는 방식
      • 항상 요구한 시간을 기록해두고,
      • 시간마저 동일하다면, 또 다른 기준을 두어 순서를 정한다.
      • 예를 들어 각기 다른 컴퓨터라면 ip 주소의 순서를 정하고, 컴퓨터 시스템 내부라면 pid를 통해 순서를 정한다.
      1. 랜덤하게 메세지를 전달하는 방식
      • 동일한 시간에 메세지를 요청할 때, 랜덤하게 순서를 정하여 메세지를 전달하는 방식
      • 단, 랜덤으로 전달하기 때문에 어느 프로세스가 전달 받았는지 send에게 알려줄 필요는 있다.
  • Direct 방식의 link 통신 방향은 커널이 어떻게 구현하느냐에 따라 달라진다.
    • 단방향 링크 2개를 둘지, 양방향 링크 하나를 둘지,
    • 사실 사용자 입장에서는 단방향이든, 양방향이든 신경쓰지 않기 때문이다.
  • Indirect 방식은 웹서버 통신 같은 경우 단방향 링크로 두고, 프로세스간 통신이면 양방향 링크로 둔다.
    • 컴퓨터간 통신은 매우 많은 프로세스와 통신해야 하는 경우가 생기기 때문에, 서버 쪽에서 link를 두고 받아서 처리할 가능성이 크기 때문이다.

시스템 내부 구현에 따른 메세지 통신 방식

  • 내부 구현에 따라 통신 방식이 크게 두가지로 나뉜다.
    1. Blocking
    • P에서 메세지를 Q로 보낼 때, Q가 준비되어있지 않다면 block이 되는 방식이다.
    • 마찬가지로 Q에서도 P가 메세지를 보내지 않았다면 기다린다.
    • Synchronous Message Passing이라고도 한다.
    1. Non-blocking
    • 웹 서버 같은 경우 block 시킬 경우 다른 일을 할 수 가 없기 때문에, Non-blocking 방식을 사용한다.
    • 받을 프로세스의 상태와 관계없이 메세지를 보내 놓고, 받는 프로세스에서도 메세지가 왔는지 확인하고 왔으면, 처리하고 안 왔으면 다른 일을 처리한다.
  • 윈도우, 리눅스 모두 두 가지 방식으로 사용하며, 우리가 일반적으로 쓰는 방식은 blocking 방식이다.
  • blocking 방식으로 통신하는 것을 rendezvous(랑데뷰)라고도 한다.
  • 커널에서 message queue를 어떻게 구현하냐에 따라 blocking, non-blocking이 결정된다.
    • 보내는 입장에서
    • circular queue라면 blocking이 되고,
    • linked list라면 non-blocking이 된다.

Examples of IPC System - POSIX

  • IPC: Inprocess Communication
  • POSIX는 표준안이다.
    • UNIX의 버전이 워낙 다양하다 보니, 이것들의 표준안을 통일시킬 필요가 있어 나왔다.
    • 이 표준안은 함수 이름과 파라미터만 정해준다.
  • POSIX 표준안에서 Shared Memory를 제공해주는 것이 있다.
    • 커널에게 shared memory를 요청하려면
    • shm_open 함수를 통해 요청할 수 있다.
    • 파라미터로 이름과, 옵션들을 전달할 수 있다.

Examples of IPC System - Windows

  • advanced local procedure call(LPC)를 제공해준다.
  • Client-Server 시스템
    • Socket
      • 초기에는 소켓 통신을 했다.
    • Remote Procedure Calls
      • send, receive를 한 군데 묶어서 함수로 제공
      • 통신의 형태를 함수로 제공한 것
    • Pipes
      • 하나의 컴퓨터 안에서 프로세스들끼리 통신하기 위한 것
      • 임시 파일 같은 것
      • Producer가 파일 안에 내용을 쭉 쓰고,
      • Consumer가 파일을 쭉 읽어 와서 처리하는 형식
    • Remote Method Invocation(Java)
      • 여러가지 통신 기능을 하나의 method call로 클래스를 제공해 주는 방식이다.
profile
긍정적으로 살고 싶은 개발자

0개의 댓글