IPC란?
- process 끼리 데이터를 공유 혹은 특정 메세지를 전달하기 위해 사용하는 것을 목적으로 한다.
- OS의 경우 systemcall이 대표적이다.
- 필요성
- 특정 process의 child process와 통신이 필요한 상황(parent process 코드 변경 혹은 process kill)
- 각각 다른 process 간의 자원 공유가 필요한 상황, thread의 자원 공유와는 다른 상황. 하지만 thread의 경우도 IPC를 활용하여 공유를 한다. (동일 file에 대한 접근 후 write를 위한 동작을 할 경우 mutex에 걸리게 된다. ex) os.file.close() 의 경우 비정상적인 접근으로 문제를 일으킴)
- 성능 향상을 위한 multi processing, parrell process 를 하기위해 필요.
종류
(a) Indirect 방식, (b) Direct 방식
Direct 방식
- Pipe, Kernal
- Pipe, Kernal
- Parent process의 fork를 통한 child process 생성시 사용.
- 장점
- synchronize 할 필요가 없어 구현의 편의성이 있음.
- 단점
- 주로 pipe 혹은 kernal 을 사용할 경우 system call의 방식을 사용하기때문에 context switching이 빈번하게 일어나 부하가 심해질 수 있다.
- 커널을 사용하는 경우 속도가 느리다.
- Shared memory
- Process 사이의 공유 memory 공간을 생성하여 사용하는 방식.
- 장점
- 단점
- shared memory의 경우 공유 자원에 대한 접근을 하기때문에 synchronize를 위한 코딩의 불편함이 있다.
Indirect 방식
- message queue 방식을 통해 통신한다.
- 각 process를 식별하기위해 pid를 사용한다
- 장점
- N : N 연결이 가능하기 때문에 통신에 자유롭다.
- 단점
- 단방향 통신이기 때문에 send, recieve에 대한 2개의 queue를 생성해줘야한다.