2022-08-20

프로세스 통신(IPC)

프로세스 통신과 Blocking, Non-Blocking에 대해 간략하게 알아보자!

IPC(Inter process Communication)

일반적으로 운영체제는 프로세스 자원의 독립성을 보장해 외부 접근을 차단한다.
만약 다른 프로세스가 자원에 접근하려 할 때는 해킹으로 간주하고 해당 프로세스를 종료시킨다.
운영체제는 프로세스 간에 데이터를 주고받기 위한 메커니즘을 제공하는데 이것이 IPC이다.

공유 메모리를 이용한 통신

여러 프로세스가 동일한 물리적 메모리 공간을 공유하여 데이터를 교환할 수 있게 한다.
일반적으로 하나의 프로세스가 쓰면 다른 프로세스는 읽거나 또는 그 반대 형태로 단방향이다.
운영체제에서 동기화를 지원하지 않기 때문에,
데이터를 수신하는 프로세스는 데이터 값이 변동 되기까지 바쁜 대기를 한다.
또한 두 프로세스가 데이터 값에 입력과 출력이 가능하기에 동기화 문제가 발생한다.
동기화 문제의 간단한 예는 아래와 같다.

// A 프로세스
let a = 10
a += 10

// B 프로세스
a += 10
console.log(a) // 20이 아닌 30이 출력된다.

파일을 이용한 통신

저장장치에 파일을 통해 프로세스 간 통신하는 방법이다. 파일은 열고, 쓰고, 읽고, 닫는 연산이 있다.
파일을 열려면 fd(file descriptor) 을 받아 권한을 부여 받아야 하고, 작업 완료 후 반환해야 한다.
운영체제가 동기화를 따로 지원하지 않기 때문에 단방향인 특징의 파일 통신은,
다른 프로세스의 작업을 기다리는 wait()를 수행해 대기한다.

파이프를 이용한 통신

운영체제가 동기화를 지원하는 단방향 통신 방식이다.
부모와 자식 프로세스와 같이 직접적 관련이 있는 프로세스간 통신에 사용된다.
파이프는 파일과 동일한 성질을 갖고 있어 fd를 받아 권한을 부여 받고 수행된다.
단, 파일 통신과 달리 동기화가 지원되기 때문에 wait()가 필요없이 자동으로 대기가 풀린다.
파이프를 2개 활용하면 프로세스 간 양방향으로 통신할 수 있다.

소켓을 이용한 통신

네트워크를 통해 다른 컴퓨터의 프로세스와 통신할 때 사용하는 방식이며,
파일의 성질을 갖고 있어 sd(socket descriptor)를 받아 권한을 받아야 한다.
운영체제가 동기화를 지원해 바쁜 대기를 하지 않아도 된다.

Blocking, Non-Blocking

프로세스 동기화 유 무에 따라 대기가 있는 통신(blocking), 대기가 없는 통신(non-blocking)으로 나뉜다.
대기가 있는 통신은 데이터를 보내는 프로세스가 데이터를 받는 프로세스가 응답할 때까지 기다리는 방식이다.
즉, 데이터를 보내는 프로세스는 데이터를 받는 프로세스가 응답할 때까지 다른 작업을 수행할 수 없다.
대기가 없는 통신은 데이터를 보내는 프로세스가 데이터를 받는 프로세스가 응답할 때까지 기다리지 않는다.
즉, 데이터를 보내는 프로세스는 데이터를 받는 프로세스가 응답할 때까지 다른 작업을 수행할 수 있다.

참조

쉽게 배우는 운영체제 - 한빛 아카데미
널널한 개발자 - 프로세스간 통신 개요
널널한 개발자 - Blocking I/O와 Non-blocking I/O