Skip to content

Instantly share code, notes, and snippets.

@Pikachuxxxx
Created May 26, 2025 02:12
Show Gist options
  • Save Pikachuxxxx/e59c9e8e391fc81c3578d9246ebc2c65 to your computer and use it in GitHub Desktop.
Save Pikachuxxxx/e59c9e8e391fc81c3578d9246ebc2c65 to your computer and use it in GitHub Desktop.
deep dive into mmap for CPU and GPU mem alloc
@startuml
title mmap() System Call Flow
actor UserApp
participant KernelVFS as "Kernel VFS"
participant KernelMM as "Kernel Memory Manager"
participant Driver as "Device Driver (if any)"
participant ShmemFS as "Shared Memory Filesystem (shmem)"
participant KernelFS as "Kernel Filesystem"
UserApp -> KernelVFS: mmap(fd, size, prot, flags, offset)
alt fd == -1 (Anonymous Mapping)
KernelVFS -> KernelMM: Validate flags and permissions
KernelMM -> KernelMM: Call shmem_zero_setup()
KernelMM -> ShmemFS: shmem_zero_setup()
ShmemFS -> KernelMM: Create anonymous inode and VMA
KernelMM -> KernelMM: Set vm_ops (e.g., shmem_vm_ops)
KernelMM -> UserApp: Return user-space pointer
UserApp -> KernelMM: Access memory (page fault)
KernelMM -> KernelMM: Allocate physical pages
KernelMM -> KernelMM: Map pages to user space
KernelMM -> KernelMM: Zero-initialize pages
KernelMM -> UserApp: Provide access to memory
else fd != -1 (Driver-backed Mapping)
KernelVFS -> KernelMM: Validate flags and permissions
KernelMM -> KernelFS: Retrieve file operations
KernelFS -> Driver: Invoke driver's mmap()
Driver -> Driver: Validate offset and size
Driver -> KernelMM: Create VMA and set vm_ops
KernelMM -> Driver: Return user-space pointer
UserApp -> KernelMM: Access memory (page fault)
KernelMM -> Driver: Call vm_ops->fault()
Driver -> Driver: Resolve physical page
Driver -> KernelMM: Map device memory to user space
Driver -> KernelMM: Set appropriate protections
KernelMM -> UserApp: Provide access to device memory
end
UserApp -> KernelVFS: munmap(ptr, size)
KernelVFS -> KernelMM: Validate address and size
KernelMM -> KernelMM: Unmap pages and free resources
KernelMM -> KernelVFS: Confirm unmapping
KernelVFS -> UserApp: Return success
@enduml
@Pikachuxxxx
Copy link
Author

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment