IPC, Inter Process Communication

2025. 8. 26. 15:41·Computer Science
반응형

IPC 란?

프로세스는 독립적으로 실행된다. 즉, 다른 프로세스에게 영향을 받지 않는다.

  • 스레드는 프로세스 안에서 자원을 공유하므로 영향을 받는다.

이런 독립된 구조를 가진 프로세스 간의 통신을 해야 하는 상황이 있을 것이다. 이를 가능하도록 해주는 것이 바로 IPC 통신이다.

  • 쉽게 말하면 하나의 운영체제 내에서 실행 중인, Spring Boot와 MySQL이 통신하는 상황이 있을 것이다.

프로세스는 커널이 제공하는 IPC 설비를 이용해 프로세스간 통신을 할 수 있게 된다.

커널이란?

운영체제의 핵심 설계 원칙 중 하나는 유저 공간과 커널 공간의 분리이다.

  • 유저 공간: 우리가 작성하는 일반적인 애플리케이션이 실행되는 영역, 이 공간의 프로그램들은 제한된 권한을 가지고 실행
  • 커널 공간: 운영체제의 핵심 코드가 실행되는 영역 커널은 시스템의 모든 하드웨어 자원에 대한 완전한 제어 권한을 가짐
  • 운영체제의 핵심적인 부분으로, 다른 모든 부분에 여러 기본적인 서비스를 제공해준다.

IPC도 커널을 통해서 제공받을 수 있다.

IPC의 종류

1. 익명 PIPE

  • 파이프는 두 개의 프로세스를 연결하는데 하나의 프로세스는 데이터를 쓰기만 하고, 다른 하나는 데이터를 읽기만 할 수 있다.
  • 한쪽 방향으로만 통신이 가능한 반이중 통신이라고도 부른다.

따라서 양쪽으로 모두 송/수신을 하고 싶다면 2개의 파이프를 만들어야 한다.
매우 간단하게 사용할 수 있는 장점이 있고, 단순한 데이터 흐름을 가질 땐 파이프를 사용하는 것이 효율적이다.
단점으로는 전이중 통신을 위해 2개를 만들어야 할 때는 구현이 복잡해지게 된다.

리눅스에서 ls -l | grep .txt와 같은 명령어를 실행한 적이 있을 것이다.

  • ls -l 프로세스가 현재 디렉토리의 파일 목록을 출력(쓰기)한다.
  • 이 출력이 | (파이프)를 통해 grep .txt 프로세스의 입력으로 전달된다.
  • grep .txt 프로세스는 입력받은 내용 중 .txt가 포함된 줄만 찾아 출력(읽기)한다.

리눅스에서는 해당 명령어를 처리할 때, 2개의 자식 프로세스를 만들어서 각각 처리하고 "|"를 익명 파이프를 통해서 전달해준다.

2. Named PIPE(FIFO)

  • 익명 파이프는 통신할 프로세스를 명확히 알 수 있는 경우에 사용한다. (부모-자식 프로세스 간 통신처럼)
  • Named 파이프는 전혀 모르는 상태의 프로세스들 사이 통신에 사용한다.

즉, 익명 파이프의 확장된 상태로 부모 프로세스와 무관한 다른 프로세스도 통신이 가능한 것 (통신을 위해 이름이 있는 파일을 사용한다.)
하지만, Named 파이프 역시 읽기/쓰기 동시에 불가능하다. 따라서 전이중 통신을 위해서는 익명 파이프처럼 2개를 만들어야 가능하다.

쉽게 웹 서버가 로그를 쓰고, 로그 처리기가 로그를 읽는다고 가정해보자.

  • 웹 서버 (쓰기 프로세스): mkfifo로 생성된 log_pipe라는 파이프에 로그 데이터를 비동기적으로 쓴다. (디스크에 저장하는 것은 아님)
  • 로그 처리기 (읽기 프로세스): log_pipe에서 실시간으로 로그 데이터를 읽어와서 데이터베이스에 저장하거나, 별도의 로그 파일에 기록한다.

이처럼 서로 관계없는 두 프로세스가 같은 시스템 내에서 통신할 때 사용합니다.

