프로세스를 두가지 종류로 나눠볼 수 있어요
다른 프로세스에게 영향을 미치치도, 받지도 않는 독립적인 프로세스
서로 영향을 주고 받으면서 자원을 공유하는 협력적인 프로세스(Cooperating process)
IPC
란 Cooperating process
사이에서 서로 데이터를 주고 받는 행위
또는 그에 대한 방법이나 경로
를 말합니다.
cooperating process
를 사용하면 프로세스간 데이터 송 수신이 가능하다고 했죠.
뒤에서 자세하게 알아보겠지만 프로세스간 통신은 오버헤드가 크다는 단점이 있는데도 불구하고 왜 Cooperating process를 사용하는걸까요?
Cooperating process를 사용하는 4가지 이유에 대해 알아볼게요.
1. Information sharing (정보 공유)
2. Computation speedup (속도 향상)
- 하나의 작업을 세부 작업으로 나눠서 프로세스들끼리 협력하면서 작업들을 동시에 진행할 때
3. Modularity (모듈성)
4. Convenience (편의성)
IPC 에는 기본적인 두가지 방법이 존재합니다.
바로 Message passing
방법과 Shared memory
방법이죠!
OS(Kernel)
가 memory protection을 위해 대신 전달해주는 것을 의미합니다.
따라서 안전하고 동기화 문제가 발생할 일이 없습니다.
하지만 !
Message passing은 System calls
를 사용해서 작업을 수행하는데, System calls
는 OS(Kernel)
의 도움이 필요하기 때문에 오버헤드가 크다는 단점이 존재합니다.
Message passing
방식에는 Direct communication
과 indirect communication
이 존재합니다.
사진의 왼쪽이 indirect communication
, 오른쪽이 direct communication
입니다.
indirect communication 은 프로세스 A
가(송신) 커널에 메세지를 넣어놓으면 프로세스 B
가(수신) 커널에 직접 메세지를 읽어오는 방식입니다.
direct communication 은 프로세스 A
가(송신) 직접 커널에 메세지를 주고, 커널이 전달받은 메세지를 프로세스 B
(수신)에게 직접 전달하는 방식입니다.
Shared memory는 프로세스 A, B 모두 읽고 쓸 수 있는 메모리 영역을 만들고,
데이터를 공유
하는 방식을 의미합니다.
이 방식에서 OS(Kernel) 의 도움이 필요없기 때문에 성능 측면에서는 Message passing 보다 뛰어나지만 동기화 문제가 발생할 수도 있습니다.
IPC 란 프로세스간 통신의 방법이라고 생각할 수 있어요.
프로세스간 통신은 동일한 컴퓨터 내의 프로세스 통신 뿐만 아니라 네트워킹으로 연결되어 서로 다른 컴퓨터에 존재하는 프로세스간의 통신 방법이기도 합니다. 예를 들어보자면 소캣이 있겠죠!