Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тип книга.doc
Скачиваний:
9
Добавлен:
01.03.2025
Размер:
2 Мб
Скачать
☆

Страничная организация памяти

Идею о разделении понятий адресного пространства и адресов памяти выдви­нула группа ученых из Манчестера. Рассмотрим в качестве примера типичный компьютер того времени с 16-разрядным полем адреса в командах и 4096 слова­ми памяти. Программа, работающая на таком компьютере, могла обращаться к 65 536 словам памяти (поскольку адреса были 16-разрядными, а 216 = 65 536). Обратите внимание, что число адресуемых слов зависит только от числа битов адреса и никак не связано с числом реально доступных слов в памяти. Адресное пространство такого компьютера состоит из чисел 0, 1,2,..., 65 535, так как это — набор всех возможных адресов. Однако в действительности компьютер мог иметь гораздо меньше слов в памяти.

До изобретения виртуальной памяти приходилось проводить жесткое разли­чие между адресами, меньшими 4096, и адресами, равными или большими 4096. Эти две части рассматривались как полезное адресное пространство и бесполез­ное адресное пространство соответственно (адреса выше 4095 были бесполезны­ми, поскольку они не соответствовали реальным адресам памяти). Никакого раз­личия между адресным пространством и адресами памяти не проводилось, поскольку между ними подразумевалось взаимно-однозначное соответствие.

Идея разделения понятий адресного пространства и адресов памяти состоит в следующем. В любой момент времени можно получить прямой доступ к 4096 словам памяти, но это не значит, что они непременно должны соответство­вать адресам памяти от 0 до 4095. Например, мы могли бы сообщить компьютеру, что при обращении к адресу 4096 нужно использовать слово из памяти с адресом 0, при обращении к адресу 4097 — слово из памяти с адресом 1, при обращении к адресу 8191 — слово из памяти с адресом 4095 и т. д. Другими словами, мы отобра­жаем адресное пространство на действительные адреса памяти (рис. 6.2).

Согласно этой схеме отображения адресов адресного пространства на факти­ческие ячейки памяти, в машине с объемом памяти 4 Кбайт (без виртуальной па­мяти) между адресами от 0 до 4095 и словами памяти числом 4096 существует прямое соответствие. Возникает интересный вопрос: а что произойдет, если про­грамма совершит переход к одному из адресов в диапазоне от 8192 по 12 287? В машине без виртуальной памяти произойдет ошибка, на экран будет выведе­но сообщение о несуществующем адресе памяти, и выполнение программы пре­рвется.


В машине с виртуальной памятью произойдет следующее:

  1. Содержимое основной памяти будет сохранено на диске.

  2. Слова с 8192 по 12 287 будут сохранены на диске.

Слова с 8192 до 12 287 будут загружены в основную память.

  1. Отображение адресов изменится: адреса с 8192 по 12 287 будут соответство­вать ячейкам памяти с 0 по 4095.

  2. Выполнение программы продолжится, как будто ничего необычного не слу­чилось.

Такая технология автоматического наложения называется страничной орга­низацией памяти, а фрагменты программы, которые считываются с диска, — страницами.

Есть и другой, более сложный способ отображения адресов адресного про­странства программы на реальные адреса памяти. Адреса, к которым программа

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

Программы пишутся так, как будто в основной памяти хватает места для раз­мещения всего виртуального адресного пространства, даже если это не соот­ветствует действительности. Программы могут загружать слова из виртуального адресного пространства или записывать слова в виртуальное адресное простран­ство, несмотря на то, что на самом деле физической памяти для этого не хватает. Программист может писать программы, даже не осознавая, что существует вир­туальная память. Просто создается такое впечатление, что объем памяти данного компьютера достаточно велик.

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

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

Ситуация, когда программист использует какой-либо виртуальный механизм и даже не знает, как он работает, не нова. В архитектуры команд, например, часто включается команда MUL (умножение), даже если аппаратно умножение не под­держивается. Иллюзия того, что машина может перемножать числа, создается микропрограммой. Точно так же операционная система может создавать иллю­зию, что все виртуальные адреса поддерживаются реальной памятью, даже если это неправда. Только разработчикам и исследователям операционных систем нужно знать, как строится такая иллюзия.