ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Operating System - IPC
    Computer Science/Operating System 2022. 1. 12. 14:17

    IPC

    IPC란?

     

    IPC는 Inter-Process Communication의 약자로 내부 프로세스 간 통신을 의미한다.

    위 그림처럼 각각의 프로세스는 완전히 독립된 실행 객체이다. 서로 독립되어 있다는 것은 다른 프로세스의 영향을 받지 않는다는 장점이 있다. 하지만, 독립되어 있는 만큼 별도의 설비가 없이는 서로 간에 통신이 어렵다는 문제가 있다.

    이러한 문제를 위해서 커널 영역에서 IPC라는 내부 프로세스 간 통신을 제공하게 되고, 프로세스는 커널이 제공하는 IPC 설비를 이용해서 프로세스 간 통신을 할 수 있다.

     

    IPC의 종류

    1. PIPE(익명 PIPE)

    PIPE는 두 개의 프로세스를 연결하게 되고, 하나의 프로세스는 데이터를 쓰기만 하고, 다른 하나는 데이터를 읽기만 할 수 있다. 한쪽 방향으로만 통신이 가능한 PIPE의 특징 때문에 반이중 통신이라고 부른다. 따라서, 양쪽으로 모두 송수신을 하고 싶으면 2개의 PIPE를 만들어야 한다.

    매우 간단하게 사용할 수 있다는 장점이 있고, 단순한 데이터 흐름을 가질 때 효율적인 방식이다. 하지만, 전이중 통신을 위해 2개의 PIPE를 만들어야 하기 때문에 구현이 복잡해진다는 단점이 있다.

     

    2. Named PIPE(FIFO)

    통신할 프로세스를 명확히 알 수 있는 경우(부모-자식 프로세스 간 통신)에 사용되는 익명 PIPE와는 다르게, Named PIPE는 전혀 모르는 상태의 프로세스들 사이의 통신에 사용된다.

    즉, Named PIPE는 익명 PIPE의 확장된 형태로 부모 프로세스와 무관한 다른 프로세스도 통신이 가능한 형태이다.

    하지만, Named PIPE 역시 읽기/쓰기가 동시에 불가능하며, 전이중 통신을 위해 2개의 PIPE를 만들어야 한다는 단점이 있다.

     

    3. Message Queue

    Queue는 선입선출의 자료구조를 가지는 통신설비로 커널에서 관리한다. 입출력 방식은 Named PIPE와 동일하다. Named PIPE와 다른 점은 Named PIPE가 데이터의 흐름이라면 Message Queue는 메모리 공간이라는 점이다. PIPE가 아닌 어디에서나 데이터를 공유할 수 있는 방식이다.

    Message Queue를 통해 전달될 데이터에 번호를 붙임으로써, 여러 개의 프로세스가 동시에 데이터를 쉽게 다룰 수 있다는 장점이 있다.

     

    4. Shared Memory

    익명 PIPE, Named PIPE, Message Queue가 통신을 이용한 설비라면, Shared Memory는 데이터 자체를 공유하도록 지원하는 설비이다.

    프로세스의 메모리 영역은 독립적으로 가지며, 다른 프로세스가 접근하지 못하도록 반드시 보호되어야 한다. 하지만, 다른 프로세스가 데이터를 사용해야 하는 상황도 있을 것이다. PIPE를 이용한 데이터 전달도 가능하지만, Thread처럼 메모리 영역을 공유한다면 더 편하게 데이터를 사용할 수 있을 것이다.

    Shared Memory는 프로세스 간 메모리 영역을 공유해서 사용할 수 있도록 허용해준다.

    프로세스가 공유 메모리 할당을 커널에 요청하면, 커널은 해당 프로세스에게 메모리 공간을 할당해주고 이후 모든 프로세스는 해당 메모리 영역에 접근할 수 있게 된다.

    중개자 없이 곧바로 메모리에 접근할 수 있기 때문에, IPC 설비 중에서 가장 빠르게 작동한다.

     

    5. Memory Map

    Memory Map은 Shared Memory와 마찬가지로 메모리를 공유하는 방식이다. Shared Memory와의 차이점은 Memory Map은 열린 파일을 메모리에 매핑시켜서 공유한다는 점이다. 이러한 Memory Map 방식은 주로 파일을 통해서 대용량 데이터를 공유할 때 사용된다.

     

    6. Socket

    네트워크 소켓 통신을 통해 데이터를 공유하는 방식이다.

    클라이언트와 서버가 소켓을 통해서 통신하는 구조로, 원격에서 프로세스 간 데이터를 공유할 때 사용된다.

     

    728x90

    댓글

Designed by Tistory.