PE Notes · CA/OS
IPC
주소 공간이 갈린 프로세스가 데이터를 주고받는 IPC를 파이프·메시지 큐·공유 메모리·소켓·시그널로 가르고, 동기화 부담을 정리합니다.
프로세스는 서로의 힙을 직접 읽지 못합니다. 공간이 갈려 있어서입니다. 커널이 가운데 창구를 여는 일이 입니다. 바이트를 흘리거나, 메시지를 맡기거나, 같은 물리 페이지를 둘이 보도록 붙입니다. PCB가 그 창구의 파일 디스크립터를 기억합니다.
창구 일곱
는 부모·자식 사이 한 방향 바이트 스트림입니다. 이름 있는 파이프(FIFO)는 파일 시스템에 이름을 남겨 남남 프로세스도 만납니다. 는 커널이 보관하는 메시지 칸입니다. 보낸 쪽이 기다리지 않아도 됩니다. 는 같은 페이지를 두 주소 공간에 붙입니다. 복사가 없어 가장 빠르고, 순서를 직접 맞춰야 합니다.
소켓은 같은 호스트의 유닉스 도메인과, 망을 넘는 TCP·UDP를 한 API로 줍니다. 은 짧은 비동기 알림입니다. SIGKILL·SIGSEGV가 그 가족입니다. 세마포어는 창구라기보다 열쇠입니다. 공유 자원에 몇 명이 들어가는지를 셉니다.
| 방식 | 한 줄 |
|---|---|
| 파이프 | 단방향, 혈연 |
| 네임드 파이프 | 이름, 남남 |
| 메시지 큐 | 비동기, 메시지 단위 |
| 공유 메모리 | 직접 접근, 가장 빠름 |
| 소켓 | 로컬·원격 공통 API |
| 세마포어 | 입장 인원 |
| 시그널 | 사건 알림 |
빠른 쪽, 느슨한 쪽
공유 메모리는 영상 프레임처럼 큰 덩어리에 맞습니다. 쓰기의 순서를 세마포어나 뮤텍스가 잠급니다. 잠금을 엇갈리게 잡으면 입니다. 메시지 큐는 커널이 경계를 지키므로 결합이 낮고, 메시지 크기에 한도가 있습니다. 분산 서비스의 큐는 이 감각을 호스트 밖으로 늘린 것입니다.
| 비교축 | 공유 메모리 | 메시지 큐 |
|---|---|---|
| 속도 | 복사 없음 | 커널 경유 |
| 동기화 | 프로세스가 직접 | OS가 전달 |
| 결합 | 높음 | 낮음 |
| 크기 | 대용량 | 메시지 한도 |
| 자리 | 같은 호스트 핫패스 | 비동기 작업 |
붙이는 손
공유 페이지는 생성(shmget) 뒤 각자 주소에 부착(shmat)합니다. P·V로 임계구역을 감쌉니다. 파이프는 쓰기 끝과 읽기 끝 파일 디스크립터입니다. 컨테이너는 네트워크 브리지나 IPC 네임스페이스로 같은 창구를 나눕니다. 사이는 소켓이 기본입니다.
답안은 독립 공간 때문에 IPC가 필요하다는 한 줄, 일곱 이름, 공유 메모리와 큐 대비, 세마포어가 열쇠라는 점을 한 장에 닫습니다.