2022-08-20
프로세스 통신(IPC)
프로세스 통신과 Blocking, Non-Blocking에 대해 간략하게 알아보자!
IPC(Inter process Communication)
일반적으로 운영체제는 프로세스 자원의 독립성을 보장해 외부 접근을 차단한다.
만약 다른 프로세스가 자원에 접근하려 할 때는 해킹으로 간주하고 해당 프로세스를 종료시킨다.
운영체제는 프로세스 간에 데이터를 주고받기 위한 메커니즘을 제공하는데 이것이 IPC이다.
공유 메모리를 이용한 통신
여러 프로세스가 동일한 물리적 메모리 공간을 공유하여 데이터를 교환할 수 있게 한다.
일반적으로 하나의 프로세스가 쓰면
다른 프로세스는 읽거나
또는 그 반대 형태로 단방향이다.
운영체제에서 동기화를 지원하지 않기 때문에,
데이터를 수신하는 프로세스는 데이터 값이 변동 되기까지 바쁜 대기를 한다.
또한 두 프로세스가 데이터 값에 입력과 출력이 가능하기에 동기화
문제가 발생한다.
동기화 문제의 간단한 예는 아래와 같다.
파일을 이용한 통신
저장장치에 파일을 통해 프로세스 간 통신하는 방법이다. 파일은 열고
, 쓰고
, 읽고
, 닫는
연산이 있다.
파일을 열려면 fd(file descriptor)
을 받아 권한을 부여 받아야 하고, 작업 완료 후 반환해야 한다.
운영체제가 동기화를 따로 지원하지 않기 때문에 단방향인 특징의 파일 통신은,
다른 프로세스의 작업을 기다리는 wait()
를 수행해 대기한다.
파이프를 이용한 통신
운영체제가 동기화를 지원하는 단방향 통신 방식이다.
부모와 자식 프로세스와 같이 직접적 관련이 있는 프로세스간 통신에 사용된다.
파이프는 파일과 동일한 성질을 갖고 있어 fd
를 받아 권한을 부여 받고 수행된다.
단, 파일 통신과 달리 동기화가 지원되기 때문에 wait()
가 필요없이 자동으로 대기가 풀린다.
파이프를 2개 활용하면 프로세스 간 양방향으로 통신할 수 있다.
소켓을 이용한 통신
네트워크를 통해 다른 컴퓨터의 프로세스와 통신할 때 사용하는 방식이며,
파일의 성질을 갖고 있어 sd(socket descriptor)
를 받아 권한을 받아야 한다.
운영체제가 동기화를 지원해 바쁜 대기를 하지 않아도 된다.
Blocking, Non-Blocking
프로세스 동기화 유 무에 따라 대기가 있는 통신(blocking)
, 대기가 없는 통신(non-blocking)
으로 나뉜다.
대기가 있는 통신은 데이터를 보내는 프로세스가 데이터를 받는 프로세스가 응답할 때까지 기다리는 방식이다.
즉, 데이터를 보내는 프로세스는 데이터를 받는 프로세스가 응답할 때까지 다른 작업을 수행할 수 없다.
대기가 없는 통신은 데이터를 보내는 프로세스가 데이터를 받는 프로세스가 응답할 때까지 기다리지 않는다.
즉, 데이터를 보내는 프로세스는 데이터를 받는 프로세스가 응답할 때까지 다른 작업을 수행할 수 있다.
참조
쉽게 배우는 운영체제 - 한빛 아카데미
널널한 개발자 - 프로세스간 통신 개요
널널한 개발자 - Blocking I/O와 Non-blocking I/O