IPC

이동섭·2023년 10월 28일
0

운영체제

목록 보기
7/13

IPC

서로 다른 프로세스간에 데이터를 주고받는 방법

프로세스는 다른 프로세스에 영향을 받지 않고 독립적으로 실행된다.
프로세스끼리는 독립적인데 만약 프로세스끼리 통신해야 할 상황에는 어떻게?
-> Inter-Prcoess Communication (IPC)

IPC 종류

  1. 익명 PIPE
  2. Named PIPE (FIFO)
  3. Message Queue
  4. 공유 메모리
  5. 메모리 맵
  6. 소켓

pipe는 기본적으로 단방향 통신
2개의 프로세스가 통신을 한다면 2개의 pipe 사용하여 통신한다. -> 입출력의 타이밍에 따른 영향 받지 않음

1. 익명 PIPE

  • 외부 프로세스에서 PIPE를 사용할 수 없어 "익명 PIPE"
  • 부모 프로세스와 자식 프로세스 사이에 데이터를 전달하는 데 사용되는 IPC(Inter-Process Communication) 방

2. Named PIPE

  • 외부 프로세스와 통신이 가능함 "Named PIPE"
  • 네임드 파이프는 읽기와 쓰기 모두 가능하나, 한 번에 한 방향으로만 데이터를 전송하는 반이중 통신 방식을 따릅니다. 그러므로 양방향, 즉 전이중 통신을 위해서는 읽기 전용 파이프와 쓰기 전용 파이프, 두 개의 파이프를 생성해야 합니다.

3. Message Queue & PIPE

  • 메세지 큐는 부모-자식 관계에 상관 없이 어떤 프로세스에서든 데이터를 송수신할 수 있다.
  • 메세지 큐는 FIFO(First-In-First-Out) 정책을 따르기 때문에, 먼저 삽입된 데이터가 먼저 읽혀집니다.
  • 메세지 큐는 양방향 통신이 가능. 하지만 프로세스 A와 B 간의 양방향 통신을 위해서는 메세지 큐를 두 개 생성해야 한다. 즉, 하나의 메세지 큐는 한 방향의 통신만 가능하며, 프로세스 A가 보낸 데이터는 프로세스 B만이 읽을 수 있다.
  • 파이프와 메세지 큐는 모두 커널 영역에서 작동한다는 공통점을 가지고 있다.

4. 공유 메모리

  • IPC 기법 중 가장 빠르다. (여러 프로세스가 하나의 메모리를 공유)
  • 같은 메모리 영역을 공유하기 때문에 동기화 필요
  • 생성된 공유 메모리는 커널에 의해 관리된다.

5. 메모리 맵

  • 파일로 대용량 데이터를 공유할 때 사용
  • 열린 파일을 메모리에 Mapping 시켜서 공유하는 방식 (공유 매개체: 파일과 메모리)

6. 소켓

  • 네트워크를 통해 두 컴퓨터 간에 데이터를 교환하기 위한 통신 접점(Endpoint) -> 다른 컴퓨터와 통신하기 위해 사용되는 인터페이스
  • IP 주소 + 포트 번호 : 소켓, 소켓을 통해 네트워크 상의 특정 컴퓨터의 특정 프로세스와 연결됨
  • TCP/IP 프로토콜에서 사용되어 인턴넷을 통한 데이터 교환 가능
  • 서버 소켓과 클라이언트 소켓이 연결되면 서버와 클라이언트는 양방향으로 데이터를 주고받을 수 있다.

IPC 통신에서 프로세스 간 데이터를 동기화하고 보호하기 위해 세마포어뮤텍스 사용

프로세스간 통신이 어려운 이유?

프로세스와 스레드는 각각 fork와 pthread_create와 같은 함수로 생성됩니다. 이 두 가지를 만드는 과정에서 중요한 차이가 있습니다.
프로세스가 생성될 때, 메모리 공간과 자원들을 복사하여 새로 할당받습니다. 이 과정에서 프로그램 카운터(PC)도 포함됩니다. 프로그램 카운터는 다음에 실행할 명령어의 주소를 가리키는 레지스터입니다.
반면에, 스레드는 생성 시에 메모리 공간과 자원을 공유합니다. 예를 들어, 프로세스와 스레드를 생성하기 전에 선언한 변수 'a'가 있다면, 프로세스는 각각 독립적으로 'a'를 가지지만, 스레드는 'a'를 공유하게 됩니다.
따라서, 프로세스는 별도의 통신 공간이 없어서 통신을 위해 별도의 공간을 생성해야 합니다. 이러한 이유로 인해 프로세스 간의 통신은 스레드 간의 통신보다 복잡하고 어려운 작업이 됩니다.

0개의 댓글