2011-04-08 8 views
0

내가 리눅스에서 다음 값을 각각 커널과 사용자 공간 세그먼트에 할당 된 것을 확인했다 :Linux는 커널 및 사용자 공간 세그먼트 선택기 값을 설정합니까?

__KERNEL_CS = 0x60 
__KERNEL_DS = 0x68 
__USER_CS = 0x73 
__USER_DS = 0x7b 

리눅스 소스를 검사 한 후, 나는 리눅스에 위의 값을 설정 위치를 식별 할 수 없습니다 이 세그먼트.

#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 */ 

이의 이해를 향한 어떤 도움을 이해할 수있을 것이다 : 사실, 나는 다음과 같은 assigments (/arch/x86/include/asm/segment.h)를 발견했습니다.

+0

내 실수 ... X86_64 대신 X86_64를 정의하고 있습니다. 이제는 단락되었습니다. – limp

답변

1
$ egrep -srl '(KERNEL|USER)_[CD]S' arch/x86/kernel 

나는 entry_32.S을 보았습니다.