티스토리 뷰

반응형

프로세스간 커뮤니케이션을 해야하는 이유

프로세스들은 각각 개별적으로 분리되어 생성되며 프로세스들끼리는 서로에게 접근할 수 없다. 즉, 프로세스는 완전히 독립된 객체이며, 서로에게 접근하지 못하니 영향도 끼치지 않는다.

 

하지만 여러개의 프로세스를 실행하기 위해선 각 프로세스들이 서로 상태값이나 데이터를 주고받을 일이 생긴다.

 

예를 들어보자.

프로세스1과 프로세스2가 실행 중이다. 프로세스1과 프로세스2는 덧셈 작업을 수행하며, 프로세스1과 프로세스2의 목표는 하나의 파일에 덧셈 작업을 번갈아 수행해야 한다.

이때, 프로세스1은 1부터 1000까지 덧셈한 다음에 파일에 기록하고, 프로세스2는 1000부터 2000까지 덧셈한 다음에 파일에 기록해야 한다. 두 프로세스들은 모두 파일에 접근할 수 있지만, 서로 어디까지 덧셈을 했는지 알 수있는 방법은 없다.

왜냐면 프로세스끼리는 접근을 할 수 없기 때문이다. 프로세스2는 프로세스1의 덧셈 작업이 끝나야 작업을 실행할 수 있지만, 어디까지 덧셈했는지 정보를 알 수 없으니 프로세스를 처리할 수 없다. 

 

하지만 프로세스들끼리 서로 데이터나 상태를 주고받을 수 있는 방법이 존재한다. 바로 운영체제의 커널 공간을 사용하는 것이다. 이 커널의 공간을 사용해서 프로세스들끼리 커뮤니케이션하는 방법을 IPC라고 한다. 

 

위에선 간단하게 예를 들었지만, 실제 현업에서는 여러 프로세스나 노드들을 분산시켜 동시에 작업을 처리해야하는 복잡한 업무가 있을 수 있다. 각 프로세스들이 정보를 공유하거나, 작업 분산, 동기화, 자원 공유, 협력을 해야하는 경우가 충분히 발생할 수 있는데, 이때 IPC를 써야한다는 것을 기억해두면 도움이 될 것이다.


IPC(Interpocess Communication)

IPC는 운영체제에서 다른 프로세스 간에 데이터나 상태 정보를 주고받는 방법을 제공하는 기술이다. IPC를 사용하면 프로세스 간의 정보 교환, 동기화, 상호작용 등을 할 수 있다. 

프로세스는 생성되면 메모리를 할당 받는다. 그 후, 할당받은 메모리를 데이터별로 공간을 분리(data, stack, heap, code 등등)하여 관리한다.

그 중 한 공간은 커널(운영체제)이 사용하는 전용 공간으로 둔다. 각 프로세스들은 메모리 자원이 필요할 때, 시스템콜을 호출하여 커널 메모리 공간에 있는 자원을 가져올 수 있다.

 

프로세스들은 각각 개별적으로 분리되어 보이지만, 실제로 커널의 공간을 공유하고 있다. 컴퓨터의 이런 구조를 이용해서 여러가지 프로세스 통신 기법(IPC)이 나오게 되었다.


여러가지 IPC 기법

프로세스들 간의 원활한 통신을 돕기위해 여러가지 통신 방법이 제시되었다.

file 사용 기법

메세지 큐(Message Queue)

공유 메모리(Shared Memory)

파이프(Pipe)

세마포어(Semaphore)

소켓(Socket)

기타 등등

 

여기서 중요한 기법은 ②와 ③이다. ②번부터는 모두 커널의 공간을 사용하는 통신 기법이다.


메세지 큐(Message Queue)

프로세스들은 메세지를 주고받을 수 있는 큐(Queue)를 사용해 통신한다.

메세지 큐를 통해 프로세스들은 비동기적으로 메세지를 교환하고 작업 상황을 주고받을 수 있다.

 

공유 메모리(Shared Memory)

여러 프로세스가 동일한 물리 메모리 영역을 공유하여 데이터를 주고받을 수 있다.

커널 공간의 물리 메모리에서 데이터를 직접 공유하도록 지원하며, 한 프로세스에서 변경한 메모리 공간의 내용을 다른 프로세스에서도 접근할 수 있다.

 

공유 메모리를 사용하면 빠른 데이터 전송이 가능하지만, 동기화와 관련된 이슈를 유의하면서 사용해야한다. 


IPC는 프로세스 간의 데이터 공유, 작업 조율, 동기화 등을 가능하게 도우며, 다양한 형태의 통신 방법을 구현할 수 있다. IPC는 멀티 프로세싱, 멀티 스레드, 분산 시스템 등 당야한 컴퓨팅 환경에서 중요한 역할을 한다.

반응형
댓글
공지사항