프로세스간 통신(IPC)

Koo·2023년 9월 24일
post-thumbnail

프로세스간의 통신

  • 프로세스는 두 가지 방식으로 실행될 수 있음

    • 독립적으로 실행되는 경우
      • 프로세스마다 별도의 독립적인 메모리 공간을 가짐
    • 다른 프로세스와 함께 실행되는 경우
      • 프로세스간 메세지를 주고받거나 데이터를 공유할 때 문제가 발생함
  • 프로세스가 독립적이라는 것은 메세지를 주고받지 않음

  • 프로세스가 함께 실행되면 서로에게 영향을 미침

IPC(Inter-Process Communication)

함께 실행되는 프로세스 관계에는 IPC 메커니즘이 필요

생산자 소비자 문제(Producer-Consumer Problem)

생산자는 정보를 생산하고, 소비자는 생산된 정보를 소비함
ex)

  • 컴파일러가 어셈블리어를 만들면, 어셈블러가 어셈블리어를 소비해 기계어를 생성함
  • 웹 서버가 HTML 파일을 만들면, 브라우저가 HTML 파일을 소비해 페이지를 렌더링함

공유 메모리(shared memory)를 사용하는 방법

  • process A가 shared memory에 데이터를 놓으면 process B가 shared memory에서 데이터에 접근함
  • 생산자와 소비자는 동시에(concurrently)하게 동작함
  • 버퍼를 사용해 데이터를 공유할 수 있음
    • 버퍼 - process A와 process B가 공유하고 있는 메모리 공간
    • 각 프로세스가 갖는 공간은 다른 프로세스와 독립적인 별도의 공간을 가져야 함
    • 버퍼 공간은 운영체제가 프로세스 내부가 아닌 외부에 별도로 생성해주어야 함
    • 원형 큐를 이용해 버퍼 공간을 구현할 수 있음
  • 생산자인 process A는 버퍼에 데이터를 저장
  • 소비자인 process B는 버퍼에서 데이터를 가져옴
  • 버퍼는 사이즈가 정해져있기 때문에 생산자인 process A는 대기상태가 됨
  • 소비자인 process B는 버퍼가 비어있을 때는 대기상태가 됨

공유 메모리 방식의 문제점

  • 메모리 영역에 엑세스하는 것을 사용자가 직접 지정해주어야 함
  • 프로세스의 양이 많아지면 지정해주는 데 한계가 있음

커뮤니케이션 링크

M:N의 프로슈머(producer + consumer)와 프로슈머가 통신을 할 때는 일일히 메세지 설정을 해주기 어렵기 때문에 공유 메모리를 사용하는 경우도 있음

메세지(message passing)를 사용하는 방법

  • process A가 운영체제에 메세지를 보내면 운영체제가 process B에 메세지를 전달하는 방법
  • 메세지를 전달하는 것을 운영체제가 처리해줌
  • 큐잉이나 대기 등을 모두 운영체제가 처리해줌
  • 사용자 입장에서는 공유 메모리를 관리할 필요 없이 운영체제에게 맡기면 됨
  • send(), receive() 시스템 콜만 사용하면 됨
  • 전달방식
    • direct와 indirect
      • direct
        • 생산자가 소비자에게 바로 전달해줌
        • receiver와 sender를 서로 알고 있음
        • communication link가 자동으로 생성됨
        • 한 쌍의 프로세스에 대해 오직 하나의 링크만을 가짐
      • indirect
        • 생산자가 데이터를 저장하면 소비자가 저장된 데이터에 접근함
        • 메세지는 포트(메일박스)를 통해 전달됨
        • receiver와 sender는 포트(메일박스)만 알고 있음
        • 하나의 링크에 대해 여러 개의 sender와 receiver가 있을 수 있음
        • create, send, receive, delete 기능 외만 사용자가 사용하고 나머지는 운영체제가 관리하게 됨
    • synchronous와 asynchronous
      • synchronous(동기화)
        • sender가 데이터를 주면 동시에 receiver가 데이터에 접근해 사용함
        • Blocking send : 메세지를 receiver가 받을 때까지 sender는 다른 행동을 하지 않음(block 상태)
        • Blocking receive : 메세지를 모두 받을 때까지 receiver는 다른 행동을 하지 않음(block 상태)
        • 속도가 느린 대신 신뢰성을 보장할 수 있음
      • asynchronous(비동기화)
        • 데이터를 동시에 주고 받는 것이 아닌 필요할 때만 접근함
        • Non-Blocking send : 메세지를 전송한 후 다른 동작을 수행할 수 있음
        • Non-Blocking receive : 메세지를 받은 후 더 이상 받을 메세지가 없으면 다른 동작을 하다가 다시 메세지를 받음
        • 속도가 빠르지만 신뢰성을 보장할 수 없음
    • automatic과 explict
      • automatic - 자동적으로 데이터를 전송
      • explicit - 데이터를 명시적으로 전송
profile
스터디를 해보자

0개의 댓글