IPC(Inter Process Communication)

: 커널이 제공하는 IPC 설비를 이용해 프로세스 간 통신을 하는 방법

💡프로세스
1️⃣ 각자 독립된 메모리 공간을 가지고 있어 서로 간의 데이터를 공유할 수 없음.
2️⃣ 성능을 높이기 위해 여러 프로세스를 만들어서 동시 실행시, 프로세스 간 상태 확인 및 데이터 송수신 필요함.
💡프로세스 구조
프로세스 가상 메모리 구조 및 커널 가상 메모리 구조

  ✅ 모든 프로세스 동일한 내용을 가지고 있는 부분 존재함.
     → 같은 내용을 복사해서 각각 가지고 있는 것은 비효율적
     → 커널 내부에 모든 프로세스가 공유하는 부분 존재함.

프로세스 A, B 메모리 공유

📌 통신 방법

1️⃣ PIPE(익명 PIPE)

💡한쪽 방향으로만 통신이 가능한 파이프의 특징 때문에 Half Duplex(반이중) 통신 == 단반향 통신

  • 하나의 프로세스는 데이터를 쓰기만, 다른 하나는 데이터를 읽기만 할 수 있음.

  • 통신을 할 프로세스가 명확하게 알 수 있는 경우 사용

  • 구현 간단함.

 

2️⃣ Named PIPE(FIFO)

  • 부모 프로세스와 무관하게 전혀 다른 모든 프로세스들 사이에서 통신 가능

  • 통신을 위해 이름이 있는 파일을 사용함.

  • 단방향 통신만 가능하지만 이름이 있는 파일 두 개를 사용해 해결 가능

 

3️⃣ 메시지 큐(Message Queue)

 

• Named PIPE와 입출력 방식 동일

Named PIPE Message Queue
데이터의 흐름 메모리 공간

 

 

• 메시지 큐에 쓸 데이터에 번호를 붙임으로써 여러 개의 프로세스가 동시에 데이터를 쉽게 다룰 수 있음.

  → 즉, 다수의 프로세스들이 큐에 메시지를 보낼 수 잇고 다수의 프로세스들이 큐로부터 메시지를 꺼낼 수 있음.

 

 

• 작동 방식

 : 프로세스 P1이 P2에 데이터를 보내기 위해 시스템 콜 사용

  → 시스템 콜에 의해 P1의 주소 영역에서 메세지가 카피되어 커널에 보내짐.

  → P2가 데이터를 받기 위해 시스템 콜을 사용함.

  → 메세지 큐의 메세지가 터널에서 P2의 주소 영역으로 보내짐.

 

4️⃣ 공유 메모리

  • 커널에서 제공하는 통신 설비가 아닌, 데이터 자체를 공유하도록 지원하는 설비

  • 별다른 통신 없이 직접적으로 데이터에 접근하기 때문에 IPC 중 가장 속도가 빠름.

  • 프로세스가 공유 메모리 할당을 커널에 요청하면 커널은 해당 프로세스에 메모리 공간을 할당해주며 이후 어떤 프로세스든지 해당 메모리 영역에 접근 가능함.

  • 작동 방식

   : Writer 프로세스가 공유 메모리에 데이터 작성

    → 데이터 쓰기가 완료되면 해당 데이터가 타프로세스에 대해 접근 가능한 상태가 됨.

    → Reader 프로세스가 공유 메모리에서 데이터를 가져다 씀.

 

5️⃣ 세마포어(Semaphore) 

  • 프로세스 간 데이터를 동기화하고 보호 목적

💡 동기화
공유 데이터가 동시에 접근하여 값을 변경시키면 문제가 발생할 수 있는데 이것을 막는 방법
💡 Critical Section = 임계 영역
둘 이상의 스레드 혹은 프로세스가 동시에 접근해 연산을 실행하면 안되는 공유 변수가 존재하는데 이런 변수가 존재하는 코드 블록을 Critical Section이라고 함.

 

  • 그림 예시

  ‣ T1, Y에서 값 5 읽음.

   → Context Switching에 의해 T2가 running 상태

   → Y에서 값을 읽었는데, 변경이 없으므로 5를 읽음.

   → *2 한 값 10을 저장

   → Context Switching

   → T1이 가지고 있던 값 1번에서 읽은 5였으므로 5 + 1 = 6 Y에 저장

프로세서
    각 작업의 묶음 단위가 무엇인지 모르기 때문에 작업을 묶음 단위로 실행시키지 못하여 위와 같은 문제 발생
💡Mutual Exclusion
    공유되는 자원의 접근 권한을 통제하여 위와 같은 현상을 방지함.
    ➡️ Race condition을 발생시킬 수 있는 공유 자원(Critical Section)에 대해 하나의 프로세스가 접근하여 lock() 메서드를 이용해 다른 프로세스의 접근을 막음.

 

6️⃣ Signal

   • Software Interrupt 또는 이벤트 알림 또는 프로세스의 처리 과정에 있어 발생할 수 있는 예외

   • 시그널이 발생하면 OS는 프로세스의 실행을 멈추고, Signal handler를 통해 발생한 시그널 처리함.

   • 시그널 처리 방법

     ‣ 시그널 무시

     ‣ 시그널 블록(이후, 블록 풀면 해당 프로세스에서 시그널 처리)

     ‣ 등록된 Signal handler로 특정 동작 수행

     ‣ 커널에서 기본 동작 수행(Default)

 

7️⃣ 소켓(Socket)

   • 일종의 소프트웨어 구조로 네트워크 상에서 데이터를 주고/받는 endpoint 역할

   • 컴퓨터와 컴퓨터 사이에서 데이터를 주고 받는 것도 가능하지만, 하나의 컴퓨터 안에서 각 컴포넌트끼리 데이터를 주고 받는데 사용하는 것도 가능함.


📌 참고 블로그

https://velog.io/@yaaloo/CS-IPC

 

[CS] IPC

InterProcess communication (IPC) 다음의 이유로 IPC 기법의 필요성이 생긴다. 프로세스는 다른 프로세스의 공간에 접근할 수 없다. 성능을 높이기 위해 여러 프로세스를 만들어서 동시 실행 시, 프로세스

velog.io

 

반응형