核心如何使用用户空间的参数:
在使用系统调用时,有些参数是指针,这些指针所指向的是用户空间DS寄存器
的段选择子所描述段中的地址,而在2.2之前的版本中,核心态的DS段寄存器的中的
段选择子和用户态的段选择子描述的段地址不同(前者为0xC0000000, 后者为
0x00000000),这样在使用这些参数时就不能读取到正确的位置。所以需要通过特
殊的核心函数(如:memcpy_fromfs, mencpy_tofs)来从用户空间数据段读取
参数,在这些函数中,是使用FS寄存器来作为读取参数的段寄存器的,FS寄存器在
系统调用进入核心态时被设成了USER_DS(DS被设成了KERNEL_DS)。在2.2之
后的版本用户态和核心态使用的DS中段选择子描述的段地址是一样的(都是
0x00000000),所以不需要再经过上面那样烦琐的过程而直接使用参数了。
阅读(876) | 评论(0) | 转发(0) |