이번에 프로젝트를 하면서 LogBack으로 로그 파일을 쓰고, CloudWatch agent로 로그 파일을 읽어왔는데 이것도 Named PIPE의 일종인가 했지만 이런 방식은 그냥 일반적인 파일 I/O로 처리하는 것이다.

  • 데이터를 실시간으로 전달하는 것이 아니라, 디스크에 있는 파일을 수정하고 다른 프로세스가 그 파일의 변경을 감지하고 읽는 방식!

3. Message Queue

입출력 방식은 Named 파이프와 동일하다.
다른 점은 메시지 큐는 파이프처럼 데이터의 흐름이 아니라 메모리 공간이다.
사용할 데이터에 번호를 붙이면서 여러 프로세스가 동시에 데이터를 쉽게 다룰 수 있다.

  • 비동기적이고 간접적인 통신이 필요할 때 사용

4. 공유 메모리

  • 파이프, 메시지 큐가 통신을 이용한 설비라면, 공유 메모리는 데이터 자체를 공유하도록 지원하는 설비다.

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

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

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

  • 중개자 없이 곧바로 메모리에 접근할 수 있어서 IPC 중에 가장 빠르게 작동함

5. 메모리 맵

파일(디스크)을 메모리 주소 공간에 매핑하여 파일I/O를 메모리 접근 처럼 다룰 수 있게 해준다.
  • 파일 I/O를 효율적으로 처리하기 위한 방법
  • 같은 파일을 메모리에 매핑하면, 여러 프로세스가 해당 파일을 기준으로 데이터를 주고받을 수 있다.

주로 파일로 대용량 데이터를 공유해야 할 때 사용한다.

6. 소켓

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

서버(bind, listen, accept), 클라이언트(connect)

이러한 IPC 통신에서 프로세스 간 데이터를 동기화하고 보호하기 위해 세마포어와 뮤텍스같은 락 기법들을 사용한다. (공유된 자원에 한번에 하나의 프로세스만 접근시킬 때)

IPC가 왜 필요한가?

  • 별개의 포르세스들이 서로 데이터를 주고 받거나 동기화하기 위해 필요
  • 각 프로세스들은 독립적인 메모리 공간을 가지고 있기 때문에, 다른 프로세스의 메모리에 직접 접근할 수 없습니다. 따라서 여러 프로세스가 협력하여 작업을 수행하려면 특별한 통신 메커니즘이 필요한데, 이것이 바로 IPC입니다.

출처

https://gyoogle.dev/blog/computer-science/operating-system/IPC.html

반응형

'Computer Science' 카테고리의 다른 글

교착상태, DeadLock  (0) 2025.08.27
CPU 스케줄링  (3) 2025.08.27
PCB와 Context Switching  (4) 2025.08.26
TLS: Transport Layer Security 프로토콜  (3) 2025.08.10
데이터베이스 인덱스  (2) 2025.07.20
'Computer Science' 카테고리의 다른 글
  • 교착상태, DeadLock
  • CPU 스케줄링
  • PCB와 Context Switching
  • TLS: Transport Layer Security 프로토콜
부기(창의)
부기(창의)
창의의 개발블로그입니다.
  • 부기(창의)
    창의
    부기(창의)
  • 전체
    오늘
    어제
    • 분류 전체보기 (221) N
      • 고민 (1)
      • 데브옵스 (9)
      • AWS (3)
      • 웹 (13)
      • Docker (2)
      • Git (1)
      • JAVA (14) N
      • OOP (3)
        • 디자인 패턴 (1)
      • 백준 (106)
        • JAVA (7)
      • Spring (23)
      • 개발 관련 (4)
      • 알고리즘 (4)
      • TIL (13)
      • 우아한 테크코스 (9)
        • 프리코스 지원과정 (6)
      • NextJS (3)
      • Computer Science (13)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • Github : https://github.com/chan⋯
  • 인기 글

  • 태그

    spring
    백준
    완탐
    우테코
    SSR
    dp
    java
    jpa
    페스타타북
    Spring Boot
    알고리즘
    스프링
    aws
    뉴진스
    jvm
    ec2
    도커
    동시성
    백트래킹
    메모리
    운영체제
    완전탐색
    페스타북
    hibernate
    우테코 프리코스
    스레드
    자바
    OS
    우테코 7기
    다이나믹 프로그래밍
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
부기(창의)
IPC, Inter Process Communication
상단으로

티스토리툴바