Лекции по Вычислительным машинам, системам и сетям   

3. Тридцатидвухразрядные процессоры фирмы Intel

3.19. Буфер TLB (кэш-память страниц)

Страничный механизм очень громоздкий и требует больших временных затрат. Поэтому в МП стоит внутренняя кэш-память страниц, в которой хранятся начальные адреса (вернее 20 старших разрядов адреса, поскольку 12 младших разрядов начального адреса страницы равны 0) страниц, с которыми МП работал в последнюю очередь. Процент кэш-попаданий в буфер TLB составляет порядка 95 – 98 %. И только при кэш-промахе включается страничный механизм. На рис. 3.32 поясняется структура и принцип работы буфера TLB.

Кэш-память страниц состоит из трех блоков: блок данных, блок тэгов и блок LRU/достоверности (на рис. 3.32 последний блок из-за недостатка места обозначен просто как блок LRU). Блок данных разбивается на строки (этих строк 4×8 = 32). Каждая строка имеет формат 20 бит. В строку можно загрузить начальный адрес страницы (20 старших разрядов этого адреса). Каждой строке ставится в соответствие свой тэг в блоке тэгов. На рис. 3.32 приведен пример, в котором соответствующие друг другу строка и тэг помечены звездочками. Тэг имеет формат 17 бит.

Всю кэш-память страниц можно условно разбить на 8 горизонталей (на рис. 3.32, соответственно гр. 0 ‑ гр. 7). На каждой горизонтали располагаются 4 строки, соответствующие этим строкам четыре тэга и один 7-битовый элемент LRU/-достоверности.

Рис. 3.32

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

Итак, сегментный механизм выработал линейный адрес Ал. Поскольку включен страничный механизм, то этот адрес еще не является физическим (Аф). Пусть при поиске начального адреса страницы (соответствующего Ал) в буфере TLB произошел кэш-промах. Начинает работать громоздкий страничный механизм. Когда МП в соответст-вующей таблице страниц найдет нужный элемент PTE, то он извлечет из этого элемента 20 старших разрядов начального адреса страницы, пристыкует к ним 12-разрядное смещение OFFSET (из Ал) и сформирует тем самым искомый Аф. Одновременно МП возьмет найденные им в PTE 20 старших разрядов начального адреса страницы и загрузит их в одну из строк блока данных буфера TLB. Важным является то, что данный начальный адрес не может попасть в любую строку блока данных, он может попасть только в одну из четырех строк на конкретной горизонтали! Номер горизонтали определяют разряды 14 ‑ 12 линейного адреса Ал. Например, если

Ал = 11000001111100101010111100111001b

(разряды 14 ‑ 12 выделены жирным шрифтом), то поиск начального адреса страницы, а впоследствии, если он не найден, загрузка этого начального адреса в буфер будет производиться на горизонтали 2.

Когда МП при кэш-промахе загружает в какую-либо строку буфера новый начальный адрес страницы, то он одновременно копирует в соответствующий этой строке тэг 17-ти старших разрядов Ал (разряды 31 ‑ 15). Для рассматриваемого примера (если был кэш-промах) в соответствующий тэг будет записано 11000001111100101. Однако не ясно, а в какую из четырех строк на известной горизонтали попадет (при кэш-промахе) начальный адрес. Решением этой задачи «заведует» расположенный на этой горизонтали элемент LRU/-достоверности. Вернее, задача решается на основании записанной в этом элементе информации. Об этом будет сказано позднее.

Вернемся теперь к началу процесса. Итак включен страничный механизм. Сегментный механизм выработал Ал. МП берет разряды 14 ‑12 этого адреса и определяет горизонталь в буфере TLB. Затем МП берет старшие 17 разрядов Ал и сравнивает их со всеми четырьмя тэгами, расположенными на выбранной горизонтали. При этом возможны два варианта: произошло сравнение с одним из тэгов или сравнений не произошло совсем. Несколько сравнений сразу произойти здесь не может, так как алгоритм заполнения кэш-памяти таков, что на одной горизонтали не может оказаться одинаковых тэгов.

Если сравнений не произошло, то произошел кэш-промах. Действия МП при кэш-промахе уже рассмотрены выше. Если сравнение с одним из тэгов произошло, то это кэш-попадание. МП достает из соответствующей этому тэгу строки 20-ти старших разрядов начального адреса страницы, пристыковывает к ним 12 младших разрядов Ал (OFFSET ) и тем самым формирует искомый Аф.

Любой элемент LRU/-достоверности имеет формат, приведенный на рис. 3.33.

b0

b1

b2

a0

a1

a2

a3

Рис. 3.33

Здесь a0 ‑ a3 ‑ биты достоверности. Каждый бит достоверности соответствует одной из четырех расположенных на данной горизонтали строк. Когда МП после кэш-промаха загружает «на горизонталь» новый начальный адрес страницы, то он прежде всего последовательно проверяет биты достоверности, расположенные на данной горизонтали. Если при этом МП встречает строку, объявленную недостоверной, то именно в нее и будет загружен новый адрес.

Однако вполне возможно, что все строки на данной горизонтали окажутся достоверными. Тогда информацию из какой-то строки придется удалить, а на ее место загрузить новый начальный адрес. МП при этом стремится удалить начальный адрес той страницы, к которой он обращался наиболее давно. В этом ему «помогают» биты LRU (last recently used ‑ наиболее давно использовал) b0 – b2. Обозначим строки на горизонтали S0, S1, S2 и S3. При кэш-попаданиях МП всегда обновляет биты LRU по следующей схеме:

- при обращении к S0 или S1 бит b0 устанавливается в единицу, а при обращении к S2 или S3 бит b0 сбрасывается в 0;

- при обращении к S0 бит b1 устанавливается, а при обращении к S1 бит b1 сбрасывается;

- при обращении к S2 бит b2 устанавливается, а при обращении к S3 бит b2 сбрасывается;

Алгоритм удаления строк приведен в табл. 3.13.

Таблица 3.1

b

b1

b2

 

0

0

Безразлично

Удаляется S0

0

1

Безразлично

Удаляется S1

1

Безразлично

0

Удаляется S2

1

Безразлично

1

Удаляется S3



*****
© Банк лекций Siblec.ru
Формальные, технические, естественные, общественные, гуманитарные, и другие науки.