Сегментная адресация памяти | это... Что такое Сегментная адресация памяти? (original) (raw)

A⊂B Эта статья или раздел описывает ситуацию применительно лишь к частным случаям. Необходимо переработать изложение или добавить информацию, чтобы статья описывала более общий случай.

Сегментная адресация памяти — схема логической адресации памяти компьютера в архитектуре x86. Линейный адрес конкретной ячейки памяти, который в некоторых режимах работы процессора будет совпадать с физическим адресом, делится на две части: сегмент и смещение. Сегментом называется условно выделенная область адресного пространства определённого размера, а смещением — адрес ячейки памяти относительно начала сегмента. Базой сегмента называется линейный адрес (адрес относительно всего объёма памяти), который указывает на начало сегмента в адресном пространстве. В результате получается сегментный (логический) адрес, который соответствует линейному адресу база сегмента+смещение и который выставляется процессором на шину адреса.

Селектором называется число (в x86 — 16-битное), однозначно определяющее сегмент. Селектор загружается в сегментные регистры.

В реальном и защищённом режимах x86-процессора функционирование сегментной адресации отличается.

Содержание

Сегментная адресация в реальном режиме

В реальном режиме процессора всё адресное пространство делится на одинаковые сегменты размером 65536 байт. База каждого последующего сегмента смещена относительно базы предыдущего на 16 байт (т. н. параграф). Таким образом, сегменты частично перекрывают друг друга. (Например, байт 17 сегмента 2 — это также и байт 1=17-16 сегмента 3, и байт 33=17+16 сегмента 1.)

Селектор 16-разрядный и задаёт номер сегмента. Учитывая, что сегменты следуют друг за другом с постоянным интервалом в 24=16 байт, очень легко выяснить линейный адрес сегмента, умножая его на 16.

Сегментная адресация в защищённом режиме (селекторная адресация)

В защищённом режиме процессора адресное пространство задачи делится на сегменты различных размеров с различными базами. Для определения базы и размера сегментов служат дескрипторы сегментов, хранящиеся в дескрипторных таблицах (GDT и LDT).

Segment addressing.png

Здесь сегменты № 3 и № 11 указывают на одну и ту же область. Такие сегменты называются алиасными (англ. Alias). Сегмент № 7 охватывает сегменты № 1, № 2, № 3 и № 11. Сегмент № 5 указывает на GDT, позволяя её изменять (это никак не относится к GDT — её настоящий дескриптор хранится в регистре GDTR (показан жёлтым)). Адресация через локальную таблицу дескрипторов (LDT) происходит аналогично.

Селектор также 16-разрядный, но делится на три части: RPL (биты 0-1), TI (бит 2) и номер дескриптора ([биты 3-15).

См. также

Примечания

Ссылки

Просмотр этого шаблона Аспекты операционных систем (историясписок)
Ядро ГибридноеМикроМодульноеМонолитноеНаноЭкзоДрайверПространство пользователя • Область пользователя
Управлениепроцессами Режимы (супервизорареальныйзащищённый) • ПрерываниеКольца защитыПереключение контекстаМногозадачность (вытесняющаякооперативнаямультипрограммирование) • Процесс • Управление процессом • Планировщик задачМногопоточность
Управлениепамятью Защита памятиСегментная адресация памятиСтраничная памятьМенеджер виртуальной памятиОшибка сегментации • Общая ошибка защиты
Прочее Загрузчик ОСAPIVFSКомпьютерная сетьGUIСлой аппаратных абстракций (HAL)