Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВМСиC / Организация, адресация, кэширование памяти.doc
Скачиваний:
121
Добавлен:
29.03.2015
Размер:
830.46 Кб
Скачать

Адресация памяти в реальном режиме. Логический и физический адреса.

Адреса бывают логические и физические. Разберем, что это значит.

Адреса в основной памяти, характеризующие реальное расположение данных в физической памяти, называются физическими адресами. Набор физических адресов, с которым работает программа, называют физическим адресным пространством. Иными словами физический адрес это адрес, по которому процессор (или другое устройство) обращаются к RAM, используя шину адреса. Совсем просто можно сказать, что физический адрес это номер байта, к которому мы обращаемся, в адресном пространстве.

Пользовательская программа, которая загружается в память для исполнения, не видит реальных физических адресов, а имеет дело с, так называемыми, логическими адресами. Это нужно, потому что одна и та же программа может быть загружена в разные области памяти, в зависимости от того какие другие программы к этому моменту уже загружены в память. Логические адреса обычно образуются на этапе создания загрузочного модуля программы. Т.е. логический адрес это адрес, который «знает» программа. Набор адресов, используемый программой, называют логическим адресным пространством

В процессоре должен быть особый узел – блок преобразования адреса (БПА). Программа указывает свой (логический) адрес, он попадает в этот блок, блок что-то с ним делает такое, чтобы из этого адреса сделать физический, и лишь затем такой преобразованный адрес попадает на шину адреса. Это называется отображение логического адреса на физический, или трансляция логического адреса в физический. Способ отображения зависит от режима работы процессора отдельно для реального и отдельно для защищенного режима работы.

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

Реальный режим работы процессора это режим, в котором работало первое поколение процессоров (i8086, i8088), любой современный процессор после включения питания начинает работать в реальном режиме и только потом программно переводится в защищенный режим.

Для работы с памятью используются две шины - шина адреса и шина данных. Физически память устроена таким образом, что возможна адресация как 16-битовых слов, так и отдельных байтов памяти. Кроме того, процессоры начиная с i80386 могут адресовать 32-битовые слова памяти.

В любом случае так называемый физический адрес передаётся из процессора в память по шине адреса. Ширина шины адреса определяет максимальный объём физической памяти, непосредственно адресуемой процессором. Для 20-разрядной адресной шины процессора i8086 используется двадцать двоичных (или пять шестнадцатеричных) разрядов. Однако все регистры этого процессора являются 16-разрядными. Возникает проблема представления 20-разрядного физического адреса памяти при помощи содержимого 16-разрядных регистров. Максимальное число (данное или адрес), которое можно записать в 16-разрядный регистр, составляет всего 216 - 1 = 65535, или 64Кб-1 из нужного нам одного мегабайта.

Для разрешения этой проблемы используется двухкомпонентный логический адрес. Логический адрес состоит из двух 16-разрядных компонент. Такой способ называется сегментной адресацией памяти.

Суть сегментной адресации заключается в следующем. Обращение к памяти осуществляется исключительно с помощью сегментов. Сегментом называется условно выделенная область адресного пространства определённого размера. В реальном режиме процессора всё адресное пространство делится на одинаковые сегменты размером 64Кб.

Физический адрес любой ячейки памяти вычисляется процессором путем сложения начального адреса сегмента (базы сегмента), в котором располагается эта ячейка, со смещением к ней (в байтах) от начала сегмента (рис. 17). Это смещение иногда называют относительным адресом.

Рисунок 17 Образование физического адреса из сегментного адреса и смещения.

Покажем как вычисляется физический адрес–для получения 20-разрядного физического адреса к сегментной компоненте (заносящейся в сегментный регистр) приписывается справа четыре нулевых бита (для расширения до 20 разрядов), затем полученное число складывается с компонентой смещения. Перед сложением к компоненте смещения слева дописывается четыре нулевых бита (также для расширения до 20 разрядов). Эту процедуру иллюстрирует рисунок 18

Рисунок 18. Вычисление физического адреса в реальном режиме.

Логический адрес принято записывать в шестнадцатеричной форме в виде <сегмент : смещение>.

Например, пусть у нас есть логический адрес 1234h:0123h. Содержимое базового регистра равно 1234h, регистра смещения - 0123h. Вычислим физический адрес, соответствующий нашему логическому адресу:

  1. расширяем до 20 бит сегментную компоненту, дописывая справа 4 нулевых бита, получаем число 12340h;

  2. расширяем до 20 бит компоненту смещения, дописывая слева 4 нулевых бита, получаем число 00123h;

  3. для получения физического адреса складываем полученные числа: 12340h + 00123h = 12463h.

Очевидно, что одному физическому адресу может соответствовать несколько логических. Например, физическому адресу 12463h соответствует логический адрес 1246h:0003h.

Фактически в схеме адресации памяти реального режима вся память как бы разбивается на перекрывающиеся сегменты размером 64Кб. Физический адрес начала сегмента (базовый адрес) равен расширенной до 20 бит сегментной компоненте адреса (расширение выполняется дописыванием справа 4 нулевых бит).

Сегмент может начинаться не с любого физического адреса, а только с такого, который кратен 16 байтам. Деление адресного пространства на фрагменты по 16 байт с которых может начинаться сегмент называется делением на параграфы, поэтому обычно говорят, что сегмент может начинаться только с границы параграфа.

Содержимое сегментного регистра при такой схеме адресации определяет номер сегмента, а компонента смещения является смещением внутри сегменты памяти. Рисунок 19 иллюстрирует сказанное выше.

Рисунок 19. Соответствие логического и физического адресов.

На этом рисунке показано соответствие логического адреса 0002h:0028h физическому адресу 00048h.

Использование сегментной адресации дает дополнительное преимущество при программировании.

Каждой программе выделяется свой собственный сегмент (или даже несколько). Внутри каждого сегмента начинается собственная адресация от нуля - смещение. Таким образом, программист во время кодирования может вообще не заботиться, где именно физически будет размещена программа в памяти.

Операционная система управляет загрузкой и выгрузкой программ примерно так. Свободный сегмент выделяется программе во время загрузки. А после того, как программа завершилась, операционная система снова помечает сегмент как незанятый.