이어서 IPC(Inter Process Comunication)에 대해서 알아보겠다.
먼저 이전에 포스트팅이 진행되었던 Process와 Thread의 차이를 이해해야한다.
2024.01.03 - [Computer Science/Operation System] - [OS] 프로세스 & 쓰레드(Process & Thread)
그 이유는 Process와 Thread의 가장 큰 차이인 Process가 자원을 독립적으로 활용하는 것에 있다. 사실 Thread 처럼 자원을 공유한다면 IPC는 필요가 없을 것이다. IPC는 Process간의 통신을 위한 장치이다.
대부분의 IPC는 커널 영역에서 이루어진다. 그 이유는 이전에 포스팅 했던 커널에 대한 설명에 나와있지만, 다시 설명하자면 Kernel은 OS에서 중추를 담당하는 영역이기 때문에 영역자체가 분리되어있어서 보안과 자원 관리에 용이하도록 설계되어있으며 자원관리를 통해서 데이터의 일관성과 동기화에 유리하기 때문이다.
# IPC의 종류
- Pipe
- Anonymous Pipe: 일반적으로 한 방향으로만 통신이 가능한 IPC 방식, 한프로세스의 출력이 다른 프로세스의 입력되는 형태
- Named Pipe: Anonymous Pipe 에서 이름을 지정하여 두개 이상의 미관련된 Process가 통신, 파일 시스템에서 존재
더보기※ Pipe 특징
모두 반이중 통신으로 이루어져있다. 전이중 통신을 위해서는 송수신을 위해 Pipe를 하나 더 만들어야한다.
단순한 데이터의 흐름을 가질 땐 Pipe를 이용하는 것이 효과적이다.
- Message Queue(MQ)
- 메시지의 형태로 데이터를 전달하는 방식
예제)
두사람과 우체국을 생각해보자 한 사람(P1)이 우편물(Message)를 다른 사람(P2)에 보내려고 한다.
우리는 우편물(Message)를 우체국( Message Queue)에 보낸다. P1은 메시지를 보내고 다른 작업을 할 수 있고, P2도 우편물이 도착할때까지 기다릴 필요가 없다.
여기서 우리는 Message Queue라는 중간자를 통해 정보를 교환하게 된다. - Process는 메시지 큐 데이터를 보내거나 메시지 큐에서 데이터를 읽음
더보기※ Message Queue (메세지 큐)
Message Queue에서 Message는 요청, 응답, 요류 메시지 또는 단순한 정보 등의 작은 데이터를 담고 있다.
또한, Message oriented Middleware(메시지 지향 미들웨어)를 구현한 시스템을 의미하게 되는데, MOM는 비동기 메시지를 사용하는 응용 프로그램들 사이에서 데이터를 송수신하는 것을 의미한다.
메시지 전송시 Producer가 메시지를 큐안에 추가한다. Consumer가 메시지를 검색하고 이를 사용할때 까지 큐에 저장되는 구조이다. 각 메시지는 하나의 Consumer에게 처리가 될 수 있다.
오픈소스의 예시로 아파치 카프카, Rabbit Queue등이 있다.
- 메시지의 형태로 데이터를 전달하는 방식
- Shared Memory(공유 메모리)
- Semaphore전 Shared Memory를 이해해야함
- 데이터 자체를 공유하도록 설계(공유영역 존재)
- 자원과 데이터를 공유하기 때문에 동기화 이슈가 발생
- Semaphore(세마포어)
- 위에 설명한 Shared Memory를 해결하기 위한 방안이며, 상호배제원리를 보장하는 알고리즘
- Processr간 Sync를 위해 사용되는 매커니즘이며 공유 자원에 대한 접근을 제어
(양이 매우 많은 관계로 차후에 따로 빼서 공부해야겠다.....!!, 뮤텍스랑 같이)
# IPC 결론
이번에 IPC를 공부하면서 여러가지 자료를 찾아보고 했지만 뭔가 정리가 안되어있는 느낌이 많았다. 세마포어가 포함되어있지 않다거나, 프로세스 뿐만 아니라 스레드간 통신도 있는거 같았다. 정확한 레퍼런스가 있으면 좋겠지만, 너무 방대한 자료로 블로그도 정확한 자료인지도 잘 모르겠다..... 일단 세마포어는 다익스트라가 발견했고 뮤텍스가 상호배제라는것도 일단 배웠다기보다는 인지는 했다. 텍스트로 읽어서는 잘 이해가 안되서 한번 따로 잡고 공부를 진행해야겠다. IPC 자체는 어려운 이론은 아니지만 관련 내용이 어려운거 같다....
'Computer Science > Operation System' 카테고리의 다른 글
[OS] 메모리 관리 전략 & Paging / Segmentaion 기법 (0) | 2024.01.12 |
---|---|
[OS] Semaphore(세마포어) & Mutex(뮤텍스, Mutulal Exclusion) (0) | 2024.01.11 |
[OS] SystemCall (시스템 콜) (0) | 2024.01.10 |
[OS] CPU Scheduling(CPU 스케듈링) (1) | 2024.01.09 |
[OS] Context Switching & Muti Thread, Muti Process (0) | 2024.01.08 |