assembler. Учебник для вузов_Юров В.И_2003 -637с (862834), страница 12
Текст из файла (страница 12)
Операционная системаразмещает сегменты программы в оперативной памяти по определенным физическим адресам, после чего помещает значения этих адресов в определенные места. Куда именно, зависит от режима работы процессора. Так, в реальном режимеэти адреса помещаются непосредственно в соответствующие сегментные регистры, а в защищенном режиме они размещаются в элементы специальной системнойдескрипторной таблицы. Внутри сегмента программа обращается к адресам относительно начала сегмента линейно, то есть начиная с 0 и заканчивая адресом, равным размеру сегмента. Этот относительный адрес, или смещение, который процессор использует для доступа к данным внутри сегмента, называется эффективным.Отличия моделей сегментированной организации памяти в различных режимах хорошо видны на схеме (рис.
2.7). Различают три основных модели сегментированной организации памяти:II сегментированная модель памяти реального режима;Архитектура 1А-3251сегментированная модель памяти защищенного режима;сплошная модель памяти защищенного режима.а) Сегментированная модель памяти реального режима632-1 (2 -1)i486/PentlumPentium Pro/ll/lll/IVЛинейный адресЭффективный адрес\СегментыСегментныйрегистрПамятьб) Сегментированная модель памяти защищенного режима36322 -1 (2 -1)•| Смещение |Сегментный I г^Впа^-лп Iрегистр''*^Iг.'^fS. — *ь.•Таблицадескрипторов^Сегменты.f_—^ztj£Памятьв) Сплошная модель памяти защищенного режима1236-1 (232-1)| Смещениерегистры:[ СелекторСелектор |ТаблицадескрипторовПамятьРис. 2.7.
Модели памяти процессоров IntelРассмотрим порядок формирования физического адреса в реальном и защищенном режимах. Уточним терминологию. Под физическим адресом понимаетсяадрес памяти, выдаваемый на шину адреса процессора. Другое название этого адреса — линейный адрес. Подобная двойственность в названии обусловлена наличием страничной модели организации оперативной памяти. Эти названия являются синонимами только при отключении страничного преобразования адреса52Глава 2. Программно-аппаратная архитектура IA-32 процессоров Intel(в реальном режиме страничная адресация всегда отключена). Страничная модель,как мы отметили ранее, является надстройкой над сегментированной моделью.В страничной модели линейный и физический адреса имеют разные значения.
Далее мы будем обсуждать схему, на которой показан порядок формирования адресав реальном режиме работы процессора. Обратите внимание на наличие в этой схеме устройства страничного преобразования адреса, предназначенного для того, чтобы совместить две принципиально разные модели организации оперативной памяти и выдать на шину адреса истинное значение физического адреса памяти.Формирование физического адреса в реальном режимеДалее перечислены характеристики механизма адресации физической памятив реальном режиме.* Диапазон изменения физического адреса — от 0 до 1 Мбайт. Эта величина определяется тем, что шина адреса i8086 имела 20 линий.« Максимальный размер сегмента— 64 Кбайт. Это объясняется 16-разряднойархитектурой 18086. Нетрудно подсчитать, что максимальное значение, которое могут содержать 16-разрядные регистры, составляет 216 - 1, что применительно к памяти и определяет величину 64 Кбайт.II Для обращения к конкретному физическому адресу оперативной памяти необходимо определить адрес начала сегмента (сегментную составляющую) и смещение внутри сегмента.Понятие адреса начала сегмента ввиду принципиальной важности требует дополнительного пояснения.
Исходя из разрядности сегментных регистров, можноутверждать, что сегментная составляющая адреса (или база сегмента) представляет собой всего лишь 16-разрядное значение, помещенное в один из сегментныхрегистров. Максимальное значение, которое при этом получается, соответствует216 - 1. Если так рассуждать, то получается, что адрес начала сегмента может бытьтолько в диапазоне 0-64 Кбайт от начала оперативной памяти. Возникает вопрос,как адресовать остальную часть оперативной памяти вплоть до 1 Мбайт с учетомтого, что размер самого сегмента не превышает 64 Кбайт.
Дело в том, что в сегментном регистре содержатся только старшие 16 битов физического адреса начала сегмента. Недостающие младшие четыре бита 20-разрядного адреса получаются сдвигом значения в сегментном регистре влево на 4 разряда. Эта операция сдвигавыполняется аппаратно и для программного обеспечения абсолютно прозрачна.Получившееся 20-разрядное значение и является настоящим физическим адресом, соответствующим началу сегмента. Что касается второго компонента {смещения), участвующего в образовании физического адреса некоторого объекта в памяти, то он представляет собой 16-разрядное значение.
Это значение можетсодержаться явно в команде либо косвенно в одном из регистров общего назначения. В процессоре эти две составляющие складываются на аппаратном уровне,в результате получается физический адрес памяти размерностью 20 битов. Данный механизм образования физического адреса позволяет сделать программноеобеспечение перемещаемым, то есть не зависящим от конкретных адресов загрузки его в оперативной памяти (рис. 2.8).Архитектура 1А-32АЛУ53Оперативнаяпамять15Эффективный адрес\Линейный адресСмещениеиз команды15Базовый регистрЬх или Ьр15Индексный регистрsi или diСегментныерегистры:Физическийадрес15ШинаадресаdsesfsРис.
2.8. Механизм формирования физического адреса в реальном режимеНа рисунке хорошо видно, как формируется некоторый целевой физическийадрес: сегментная часть извлекается из одного из сегментных регистров, сдвигается на четыре разряда влево и суммируется со смещением. В свою очередь, видно,что значение смещения можно получить минимум из одного и максимум из трехисточников: из значения смещения в самой машинной команде и/или из содержимого одного базового и/или одного индексного регистра. Количество источников,участвующих в формировании смещения, определяется кодированием конкретной машинной команды, и если таких источников несколько, то значения в нихскладываются. В заключение заметим, что не стоит волноваться из-за несоответствия размеров шины адреса процессора i486 или Pentium (32 бита) и 20-разрядного значения физического адреса реального режима.
Пока процессор находитсяв реальном режиме, старшие 12 линий шины адреса попросту недоступны, хотяпри определенных условиях и существует возможность работы с первыми 64 Кбайтоперативной памяти, лежащими сразу после первого мегабайта.Недостатки такой организации памяти:И сегменты бесконтрольно размещаются с любого адреса, кратного 16 (так каксодержимое сегментного регистра аппаратно смещается на 4 разряда), и, какследствие, программа может обращаться по любым адресам, в том числе и реально не существующим;сегменты имеют максимальный размер 64 Кбайт;сегменты могут перекрываться другими сегментами.Желанием ввести в архитектуру средства, позволяющие избавиться от указанных недостатков, и обусловлено, в частности, появление защищенного режима,54Глава 2. Программно-аппаратная архитектура IA-32 процессоров Intelв котором работают все современные операционные системы, в том числе Windowsи Linux.Формирование физического адреса в защищенном режимеОсновная идея защищенного режима — защитить исполняемые процессором программы от взаимного влияния.
В защищенном режиме процессор поддерживаетдва типа защиты — по привилегиям и по доступу к памяти. В контексте нашегоизложения интерес представляет второй тип защиты. Его мы и рассмотрим.Для введения любого механизма защиты нужно иметь как можно больше информации об объектах защиты. Для процессора такими объектами являются исполняемые им программы. Организуя защиту программ по доступу к памяти, фирмаIntel не стала нарушать принцип сегментации, свойственный ее процессорам.
Таккак каждая программа занимает один или несколько сегментов в памяти, то логично иметь больше информации об этих сегментах как об объектах, реально существующих в данный момент в вычислительной системе. Если каждому из сегментов присвоить определенные атрибуты, то часть функций по контролю за доступомк ним можно переложить на процессор.
Что и было сделано. Любой сегмент памяти в защищенном режиме имеет следующие атрибуты:ш расположение сегмента в памяти;II размер сегмента;ii уровень привилегий (определяет права данного сегмента относительно другихсегментов);И тип доступа (определяет назначение сегмента);и некоторые другие.В отличие от реального режима, в защищенном режиме программа уже не может запросто обратиться по любому физическому адресу памяти. Для этого онадолжна иметь определенные полномочия и удовлетворять ряду требований.Ключевым объектом защищенного режима является специальная структура —дескриптор сегмента, который представляет собой 8-байтовый дескриптор (кратТип сегментаbase 3 дРазмер сегмента(16...19)v,'1VБазовый адрессегмента (31...
24) G iDi Оi U i limit 2635547Базовый адрес сегмента (0...15)base 1/V.base 2,Байт ARБазовый адрессегмента (23... 16)39Размер сегмента (0...15)limit 13115ОРис. 2.9. Структура дескриптора сегмента защищенного режима процессораАрхитектура 1А-3255кое описание) непрерывной области памяти, содержащий перечисленные ранееатрибуты. На рис. 2.9 приведена структура дескриптор сегмента.Приведем назначение некоторых полей дескриптора сегмента:limit_l и limit_2 — 20-разрядное поле, определяющее размер сегмента;base_l и base_2 — 32-разрядное поле, определяющее значение линейного адреса начала сегмента в памяти;AR — байт, поля которого определяют права доступа к сегменту;D — бит разрядности операндов и адресов (глава 3);G — бит гранулярности.В защищенном режиме размер сегмента не фиксирован, его расположение можно задать в пределах 4 Гбайт. Если посмотреть на рисунок, то возникнет вопрос:почему разорваны поля, определяющие размер сегмента и его начальный (базовый) адрес? Это результат эволюции процессоров.