IPC
IPC(Inter-Process Communication)이란 프로세스끼리 데이터를 주고받고
공유 데이터를 관리하는 메커니즘을 뜻한다.
IPC의 종류에는 대표적으로 공유 메모리, 파일, 소켓, 파이프, 메시지 큐 등 5가지가 있다.
브라우저를 띄워서 네이버 서버와 HTTP 통신으로
html 등의 파일을 가져오는 것 또한 IPC라고 볼 수 있다.
공유 메모리
여러 프로세스가 서로 통신할 수 있도록 메모리를 공유하는 것이다.
IPC 방식 중 어떠한 매개체를 통해 데이터를 주고 받지 않고
메모리 자체를 공유하는 유일한 방식으로
불필요한 데이터 복사가 발생하지 않아 오버헤드가 없고, 가장 빠르다.
같은 메모리 영역을 여러 프로세스가 공유하기 때문에 동기화가 필요하다.
파일
디스크에 저장된 데이터를 기반으로 통신한다.
아래는 JSON 파일을 통해 a.js 와 b.js 프로세스가 통신하는 자바스크립트 코드 예시다.
//a.js
const path = require('path')
const pt = path.join(__dirname, "a.json")
const fs = require('fs')
setInterval(()=>{
try{
if(fs.existsSync(pt)) {
console.log("파일을 읽습니다.")
const ret = JSON.parse(fs.readFileSync(pt))
console.log(ret)
}
} catch(err) {
console.error(err)
}
}, 3000)
console.log("process 1이 가동됩니다.")
//b.js
const path = require('path')
cosnt pt = path.join(__dirname, "a.json")
const fs = require('fs')
setTimeout(()=>{
const a = {"a" : 1}
fs.writeFileSync(pt, JSON.stringify(a))
}, 3000}
console.log("process 2가 가동됩니다.")
소켓
네트워크 인터페이스(TCP, UDP, HTTP 등)를 기반으로 통신한다.
파이프
파이프는 익명 파이프와 명명 파이프로 나뉜다.
익명 파이프
익명 파이프(anonymous pipe or unnamed pipe)는 프로세스 사이에
FIFO 기반의 통신 채널을 만들어 통신하는 방식이다.
파이프 하나당 단방향 통신이기 때문에
양방향 통신을 위해서는 2개의 익명 파이프를 만들어야 한다.
파이프는 부모-자식 프로세스 간에만 사용할 수 있으며,
다른 네트워크 상에서는 사용이 불가능하다.
파이프의 데이터 용량은 제한되어 있으며
쓰기 프로세가 읽기 프로세스보다 빠르게 데이터를 쓸 수 없다.
명명 파이프
명명 파이프(named pipe)는 익명 파이프의 확장된 개념으로
부모-자식 뿐만 아니라, 다른 네트워크 상에서도 통신할 수 있는 파이프를 말한다.
보통 서버/클라이언트용 파이프를 구분하여 동작한다.
메시지 큐
메시지 큐(queue)는 자료구조 형태로 관리하는 버퍼를 만들어 통신하는 방식이다.
과정은 아래와 같다.
- 프로세스가 메시지를 보내거나 받기 전에 큐를 초기화한다.
- 보내는 프로세스(sender)의 메시지는 큐에 복사되어 받는 프로세스(receiver)에 전달된다.
참고: inflearn 강의 'CS 지식의 정석 - 큰돌'
'컴퓨터 공학 & 통신' 카테고리의 다른 글
[개념 정리/운영체제] 경쟁 상태 해결 방법 - 뮤텍스, 세마포어, 모니터 (0) | 2023.07.26 |
---|---|
[개념 정리/운영체제] 공유 자원, 경쟁 상태, 임계 영역 (1) | 2023.07.26 |
[개념 정리/운영체제] 멀티 프로세싱 & 멀티 스레딩 (0) | 2023.07.26 |
[개념 정리/운영체제] 프로세스 상태 (0) | 2023.07.26 |
[개념 정리/운영체제] PCB & 컨텍스트 스위칭 (0) | 2023.07.26 |