Наверх Системное программирование
Предыдущий раздел Оглавление Следующий раздел

4.4.3. Ускорение работы страничной организации памяти

Каждая система, имеющая страничную организацию памяти, предлагает решить два основных вопроса:

1. Отображение виртуального адреса на физический должно быть быстрым.

2. Если пространство виртуальных адресов слишком обширное, таблица страниц будет иметь весьма солидный размер.

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

Второй вопрос, который должен решаться в системе, исходит из того, что во всех современных компьютерах используются 32-разрядные виртуальные адреса. Однако количество компьютеров и ноутбуков, использующих 64-разрядные адреса, становится все больше год от года. Например, если размер страницы составляет 4 Кбайт, то 32-разрядное адресное пространство будет иметь около миллиона страниц, а 64-разрядное адресное пространство будет иметь количество страниц, определяемое 16-значным числом. Уже при наличии одного миллиона страниц виртуального пространства таблица должна содержать соответственно миллион записей. Кроме того, каждый процесс должен иметь собственную таблицу страниц, так как для каждого процесса выделяется свое виртуальное адресное пространство.

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

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

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

Найденное разработчиками компьютерных систем решение этой проблемы состоит в дополнении к компьютерному оборудованию небольшого устройства, которое будет без просмотра таблицы страниц отображать виртуальные адреса на физические. Устройство получило название буфера быстрого преобразования адреса (Translation Lookaside Buffer (TLB)), кроме того, его также иногда называют ассоциативной памятью. Пример его возможного состояния представлен в табл. 4.1. Обычно диспетчер памяти содержит в себе данное устройство. Оно представлено в виде небольшого количества записей, каждая из которых содержит данные одной страницы. Такими данными могут быть номер виртуальной страницы, бит модификации страницы, бит или код защиты доступа к странице и страничный блок в физической памяти, в котором находится страница. Как видно, данные поля точно соответствуют полям таблицы страниц, исключая только поле номера виртуальной страницы. Также есть еще бит, отвечающий за информацию о том, используется страница или нет, то есть о задействованности страницы.

4.1. Буфер быстрого преобразования адреса, используемый для ускорения страничного доступа к памяти
Задействована Виртуальная страница Изменена Защищена Страничный блок
1 150 1 RW 51
1 30 0 RX 50
1 140 1 RX 29
1 139 0 RW 73
1 29 0 RX 80
1 31 1 RW 55
1 850 1 RW 12
1 851 1 RX 95

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

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

Предыдущий раздел Оглавление Следующий раздел