Linux设置其内核和用户空间段选择器值的位置?

我已经验证在Linux中,以下值分别分配给内核和用户空间段:
__KERNEL_CS = 0x60
__KERNEL_DS = 0x68
__USER_CS = 0x73
__USER_DS = 0x7b
在检查了Linux源代码之后,我无法确定Linux将上述值设置到这些段中的位置。实际上,我发现了以下的分配(/arch/x86/include/asm/segment.h):
#define __KERNEL_CS (GDT_ENTRY_KERNEL_CS * 8)           /* 2*8 = 0x10 */
#define __KERNEL_DS (GDT_ENTRY_KERNEL_DS * 8)           /* 3*8 = 0x18 */
#define __USER_DS   (GDT_ENTRY_DEFAULT_USER_DS* 8 + 3)  /* (5*8)+3 = 0x2B */
#define __USER_CS   (GDT_ENTRY_DEFAULT_USER_CS* 8 + 3)  /* (6*8)+3 = 0x33 */
任何帮助理解这一点将不胜感激。     
已邀请:
$ egrep -srl '(KERNEL|USER)_[CD]S' arch/x86/kernel
我看看
entry_32.S
。     

要回复问题请先登录注册