Implement shared memory (POSIX shm) for GUI
Summary
Implement POSIX shared memory (shm_open, shm_unlink, mmap) to enable zero-copy window buffer sharing between GUI clients and the compositor.
Background
The compositor needs to access client window buffers without copying. Shared memory allows clients to render into a shared buffer that the compositor can directly composite to the screen.
Goals
- Implement `shm_open()`, `shm_unlink()`
- Extend `mmap()` to support MAP_SHARED
- Implement shared memory object management in kernel
- Support multiple processes mapping same memory
Implementation
Syscalls
```c // Create/open shared memory object int shm_open(const char *name, int oflag, mode_t mode); int shm_unlink(const char *name);
// Map shared memory (extend existing mmap) void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); // flags includes MAP_SHARED ```
Usage Example
```c // Client creates window buffer int fd = shm_open("/window_123", O_CREAT|O_RDWR, 0600); ftruncate(fd, width * height * 4); uint32_t pixels = mmap(NULL, widthheight*4, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
// Client renders to pixels // Compositor maps same fd and composites
// Cleanup munmap(pixels, widthheight4); close(fd); shm_unlink("/window_123"); ```
Timeline
Total: 2-3 weeks
Definition of Done
- [ ] shm_open/shm_unlink implemented
- [ ] MAP_SHARED works in mmap
- [ ] Multiple processes can map same memory
- [ ] Changes visible across processes
- [ ] Memory cleanup on process exit
- [ ] Test suite passes
Dependencies
- #193: libc (mmap, file operations)
Enables
- Compositor (critical for window buffers)
See docs/road/road_to_gui.md for complete roadmap.