운영체제

프로세스간 통신

뭉크테크 2025. 1. 13. 06:27

1. IPC(Inter-Process Communication) 개념

  1. 독립적 메모리 공간
    • 운영체제(OS)는 각 프로세스가 서로 다른 가상 메모리 공간(VMS)을 사용하도록 보장합니다.
    • 임의로 다른 프로세스 메모리에 접근하면 “해킹”에 해당하고, 정상적인 환경에서는 OS가 이를 방지합니다.
  2. 왜 IPC가 필요한가?
    • 프로세스 간에 데이터를 교환하거나 협업이 필요한 경우, OS가 허용하는 “공식적인 통로”를 사용해야 합니다.

2. IPC 수단: 메모리 기반 vs 파일 기반

2.1 메모리(RAM) 기반 IPC

  • 공유 메모리(Shared Memory):
    • 여러 프로세스가 동일한 물리 메모리(페이지)를 서로 다른 가상 주소에 매핑받아 사용하는 방식입니다.
    • 예: 리눅스의 shmget() / shmat(), Windows의 “Named Shared Memory” 등.
    • 특징:
      • 매우 빠른 접근 (직접 메모리에 read/write)
      • 동기화(Lock, Mutex, Semaphore 등)를 프로그래머가 관리해야 함
      • 일반적으로 고정 크기로 할당하기 때문에 확장성은 제한적
      • 프로세스가 종료되면 공유 메모리도 함께 해제(또는 OS가 관리)될 수 있음
  • DLL을 이용한 공유 데이터 세그먼트(Windows)
    • 여러 프로세스가 같은 DLL을 로딩할 때, DLL 내 특정 영역(예: .data 섹션)을 공유할 수 있도록 설정하는 방식입니다.
    • #pragma data_seg 등을 사용해 전역 변수 영역을 공동으로 사용하게 만들 수 있음.
    • 장점: 매우 고속, 구현 단순 (C/C++ 전역 변수 사용하듯이)
    • 단점: 보안/안정성, 동기화 이슈, 특정 Windows 환경에 종속적

2.2 파일(File) 기반 IPC

  • 파일(또는 파이프)을 매개로 프로세스들이 데이터 교환
  • 파이프(Pipe):
    • 한쪽에서 쓰기(write), 다른 쪽에서 읽기(read) 하는 단방향/양방향 스트림 구조
    • Unnamed Pipe(부모-자식 프로세스 간), Named Pipe(서로 무관한 프로세스 간)
    • 크기가 동적으로 확장되기도 하며, 연속된 바이트 스트림처럼 취급
  • 일반 파일:
    • open(), write(), read(), close()로 작업
    • 데이터가 직렬화(Serialization)되어 기록되므로, 상대적으로 동기화 부담이 적을 수 있음(교대로 쓰고 읽는 구조)

3. 네트워크 확장: 소켓(Socket)과 RPC

  1. 소켓(Socket)
    • 프로세스 간 통신이 네트워크(MQTT, TCP, UDP 등)까지 확장된 형태
    • 로컬(동일 머신) 통신에도 소켓을 사용할 수 있으며(localhost), 원격 통신도 동일 방식
    • HTTP/3, WebSocket 등을 통해 브라우저-서버 간 양방향 통신이 활발
  2. RPC(Remote Procedure Call)
    • 네트워크로 연결된 원격 프로세스의 함수를 로컬 함수처럼 호출하도록 추상화한 기법
    • 내부적으로 소켓(TCP/IP) 등을 사용
    • 예: gRPC, JSON-RPC 등이 오늘날 다시 주목받는 이유는 분산 환경(Microservices)에서 호환성과 성능을 높일 수 있기 때문

4. IPC 구조 예시

  1. Shared Memory + 시그널
    • 프로세스 A가 공유 메모리에 데이터를 써 놓고, B에게 시그널/이벤트를 보내 알림
    • B는 이벤트를 받으면 공유 메모리를 읽어 처리
    • 이때 락(Lock) or 세마포어(Semaphore) 등의 동기화 메커니즘 사용 권장
  2. 파이프
    • 한쪽이 쓰기(Producer), 다른 쪽이 읽기(Consumer)
    • 직렬화된(순차적) 데이터 전송 구조라, 동기화 부담이 완화
  3. 소켓
    • 네트워크 기반이므로, 같은 호스트(IPC)에도 쓰이지만 원격지 서버-클라이언트 통신에도 활용
    • TCP 연결(스트림) or UDP(비연결성) 방식

5. Windows 특수 IPC: 레지스트리, DLL 공유

  1. Windows Registry
    • 파일과 메모리의 장점을 융합한 “트리 구조형 데이터베이스
    • 속도가 빠르고(메모리 상주) 여러 프로세스가 안전하게 접근 가능(권한/락)
    • 일반 파일보다 동시성 제어가 잘 되어 있어, 간단한 IPC 용도로도 사용 가능
  2. DLL Injection & Hooking
    • 특정 .DLL을 다른 프로세스에 “주입(Injection)”하여, 그 프로세스의 API나 함수 호출을 가로채(Hook) 처리
    • 예: WinSock API 호출을 가로채어, 패킷을 검사하거나 차단(방화벽 기능)
    • 주의: 보안 이슈 및 Windows 내부 구조에 대한 고급 지식 필요. 종종 인터넷 뱅킹 보안 모듈 등이 이런 기법을 활용

7. 요약

  • 프로세스 간에는 독립적 주소 공간이 주어지므로, IPC를 이용해 안전하고 정규화된 방식으로 데이터 교환을 해야 합니다.
  • IPC 수단은 크게 **메모리 기반(Shared Memory, DLL 세그먼트 등)**과 파일 기반(파이프, 일반 파일), 그리고 이를 네트워크(Socket, RPC) 수준까지 확장한 형태가 있습니다.
  • Windows에 특화된 방법으로 레지스트리DLL Injection 등이 있으며, 이는 빠른 접근이나 강력한 제어를 가능케 하나, 보안·안정성을 고려해야 합니다.
  • 실제 개발에서는 성능, 보안, 동기화 난이도, 유지보수성 등을 종합적으로 검토하여 IPC 방식을 선택합니다.

 

출처

https://www.inflearn.com/course/%EA%B3%B0%EC%B1%85-%EC%89%BD%EA%B2%8C-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/dashboard

 

곰책으로 쉽게 배우는 최소한의 운영체제론 강의 | 널널한 개발자 - 인프런

널널한 개발자 | '넓고 얕게 외워서 컴공 전공자 되기' 강의를 끝낸 분들이 운영체제에 대해 좀 더 깊이 있는 공부를 할 수 있도록 제공되는 강의입니다., 운영체제도 널널한 개발자와 함께! 👨

www.inflearn.com

 

'운영체제' 카테고리의 다른 글

절대주소와 상대주소  (0) 2025.01.26
메모리 관리 개요  (2) 2025.01.24
CPU 스케줄링  (0) 2025.01.13
프로세스와 쓰레드  (0) 2025.01.12
Process의 생성과 복사  (0) 2025.01.12