为什么内核使用copy_to_user()函数?

时间:2012-07-22 06:35:45

标签: linux kernel

为什么内核使用copy_to_user函数?

难道不能直接操作用户空间中的数据吗?

2 个答案:

答案 0 :(得分:4)

内核和用户空间应用程序具有不同的地址空间,因此复制到用户空间需要更改地址空间。每个进程都有自己的(用户)地址空间。

此外,内核在复制到用户空间时不应该崩溃,因此copy_to_user函数可能会检查目标地址是否有效(也许该地址应该被分页,例如来自交换空间)。

详细了解linux kernelsyscallsprocessesaddress space ......

答案 1 :(得分:4)

如果给定内核仅针对一种架构编写,则这可能是也可能不是合理的选择。

有很多考虑因素可能因架构而异,因此需要进行某种多态操作......

  • 保护......内核可能拥有太多或太少的访问权限,无论哪种方式都可能需要在给定目标上使用额外代码

  • 地址空间......用户空间和内核空间可能重叠,因此需要特定于目标的解决方案或临时地图

  • 页面错误管理...访问用户空间可能出错,这需要避免或允许。限制对特定地点的访问权限允许额外设置或识别故障原因。