프로세스 간 통신

DanChu 🌟·2022년 8월 15일
0

프로세스들 간의 의사소통을 IPC, Inter Process Communication 이라 한다. 프로세스간의 통신이 가능하다는 것은 데이터를 주고 받을 수 있다는 의미로, 동시에 접근이 가능한(공유하는) 메모리가 필요하다.

프로세스는 처음 생성시, PC를 포함하여 메모리 공간 등을 복사하여 각 프로세스마다 개별적으로 자원을 할당한다 (c.f. 스레드는 메모리공간과 자원을 공유). 따라서 통신을 위한 별도의 공간을 커널이 IPC 설비를 통해 만들어주어야 한다.

프로세스 간 통신의 종류


전역 변수를 이용한 통신

공동으로 관리하는 메모리를 사용하여 데이터를 주고받는다. 송수신측은 전역변수에 데이터를 쓰고 수신측은 전역 변수의 값을 읽어 통신이 이루어진다.
주로 직접적으로 관련이 있는 프로세스간 사용되는 통신 방식이며, 예를 들어 부모 프로세스가 전역 변수를 선언 후 자식 프로세스를 만들면 부모 프로세스와 자식 프로세스가 통신을 할 수 있다. 하지만 굳이 직접적으로 관련있지 않아도 extern 변수와 같은 전역 변수를 사용하여 통신이 가능하다.


파일을 이용한 통신

파일을 읽고 쓰는 방식으로 크게 세 부분으로 나뉜다

1. 파일 열기

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

2. 읽기 또는 쓰기

fd를 이용해 write(fd, "string", size), read(fd, str, size)함수를 사용한다.

3. 파일 닫기

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

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


파이프를 이용한 통신

파이프는 운영체제가 제공하는 동기화 통신 방식으로 open()함수로 파이프를 얻고 작업 후에 close()함수로 파이프를 끝낸다. 파이프를 이용한 통신 방식은 단방향 통신이므로 양방향 통신이 필요하다면 파이프 2개를 사용해야 한다.

파이프의 종류에는 anonymous와 named pipe가 있는데, anon은 부모와 자식 프로세스 혹은 같은 부모를 가진 자식 프로세스와 같이 서로 관련이 있는 IPC에 사용. named 파이프는 FIFO라 불리는 파일을 이용하여 서로 관련없는 IPC에 사용된다.


소켓

전역변수, 파이프를 이용한 통신은 같은 컴퓨터 내에 있는 프로세스끼리 IPC. 하지만 소켓을 이용한 통신은 서로 다른 컴퓨터에 있는 프로세스끼리 통신을 하는데 사용된다. 서로 다른 컴퓨터에 있는 프로세스간 통신은 네트워킹이라 하며, 네트워킹 상황에서는 원격 프로시저 호출이나 소켓을 이용한다. 통신하고자 하는 프로세스끼리 각자의 소켓을 연결하는 작업이 필요한데, 이 작업을 binding이라 한다. binding된 소켓에 write 하면 데이터가 전송되고 read하면 데이터를 받아올 수 있다.
소켓을 이용한 통신은 동기화를 지원하고 각 프로세스가 소켓 하나만 가지고 있으면 양방향 통신이 가능하다.




references

0개의 댓글