1. 背景与意义
1.1 虚拟内存与设备协作的挑战
在现代操作系统中,虚拟内存(VM)为进程提供了独立、连续的地址空间,并通过页表(Page Table)实现虚拟地址到物理地址的映射。随着虚拟化(如 KVM)、异构计算(如 GPU/FPGA 直连)、高性能网络(如 RDMA)等场景的普及,越来越多的设备需要直接访问用户进程的虚拟地址空间,实现高效的数据共享和“零拷贝”访问。
然而,进程的虚拟地址空间是动态变化的,可能随时发生如下事件:
-
内存区域被
munmap()、mremap()、mprotect()等系统调用修改或释放; -
页表项被回收、迁移、换出(swap out);
-
物理页被迁移到设备私有内存(如 GPU 显存)或回迁到系统内存;
-
进程退出,整个地址空间被销毁。
如果设备端(如 GPU 页表、DMA 映射等)不能及时感知这些变化,可能导致数据不一致、非法访问、内存泄漏甚至系统崩溃。
1.2 mmu_notifier 与 mmu_interval_notifier 的作用
为了解决上述问题,Linux 内核引入了 mmu_notifier 和 mmu_interval_notifier 机制,允许设备驱动注册回调函数,在进程虚拟地址空间发生变化时获得通知,从而实现设备页表、DMA
订阅专栏 解锁全文
867

被折叠的 条评论
为什么被折叠?



