운영체제

[Operating System] 프로세스의 제어 : 프로세스 간 통신

짱일모 2023. 3. 28. 00:03

예를 들어, A 학생이 짠 계산기 프로그램이 B 학생이 짠 Hello World 출력 프로그램에 관여할 일이 없는 것처럼 독립적으로 수행되는 프로세스는 다른 프로세스의 일에 관여할 필요가 없습니다. 

 

하지만, 프로그램이 너무 거대해져서 이를 쪼개서 프로그래밍을 하게된 경우, 이 쪼개진 프로그램들끼리는 협력해야할 필요가 있습니다. 즉 한 프로세스가 다른 프로세스에 관여해야할 일이 생깁니다.

 

기본적으로 OS 는 한 프로세스가 자신의 메모리 접근 가능 영역을 벗어나 다른 프로세스의 메모리 영역으로 접근하려하면 이 프로세스를 제거해버립니다. 따라서 일반적인 방식으로는 프로세스 간 Communication 할 수 있는 방법이 없습니다.

 

어떻게 프로세스간 Communication 을 할 수 있을까?

앞서 말한 이유로 일반적인 방법으로는 프로세스간 통신을 할 수 없기 때문에 Inter-Process Communication (이하 IPC) 라는 개념이 등장합니다. 

 

IPC 방식은 다음과 같은 두가지 방식으로 나뉩니다.

  • Message Passing
  • Shared Memory

IPC 의 두가지 방식, Message Passing, Shared Memory

 

Message Passing

메세지 패싱 방식은 한 프로세스가 커널에 Destination 과 내용이 담긴 메세지를 전달하면, 커널이 이를 Destination Process 에 전달해주는 방식입니다.

 

Shared Memory

 Shared memory 방식은 한 프로세스가 커널에게 다른 프로세스와 공용으로 사용할 shared memory 공간을 만들어 달라고 요청합니다. 그러면 커널은 Main Memory 의 빈 공간에 shared memory 로 사용할 공간을 확보해줍니다. 이로 인해 서로 다른 프로세스가 같은 메모리 주소 공간을 공유할 수 있습니다. shared memory 가 할당되면 이를 사용하는 프로세스들의 VAS 에도 shared memory 가 추가됩니다.

 shared memory 방식은 동기화 문제가 발생합니다. Time Sharing 방식으로 Scheduling 되고 있을 때, process A가 100글자를 shared memory 를 써야 하는데 50글자만 쓰고 timeout 이 발생하여 CPU 가 Process B 에게 넘어가면 process B 는 process A 가 글자를 다 쓴건지 쓰다만건지 알 수가 없습니다. 따라서 Shared Memory 에서는 이런 동기화 문제를 해결하기 위한 방법을 고안해주어야 하므로 구조가 복잡하고 구현이 어렵습니다.

 

이런 IPC 중 Message Passing 방식의 구체적 예시가 Signal 입니다.

 

다음은 시그널, 인터럽트, 시스템 콜에 대한 설명입니다. 잘 구분하여 생각합시다.

 

시그널 - 프로세스가 프로세스에게 알림

인터럽트 - OS 가 프로세스에게 알림

시스템 콜 - 프로세스가 OS 에게 뭐 해달라고 요청함

시그널, 인터럽트, 시스템 콜