OSDev http://osdev.su/ |
|
Адресация в защищенном режиме, непонятка http://osdev.su/viewtopic.php?f=6&t=312 |
Страница 1 из 1 |
Автор: | Driusha [ 27 фев 2010, 20:40 ] | ||
Заголовок сообщения: | Адресация в защищенном режиме, непонятка | ||
Добрый день! Принялся разбираться с работой в защищенном режиме. Вопрос у меня, я думаю, достаточно простой, аналогичный кусок кода можно встретить во многих операционках (это фрагмент запускалки ядра, написанного на Си, ОС flick, а собственно саму запускалку запускает GRUB): Код: ; load our own GDT ; GRUB sets up one only temporarily lgdt [gdt_ptr] ; now load the GDT... mov ax,DS_SELECTOR ; ...and update segment registers mov ds,ax mov es,ax mov ss,ax mov fs,ax mov gs,ax jmp CS_SELECTOR:go_on ; do a JMP to initialize CS register ; Вот здесь мне не понятно <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< go_on: ;разные командочки ;[ВЫРЕЗАНО] ; Global Descriptor Table gdt: ; NULL descriptor dw 0 dw 0 db 0 db 0 db 0 db 0 [global DS_SELECTOR] DS_SELECTOR equ $ - gdt dw 0FFFFh dw 0 db 0 db 92h ; present, ring 0, data, expand-up, writable db 0CFh ; page-granular (4 gig limit), 32-bit db 0 [global CS_SELECTOR] CS_SELECTOR equ $ - gdt dw 0FFFFh dw 0 db 0 db 9Ah ; present,ring 0,code,non-conforming,readable db 0CFh ; page-granular (4 gig limit), 32-bit db 0 gdt_end: gdt_ptr: dw gdt_end - gdt - 1 dd gdt section .bss resb 8192 ; 8 kilobytes for stack stack_top: ; top of our stack here Собственно вопросы: Как выглядит глобальная таблица дескрипторов, созданная GRUB`ом? Отличается-ли она от описанной выше? Если отличается, то как может выполняться этот код: Код: jmp CS_SELECTOR:go_on ; do a JMP to initialize CS register go_on: Ведь граб поместил его в память в одно конкретное место (или я не прав?)! Прошу прощения за, вероятно, тупой вопрос и невнятную формулировку. P.S. В аттаче текстовый файл с расширением zip.
|
Автор: | KIV [ 27 фев 2010, 21:12 ] |
Заголовок сообщения: | Re: Адресация в защищенном режиме, непонятка |
Значения для сегментов не определены в спецификации Multi-boot. Нельзя изменять значения сегментных регистров пока не будет созданна сообственная таблица дескрипторов сегментов, т. к. неизвестно какие они селекторы будут иметь. И вообще таблицы дескрипторов может уже не быть в памяти. Да, после она требуется только для изменения сегментных регистров. В остальных ситуациях обращения к ней не производятся. При перезагрузке сегментных регистров параметры сегмента из дескриптора загружаются в теневую часть сегментного регистра и теперь уже используются не дескрипторы в памяти, а в теневой части. По спецификации Multi-boot сегментные регистры уже настроенны как надо и необходимость их изменить до создания своей таблицы дескрипторов (а её обязательно надо создать) возникнуть не должна. |
Автор: | Driusha [ 27 фев 2010, 22:11 ] |
Заголовок сообщения: | Re: Адресация в защищенном режиме, непонятка |
А как тогда работает кусок кода выше? Там определяется таблица дескрипторов:
В селектор кода посредством джампа помещается селектор третьего дескриптора. Как получается, что мы сменили кодовый сегмент, а код продолжает выполняться? Получается, старый кодовый сегмент совпал с новым? И еще пара вопросов: Как будет выглядеть память после того, как ядро в формате ELF будет загружено GRUB`ом? Куда поместитятся секции .text, .data, .bss? В примере в аттаче таблица дескрипторов описывается в секции .data, а сами дескрипторы (оба) указывают на память по адресу ноль с лимитом 4Гб, получается, что таблица дескрипторов находится в сегменте, который описывают дескрипторы в этой таблице ( %) )? Это нормально? |
Автор: | Himik [ 28 фев 2010, 01:48 ] |
Заголовок сообщения: | Re: Адресация в защищенном режиме, непонятка |
Driusha писал(а): Это нормально? Это нормально, потому что на самом деле здесь отдельных сегментов нет. Наверно вы слышали про плосую модель памяти (Flat model)? Сегментные регистры настраиваются так, что адресация идёт линейно, как при отсутствии сегментов. Grub тоже настраивает плоскую модель, поэтому все адреса можно считать как физические. |
Автор: | Driusha [ 28 фев 2010, 11:37 ] |
Заголовок сообщения: | Re: Адресация в защищенном режиме, непонятка |
Чудесно, я, кажется, прозрел! :) Спасибо! |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |