ЦП игнорирует сегмент gdt?

Я изучаю разработку ядра. Используя книгу, я пришел к выводу. Однако я не могу понять влияние глобальной таблицы дескрипторов. Мой GDT выглядит следующим образом:

gdt_star:

gdt_null:
dd 0x0      
dd 0x0

gdt_code:
dw 0xffff   
dw 0x0000
db 0x00     
db 10011011b
db 11001111b
db 0x0      

gdt_data:
dw 0xffff
dw 0x0
db 0x00
db 10010010b
db 11001111b
db 0x0              

gdt_end:

gdt_descriptor:
dw gdt_end - gdt_star - 1
dd gdt_star

CODE_SEG equ gdt_code - gdt_star
DATA_SEG equ gdt_data - gdt_star

После загрузки gdt и присвоения DATA_SEG регистрам ds, ss, es, fs, gs; мой ассемблерный код переходит на c-код. Базовый адрес сегмента данных - 0x00000000, а ограничение - 0xffff. Разве нельзя поставить значение в адрес памяти 0x100000?

Спасибо


person user2972185    schedule 16.08.2014    source источник
comment
Вы изменили вопрос, изменив бит зернистости. В таком случае почти всегда лучше задать новый вопрос.   -  person paxdiablo    schedule 18.08.2014


Ответы (1)


Предел масштабируется по степени детализации.

Например, если вы используете детализацию страницы (4K), ограничение 0xfffff предоставит вам доступ ко всему адресному пространству 4G.

Степень детализации определяется (по памяти) вторым db в каждой GDT записи. Поскольку верхний бит этого значения равен 1, выбирается степень детализации 4K.

person paxdiablo    schedule 16.08.2014
comment
Спасибо. Как можно присвоить 0xfffff области 2 байта. Это опечатка? Когда я изменяю gdt в соответствии с вашим объяснением, я могу присвоить значение 0x300000. Я обновил свой вопрос, пожалуйста, проверьте его? - person user2972185; 17.08.2014
comment
База и ограничение находятся в нескольких разделах в gdt. Помимо 16-битного слова, используются другие значения битов. См. Графическое изображение в en.m.wikipedia.org/wiki/Global_Descriptor_Table. Базовый адрес имеет 32 бита, а предельный - 20 бит. - person paxdiablo; 18.08.2014
comment
В порядке. Спасибо, я это понимаю. Но я все еще могу поместить данные в адрес памяти, который превышает лимит + базовый адрес. Почему так происходит? - person user2972185; 18.08.2014