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