Страничное распределение. Посредством аппаратных и программных решений, например, таблицы страниц, возможно отображать физические страницы

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

При замене процесса таблицу надо менять.

Таблица страниц – отображение номеров виртуальных страниц на номера физических.

Проблемы:

1. Размер таблицы страниц (количество 4кб страниц при 32-х разрядной адресации – 1000000. Таблица должна иметь миллион строк, а таблицу надо перегружать каждый раз при смене контекстов Любой процесс имеет собственную таблицу страниц).

2. Скорость отображения. Эта проблема, фактически следует из проблемы 1.

Возможные аппаратные средства:

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

проходить очень быстро (Проблемы:стоимость, полная перегрузка при смене контекстов, +: скорость преобразования).

2.Регистр начала таблицы страниц в памяти. Будет многократное увеличение количества обращений к памяти. (простота, управление смены контекстов, медленное преобразование). Альтернативное решение - организация таблицы страниц на ОП. В этом случае нам нужен аппаратный регистр начала таблицы, и переключение с контекста на контекст будет осуществляться очень хорошо и быстро, просто я буду менять содержимое регистра начала таблицы. При этом мы получим многократное увеличение количества обращений в память. И как минимум мы потеряем 100% эффективность. Понятно что, часть проблем будут минимизированы за счет работы КЭШ, но все равно это будет неэффективно. Но зато это просто и дешево.

3.Гибридные решения. Т.е. Те, которые имеют и программную и аппаратную составляющую.

Решение проблем, связанных с размерами таблицы страниц – иерархическая организация таблицы страниц.

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

Поля:

α – присутствие/отсутствие. Если этот признак установлен, то это означает, что в поле «номер физической станицы» находится та самая физическая страница, к которой мы обращаемся. Если отсутствует, то возможны 2 варианта: либо эта страничка запрещена для данного процесса, либо она разрешена, но сама страница в это время откачена во внешнюю память. Но в любом случае, если есть элемент отсутствия, то при обращении к этой строчке происходит прерывание.

β – поле защиты (чтение, чтение/запись, выполнение). Когда процессор доходит до таблицы страниц, он уже знает, с какой целью он получает этот адрес. Либо этот адрес есть операнд, куда мы хотим записать, либо этот адрес есть операнд, из которого мы хотим считать информацию, либо этот адрес есть операнд команды, которую я хочу выбрать и выполнить (goto адрес). Соответственно это поле обеспечивает защиту. Т.е. в зависимости от того, с какой целью процессор обращается к этой строчке, и содержимого этой строчки (а содержимое могут быть коды, которые разрешают чтение, или чтение/запись, или выполнение, или запрещают их – так же как в ФС), то при нарушении происходит прерывание.

γ – признак изменения (модификации). Если мы в эту страничку писали, то этот признак будет установлен. Этот признак устанавливается обычно аппаратно – автоматически. Снимается он либо аппаратно, либо программно ОС.

δ – обращение (чтение, запись, выполнение). Когда мы обратились либо за чтением, либо за записью и т.д.

ε – признак блокировки кэширования. Я заказал обмен: прочесть информацию с внешнего устройства на какую-то страницу, в конечном итоге физическую станицу. А на самом деле Ν страниц у меня находится в КЭШе. Как разрешить эту коллизию? Внешнее устройство кинет информацию в физическую память, а на самом деле я работаю с КЭШем, а потом из КЭШа я это переобновлю и все потеряется. Для того, чтобы можно было синхронизовать эту вещь, используется блокировка кэширования. Здесь, кроме управления оперативной памятью в контексте того, о чем говорим, мы еще добавляем некоторую информацию и в темы, связанные с управлением вводом/выводом и в темы, связанные с кэшированием.


Для разрешения всех коллизий, связанных со скоростью, размерами и прочим, используются гибридные решения. И, в частности, одно из решений основывается на TLB буферах.

TLB (Translation Lookaside Buffer) – Буфер быстрого преобразования адресов. В процессоре есть буфер (не большой), который используется в качестве КЭШ таблицы страниц.

Структура буфера: Каждая запись содержит 2 поля - №виртуальной страницы и № физической страницы. TLB буфер – буфер оперативной памяти. Поиск идет параллельно: за одну операцию просматривается наличие всей таблицы.

Мы мимеем виртуальный адрес, в котором традиционно есть поле: «виртуальная страница» и есть поле «смещение». Процессор выбирает поле «виртуальная страница» и обращается к TLB буферу. Если мы фиксируем факт попадания, то в этом случае автоматически происходит замена поля виртуальной страницы на содержимое поля физической страницы – так мы получили физический адрес со всеми вытекающими параметрами, которые могут находиться в TLB. Если мы фиксируем промах, то в этом случае происходит прерывание, управление передается ОС. И ОС уже программно находит необходимую строчку и обновляет TLB буфер и соответственно дообрабатывает команду преобразования виртуального в физический.


Иерархическая организация таблицы страниц

Проблема – размер таблицы страниц.

Объем виртуальной памяти современногокомпьютера - 232,…264

Vвирт.= 232
Пример:

Vстр. = 212 (4Kb)

Количество виртуальных страниц – 220 (много)

Решение – использование многоуровневых таблиц страниц (2х, 3х, 4х)

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

                     
   
Двухуровневая организация
 
 
VP
 
Offset
 
     
 
     
 
 

                                   
 
VP1
 
VP2
 
Offset
 
       
 
     
 
 
 
 


Система разделяет VP на 2 подполя: VP1 - индекс по внешней таблице страниц, а VP2 – смещение по странице, на которую указывает VP1. >4 уровней иерархии считается не целесообразно.


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



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