728x90

1 프로세스 간 통신의 개념

프로세스가 다른 프로세스와 데이터를 주고받는 프로세스 간 통신(IPC)는 같은 컴퓨터 내에 있는 프로세스뿐만 아니라 다른 컴퓨터에 있는 프로세스와의 통신도 포함된다.

 

프로세스 내부 데이터 통신 : 하나의 프로세스 내에 2개 이상의 스레드가 존재하여, 전역 변수나 파일을 이용해 데이터를 주고 받는다.

 

프로세스 간 데이터 통신 : 같은 컴퓨터에 있는 여러 프로세스끼리 통신하는 경우로, 공용 파일 또는 운영체제가 제공하는 파이프를 사용하여 통신한다.

 

네트워크를 이용한 데이터 통신 : 여러 컴퓨터가 네트워크로 연결되어 있을 때의 통신 방식으로, 소켓을 이용해 통신한다. 이를 네트워킹이라고 한다. 원격 프로시져 콜도 이에 해당한다.

 

2 프로세스 간 통신의 분류

프로세스 간 통신은 동시에 실행되는 프로세스끼리 데이터를 주고받는 작업을 의미한다.

 

통신 방향에 따른 분류

양방향 통신 : 데이터를 동시에 양쪽 방향으로 전송할 수 있는 구조. 소켓 통신이 이에 해당한다.

반양방향 통신 : 양쪽 방향 모두에 전송할 수 있지만, 동시 전송은 불가능한 경우. 무전기가 이에 해당한다.

단방향 통신 : 한쪽 방향으로만 데이터를 전송할 수 있는 구조. 전역 변수나 파이프가 이에 해당한다.

 

통신 구현 방식에 따른 분류

전역 변수를 이용한 통신의 문제는 언제 데이터를 보낼 지 받는 쪽에서 모르는 것이다. 따라서 상태 변화를 살펴보기 위해 반복문을 무한 실행하며 기다리는 것을 busy waiting이라고 한다. 이 문제를 해결하기 위해서 데이터가 도착했음을 알리는 동기화를 사용한다. 동기화 기능이 있는지 없는지에 따라 대기가 있는 통신(blocking communication)과 대기가 없는 통신(non-blocking c-)으로 구분 된다. 대기가 있는 통신은 동기화 통신(synchronous c-), 없는 통신은 비동기화 통신(asynchronous c-)라고도 한다.

 

대기가 있는 통신 : 동기화를 지원하는 통신 방식. 데이터를 받는 쪽은 데이터가 도착할 때까지 자동으로 대기 상태에 모무른다.

대기가 없는 통신 : 동기화를 지원하지 않는다. 데이터를 받는 쪽은 busy waiting를 사용해 데이터 도착 여부를 직접 확인한다.

 

3 프로세스 간 통신의 종류

 

전역 변수를 이용한 통신

공동으로 관리하는 메모리를 사용하여 데이터를 주고받는 것이다. 이 통신 방식은 주로 직접적으로 관련이 있는 프로세스 간에 사용한다. 예를 들면 부모-자식 프로세스 간의 통신이 있다. 이 방식은 busy waiting를 통해 계속 전역 변수의 값을 확인해야하므로 비효율적이다.

 

파일을 이용한 통신

파일을 읽고 쓰는 방식으로 크게 세 부분으로 나뉜다. 1) 파일 열기, 2) 쓰기 또는 읽기 3) 파일 닫기

1) 파일 열기 : open()을 통해 사용하려는 파일이 있는지, 권한을 어떻게 줄 것인지를 정한다. 이 함수는 fd를 반환하는데 fd는 file descriptor로 해당 파일에 접근할 수 있는 권한을 의미한다. 이후에는 fd를 통해서만 파일에 접근할 수 있다.

2) 읽기 또는 쓰기 : fd를 이용해 write(fd, "string", size), read(fd, str, size) 함수를 사용한다. 

3) 파일 닫기 : close(fd)를 통해 파일을 닫는다.

파일 입출력 코드를 프로세스 입장에서 살펴보면, 프로세스가 입출력 관리 프로세스에 읽기/쓰기를 요구하면 데이터가 하드디스크에 출력/저장된다. 따라서 파일 입출력 또한 프로세스와 입출력 프로세스 간의 통신이라고 할 수 있다.

 

파이프를 이용한 통신

파이프는 운영체제가 제공하는 동기화 통신 방식으로 open() 함수로 기술자를 얻고 작업을 한 후 close() 함수로 마무리한다. 전역 변수 통신과 마찬가지로 단방향 통신이고 따라서 파이프를 2개를 사용해야 한다.

파이프는 anonymouse pipe와 named pipe로 나뉜다.

anonymouse pipe : 일반적인 파이프, 부모와 자식, 혹은 형제 프로세스같이 서로 관련 있는 프로세스 간 통신에 사용

named pipe : FIFO라 불리는 특수 파일을 이용해 서로 관련 없는 프로세스 간 통신에 사용한다.

 

소켓을 이용한 통신

여러 컴퓨터에 있는 프로세스 간 통신을 네트워킹이라 한다. 네트워킹에서의 통신은 원격 프로시져 콜이나 소켓을 이용한다. 원격 프로시져 콜은 다른 컴퓨터에 있는 함수를 호출하는 것이다. 일반적으로 원격 프로시져 콜은 소켓을 이용해 구현한다. 소켓을 매개로 한 쪽의 프로세스와 다른쪽의 프로세스를 연결하는 작업을 바인딩이라고 한다.

소켓은 한개만 사용해도 양방향 통신이 가능하다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

+ Recent posts