감자튀김 공장🍟

[OS] IPC 통신이란? (Inter Process Communication) 본문

Study/Operating System

[OS] IPC 통신이란? (Inter Process Communication)

Potato potage 2022. 4. 1. 11:25
반응형
프로세스간 통신의 필요성

응용프로그램은 여러 프로세스(multi process)를 생성하고 각 프로세스에게 하나씩 작업을 맡겨, 동시에 여러 작업을 처리할 수 있다. 응용프로그램에 따라 각 프로세스들이 독립적으로 작업을 처리하기도 하지만, 프로세스들이 서로 데이터를 주고받으면서 협력해야 하는 경우도 있다. 또한 다중 프로세스(multi process)는 프로세스 사이에 데이터 혹은 변수 공유가 되지 않으며, 현대의 다중 작업 응용프로그램은 멀티 스레딩으로 작성되기 때문에 프로세스 간 통신의 필요성이 더더욱 필요하다.

 

IPC (Inter Process Communication)

프로세스들의 주소 공간은 완전히 분리되어 있어서, 두 프로세스 사이에는 코드를 제외한 어떤 메모리 공간도 공유되지 않는다. 프로세스가 다른 프로세스의 메모리에 접근할 수 없기 때문에, 응용프로그램 수준에서 두 프로세스 사이의 통신은 불가능하다. 운영체제 커널은 프로세스들이 서로 통신할 수 있는 방법을 제공하는데, 이를 IPC라고 부른다.

 

 

 

 

IPC 종류

  1. 공유 메모리
    • 한 컴퓨터 내에 있는 프로세스들에 의해서만 공유된다. 프로세스 중 하나가 먼저 공유 메모리를 생성한 다음, 여러 프로세스들이 공유 메모리를 읽거나 쓸 수 있다. 프로세스가 공유 메모리 할당을 커널에 요청하면, 커널은 해당 프로세스에 메모리 공간을 할당해주고 이후 모든 프로세스는 해당 메모리 영역에 접근할 수 있게 된다.
    • 중개자 없이 곧바로 메모리에 접근할 수 있어서 IPC 중에 가장 빠르게 작동한다.
  2. 신호(signal)
    • 신호(signal)는 프로세스가 다른 프로세스에게, 커널이 프로세스에게 어떤 상황의 발생을 비동기적으로 알리는 방법이다. 현재 실행되는 프로세스가, 프로세스 내부나 외부에서 예상치 못하게 발생하는 비동기적 사건을 처리하기 위한 방법이다.
    • 신호는 프로세스끼리 혹은 커널과 프로세스 사이에 통신하는 가장 오래된 IPC 방법이다.
[신호를 수신하게 되는 3가지 경우]
1. 프로세스 자신으로부터 신호 수신 - 프로세스 명령 실행 중 불법 명령이나 0으로 나누기, 오버플로우 등으로 인해 신호 발생, 허용되지 않거나 할당받지 않은 메모리 영역을 접근하는 경우, 하드웨어가 이를 발견하고 프로세스 자신에게 신호 발생
2. 다른 프로세스로부터 신호 수신 - kill() 시스템 호출을 이용하여 다른 프로세스가 신호 보내기
3. 커널 - 프로세스가 시스템 알람을 설정해 두었을 경우 타이머 시간이 종료하면 반복적으로 커널이 프로세스에게 신호 발생
  • 신호가 발생하면 신호의 전달은 반드시 커널에 의해 이루어진다. 신호가 발생하면, 커널은 신호를 받을 목적 프로세스의 실행을 일시 중단시키고, 목적 프로세스에게 신호를 전파한다.

 

3. 파이프(pipe)

  • 파이프(pipe)는 프로세스들 사이에 데이터를 전달하는 통신 방법 중 하나로서, 사용이 편리하기 때문에 현재도 nagios 등을 비롯한 많은 응용프로그램에서 사용하고 있다.
[파이프 종류]
  1. 익명의 파이프(anonymous pipe) - 파이프를 생성한 부모 자식 간에 메세지를 주고 받기 위함, 한 시스템에서만 유효하다.
  2. 이름을 가진 파이프(named pipe / FIFO) - 파이프의 이름을 아는 프로세스들끼리 메세지를 주고받기 위함, 네트워크로 연결된 시스템들에서도 사용 가능
  • 파이프는 프로세스 사이에 전송되는 데이터의 읽기/쓰기 위치를 임의로 변경할 수 없고, 순차적으로 읽고 순차적으로 써야하는 특징이 있다.

 

 

출처 - 운영체제(Operating system), 황기태 지음

반응형
Comments