FreeBSD 5内核源代码分析之copyin()实现原理
发表于:2007-07-01来源:作者:点击数:
标签:
在内核中,用户态和内核态之间的数据拷贝主要通过copyin()和copyout()
两个函数完成。与普通的数据拷贝不同,用户态和内核态之间的数据拷贝必须
考虑到用户给出的地址是否有效,即该地址是否有真正的地址映射。同时又要
考虑到效率。因此也不可能对用户给出地址的每个字节检查一遍。
FreeBSD和
linux一样(linux中是copy_from_user()和copy_to_user()),
都是先拷贝,出错以后再进行错误处理,有着异曲同工之妙。
本文所有代码,如未注明,均来自sys/i386/i386/support.s
copyin()由汇编语言写成,我们逐句来看。