8086.ru2. Организация памяти ЭВМ2.3 КЭШ - память → 2.3.4 Распределение секторов

2.3.4 Распределение секторов

Является развитием метода полностью ассоциативного распределения, основным недостатком которого было использование дорогостоящего АЗУ, информационная емкость и стоимость которого возрастает с увеличением емкости СОЗУ данных.

По методу распределения секторов вся ОП разбивается на секторы, каждый из которых состоит из фиксированного числа строк. То же делается с СОЗУ данных. Пусть сектор состоит из 16 строк, тогда старшие 9 бит адреса указывают на номер сектора, следующие 4 бита - адрес строки в секторе, а младшие 3 бита - адрес слова в строке.

Таким образом, при этом методе сектора в кэш-памяти распределены ассоциативно. Каждой строке, хранимой в СОЗУ данных, соответствует свой бит достоверности строки, который показывает, совпадает или нет содержимое данной строки с содержимым строки в ОП (рисунок 2.11).

Рисунок 2.11 - Связь кеш-памяти секторов с основной памятью

Данный метод позволяет существенно снизить емкость памяти тегов на основе АЗУ при той же емкости СОЗУ данных по сравнению с полностью ассоциативным распределением либо увеличить емкость СОЗУ данных при неизменной емкости памяти тегов (для рассматриваемого примера емкость АЗУ уменьшена в 8 раз, а емкость СОЗУ данных увеличена в два раза).

Остальные достоинства и недостатки метода аналогичны полностью ассоциативному распределению.

Алгоритм работы кэш-памяти заключается в следующем:

  1. Выполняется проверка бит достоверности секторов d в памяти тегов, и если все di=1, то параллельно производится ассоциативный поиск сектора в памяти тегов по 9-и старшим разрядам RgФА[a].
  2. Если адрес (сектор) не принадлежит АЗУ (памяти тегов), то определяется кандидат на удаление сектора из кэш-памяти по одной из принятых стратегий и осуществляется замена данного сектора на новый, т.е. удаляется сектор из кэш-памяти в ОП, причем удаляются только те строки, у которых бит достоверности равен "1", и бит достоверности удаленной строки сбрасывается.
  3. Далее выполняется процедура замещения, но не всего сектора, а только строки, содержащей запрашиваемое слово, т.е. выполняется пересылка строки из ОП в СОЗУ данных, в память тегов записывается новый тег сектора, а бит достоверности строки устанавливается в "1".
  4. Если Sek∈Teg, т.е. хотя бы одна строка сектора уже находится в СОЗУ данных, и если бит достоверности запрашиваемой строки равен "0", то эта строка пересылается из ОП в СОЗУ данных и ее бит достоверности устанавливается. Если же бит достоверности этой строки равен "1", то данное слово считывается (записывается) из/в СОЗУ данных.

В отличие от остальных алгоритмов замещения рассмотренный метод, кроме выигрыша в емкости АЗУ, дает выигрыш на времени обновления кэш-памяти строками, а не секторами и при дальнейшем замещении строк в секторе СОЗУ данных память тегов секторов не обновляется.

На рисунке 2.12 приведена структурная схема кэш-памяти с секторным распределением. При выполнении обращения к памяти по чтению или записи сначала выполняется ассоциативный поиск на совпадение тега сектора, хранимого в АЗУ, с тегом поля [a] RgФА. Если Sek∈Teg, то по адресу [f], сформированному или выбранному из памяти тегов выполняется обращение к памяти бит достоверности строк. В регистре RgP фиксируется 16-разрядный код, описывающий состояние строк сектора, а на выходе MS появляется признак бита достоверности запрашиваемой строки. Параллельно при чтении из СОЗУ данных считывается запрашиваемое слово по адресу [f.b.c], и если признак достоверности строки равен "1", то считанное слово защелкивается в RgDIO.

Рисунок 2.12 - Структурная схема  кэш-памяти с секторным распределением без расслоения обращений

Если бит достоверности строки с выхода MS равен "0", то выполняется процедура замещения кэш-памяти: из ОП считывается запрашиваемая строка, загружается в СОЗУ данных по адресу [f.b] и в памяти бит достоверности строк устанавливается бит по этому же адресу.

При записи в общем случае требуется три обращения: к памяти тегов (Sek∈Teg), памяти бит достоверности строк для определения значения сигнала А∈кэш и записи в СОЗУ данных.

Если Sek∉Teg, то по одной из стратегий замещения назначается сектор для удаления из СОЗУ данных, по адресу [w] считывается содержимое бит достоверности строк сектора в RgP и по адресу [w.&] (где w - 3-разрядный адрес памяти тегов (секторов), назначенный в качестве кандидата на удаление из кэш-памяти, & - четырехразрядный номер строки в секторе, у которой бит достоверности равен "1") из СОЗУ данных считывается строка и переписывается в ОП по адресу [RgТeg . &] (где RgTeg - номер тега сектора, хранимого в АЗУ и назначенного в качестве кандидата на удаление). По окончании обновления очередной строки в RgP с выходов DC сбрасывается очередной бит достоверности строк и процедура обновления ОП продолжается до тех пор, пока содержимое RgP не будет равно нулю. Затем в память бит достоверности всех строк записывается 16-разрядный код нулей (сброс бит достоверности сектора), а в память тегов параллельно загружается новый тег сектора [a] из RgФА. Теперь содержимое памяти бит достоверности строки для запрашиваемого сектора и регистра RgP равны нулю, и выполняется алгоритм замещения строки по ранее описанной методике.

Таким образом, память бит достоверности строк при чтении из нее должна работать в режиме расслоения обращений на 16 бит, а при записи как в режиме расслоения обращений для сброса всех бит достоверности, если Sek∉Teg, и в режиме записи по одному биту, если Sek∈Teg.