Где Linux устанавливает значения селектора ядра и сегмента пользовательского пространства? - PullRequest
0 голосов
/ 08 апреля 2011

Я убедился, что в 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 */

. Любая помощь в понимании этого будет оценена.

1 Ответ

1 голос
/ 08 апреля 2011
$ egrep -srl '(KERNEL|USER)_[CD]S' arch/x86/kernel

Я бы посмотрел на entry_32.S.

...