눈송이의 개발생활
[운영체제]프로세스 사이 통신 - IPC(Inter Process Communication) 본문
IPC(Inter Process Communication)
- 프로세스 간 통신
- 컴퓨터 내부에서 프로세스들끼리 효율적으로 정보를 주고 받기 위한 통신의 일존
- 프로세스는 통신을 위한 별도의 공간 필요
- 커널 영역에서 IPC 제공 → IPC 설비 이용해서 프로세스 간 통신 가능
종류
공유 메모리(Shared Memory)
1️⃣
- 공유 메모리가 데이터 자체를 공유하도록 지원
- 여러 프로세스가
메모리 영역공유해서 사용할 수 있게 허용 - 프로세스가 공유 메모리 할당을 커널에 요청하면 커널이 해당 프로세스에 메모리 공간 할당
- 공유 메모리는 모든 프로세스가 접근 가능
- 메모리 자체를 공유하기 때문에 불필요한 데이터 복사의 오버헤드 발생 ❌
- IPC 방법 중 가장 빠름 (중개자없이 바로 메모리에 접근할 수 있기 때문)
- 동기화 필요
- 대량의 정보를 다수의 프로세스에 배포 가능
- 프로세스 간
Read,Write모두 필요할 때 사용
파이프(Pipe)
2️⃣- 통신을 위한 메모리공간(버퍼) 생성해서 프로세스가 데이터를 주고받게 해줌
- 익명 파이프(Anonymous Pipe)
- 일반적인 파이프
- 통신할 프로세스가 명확하게 알 수 있는 경우 사용(부모-자식 or 형제 프로세스끼리)
- 하나의 파이프는 2개의 프로세스 연결
- 한 끝은 데이터를 쓰기만 가능
- 한 끝은 데이터를 읽기만 가능
- 송/수신 모두 원하면 2개의 파이프 연결해야 함
- 단점
- 반이중 통신 - 송/수신 모두 하려면 pipe 2개 만들어야 하는데 구현 복잡
- 전이중 통신 해야하는 상황일 때 낭비 심함
- 네임드 파이프(Named Pipe)
- 전혀 모르는 상태의 프로세스들 사이의 통신에 사용
- 프로세스 통신을 위해 이름이 있는 파일 사용
- 여러 파이프 동시에 사용 가능
- 외부 프로세스 통신 가능
- 단점
- 반이중 통신 - 송/수신 모두 하려면 pipe 2개 필요
소켓(Socket)
3️⃣
네트워크 소켓통신을 통해 데이터 공유- 데이터 교환을 위해 양쪽 PC에서 각각 임의의 포트의 정하고 해당 포트 간의 대화를 통해 데이터 주고 받는 방식
- PORT를 담당하는 소켓은 각각 하나의 프로세스
- 1:1로 데이터 주고 받는 방식
- 원격에서 프로세스 간 데이터를 공유할 때 사용
- 전이중(Full Duplex) 통신 가능
- 서버/클라이언트 환경 구축하는데 용이
- 중대형 어플리케이션에서 주로 사용
메시지 큐(Message Queue)
4️⃣
- 입출력 방식은 named pipe와 동일
- 메시지 큐 == 메모리 공간
- 다수의 프로세스 간 메시지 전달 가능
- 사용할 데이터에 번호를 붙이면서 여러 프로세스가 동시에 데이터를 쉽게 다룰 수 있음
- 메시지의 접근을 위해서는 키(key)가 필요
- 단방향
메모리 맵(Memory Map)
5️⃣
열린 파일을메모리에 맵핑시켜 공유하는 방식 (공유 매개체 = 파일 + 메모리)- 파일로 대용량 데이터를 공유해야 할 때 사용
- 파일의 크기는 메모리 맵 파일 사용 이전 or 이후에만 바꿀 수 있음
RPC(Remote Procedure Call)
6️⃣- 분산 네트워크 망에서 많이 사용됨
- 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게 하는 프로세스 간 통신 기술
- 분리된 PC에 저장된 데이터를 마치 내 PC에 존재하는 것처럼 데이터를 가져와 사용하는 통신 방식
Shared Memory | PIPE | Named PIPE | Socket | Message Queue | Memory Map | |
사용 시기 |
다른 프로세스와 양방향 통신 | 부모 자식 간 단방향 통신 | 다른 프로세스와 단방향 통신 | 다른 시스템 간 양방향 통신 | 다른 프로세스와 단방향 통신 | 다른 프로세스와 양방향 통신 |
공유 매개체 |
메모리 | 파일 | 파일 | 소켓 | 메모리 | 파일 + 메모리 |
통신 단위 |
구조체 | Stream | Stream | Stream | 구조체 | 페이지 |
통신 방향 |
양방향 | 단방향 | 단방향 | 양방향 | 단방향 | 양방향 |
통신 범위 | 동일 시스템 | 동일 시스템 | 동일 시스템 | 동일 + 외부 시스템 | 동일 시스템 | 동일 시스템 |
'Computer Science > Operating System' 카테고리의 다른 글
[운영체제]교착상태(Dead Lock) (0) | 2023.03.02 |
---|---|
[운영체제]CPU 스케줄링 (0) | 2023.02.28 |
[운영체제]PCB와 문맥 교환(Context Switching) (0) | 2023.02.27 |
[운영체제]인터럽트(Interrupt)와 시스템 콜(System Call) (0) | 2023.02.23 |
[운영체제]블로킹(Blocking)/논블로킹(Non-Blocking) & 동기(Synchronous)/비동기(Asynchronous) (0) | 2023.02.22 |
Comments