D.5.1.1. Организация четырехканальной кэш-памяти.

Блок данных в 8 Кбайт разделен по четырем направлениям, каждая из которых имеет 128 16-байтовых строк кэш-памяти. Строка кэша содержит данные из 16 соседних байтных адресов в оперативной памяти, начиная с адреса, кратного шестнадцати. Адресация кэш-памяти происходит путем разделения старших 28 бит (из 32-х) на две равные части (см рисунок D.5.2.):

Адресация кэш-памяти

Рис. D.5.2. Адресация кэш-памяти

Таким образом кэш-память содержит 3 блока, поделенные на 128 строк. Это:

Находящиеся в блоке достоверности/LRU 4-х битное поле достоверности показывает, являются ли в данный момент данные в кэше по имеющемуся физическому адресу достоверными.

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

Допускается кэширование произвольной области памяти, но любую страницу памяти можно объявить некэшируемой, устанавливая бит в ее элементе таблицы страниц. Когда производится обращение к оперативной памяти, внешняя схема проверяет, можно ли считать этот адрес в кэш-память, и, если это можно, считывает блок памяти (выровненную 16-ти байтную строку) в кэш-память.

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

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

Замещение в кэш-памяти строки происходит по алгоритму псевдо-LRU (наиболее давно используемый). Здесь для каждой строки в блоке достоверности/LRU отведено три бита (см. рисунок D.5.2., b). Блоки LRU обновляются при каждом попадании в кэш-память или заполнении строки. При очистке кэш-памяти или сбросе процессора все биты достоверности/LRU сбрасываются в 0. Когда происходит заполнение строки кэш-памяти, место для заполнения выбирается просто нахождением недостоверной строки (с битом достоверности 0). Если таких строк нет, то заменяемую ("перезаписываемую") строку выбирают биты LRU.

 

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

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

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