Виртуальная память. Страничная организация памяти. Основные проблемы

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

Основная идея виртуальной памяти заключается в том, что в случае, когда объединенный размер кода, данных, стека и других частой программы превышает объем основной памяти, то в каждый момент в памяти присутствуют только используемые части программы, а остальные части хранятся на диске. Такие части называются оверлеями (overlay). Способ разделения программы на части выбирает программист, а работу по загрузке и сохранению оверлеев выполняет ОС.

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

Большинство систем виртуальная памяти используют страничную организацию памяти (paging). Все программно формируемые адреса называются виртуальными адресами и формируют виртуальное адресное пространство. Если ОС не использует виртуальное адресное пространство, то виртуальный адрес подается непосредственно на адресную шину. В противном случае виртуальный адрес передается диспетчеру памяти, который преобразует виртуальный адрес в физический и уже его подает на шину. Допустим, рассматриваемая система может формировать 16-разрядные адреса от 0 до 64к - это виртуальное адресное пространство. Так же система имеет основную память объемом 32к. Виртуальное адресное пространство разделено на блоки памяти, называемые страницами (page). Физическая память разделена на блоки точно такого же размера и эти блоки называются страничными кадрами (page frame).

В фактическом аппаратном обеспечении страницы, присутствующие в оперативной памяти, отслеживаются с помощью бита присутствия/отсутствия. В случае инструкции mov ax, 16k произойдет обращение к неотображаемой странице. В этом случае диспетчер памяти инициирует прерывание ЦП, передающее управление ОС. Такое прерывание называется страничным прерыванием (page fault). ОС блокирует вызвавший прерывание процесс, выбирает малоиспользуемый страничный блок и записывает его на диск. Далее соответствующая страница записывается в освободившийся страничный кадр, и устанавливается бит присутствия, после чего управление передается либо прерванному процессу либо планировщику. 16-разрядный адрес состоит из 4-битного номера страницы и 12-битного смещения (4к). Номер страницы используется в качестве индекса в таблице страниц, которая выдает номер страничного кадра, соответствующего виртуальной странице.

29. Таблицы страниц. Многоуровневые таблицы страниц. Таблицы страниц

Номер страницы используется в качестве индекса в таблице страниц, выдающей номер страничного блока. Если бит присутствия равен нулю, происходит страничная ошибка и управление передается ОС. Если бит равен единице, то номер страничного блока, найденный в таблице страниц, записывается в 3 старших бита выходного регистра, а 12 битов смещения копируются без изменений. В сумме они составляют 15-разрядный физический адрес, который подается на адресную шину.

В нашей системе 32к виртуального адресного пространства и 16к основной памяти.

При использовании таблиц страниц могут возникнуть две проблемы:

- таблица может быть слишком большой. При размере страницы 4к, для 32-разрядного адресного пространства, каждая таблица страниц будет содержать 2^20 записей, при том, что каждый процесс нуждается в своей собственной таблице страниц;

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

Потребность в большом, но быстром страничном преобразовании накладывает существенные ограничения на способы построения компьютеров. Простейшим конструкторским решением является поддержка таблицы страниц, состоящей из массива быстрых аппаратных регистров. Когда процесс запускается, ОС загружает регистры из оперативной памяти и больше не нуждается в обращении к ней. Преимуществом является простота реализации и скорость преобразования. Недостатками являются дороговизна и необходимость загрузки всей таблицы при каждом переключении контекста.

Другой вариант решения заключается в том, что таблица целиком располагается в основной памяти и существует один единственный аппаратный регистр, который указывает на начало таблицы. При переключении контекста потребуется перезагрузка только одного регистра, однако, при выполнении каждой команды, потребуется несколько обращений к памяти для чтения/записи таблицы страниц.

Многоуровневые таблицы страниц

Чтобы не хранить в памяти огромные таблицы страниц, многие системы используют многоуровневые таблицы. Виртуальный адрес разделяется на несколько полей, необязательно одинакового размера.

Когда виртуальный адрес поступает в диспетчер памяти, из него выделяется поле PT1. Которое используется в качестве индекса в каталоге таблиц. Соответствующая запись выдает адрес таблицы страниц второго уровня. В качестве индекса для этой таблицы используется поле PT2. По этому индексу находится номер страничного кадра, соответствующего виртуальной таблице. Этот номер складывается со смещением, в результате чего получается физический адрес. Преимуществом использования многоуровневых таблиц страниц является тот факт, что в каждый момент времени в памяти могут находится не все таблицы второго уровня, а только необходимые в данный момент времени.

30. Структура элемента таблицы страниц.

Наиболее распространенный размер - 32 бита. В зависимости от системы, точная структура может изменяться, но основная информация в основном совпадает.

Бит присутствия: 1 - страницы присутствует в памяти. 0 - страница отсутсвует в памяти, при обращении возникает страничная ошибка.

Биты защиты: в простейшей схеме 1 бит. 0 - только чтение. 1 - чтение/запись. В сложных схемах используются 3 бита, по одному для каждой операции (чтение, запись, выполнение).

Бит изменения: устанавливается в 1 при изменении страницы. Учитывается при решении ОС освободить страничный кадр. Если бит установлен в 1 - страница должна быть перезаписана на диск.

Бит обращения - устанавливается при каждом обращении к данной странице. Сбрасывается через определенные промежутки времени. Используется при выборе страниц на удаление из памяти.

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

В записи не содержится адреса места на диске для страницы, выгруженной из памяти. Эта информация хранится в служебных таблицах ОС.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: