각각의 프로세스들은 독립된 메모리 공간을 사용하여 다른 프로세스의 영향을 받지 않아 안정적이다. 그렇다면 프로세스 간의 통신이 필요할 때는 어떻게 해야할까? 프로세스 간의 데이터와 정보 교환은 커널이 제공하는 IPC를 통해 이루어진다.
IPC에는 Shared memory와 Message passing의 기법이 있다.
shared-memory 공간은 2개 이상의 프로세스가 함께 공유할 수 있으며, 이 공간은 데이터가 어떤 모양인지, 어느 위치에 저장되는지 OS가 관여하지 않는다. 즉, 프로세스들끼리 규약을 정하고, 알아서 사용한다.
장점
- 빠르다. (Suitable for large amout of data)
단점
- 규약을 잘 정해야 한다. 공유된 메모리 공간에 동시에 writing하면 안된다. 즉, 정보를 어떻게 교환할 것인지에 대한 약속이 잘 이루어져야 한다.
ex) producer-consumer problem
Unbounded buffer
- No practical limit on buffer size
- Producer can always produce
Bounded buffer
- Producer must wait if buffer is full
대부분 Bounded buffer
를 사용한다.
이는 버퍼가 가득 차 있는 경우는 Consumer가 Shared Memory에서 정보를 가져가 빈 공간이 생길때까지 Producer가 기다려야 한다. 버퍼가 비어있는 경우는 Consumer가 Producer를 기다리게 된다.
OS가 제공하는 passage-passing을 이용한 프로세스 커뮤니케이션으로, 교환되는 메세지를 이용하여 통신하므로 공유되는 메모리 영역이 필요하지 않다.
장점
- No conflict: os kernel이 관여하기 때문에 conflict가 발생하지 않는다. (Suitable for smaller amout of data)
- 다른 컴퓨터에도 메시지 패싱을 통해 데이터를 전달할 수 있다.
단점
- 큰 데이터를 전달하기 힘들며, 시스템 콜을 통해 구현되므로 상대적으로 느리다.
다음 시간에는 Shared Memory
를 구현하는 api에 대해 알아보겠습니다. 👩🏻💻🍒