Назад...   К оглавлению раздела   Далее...

 

2. Сегментная трансляция.

Сегментная трансляция обеспечивает обращение к сегментам памяти емкостью 256 Мбайт, которые разбиваются на страницы объемом по 4 Кбайт, размещенные в ОЗУ или внешних устройствах (свопинг).

Для обращения к сегментам используются 16 сегментных регистров SR0-SR15. Они содержат дескрипторы сегментов (см. рисунок E.15.) Если в регистре MSR установлены биты IT=1 или DT=1, а также не реализуется блочная трансляция (старшие немаскируемые биты логического адреса не совпадают с битами BLPI в дескрипторах блоков, то производится сегментная трансляция. В этом случае разряды LA0-3 задают номер регистраSRi, из которого выбирается дескриптор соответствующего сегмента. В зависимости от значения бита T в сегменте реализуется:

  • при Т=0 -- страничная адресация памяти;
  • при Е=1 -- адресация внешних устройств.

При страничной адресации биты дескриптора сегмента (см. рисунок E.15.) имеют следующее назначение:

  • T=0 -- определяет вид трансляции (страничная);
  • N -- запрещает при N=1 выборку команд из данного сегмента;
  • VSID -- содержит 24-х разрядный виртуальный адрес сегмента.

Процесс страничной адресации иллюстрирован на рисунке E.17.

Страничная трансляция адреса

Рис. E.17. Трансляция адреса при страничной организации памяти.

Устройство управления памятью IMMU или DMMU при страничной организации памяти формируют 52-х разрядный виртуальный адрес VA0-51. Этот адрес состоит из:

  • виртуального адреса сегмента (VSID);
  • индекса страницы (разряды LA4-19 логического адреса);
  • относительного адреса байта на странице (разряды LA20-31 логического адреса).

Старшие разряды этого адреса VA0-39 представляют собой виртуальный номер страницы VPN. Этот виртуальный номер поступает в блок страничной трансляции (БСТ), определяющий физический номер страницы RPN. Блок RPN определяет разряды PA0-19 физического адреса. Младшие разряды физического адреса совпадают с адресом блока на странице PA20-31 = LA20-31. Для определения RPN используются дескрипторы страниц PD, которые хранятся в специальной таблице TPD, хранящейся в ОЗУ. Базовый адрес этой таблицы задается содержимым регистра SDR1 (см. рисунок E.14., e) ):

  • поле HTABORG -- содержит старшие разряды адреса;
  • в поле HTABMASK -- дается маска адреса.

Дескрипторы в таблице TPD объединены в группы по восемь 64-х битовых дескрипторов PD. Каждый дескриптор содержит:

  • 30-ти битовый виртуальный адрес страницы, который сравнивается со значением битов (VSID:API) виртуального номера VPN; * 20-ти битовый физический номер страницы RPN;
  • биты W, I, M, G, имеющие то же назначение, как и аналогичные биты в дескрипторах блоков;
  • биты PP, реализующие защиту страницы (см. таблицу E.3.III.) совместно с битом N в дескрипторе сегмента;
  • биты R и C, характеризующие предыдущие обращения к этой странице ("историю" страницы).

Бит R=1 устанавливается, если к данной странице производилось обращение, бит C=1 устанавливается, если выполнялась запись на эту страницу. Эти биты используются системой для организации виртуальной памяти, При этом требуется оперативный обмен содержимым страниц между ОЗУ и внешней памяти большого объема (например, дисковых накопителей).

Дескрипторы страниц, к которым было обращение, хранятся в специальной кэш-памяти TLB, входящей в состав IMMU и DMMU. Каждый TLB содержит 128 дескрипторов PD, которые размещены в наборы по 64 элемента, в каждом из которых находятся две строки. Кэш TLB работает аналогично кэшу IC, DC. В каждой строке содержится по одному дескриптору. При занесении дескриптора в кэш TLB устанавливается бит достоверности V=1. Для пустых (незаполненных) строк же значение бита достоверности равно нулю V=0). Аннулирование элемента строки производится с помощью команды tlbie.

В качестве тэга строки используются старшие разряды виртуального адреса VPN, содержащейся в дескрипторе. При совпадении тэга одной из строк выбранного в TLB набора и соответствующих разрядов виртуального адреса VPN (кэш-попадание) из размещенного в строке дескриптора извлекается значение RPN, используемое в качестве разрядов PA0-19. Таким образом, при кэш-попадании в TLB не требуется обращение к ОЗУ.

В случае кэш-промаха (несовпадения VPN ни с одним дескриптором таблицы TLB) блок страничной трансляции производит обращение к TPD. При этом из ОЗУ выбирается целая группа PD, а затем этот блок сравнивает значение полей (VSID:API) в каждом из восьми выбранных дескрипторов с соответствующими разрядами VPN. В случае совпадения значение RPN, хранящемся в данном дескрипторе, оно служит разрядами формируемого физического адреса, а сам дескриптор заносится в TLB. Он при этом:

  • либо занимает в соответствующем наборе TLB пустую строку, устанавливая для нее бит достоверности V=1,
  • либо, при отсутствии такой строки, заменяет в этом наборе дескриптор, который дольше не используется.

Если в выбранной группе PD нужных дескрипторов не находится, то из TPD выбирается еще одна группа дескрипторов. Если и в ней не окажется требуемого дескриптора, то реализуется исключение с вектором Av=$00300 при выборе данных или Av=$00400 при выборке команды. При этом подпрограмма обслуживания этих прерываний должна обеспечить загрузку в ОЗУ необходимой страницы из внешней памяти, поместив в TPD соответствующий дескриптор.

При выполнении страничной трансляции учитываются значения битов N, W, I, M, G дескрипторов. При нарушении правил обращения к сегментам и страницам используются исключения "ошибка выбора данных" (Av=$00300) или "ошибка выбора команды" (Av=$00400).

 

Назад...   К оглавлению раздела   Далее...

 

Гостевая книга Обсуждение в блоге. Отправить E-mail Автору проекта.

=== *** === *** === *** ===

В настоящее время проект закрыт (в версии 1.3.0 beta). Автор приносит извинения за прекрашение разработки.

Hosted by uCoz