공유 메모리의 핵심 아키텍처
리눅스에서 Shared Memory IPC는 두 가지 주요 구현 방식을 제공합니다. System V IPC 방식은 커널이 관리하는 내부 tmpfs 마운트를 사용하며, POSIX 방식은 /dev/shm에 마운트된 tmpfs 파일시스템을 활용합니다. 두 경우 모두 페이지 캐시에 완전히 상주하며, 필요시 스왑 공간으로 확장될 수 있습니다.
메모리 맵핑과 커널 개입 최소화
공유 메모리의 가장 큰 성능 특징은 설정 이후 커널 개입이 거의 없다는 점입니다. 프로세스들이 동일한 물리 메모리 페이지를 자신의 가상 주소 공간에 맵핑하면, 한 프로세스의 쓰기가 즉시 다른 모든 프로세스에 가시화됩니다. 이는 파이프나 메시지 큐와 달리 사용자 공간 버퍼→커널→사용자 공간의 이중 복사를 피합니다.
실무 주의사항: 동기화와 포인터 제약
공유 메모리의 주요 제약은 자체적인 동기화 메커니즘이 없다는 것으로, 세마포어나 뮤텍스를 별도로 구현해야 합니다. 또한 각 프로세스가 공유 메모리를 다른 가상 주소에 맵핑할 수 있으므로, 포인터 기반 자료구조(연결 리스트, 트리 등)는 절대 주소 대신 오프셋 산술을 사용해야 합니다.