Day56 - POSIX Shared Memory IPC¶
Objective¶
This lab demonstrates Linux POSIX shared memory IPC architecture.
Topics covered:
- shm_open()
- ftruncate()
- mmap()
- independent shared memory processes
- process-shared pthread mutex
- eventfd notification
- AF_UNIX control socket
- SCM_RIGHTS fd passing
- epoll-driven IPC
Directory Structure¶
d56-posix-shm/
├── fd_passing.h
├── epoll_helper.h
├── unix_socket_helper.h
├── shm_common.h
├── shm_writer.c
├── shm_reader.c
└── Makefile
Build¶
or:
gcc -Wall -Wextra -pthread -o shm_writer shm_writer.c
gcc -Wall -Wextra -pthread -o shm_reader shm_reader.c
Shared Memory Structure¶
struct shm_data {
pthread_mutex_t lock;
bool activation;
int counter;
char message[SHM_MSG_SIZE];
};
Writer Responsibilities¶
The writer process owns:
- shared memory lifecycle
- mutex initialization
- eventfd creation
- control socket server
Writer flow:
shm_open()
ftruncate()
mmap()
pthread_mutex_init()
eventfd()
UNIX socket listen
accept reader
send eventfd
event loop
Reader Responsibilities¶
The reader process:
- connects to writer
- receives eventfd
- attaches shared memory
- waits for event notification
Reader flow:
Step 1 - Start Writer¶
Terminal A:
Expected output:
[INFO] shm_open success
[INFO] shared memory mapped
[INFO] socket created
[INFO] socket listen success
Step 2 - Start Reader¶
Terminal B:
Expected output:
Step 3 - Shared Memory Update¶
Writer command:
Expected reader output:
Step 4 - Multiple Updates¶
Writer:
Expected:
- reader wakes on each eventfd notification
- counter increments correctly
- message updates correctly
Step 5 - Shared Memory Display¶
Writer:
Expected:
Step 6 - Graceful Shutdown¶
Writer:
Writer behavior:
Reader behavior:
Step 7 - Verify Cleanup¶
Verify shared memory removal:
Verify socket removal:
Objects should no longer exist after shutdown.
Key Learning Points¶
Shared Memory¶
- shared pages across processes
- explicit synchronization required
pthread Mutex¶
- process-shared synchronization
- mutex object stored in shared memory
eventfd¶
- lightweight event notification
- epoll integration
UNIX Domain Socket¶
- control channel IPC
- fd passing
Important Notes¶
Reader mmap Permission¶
Even reader-only processes require:
because pthread mutex modifies internal state.
eventfd Semantics¶
eventfd is:
not:
Shared memory stores the actual state/data.
eventfd Notification Order¶
Correct order:
Suggested Experiments¶
- remove mutex protection
- add multiple readers
- convert writer to full epoll loop
- use SOCK_SEQPACKET instead of SOCK_STREAM
- switch to abstract UNIX socket
- add shared ring buffer