ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OS] Linux IPC 프로세스간 통신에 대해서 알아보자
    운영체제 2023. 4. 4. 13:40
    728x90
    반응형

     

    [OS] Linux IPC 프로세스간 통신에 대해서 알아보자

     

    오늘은 리눅스 IPC에 대해서 알아볼겁니당. 운영체제 수업 과제이기도 해서 겸사겸사 자세히 알아보겠습니다 🧐

     

    IPC란?

    IPC는 "Inter-Process Communication"의 약어로, 프로세스 간에 데이터를 주고받는 기술이나 방법을 말합니다. IPC는 동일한 컴퓨터 내에서 또는 네트워크 상에서 실행 중인 다른 프로세스와 데이터를 주고받을 수 있게 해줍니다.

     

    IPC를 사용하면 프로세스 간에 데이터를 안전하고 효율적으로 공유하거나 서로 통신할 수 있습니다. 예를 들어, 운영 체제에서 실행 중인 여러 개의 프로세스가 있을 때, IPC를 사용하여 이러한 프로세스 간에 데이터를 전송하거나 공유할 수 있습니다.

     


    IPC의 종류 

      1) PIPE (익명 PIPE)

      2) Named PIPE (FIFO)

      3) Message Queue

      4) Shared Memory (공유 메모리)

      5) Memory Map

      6) socket

     

     

    IPC 별 특징 한 눈에 보기

    IPC 종류 PIPE Named PIPE Message
    Queue
    Shared
    Memory
    Memory Map Socket
    사용 시기 부모 자식간
    단방향 통신
    다른 프로세스와의 단방향 통신 다른 프로세스와의 단방향 통신 다른 프로세스와의 양방향 통신 다른 프로세스와의 양방향 통신 다른 시스템과의 양방향 통신
    공유 매개체 파일 파일 메모리 메모리 파일+메모리 소켓
    통신 단위 Stream Stream 구조체 구조체 페이지 Stream
    통신 방향 단방향 양방향 단방향 양방향 양방향 양방향
    통신 가능 범위 동일 시스템 동일 시스템 동일 시스템 동일 시스템 동일 시스템 동일+외부 시스템

     


     

    각 IPC 자세히 알아보기

    🍊 PIPE

    PIPE 도식화

    • 익명의 PIPE를 통해서 동일한 PPID를 가진 프로세스들 간에 단방향 통신을 지원
    • 선입선출(FIFO) 구조
    • 생성된 PIPE에 대하여 Write 또는 Read만 가능
    • 부모 자식 프로세스간 통신 할때 사용
    • 유의사항
      • 쌍방 통신을 위해서는 Write용 PIPE하나 Read PIPE하나 씩 만들어야 한다.
      • read()와 write()가 기본적으로 block 모드로 작동하기 때문으로 프로세스가 read대기중이라면 read가 끝나기 전에는 write를 할수가 없게 된다.

     

     

     

    🍊 Named PIPE

    Named PIPE 도식화

     

    • 이름을 가진 PIPE를 통해 프로세스들 간 양 방향 통신을 지원
    • 기본적으로는 단 반향을 많이 사용하지만, 양 방향 통신을 위해서는 O_RDWR mode로 열어야 함
    • 서로 다른 프로세스들이 PIPE의 이름만 알면 통신이 가능함
    • 선입선출(FIFO) 구조
    • 생성된 PIPE에 대하여 Write 또는 Read만 가능
    • 연관이 전혀 없는 프로세스간에 통신을 할때
    • 유의사항
      • 쌍방 통신을 위해서는 Write용 PIPE하나 Read PIPE하나 씩 만들어야 한다.
      • read()와 write()가 기본적으로 block 모드로 작동하기 때문으로 프로세스가 read대기중이라면 read가 끝나기 전에는 write를 할수가 없게 된다.

        

     

    🍊 Message Queue

    Message Queue 도식화

     

    • 메모리를 사용한 PIPE
    • 구조체 기반으로 통신
    • 선입선출(FIFO) 구조
    • msgtype에 따라 다른 구조체를 가져올수 있음
    • 프로세스간 다양한 통신을 할 때 사용 할수 있음
    • 유의 사항
      • 커널에서 제공하는 Message queue 이기 때문에 EnQueue 하는데 제한이 존재 한다.
     

     

    🍊 Shared Memeory

    Shared Memory 도식화

    • 시스템 상의 공유 메모리를 통해 통신한다.
    • 일정한 크기의 메모리를 프로세스간에 공유하는 구조
    • 공유 메모리는 커널에서 관리함
    • 프로세스간 Read, Write를 모두 필요로 할때 사용됨
    • 유의사항
      • 프로세스간의 상요할려면 메모리 크키가 동일 해야 한다.

     

     

    🍊 Memory Map

    Memory Map 도식화

     

    Memory Map은 공유 메모리 영역을 파일처럼 매핑하여 사용할 수 있습니다. 매핑된 메모리는 물리적인 공간과 매핑되어 있으며, 여러 프로세스가 동시에 접근할 수 있습니다.

     

    • 파일로 대용량 데이터를 공유 할 때 사용
    • 빠른 속도로 데이터 전송 가능
    • 데이터 전송 과정에서 복사 비용이 발생하지 않음
    • 유의 사항
      • 메모리 맵 파일은 파일의 크기를 바꿀 수는 없으며 메모리 맵 파일을 사용하기 이전, 또는 이후에만 파일의 크기를 바꿀 수 있다.
      • 공유 메모리를 사용할 때에는 주의가 필요하며, 메모리 공유 중 오류 발생시 다른 프로세스나 시스템 자체에 치명적인 영향을 미칠 수 있다.

     

    🍊 Socket

    socket 도식화

    • 네트워크 소켓통신을 시용한 데이터 공유
    • 네트워크 소켓을 이용하여 Client - Server 모델 기반으로 데이터 통신
    • 원격에서 프로세스간 데이터를 공유 할 때 사용
    • 유의 사항
      • 네크워크 프로그래밍이 가능해야 한다.
      • 데이터 세그먼트 처리를 잘해야한다.

     

     

     

    LIST
Designed by Tistory.