当内核映射到与进程本身相同的虚拟地址空间时,为什么需要copy_from_user()
它?copy_to_user()
为了学习目的开发了一些(玩具)内核模块后,我很快就意识到了这一点,copy_from_user()
并且copy_to_user()
需要将数据从用户空间缓冲区复制到用户空间缓冲区;否则与无效地址相关的错误会导致崩溃。
但是,如果0x1fffff
虚拟地址指向用户空间缓冲区,那么为什么该地址在内核中无效?内核位于相同的虚拟地址空间中,因此0x1fffff
将映射到相同的物理内存。
地址空间映射在某些(不是全部!)体系结构上是相同的,但即使在它们相同的体系结构上,保护级别也是\xe2\x80\x99t。copy_from_user
等服务于三个主要目的:
某些体系结构使用内存布局,允许这些函数采用快捷方式,例如使用物理内存的直接映射,但您可以\xe2\x80\x99t假设情况如此,并且它不\xe2\x80\x99t处理所有情况无论如何(换出的页面不存在于物理内存中)。
\n 归档时间: |
|
查看次数: |
4659 次 |
最近记录: |