컴공생의 발자취

IPC 종류와 특징 본문

📖 이론/운영체제

IPC 종류와 특징

MNY 2022. 4. 11. 15:22
728x90
반응형

출처 : https://cho001.tistory.com/42

 

리눅스 IPC 프로그래밍(IPC종류) [1]

IPC(Inter Process Communication) - 프로세스 간 통신에 대하여 종류와 특징들에 대하여 살펴보겠습니다. [리눅스 커널 구조] - 위 그림처럼 Process는 완전히 독립된 실행객체입니다. 서로 독립되어

cho001.tistory.com

 1. PIPE  [IPC] pipe 예제 코드

    - 정의 : 익명의 PIPE를 통해서 동일한 PPID를 가진 프로세스 간에 단방향 통신을 지원

    - FIFO 구조

    - 생성된 PIPE에 대하여 Write 또는 Read만 가능

    - 사용 : 부모 자식 프로세스 간에 통신할 때 사용

    - 쌍방 통신을 위해서는 Write PIPE 하나 Read PIPE 하나씩 만들어야 한다.

    - read()write()가 기본적으로 block 모드로 작동하기 때문에 프로세스가 read 대기 중이라면 read가 끝나기 전에는 write를 할 수가 없게 된다.

[도식화]

 

  2. Named PIPE [IPC] name pipe 예제 코드

    - 정의 : 이름을 가진 PIPE를 통해서 프로세스 간에 단방향 통신을 지원

    - 서로 다른 프로세스들이 PIPE의 이름만 알면, 통신이 가능하다.

    - FIFO 구조

    - 생성된 PIPE에 대하여 Write 또는 Read만 가능

    - 연관이 전혀 없는 프로세스 간에 통신할 때

    - 쌍방 통신을 위해서는 Write PIPE 하나 Read PIPE 하나씩 만들어야 한다.

    - read()write()가 기본적으로 block 모드로 작동하기 때문에 프로세스가 read 대기 중이라면 read가 끝나기 전에는 write를 할 수가 없게 된다.

[도식화]

 

  3. Message Queue [IPC] message queue 예제 코드

    - 정의 : 메모리를 사용한 PIPE이다.

    - 구조체 기반으로 통신

    - FIFO 구조

    - msgtype에 따라 다른 구조체를 가져올 수 있다.

    - 프로세스 간의 다양한 통신을 할 때 사용 할 수 있다.

    - 커널에서 제공하는 Message queue이기에 EnQueue 하는데 제한이 존재한다.

[도식화]

 

  4. Shared Memory [IPC] shared memory 예제 코드

    - 정의 : 시스템상의 공유 메모리를 통해 통신

    - 일정한 크기의 메모리를 프로세스 간에 공유하는 구조

    - 커널에서 관리 [메모리] share memory 사용법

    - 프로세스 간에 Read, Write를 모두 필요로 할 때

    - 프로세스 간에 상용하려면 메모리 크기가 동일 해야 한다.

 

[도식화]

 

  5. Memory Map [IPC] 메모리 맵 mmap() 예제 코드

    - 정의 : 파일을 프로세스의 메모리에 일정 부분 맵핑 시켜 사용한다.

    - 구조 : 메모리 맵 파일

    - 파일로 대용량 데이터를 공유할 때 사용

    - FILE IO가 느릴 때 사용하면 좋다.

    - 대부분 운영 체제에서는 프로세스를 실행할 때 실행 파일의 각 세그먼트를 메모리에 사상하기 위해 

        메모리 맵 파일을 이용

    - write 시기는  프로세스의 페이지가 메모리에서 내려갈 때만 Write 된다. 그래서 메모리와 file Sync가 안 맞을 수도 있다.

    - IA-32  기반 시스템에서 하나의 프로세스에서 PAE  기술을 사용하지 않고 사용 가능한 최대 크기는 4GB로 제한된다

    - 메모리 맵 파일은 파일의 크기를 바꿀 수는 없으며 메모리 맵 파일을 사용하기 이전, 또는 이후에만 파일의 크기를 바꿀 수 있다.

[도식화]

 

  6. Socket

    - 정의 : 네트워크 소켓 통신을 사용한 데이터 공유

    - 네트워크 소켓을 이용하여 Client - Server 구조로 데이터 통신

    - 원격에서 프로세스 간에 데이터를 공유할 때 사용

    - 네크워크 프로그래밍이 가능해야 한다.

    - 데이터 세그먼트 처리를 잘 해야 한다.

[도식화]

7. Semaphore

- 프로세스 간 데이터를 동기화하고 보호하는데, 목적을 둔다

- 공유된 자원에 여러 개의 프로세스가 동시에 접근하면 안 된다.

- 한 번에 하나의 프로세스만 접근할 수 있도록 만들어줘야 하며, 이때 사용되는 것이 Semaphore이다.

 

IPC 별 사용 시기 및 특징

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

 

** 혹여나 문제시 해당 게시물 삭제 **

728x90
반응형

'📖 이론 > 운영체제' 카테고리의 다른 글

Process Control Block(PCB)  (0) 2022.05.10
process state diagram  (0) 2022.05.10
monolithic kernel VS micro kernel  (0) 2022.04.28
fork()_C언어(Linux)  (0) 2022.04.28
x86(CISC) VS ARM(RISC)  (0) 2022.04.28