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

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

3.20. Общие сведения о кэш-памяти

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

Стандартная же кэш-память предназначена для хранения кодов и данных. Модификация информации в кэше может происходить как со стороны ОП (кэш-промах при чтении), так и со стороны процессора (кэш-попадание при записи).

Быстродействующие микросхемы ОЗУ стоят дорого, а дешевые микросхемы ОЗУ работают значительно медленнее процессора. Возникает противоречие между стоимостью системы и ее быстродействием. Для решения этой проблемы в систему вводится кэш-память. Она представляет собой высокобыстродействующее ОЗУ сравнительно небольшого объема и располагается в системе между МП и ОП (рис. 3.34).

Рис. 3.34

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

Пусть процессор выполняет команду mov ax,[bx]. При кэш-попадании он просто возьмет нужную информацию из кэша. При кэш-промахе в одну из строк кэша попадет блок информации из ОП. Пусть выполняется команда mov [bx],ax. При кэш-промахе процессор запишет информацию в ОП (в Р6 плюс к этому обновится и некоторая строка кэша). При кэш-попадании процессор запишет информацию в кэш (изменение в такой ситуации информации в ОП рассмотрим позже).

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

1. Объем кэш-памяти. Очевидно, что чем он выше, тем выше процент попаданий. Но при этом растет стоимость кэш-памяти. Современная кэш-память уже имеет объем, измеряемый в мегабайтах.

2. Ширина выборки. Чем шире выборка, тем выше процент попаданий. При большой ширине выборки трудно организовать быстрое считывание информации из ОП в кэш-память. Ширина выборки берется от 4 до 64 байт и определяется в основном разрядностью шины данных.

3. Стратегия заполнения кэш-памяти.

Остановимся на последнем факторе подробнее. Любая кэш-память состоит из блока данных, разбитого на строки, и блока тэгов (см. буфер TLB). Формат строки блока данных совпадает с шириной выборки. В зависимости от стратегии заполнения различают три вида кэш-памяти.

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

Рис. 3.35

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

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

2. Полностью ассоциативная кэш-память. Здесь любой блок информации может попасть в любую строку блока данных. Поясним это на рис. 3.36.

Рис. 3.36

Как видно из рис. 3.36, все строки тэги располагаются на одной единственной горизонтали. Такая кэш-память обеспечивает наивысший процент кэш-попаданий, но требует при реализации больших аппаратурных затрат. Чего стоит одна только схема сравнения, ведь сравнение здесь ведется со всеми тэгами одновременно. На практике такой принцип построения применяется только для кэшей малого объема. Например, Intel использует этот принцип в буферах TLB для больших страниц, в котором блок данных состоит всего из двух (или несколько более) строк.

3. Частично ассоциативная кэш-память. Это компромиссный вариант между полностью ассоциативной кэш-памятью и кэш-памятью с прямым отображением. Этот вариант чаще всего используется на практике. Любой блок информации может попасть в любую из нескольких строк, расположенных на конкретной горизонтали, но не может попасть на другую горизонталь. Такую кэш-память уже подробно рассмотрели выше. Так реализована кэш-память страниц. Необязательно, чтобы на горизонтали рас-полагалось четыре строки (4 way-set cache). Intel исполь-зует кэши с двумя строками на горизонтали (2 way-set).

Наличие кэш-памяти приводит, как минимум, к ряду проблем, связанных с согласованностью данных в различных видах памяти системы. Пусть какое-то ВУ, использовав ПДП, занесло в ОП новую информацию. При этом часть информации в кэш-памяти может оказаться устаревшей.

Подобные ситуации должен отслеживать контроллер кэш-памяти. Он в такой ситуации поступает просто ‑ объявляет все строки кэш-памяти недостоверными и кэш-память начинает заполняться «с нуля». Вторая проблема связана с операцией записи в ОП. Пусть МП выполняет команду записи в ОП. При кэш-промахе проблемы не возникает ‑ данные просто будут записаны в ОП (в Р6 при этом будет еще инициировано заполнение строки кэша).

При кэш-попадании обновляется информация в кэш-памяти, а как быть с ОП? Есть два варианта. Первый ‑ сразу продублировать эту информацию в ОП. Это сквозная запись (write through). Однако при этом кэш-память не дает при записи никакого выигрыша в быстродействии. Второй вариант ‑ отложить запись новой информации в ОП до той поры, когда это будет действительно необходимо (например, какое-то ВУ выдало запрос на ПДП для чтения информации из ОП). Это так называемая обратная запись (write back). Кэш с обратной записью обеспечивает большее быстродействие, но требует более сложного контроллера кэш-памяти. В МП 486 внутренняя кэш-память работает только со сквозной записью.

В современных вычислительных системах обычно используется сразу несколько кэшей:

- кэш первого уровня (L1) – кэш небольшого объема, встроенный в процессор;

- кэш второго уровня (L2) – кэш большого объема, часто расположенный вне процессора.

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

- М (modified) – модифицированная строка, которая находится только в этом кэше и ее содержимое изменено процессором, т.е. такая же информация в ОП устарела;

- Е (exclusive) – уникальная строка, которая находится только в этом кэше и информация в ней совпадает с информацией в ОП;

S (shared) – разделяемая сторока, которая потенциаль-но находится сразу в нескольких кэшах. Если процессор модифицирует информацию в такой строке, то одновременно модифицируется такая же информация в ОП, а соответствующая информация в других кэшах объявляется недостоверной;

I (invalid) – недостоверная строка.



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