我正在编写一个分配一些内存的 Linux 驱动程序,而用户空间应用程序mmap()
就是该内存。
现在我正在为该模块编写退出处理程序,并试图找出一些安全的假设。
首先,在调用内核模块退出处理程序时假设所有内存都未映射(无论是应用程序还是内核)是否安全?还是我必须在释放内存之前在内核驱动程序中手动取消映射?
我问这个是因为内核应该知道模块是否正在退出并且内核还处理取消映射过程。如果内核在调用退出处理程序之前处理取消映射,那么我可以释放内存。如果这是真的,并且如果用户空间应用程序试图访问该内存,那么应用程序将出现分段错误。这可能是因为虚拟地址不再指向有效的物理内存,或者进程无权访问该页面上的虚拟地址(假设内核未映射内存)。如果内核驱动程序取消映射内存,也会发生同样的情况。这是真的?