ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

[deprecate]第九章:SVM机制: 9-1 mmu_notifier 与 mmu_interval_notifier机制

[deprecate]第九章:SVM机制: 9-1 mmu_notifier 与 mmu_interval_notifier机制

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

返回列表