12/04/94 09:20am
i4_pam.lek
В.Б.Бродин, И.И.Шагурин
"Микропоцессор i486. Архитектура,
программирование, интерфейс" М
"Диалог-МИФИ" 1993
--"i486tm микропроцессор" в 2-х
книгах Библиотека программиста
"И.В.К.-СОФТ" М 1993
Внутренняя память процессора i486.
Помимо традиционной регистровой памяти в процессоре i486 имеется дополнительная память, значительного объема, предназначенная для повышения быстродействия вычислительной системы. Эту память образуют два самостоятельных блока:
Ассоциативный буфер трансляции;
Внутренний КЭШ.
В обоих
случаях это быстодействующая
буферная память, которая
располагается между
быстродействующим процессором и
относительно медленной внешней
памятью. В процессе работы
выбираемая информация дублируется
в буферной памяти. Если в
дальнейшем требуется повторное
чтение к той же ячейке, то обращение
к памяти заменяется на обращение к
буферу.
Если осуществляется запись, она
производится в буфер и память
одновременно (СКВОЗНАЯ запись)
или запись осуществляется только в
буфер, а по месту назначения при
необходимости освободить
соответствующий элемент буферной
памяти (ОБРАТНАЯ запись).
Выбор информации из буфера
называется ПОПАДАНИЕМ, а
ее отсутствие там - ПРОМАХОМ.
Повышение быстродействия достигается если количество "попаданий" превышает количество "промахов". Это бывает возможно если осушествляются обращения к ячейкам, расположенным вблизи от ранее использованных.
Ассоциативный буфер трансляции (TLB).
Translation Lookside Buffer предназначен для хранения элементов страничных таблиц, использованных последними. Системные программисты должны очищать TLB при изменении элементов текущих страничных таблиц, в притивном случае процессор при формировании адреса будет пользоваться старыми данными.
TLB представляет собой четырех-канальную ассоциативную память и состоит из:
Блока данных;
Блока достоверности, аттрибутов и тега;
Блока замещения наименее используемой информации LRU (Least Recently Used).
Блок данных состоит из восьми наборов по четыре элемента данных в каждом. Каждый элемент блока данных включает в себя 20 бит физического адреса и два бита атрибутов страниц (последние соответствуют выходным сигналам процессора, бля управления внешним буфером):
PCD - запрет кэширования страниц (запрещает помещение соответствующей страницы во внешнюю КЭШ-память. Обычно не кэшируются страницы, содержащие порты ввода/вывода или программы иницмализации);
PWT - сквозная запись во внешнюю КЭШ-память (если 1, то при записи во внешний КЭШ информация одновременно помещается во внешнюю память; если 0, то запись выполняется только при обновлении строки КЭШ-памяти).
Информация для заполнения этих битов берется из регистра CR3:
CR3(4) - бит PCD, CR3(3) - бит PWT.
Каждому элементу блока данных соответствует элемент блока достоверности, аттрибута и 17-ти разрядного тега:
V - достоверность (указывает, что элемент имеет правильное значение - был загружен);
U/S - пользователь/супервизор (1 пользователь); ¬ соответствуют битам
R/W - запись/чтение (1 запись разрешена); ¦ дескрипторов таблиц
D - мусор (1 выполнялась запись) . - страниц и каталога
Каждому набору соответствуют три бита блока замещения, призванные отслеживать используемость набора.
При трансляции адреса процессор использует биты 12,13,14 линейного адреса бля выбора одного из восьми наборов, а затем проверяет четыре тега выбранного набора на соответствие старшим 17 битам линейного адреса. Если соответствие найдено и бит достоверности установлен, то вместо старших 20 битов адреса подставляется соответствующее значение из блока данных.
Системный программист может осуществить тестирование блока ассоциативной трансляции адресов. Для целей тестирования служат два тестовых регистра:
Регистр TR6 является командным регистром тестирования TLB, а регистр TR7 регистром данных. Доступ к ним выполняется посредством разновидностей коианд MOV. Обращение возможно в реальном режиме и в защищенном с привилегиями 0.
Назначение полей регистров:
C
- бит команды (=0 запись элемента
в TLB, =1 поиск элемента);
Линейный адрес - при записи
элемент распределяется по
данному линейному адресу, а
остальная часть элемента
буфера берется из регистра TR7.
При поиске поле является
ключевым, и если найдена ОДНА
запись, то поля TR7 и TR6
устанавливаются из
соответствующего элемента TLB;
V
- бит обозначает элемент,
содержащий достоверные (Vaild)
данные.
Все биты V очищаются при записи
в регистр CR3 и устанавливаются
при заполнении
соответствующей ячейки;
D,D# - мусор
U,U# - пользователь
W,W# - запись - биты указываются в действительной форме и в форме дополнения - позволяют устанавливать или очищать биты при записи и проверять их состояние при поиске:
X |
поиск |
запись |
0 0 |
несовпадение (элемент не будет найден) |
значение не определено |
0 1 |
совпадение если бит очищен |
очистка бита |
1 0 |
совпадение если бит установлен |
установка бита |
1 1 |
совпадение (элемент будет найден) |
значение не определено |
Физический адрес - значение поля данных TLB. При записи элемент устанавливается в это значение, при чтении возвращается текущее значение.
PCD, PWT, LRU ¦ значения соответствуют значениям полей блоков TLB
PL - при записи =1 заставляет использовать поле REP регистра TR7 для указания канала выбранного набора TLB; при =0 номер канала пределяется внутренними схемами. При поиске значение возвращается как результат чтения (=1 информация найдена);
REP - при записи с установленным битом PL указывает номер канала. При удачном чтении сообщает номер канала.
ПРИМЕЧАНИЯ:
1 Операция записи начинается сразу
после загрузки регистра TR6, поэтому
значение регистра TR7 должно быть
записано первым.
2 При тестировании не рекомендуется
указывать V=0; поиск незаполненного
элемента имеет непредсказуемый
результат.
Внутренняя КЭШ-память.
Кэш представляет собой четырехканальную ассоциативную по наборам данных память. Это означает, что блок данных из заданной позиции главной памяти может быть записан в любую из четырех позиций кэша. Предназначен для хранения данных и команд.
Структура кэша:
Кэш состоит из четырех частей (в целом структура схожа со структурой TLB):
Блок данных - имеет размер 8 Кбайт. Поделен на четыре массива (канала) по 128 строк в каждом. Строка содержит 16 байт последовательно расположенных данных, начиная с адреса, кратного 16. Строки с одинаковым номером, принадлежащие разным каналам называются НАБОРОМ.
Блок тега - содержит 21-разрядный тег для каждой строки. Тег образуют старшие разряды физического адреса.
Блок достоверности - для каждого из 128 наборов содержит поле замещения LRU (3 бита) и поле достоверности (4 бита - по одному на каждый канал).
Буфер заполнения кэш-памяти.
При обращении к памяти биты 10..4 физического адреса (7 штук) выбирают один из 128 наборов. Затем биты 31..11 (21 штука) сравниваются с четырьмя тегами каналов, выбранного набора с учетом битов достоверности. При совпадении читается 16-ти байтовая строка данных из которой при помощи битов 3..0 адреса (4 штуки) выбирается нужный байт.
Системный
программист может осуществить
тестирование кэш-памяти.
Для решения задачи тестирования
служат три регистра:
Обращение к регистрам возможно с помощью команды MOV (команда привилегированная). Назначение полей:
Достоверность - При поиске возвращается значение соответствующее выбранному набору;
LRU - При поиске соответствующие биты выбранного набора;
V - Бит достоверности для конкретного элемента к которому происходил доступ. При поиске а кэше это копия одного из бит достоверности. При записи он является новым битом для выбранного элемента набора;
Тег адреса - При записи в кэш это адрес, который становится тегом;
CTL - Управление:
0 0 Запись в буфер заполнения кэша или чтение из буфера чтения (строка имеет длину 16 байт, при тестировании нужное количество набирается 4-х кратной загрузкой/выгрузкой 32-х разрядных слов через регистр TR3. Перед операцией каждый раз должен инициализироваться регистр TR5.);
0 1 Запись в кэш;
1 0 Чтение кэша;
1 1 Очистка кэш-памяти;
ENT - Выбор элемента. При выполнении записи или чтения кэша указывают номер 4-х байтного слова в строке, находящейся в буфере заполнения (или чтения);
Выбор набора - Выбирает один из 128 наборов.
Управление кэшированием осуществляется с помощью регистра CR0:
бит CD (30) - Запрещает заполнение строк кэша при промахах;
бит NW (29) - Запрешает сквозную запись;
И команд организации кэша:
INVD - Производит очистку внутреннего кэша и выдает сигнал очиски внешнего;
WBINVD - Очистка внутреннего кэша, сигнал внешнему о необходимости выполнения обратной записи с последующей очисткой.
ПРИМЕЧАНИЯ:
1. При тестировании кэширование
должно быть запрещено, а сам кэш
предварительно очищен.
2. Теоретически возможна запись
некотрой программы и данных в кэш с
последуюшим его закрытием
(установкой CD=NW=1); в этом случае
"запертые" программа и данные
будут доступны и кэш будет
использоваться как СОЗУ.