如果内核可以访问用户空间,为什么我们需要copy_from_user来复制内核内存中的数据,为什么它不能访问用户空间数据?这是为了表现吗?
答案 0 :(得分:2)
内核和用户空间不一定具有相同的地址空间。它们可以完全分开,需要特殊的CPU指令才能在它们之间移动数据。
另一个重点是内核需要使用用户权限访问用户空间,即如果访问该地址的用户空间程序失败,那么copy_from_user()
也会失败,即使内核可以访问该地址本身。
除了一般访问冲突外,权限失败还可能包括页面不在内存中,因为它位于磁盘上。这可能需要某种特殊设置,因为通常内核不使用可交换内存。