menios icon indicating copy to clipboard operation
menios copied to clipboard

Implement shared memory (POSIX shm) for GUI

Open pbalduino opened this issue 3 months ago • 0 comments

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.

pbalduino avatar Oct 30 '25 22:10 pbalduino