0부터 시작하는 운영체제 공부 - IPC

Jaehong Lee·2023년 6월 14일
post-thumbnail

IPC

참조 : https://steady-coding.tistory.com/508
참조 : https://yaelimeee.tistory.com/56

IPC & IPC Model

  • IPC란? Inter Process Communication은 프로세스간 데이터를 주고 받는 행위 또는 이에 대한 방법이다

    • 사용하는 리소스 : 세마포어, 메시지 큐, 공유 메모리
      • 세마포어 : 공유된 자원의 임계 영역 or 데이터 등에 여러 프로세스나 스레드가 접근하는 것을 막아준다
      • 임계 영역 : 공유 자원에 대한 동시 접근으로 인한 문제가 발생하지 않도록, 한 번에 하나의 프로세스만 이용하도록 보장해줘야 하는 코드 영역
  • 프로세스는 완전히 독립된 실행 객체이다. 독립되어 있기에 프로세스는 서로 영향을 주지 않는데, 독립되어 있기에 서로 통신이 어렵다. 프로세스간 통신을 위해선 Kernel Space의 IPC를 이용해야 한다

System V IPC & POSIX IPC

  • IPC에는 2 가지 표준, System V IPC와 POSIX IPC가 있다
  • System V IPC는 오래된 버전으로 이 기종간 코드 호환성을 확실히 보장해주지만, API가 구식이고, 직관성이 떨어진다
  • POSIX IPC는 최신 버전으로 API가 직관적으로 구성되어 있어 사용하기 쉽다
    • System V IPC, POSIX IPC 둘 다 Shared Memory, Message Passing을 가지고 있다. POSIX IPC에서는 System V IPC와 다르게 메세지 큐에 대해 알림 기능을 제공한다
    • POSIX IPC는 System V IPC를 개선하여 설계했지만, 성능이 무조건 좋은 것은 아니다

IPC Model

IPC 모델에는 Message Passing 과 Shared Memory가 있다

  • Message Passing : Kernel Space에 메세지 전달을 위한 채널을 만들어서, 프로세스들은 해당 채널을 이용해 통신한다. Message Passing Model에는 메세지 큐 / 파이프 / 소켓이 있다

    • 장점 : Kernel에서 통신을 제어하므로 별도의 동기화 로직이 필요 없다
    • 단점 : 통신에 Kernel이 관여하므로 공유 메모리 보다 속도가 느리다
  • Shared Memory : 프로세스가 특정 메모리 영역을 공유하여 상호간 통신한다. 공유 메모리는 Kernel이 해당 프로세스에 할당해준다. 그 이후의 통신에는 Kernel이 관여하지 않는다

    • 장점 : Kernel 관여 없이 메모리를 직접 사용해서 IPC의 속도가 빠르다
    • 단점 : 메시지 전달 방식이 아니기에 데이터를 읽어야 하는 시점을 알 수 없다. 따라서 별도의 동기화 기술이 필요하다
    • 여러 프로세스가 공유 메모리의 동일한 위치에 동시에 접근하여 충돌 문제가 발생할 수 있으므로, 세마포어가 필요하다

Message Passing Model

Message Passing Model의 종류에는 Direct와 InDirect가 있다

  • Direct Communication : 프로세스의 이름을 표시하여 메시지를 직접 전달하는 방식이다
    • 커널에게 수신 프로세스를 명시한 메시지를 전달하면, 커널이 수신 프로세스에게 메시지를 전달해준다
    • 양방향 구성이며, 프로세스간 Link가 1:1 로 유일하다
  • Indirect Communication : MailBox or Port를 이용해 메시지를 간접 전달하는 방식이다
    • Port로 전송을 하기에 복잡한 Link 구성이 가능하다 ( N : N 구성이 가능 )

1. 메시지 큐

  • Kernel에서 관리하는 메시지 큐를 사용하는데, 송신 프로세스는 큐에 enqueue 하고, 수신 프로세스는 큐에 dequeue 하여 메시지를 주고 받는다
  • 장점 : 부모 / 자식 관계가 아니여도 통신이 가능하며, 양방향 통신이 가능하다
  • 단점 : 메시지 큐에 메시지들이 쌓이기에 추가 메모리 자원이 필요할 수 있으며, enqueue / dequeue 과정에서 오버헤드가 발생할 수 있다
    • 오버헤드 : 처리를 위해 들어가는 간접적인 처리 시간 or 메모리. 예를 들어, '실제 기능을 실행하는데 걸린 시간 ' - ' 원래 기능을 실행하는데 걸리는 시간 ' = ' 오버헤드 ' 이다

2. 파이프

  • 프로세스를 파이프로 연결하여 1:1 단방향 통신한다. 한쪽은 데이터를 쓰기만 하고, 다른 한쪽은 데이터를 읽기만 한다. 부모 - 자식 간의 단방향 통신으로 사용된다
  • 장점 : 단순한 데이터 통신에 적합하다
  • 단점 : 용량 제한이 있기에 파이프 용량이 가득 차면 통신이 불가능하다

3. 소켓

  • 네트워크 소켓을 이용하여 Client - Server 구조로 통신한다. 원격에서 프로세스 간 데이터를 공유할 때 사용. 프로세스는 포트 번호를 이용해 수신 프로세스의 소켓을 찾아간다
  • Local 에서만 사용 가능한 다른 IPC 모델들과 달리, 포트를 사용하여 통신하기에 원격 통신이 가능하다
  • 범용적인 IPC로서 양방향 통신이 가능하다

Socket 이란?

  • Socket : 컴퓨터 네트워크를 경유하는 프로세스 간 통신 ( IPC )의 End Point. 네트워크를 이용해 통신하고자 하는 프로세스는 Socket을 거쳐야 한다
  • Socket은 7계층과 4계층 사이에 위치하며, 프로세스는 Socket을 통해 Port와 연결된다
  • Socket을 열기 위해선 Host에 할당된 IP, Port 번호, Protocol 정보가 필요하다. Socket은 Port 번호에 Binding 되어, 4계층에서 데이터를 전달할 7계층 애플리케이션을 식별할 수 있다
  • 프로세스는 Socket ID를 통해 Socket과 연결된다. 프로세스와 소켓은 1:N 관계이며, 소켓과 Port는 N:1 관계이다. 하나의 프로세스에서 다수의 소켓을 열려면, 소켓이 가지는 프로토콜, Ip 주소, 포트 넘버가 모두 같아야 한다
profile
멋진 엔지니어가 될 때까지

0개의 댓글