프로세스 간의 통신, IPC는 왜 필요하고 어떻게 이루어지는지에 대해 알아보고자 한다. IPC의 대표적인 모델 Message passing과 Shared memory를 알아보고, 분산 시스템에서 자주 사용되는 RPC에 대해서도 알아보고자 한다.
IPC (Inter-Process Communication)
프로세스 간의 통신을 제공하는 이유
프로세스 사이에서 통신을 한다는 의미는 서로 협력하여 좋은 시너지를 낸다는 것인데, 이를 통해 아래의 이점을 얻을 수 있다.
- Information sharing (정보 공유): 여러 애플리케이션이 동일한 정보에 흥미를 느낄 수 있으므로, 그러한 정보를 병행적으로 접근할 수 있는 환경을 제공한다.
- Computation sppedup (연산 속도 증가): 만일 특정 태스크를 빨리 실행하고자 할 때, 우리는 그것을 서브 태스크로 나누어 병렬적으로 실행되게 할 수 있다.
- Modularity (모듈성): 시스템 기능을 별도의 프로세스들 또는 쓰레드들로 나누어 시스템 구성을 모듈화할 수 있다.
- Convenienve (편의성): 개별 사용자들이 동시에 작업할 여러 태스크를 가질 수도 있다.
IPC 대표 모델 2가지
Message Passing
- Direct/indirect communication
- system call - send(P, message), receive(Q, message)
- system call - send(mailbox, message), reveive(mailbox, message)
- send하고 ack를 기다리는 blocking, send하고 나서 ack를 기다리지 않는(=non waiting) non-blocking 메커니즘이 있다.
- Buffering 메커니즘(받은 메세지를 커널이 버퍼에 보관하고 있다가 애플리케이션에 넘겨주는 것)이 필요하다.
- Direct Message Passing의 경우 송신자가, Indirect Message Passing의 경우 중간 매체(예: 메세지 큐)가 메모리를 소유한다.
- 구현 방법으로 Message queue, Pipe, Socket 등이 있다.
Shared Memory
- Indirect communication
- read(buf, message), write(message, buf)
- 프로세스끼리 특정 공통의 메모리 영역을 공유하며 상호 간 통신하는 방법이다.
- 프로세스들은 읽기/쓰기를 통해 공유영역을 수정할 수 있다.
- 공유 메모리는 커널에서 관리된다.
이러한 IPC 통신에서 프로세스 간 데이터를 동기화하고 보호하기 위해 세마포어(Semaphore) 또는 뮤텍스(Mutex)를 사용한다.
RPC (Remote Procedure Call)
호출하려고 하는 함수가 자신의 address space 밖에 있을 때 이를 가능하게 해주는 기법
즉, RPC를 이용하면 사용자는 호출하려는 함수가 로컬 서버에 있든 원격 서버에 있든 동일한 코드를 이용할 수 있다.
RPC logic cycle
클라이언트가 특정 함수를 호출 → 자신의 address space에 없다는 것을 인지 → client stub 호출 → parameter들을 packing하고 RPCRuntime을 통해 server stub으로 보냄 → server stub이 이를 unpack하고 서버에 있는 함수 호출 → 서버의 함수가 실행되고 값을 server stub에 반환 → server stub은 이를 packing하여 RPCRuntime을 통해 client stub에 보냄 → client stub이 이를 unpack하여 클라이언트에 결과 반환
RPC의 장점
- 고유 프로세스 개발 집중 가능(비즈니스 로직에만 신경쓰면 된다.)
- 프로세스 간 통신 기능을 비교적 쉽게 구현하고 정교한 제어 가능
RPC의 단점
- 호출 실행과 반환 시간이 보장되지 않음 (특히 네트워크 문제가 발생했을 때 치명적 문제로 이어질 수 있음)
- 보안이 보장되지 않음
RPC의 실생활 사용 트렌드
RPC 모델은 전통적으로 분산 컴퓨팅 환경에서 많이 사용되었으며, 현재 대다수의 서비스 기업에서 사용하는 MSA에서 많이 사용된다. 서로 다른 환경이지만 서비스 간의 프로시저 호출을 가능하게 해줌에 따라 언어와 프레임워크에 구애받지 않고 영역 확장이 가능하며, 좀 더 비즈니스 로직에 집중하여 생산성을 증가시킬 수 있다.
시스템 레벨에서 사용되던 RPC가 이제는 많은 오픈 소스 구현체로 제공되고 있다. 당장 Google의 ProtocolBuffer도 그렇고, 전에 사용했던 Supabase에서도 RPC를 제공했었다.
'CS 지식 > Operating System' 카테고리의 다른 글
[OS] Scheduling Schemes (스케줄링 기법 종류) (2) | 2024.01.23 |
---|---|
[OS] Process Scheduling (프로세스 스케줄링) (0) | 2024.01.09 |
[OS] Context Switching (컨텍스트 스위칭) (0) | 2023.12.22 |
[OS] Process (프로세스) (0) | 2023.12.20 |
[OS] Interrupt, Trap, System Call (인터럽트, 트랩, 시스템 콜) (2) | 2023.09.20 |