Управление памятью (сегментация и разбиение на страницы) в 80286 и 80386: как это работает?

2843
Andrew J. Brehm

Я нашел множество веб-сайтов и книг, объясняющих, как работает управление памятью на процессорах 8086 и более поздних x86 в реальном режиме. Я понимаю, я думаю, как два 16-битных значения, адрес сегмента и смещение объединяются, чтобы получить линейный 20-битный физический адрес (сдвиг сегмента на четыре бита влево, добавление смещения; сегменты составляют 64 КБ и начинаются каждые 16 байтов).

Но я не смог найти хороших веб-сайтов или книг, которые объясняли бы, как работает управление памятью в защищенном режиме, в частности различия между 80286 и 80386.

Может кто-нибудь указать мне хороший веб-сайт или книгу (или объяснить это прямо здесь)?

(Для дополнительного кредита, т.е. upvote, как это работает в длинном режиме?)

2

2 ответа на вопрос

3
jsymolon

http://www.ddj.com/184409207 Доктор Доббс опубликовал несколько статей еще в 93 и 94 об этом, и между 286 и 386 не слишком много различий в обращении с памятью. Основа в том, что вы не можете выполнять манипуляции с сегментом: регистры смещения, потому что базовая область памяти и длина теперь являются частью селектора, который вы называете дескриптором.

Вы устанавливаете селектор N с базовым адресом X длиной M. Когда этот селектор активирован (помните синтаксис CS: сборка?), Этот диапазон памяти используется (выгружается и т. Д.). Селектор N (16-битный дескриптор) относится к этой структуре данных.

В защищенном режиме модели с плоской памятью код, данные и стек устанавливаются с одинаковыми адресами памяти (и длиной 4 ГБ). Эта ссылка охватывает основы довольно хорошо.

Связанная статья действительно хороша. Andrew J. Brehm 13 лет назад 0
1
Tudor

Для реального режима нет элемента управления памятью, просто умножьте регистр сегмента на 16 и добавьте смещение, затем поместите этот результат в 21 бит (да 21 бит, потому что 0xFFFF * 0x10 + 0xFFFF = 0xFFFF0 * 0xFFFF = 0x1FFFEF или 1_1111_1111_1111_1110_1111b, 21-битное значение) по адресу автобус.

Для длинного режима сегментация существует, но дескрипторы имеют основание 0 и предел 0xFFFFFFFFFFFFFFFF (16EB), таким образом, это плоский режим, пейджинг вокруг и аналогичен пейджингу PAE, но таблица указателей каталога страниц расширена с 4 записей до 512 записей и уровня страницы. 4 Таблица с 512 записями, каждая из которых указывает на отдельную таблицу указателей каталога страниц.

А вот некоторые сайты, которые объясняют это более подробно: http://en.wikipedia.org/wiki/Real_mode для реального режима и http://en.wikipedia.org/wiki/Long_mode для режима ling