为什么内核使用copy_to_user
函数?
难道不能直接操作用户空间中的数据吗?
答案 0 :(得分:4)
内核和用户空间应用程序具有不同的地址空间,因此复制到用户空间需要更改地址空间。每个进程都有自己的(用户)地址空间。
此外,内核在复制到用户空间时不应该崩溃,因此copy_to_user
函数可能会检查目标地址是否有效(也许该地址应该被分页,例如来自交换空间)。
详细了解linux kernel,syscalls,processes,address space ......
答案 1 :(得分:4)
如果给定内核仅针对一种架构编写,则这可能是也可能不是合理的选择。
有很多考虑因素可能因架构而异,因此需要进行某种多态操作......
保护......内核可能拥有太多或太少的访问权限,无论哪种方式都可能需要在给定目标上使用额外代码
地址空间......用户空间和内核空间可能重叠,因此需要特定于目标的解决方案或临时地图
页面错误管理...访问用户空间可能出错,这需要避免或允许。限制对特定地点的访问权限允许额外设置或识别故障原因。