Архив рубрики «Виртуальная память»

Виртуальная память

Выше было показано, что если мы имеем 16-разрядное слово, то объем прямо адресуемой памяти составляет 216 байт, или 64Кб. Однако со временем такой объем стал недостаточным для сложных программ. Реальный объем стал увеличиваться, и возникла задача организовать доступ к памяти, лежащей за пределом адресного пространства, доступного заданному размеру машинного слова. Для решения этой задачи используется ряд подходов.

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

Афиз.= Апрог.+Nстр.×Z,

где Z — размер страницы в байтах.

Для организации расширенной памяти используется дополнительная физическая память, дополнительные разряды в адресной шине и некоторая программная система, управляющая аппаратным переключателем. Общий объем памяти при 16-разрядном переключателе может достигать очень большого размера: 6464К Кб. Этот подход легко реализуется и на аппаратном и на программном уровнях, но он не позволяет отдельной программе выделить объем больше 64Кб без дополнительного аппаратно-программного механизма.

Под виртуальной памятью будем понимать память, построенную аппаратно-программными средствами.

Виртуальная память

В современных машинах вместо переключателя страниц, обеспечивающего переключение памяти фиксированными по объему разделами, используются специальные базовые или сегментные регистры. Содержимое регистра определяет начало сегмента или раздела, выделенного программе. Адрес сегмента фактически задает смещение адреса физического относительно заданного в программе. Размер сегмента выделяется задаче программно, обычно операционной системой. Физический адрес определяется:

Афиз.= Апрог.+ Асегм×К,

где К — некоторый коэффициент, лежащий для различных семейств машин в пределах 4-64. Этот коэффициент определяет минимальное взаимное смещение сегментов. На рис. 3.13 в двух младших восьмеричных разрядах записаны 0, что
эквивалентно умножению адреса сегмента на 100(8) или 64(10).

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

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

Этот процесс называется Свопинг (swapping) — временное хранение активной задачи на жестком диске.

Виртуальная организация памяти позволяет существенно увеличить объем доступной программам памяти (реально — до десятков Гбайт).

Важно понимать, что идея виртуальной памяти — в том смысле, который используется сейчас — позволяет расширить адресное пространство или просто заменить оперативную память более медленной и дешевой дисковой, причем это будет происходить «прозрачно» от прикладной программы.

Часто при обсуждении вопросов, связанных с памятью ЭВМ, упоминается выражение «иерархия памяти». О чем при этом идет речь?

Требования, предъявляемые к памяти ЦВМ, весьма разнообразны и противоречивы — мы хотим иметь память:

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

Реально в настоящее время невозможно создать память, одновременно отвечающую всем этим требованиям. Поэтому память строится в виде некоторой иерархической системы, причем главным критерием служит простота и время обращения к ней. На самом верху иерархической лестницы расположена сверхоперативная память — регистры процессора. Обращение к ним самое быстрое, т.к. они входят в состав процессора (рис. 3.17). Но количество их невелико — от одного аккумулятора (в простейших процессорах) до 128 (например, в процессоре Terminator-6).

akumuljator

Следующий уровень — внутренний КЭШ. Это память без произвольного доступа, работа с ней происходит на аппаратной уровне. В ней хранятся наиболее часто используемые данные и команды. Время доступа к ней примерно в           5-10 раз меньше, чем к ОЗУ.

Конструктивно в корпусе процессора сложно разместить КЭШ большой емкости, поэтому используется внешний КЭШ. В современных процессорах Кэш-память делится на КЭШ данных и КЭШ команд, связана с процессором двумя отдельными шинами, что позволяет считывать одновременно команду и два операнда.