Created
May 26, 2025 02:12
-
-
Save Pikachuxxxx/e59c9e8e391fc81c3578d9246ebc2c65 to your computer and use it in GitHub Desktop.
deep dive into mmap for CPU and GPU mem alloc
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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 |
Author
Pikachuxxxx
commented
May 26, 2025
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment