免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1745 | 回复: 2
打印 上一主题 下一主题

请教关于copy_from_user [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-23 10:42 |只看该作者 |倒序浏览
函数copy_from_user(void *to, const void __user *from, unsigned long n)最后实质
调用的是 #define __copy_user_zeroing(to,from,size)  ... 。
__copy_user_zeroing只是将from地址处的内容直接拷贝到to地址处。

这里的from不是一个用户态下传来的线性地址么?
内核态下不需要对这个from解析一下变成真这个的物理地址然后才进行拷贝么?为什么可以直接拷贝?
假设不会有缺页的情况发生。

谢谢啊~~~~

论坛徽章:
0
2 [报告]
发表于 2009-10-23 10:57 |只看该作者
内核访问内存时用的不也是虚拟地址吗? 对于CPU指令来说,用的都是虚拟地址,物理地址是透明的。内核之所以要关心物理地址,是因为要维护页表。

所以,copy_to/from_user基本上就是直接拷贝,只是拷贝之前要确定一下,user地址确实是用户空间而不是内核空间的。

论坛徽章:
0
3 [报告]
发表于 2009-10-23 11:07 |只看该作者
谢谢~~~~
噢是不是 内核进行真正拷贝的时候,CPU自己会根据传入的虚地址通过MMU翻译成实际物理地址完成拷贝的
?所以程序里只需要完成从虚地址到虚地址的拷贝
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP