0

内核为什么要使用这个copy_to_user函数?

不能直接对用户空间的数据进行操作吗?

4

2 回答 2

4

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

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

阅读更多关于linux 内核系统调用进程地址空间...

于 2012-07-22T06:43:27.487 回答
4

如果一个给定的内核只为一个架构编写,这可能是也可能不是一个合理的选择。

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

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

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

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

于 2012-07-22T06:50:39.947 回答