[운영체제] IPC(Inter Process Communication)

xoey·2024년 10월 30일

운영체제

목록 보기
7/15
post-thumbnail

1. 독립적 프로세스(Independent Process)

  • 프로세스는 각자의 주소 공간을 가지고 수행된다.
  • 원칙적으로 하나의 프로세스는 다른 프로세스 수행에 영향을 미치지 못한다.

2. 협력 프로세스(Cooperating Process)

  • 프로세스 협력 메커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있다.

3. IPC: Interprocess Communication

프로세스 간에 정보를 주고 받을 수 있는 방법

  • 메세지를 전달하는 방법
    • Message Passing
  • 주소 공간을 공유하는 방법
    • Shared Memory
    • Thread

3.1. Message Passing

공유 메모리와 대조적으로, 공유 변수 없이 메세지를 통해 데이터를 전달한다는 점에서 차별화된다. 메세지 전달은 일반적으로 커널을 통해 이루어지며, 직접 또는 간접적으로 프로세스 간의 통신을 지원한다.

3.1.1. Communication 방식

  • Direct Communication: 통신하려는 프로세스의 이름을 명시적으로 표시

    인터페이스 측면에서 메세지를 전달하는 프로세스가 메세지를 전달 받을 프로세스를 명시

  • Indirect Communication: mailbox(또는 port)를 통해 메세지를 간접 전달

    경우에 따라 메세지를 집어 넣으면서 문어발 식으로 아무나 꺼내가라 할 수도 있음.

3.1.2. 동기화(Synchronization)

  • 동기적 통신(Synchronous Communication)
    • 메세지를 보내는 프로세스는 수신 프로세스가 메세지를 받을 때까지 기다린다. 즉, 송신과 수신이 동시에 이루어져야 한다.
    • 통신의 신뢰성이 높으나, 송신 프로세스가 수신 프로세스의 응답을 기다려야 하므로 시스템 효율 저하를 일으킨다.
  • 비동기적 통신(Asynchronous Communication)
    • 메세지를 보내는 프로세스는 메세지를 보낸 후 바로 다음 작업을 수행할 수 있으며, 수신 프로세스는 나중에 메세지를 수신한다.
    • 수신 프로세스는 언제든지 메세지를 수신할 수 있으며, 송신 프로세스는 수신 여부에 관계없이 계속 작업 수행이 가능하다.
    • 시스템의 효율성을 높일 수 있으나, 메세지 손실 가능성이 있다.

3.2. Pipe(익명 파이프 & Named 파이프)

프로세스 간에 데이터를 바이트 스트림 형태로 전달하며, 주로 부모-자식 프로세스 간의 통신에 사용된다. 파이프는 단방향 또는 양방향 통신을 지원하며, 익명 파이프와 Named 파이프 두 가지 주요 유형으로 나뉜다.

  • 기본적으로 반이중 통신(단방향 통신)만 가능하기 때문에, 양방향 통신이 필요하면 두 개의 파이프를 만들어야 한다.
  • 파이프는 단순한 데이터 흐름을 처리하는 데 적합하며, 두 프로세스가 연속적으로 데이터를 송수신하는 구조다.
  • 유형
    • 익명 파이프: 부모-자식 관계와 같이 밀접한 관계에 있는 프로세스 간에 사용된다.
    • Named 파이프(FIFO): 전혀 모르는 상태의 프로세스 사이에서도 사용될 수 있다.

3.3. Shared Memory

두 개 이상의 프로세스가 동일한 메모리 공간을 공유하여 데이터를 주고받을 수 있게 해주는 메커니즘이다. 빠른 데이터 교환을 가능하게 하지만, 동기화 문제를 적절히 처리하지 않으면 데이터 경합이나 일관성 문제가 발생할 수 있다.

Share Memory에서 프로세스 A, B는 따로 주소 공간을 가지고 있으나 물리적으로 매핑될 때 일부 공간이 공유된다.

  • 여러 프로세스가 동일한 메모리 영역을 동시에 접근할 수 있기 때문에, 데이터의 일관성을 유지하려면 동기화가 필요하다.
  • 세마포어, 뮤텍스 같은 동기화 메커니즘을 사용하여 공유 메모리 접근을 제어해야 한다. 그렇지 않으면 여러 프로세스가 동시에 데이터를 수정할 때 충돌이나 데이터 손실이 발생할 수 있다.

3.4. Thread

  • 스레드는 사실상 하나의 프로세스이므로 프로세스 간 협력으로 보기에는 어렵다.
  • 하지만 동일한 프로세스를 구성하는 스레드 간에는 주소 공간을 공유하므로 협력이 가능하다.

Reference

profile
[Roman 8:18] consider that our present sufferings are not worth comparing with the glory that will be revealed in us.

0개의 댓글