728x90
반응형
프로세스 간 통신이 필요한 이유
프로세스들이 서로의 공간을 쉽게 접근할 수 있다면 데이터나 코드가 바뀔 수 있기 때문에
위험합니다. 안전하게 프로세스 간에 통신을 할 수 있게 하기 위해서 IPC를 이용한 통신 방법을 제공합니다.
여러 프로세스들이 많은 일들을 처리하면서 성능을 내기 위해서 서로 상태 확인과 데이터 송수신이 필요합니다.
IPC
내부 프로세스들 사이에 데이터를 효율적으로 주고 받기 위한 통신을 말합니다.
IPC 기법
1. 파이프 (Pipe)
- 통신을 위한 메모리 공간을 생성하여 프로세스가 데이터를 주고받을 수 있게 합니다.
- fork()를 통해 자식 프로세스를 생성하였을 때 부모와 자식간의 통신 할 때 사용합니다.
- 기본 파이프는 단방향 통신입니다. 그렇기 때문에 일반적으로 2개의 파이프를 사용합니다.
- 실제로는 100개의 프로세스가 통신을 하는 경우 100*99=9900개의 파이프가 필요하므로, 자원의 낭비가 심하다는 단점이 있습니다.
2. 네임드 파이프 (Named Pipe)
- 이름을 가진 Pipe를 통해 프로세스들 간에 단방향 통신을 지원합니다.
- 서로 다른 프로세스들이 Pipe의 이름을 통해 통신을 할 수 있습니다.
- 연관이 전혀 없는 프로세스간에 통신을 할 때 사용합니다.
3. 메시지 큐 (Message Queue)
- 메모리를 사용한 Pipe 입니다.
- FIFO 구조로 데이터가 처리됩니다.
- 프로세스간 다양한 통신을 할 때 사용할 수 있습니다.
- 큐에 넣기 때문에 데이터를 추후에 처리할 수 있습니다.
- 다수의 프로세스들이 큐에 메시지를 보낼 수 있습니다.
- 대용량 데이터 처리를 위한 배치 작업이나 채팅 서비스, 비동기 데이터 처리를 할 때 사용합니다.
4. 공유 메모리(Shared Memory)
- 커널 공간에 메모리 공간을 만들고, 해당 공간을 변수처럼 사용하는 방식입니다.
- 해당 메모리를 변수처럼 접근하여 사용하는 방식입니다.
- 공유 메모리 Key를 가지고 있는 모든 프로세스의 접근이 가능합니다.
5. 메모리 맵 (Memory Map)
- 디스크에 있는 파일의 블록들과 프로세스의 페이지가 연결되어 가상 메모리에 사상만 되어 있다가, 해당 주소에 읽거나 쓰기 작업이 발생할 때 실제 메모리에 파일을 불러옵니다.
- 파일을 프로세스의 메모리에 일정 부분 매핑 시켜서 사용합니다.
- 파일로 대용량 데이터를 공유 할 때 사용합니다.
6. 소켓 (Socket)
- 네트워크 소켓통신을 사용해서 데이터를 공유합니다.
- 네트워크 소켓을 이용하여 Client와 Server 구조로 데이터를 통신합니다.
- 원격에서 프로세스간 데이터를 공유할 때 사용합니다.
결론
프로세스간 통신에 대해 개념을 정리할 수 있는 시간이었습니다.
코드를 통해 학습하면 더 잘 이해할 수 있을 것 같습니다.
아래에 코드를 써놓은 좋은 블로그가 있어서 링크해놓겠습니다. 감사합니다.
IPC 관련 코드 예제
[참고]
1. [IPC] 내부 프로세스간의 통신 - 망나니 개발자
728x90
반응형
'Backend > OS' 카테고리의 다른 글
[OS] POSIX 기초 (0) | 2022.09.11 |
---|---|
[OS] I/O Management (0) | 2022.09.03 |
[OS] Memory Management (2) - 메모리 관리 방법 (0) | 2022.08.16 |
[OS] Memory Management (1) - 메모리 관리 개념 (4) | 2022.08.09 |
[OS] Process Management (3) _ 쓰레드, 쓰레드 동기화, 세마포어 (0) | 2022.07.31 |