운영체제 | 멀티프로세스와 IPC

Faithful Dev·2025년 1월 25일

컴퓨터 공학

목록 보기
25/81

IPC(Inter-Process Communication, 프로세스 간 통신)은 두 개 이상의 프로세스가 서로 데이터를 주고받거나 자원을 공유하기 위해 사용하는 메커니즘이다. 운영체제는 IPC를 통해 프로세스 간 효율적이고 안전한 데이터 교환을 가능하게 한다.


IPC의 필요성

  1. 데이터 공유:
    • 여러 프로세스가 동일한 데이터를 처리해야 할 때 데이터의 일관성을 유지.
  2. 병렬 처리 지원:
    • 분리된 프로세스가 작업을 나누어 병렬로 실행 가능.
  3. 효율적인 자원 사용:
    • 메모리, CPU, 파일 등 자원을 효과적으로 공유.
  4. 프로세스 협력:
    • 프로세스 간 협력을 통해 복잡한 작업을 수행.

IPC 메커니즘의 종류

메시지 전달(Message Passing)

  • 프로세스 간 데이터를 주고받는 방식으로, 메시지를 교환한다.
  • 장점: 데이터 교환이 간단하며 메모리를 공유하지 않아 충돌 위험이 적음.
  • 방법:
    1. 직접 통신(Direct Communication):
      • 프로세스가 서로의 이름을 알고 직접 메시지를 주고받음.
    2. 간접 통신(Indirect Communication):
      • 메시지가 메일박스(queue)를 통해 전달.

공유 메모리(Shared Memory)

  • 프로세스들이 공통 메모리 영역을 사용해 데이터를 교환.
  • 장점: 메시지 전달 방식보다 빠름(커널 간섭 적음).
  • 단점: 메모리 접근 동기화 필요(예: 뮤텍스, 세마포어).
  • 사용 예:
    • 생산자-소비자 문제(Producer-Consumer Problem).

파일 시스템(File System)

  • 프로세스가 파일을 읽고 쓰는 방식으로 데이터를 공유.
  • 특징:
    • 파일 시스템을 이용해 데이터를 저장하고 교환.
    • 단점: 속도가 느릴 수 있음(디스크 입출력).
  • 적용: 로그 파일, 설정 파일 등을 통한 통신.

파이프(Pipe)

  • 단방향 데이터 통신 채널로, 한 프로세스가 쓰면 다른 프로세스가 읽음.
  • 특징:
    • 부모-자식 관계에서 주로 사용.
    • 익명 파이프: 같은 프로세스 계열에서만 사용 가능.
    • 이름 있는 파이프(Named Pipe): 서로 다른 프로세스 간 통신 가능.

소켓(Socket)

  • 네트워크 통신을 통한 데이터 교환 메커니즘.
  • 특징:
    • 동일 컴퓨터 내 또는 네트워크를 통해 원격 프로세스 간 통신 가능.
    • TCP, UDP 같은 프로토콜 사용.
  • :
    • 클라이언트-서버 모델 구현.

세마포어(Semaphore)

  • 동기화 도구로, 여러 프로세스가 동시에 접근할 때 공유 자원을 보호.
  • 특징:
    • 값이 0 이하로 내려가면 대기 상태가 됨.
    • 주로 뮤텍스(Mutex)와 함께 사용.

메모리 맵 파일(Memory-Mapped File)

  • 파일의 내용을 메모리에 매핑하여 공유.
  • 특징:
    • 데이터를 디스크로 저장하지 않고 메모리를 통해 빠르게 접근.
    • 운영체제가 지원해야 사용 가능.

IPC의 주요 문제 및 해결 방법

  1. 데이터 충돌:
    • 여러 프로세스가 동일한 데이터에 동시에 접근하여 충돌 발생.
    • 해결: 세마포어, 뮤텍스, 모니터 등을 사용.
  2. 데드락(교착 상태):
    • 여러 프로세스가 서로 자원을 기다리며 정지.
    • 해결: 자원 할당 시 정렬된 순서로 접근, 타임아웃 설정.
  3. 성능 이슈:
    • 대량의 데이터를 전달할 때 느린 속도.
    • 해결: 공유 메모리와 같은 고속 IPC 메커니즘 사용.

IPC 선택 기준

  • 속도: 공유 메모리 > 메시지 전달 > 파일 시스템.
  • 구현 용이성: 파이프, 메시지 전달이 상대적으로 간단.
  • 통신 범위: 소켓은 네트워크 통신이 가능해 유연성 제공.

실제 사용 사례

  • 운영체제의 프로세스 간 협력(예: POSIX 파이프, Linux 세마포어).
  • 네트워크 기반 클라이언트-서버 통신(예: HTTP 서버, 웹소켓).
  • 병렬 프로그래밍 환경에서 데이터 공유(예: MPI, OpenMP).

IPC는 운영체제와 네트워크 프로그램의 핵심 기능으로, 효율적이고 안전한 데이터 교환을 보장한다.

profile
Turning Vision into Reality.

0개의 댓글