我很好奇,因为我在尝试直接访问内存后遇到内核恐慌(然后我发现了这些函数)。
答案 0 :(得分:24)
这些功能做了一些事情:
access_ok()
)内 - 这可以防止用户空间应用程序要求内核读/写内核地址; EFAULT
)而不是崩溃内核(这是通过与页面错误处理程序的特殊协作实现的,具体可以检测用户存储器访问功能之一何时发生故障); 答案 1 :(得分:11)
这些函数检查内存是否可访问。如果内核试图直接访问不可访问的地址,它将会出现恐慌。但另外,内核和用户地址空间可能不同......内核中可能无法访问用户地址空间中的有效地址,如果是,则可能指向内核而不是用户内容。
有关详细信息,请参阅http://www.ibm.com/developerworks/linux/library/l-kernel-memory-access/index.html
历史记录:曾几何时,有一些操作系统将内核设计为用户地址空间的一部分,在这些系统中,内核总是可以直接访问用户空间。可能仍然有这样的系统,但现代的Linux不是一个。当然,用户进程的内存作为内核地址空间的一部分始终是实现的选项,这可以使copy_to_user和copy_from_user更快。