
Кэш-память. Для достижения более высокого быстродействия между сравнительно медленной основной памятью, использующей динамические элементы, и относительно быстрым процессором размещают буферную память, получившую название кэша, или кэш-памяти. Ее использование позволяет избегать циклов ожидания в работе процессора, которые снижают производительность всей системы.
Кэш-память предназначена для кратковременного хранения информации и выдачи ее в процессор. Она не является программно доступной и служит только для повышения производительности, но не увеличивает общую емкость памяти и не влияет на программирование. Кэш-память бывает нескольких уровней. Кэш первого уровня Ы обычно интегрируется с процессором и служит для предварительной выборки команд и данных. Во многих процессорах кэш первого уровня разделен на два: кэш команд и кэш данных (см. рис. 5.10). Его объем в современных процессорах составляет от 4 до 64 Кбайт (и даже до 128 Кбайт), а время обращения около 10 не. Когда говорят о кэш-памяти, то обычно подразумевают кэш второго уровня, или L2. Он служит для ускорения обращений процессора к программам и данным при их обработке. Этот кэш строится на базе очень быстрой и довольно дорогой статической памяти (SRAM) и хранит наиболее часто используемую процессором информацию. Физически кэш второго уровня выполняют в виде отдельной микросхемы или интегрированным с процессором в зависимости от возможностей технологии. Объем кэш-памяти второго уровня в процессорах разного назначения составляет от 256 Кбайт (в персональных компьютерах) до 8 Мбайт (в серверах), а время обращения 15...20 не. В некоторых компьютерах предусматривается также кэш третьего уровня L3, однако его эффективность невелика.
Наличие кэш-памяти не должно вызывать затруднений при программировании и нарушать принятые принципы адресации. Чтобы скрыть от программиста наличие кэш-памяти, в ней используют ассоциативный принцип хранения и поиска информации.
В кэш-памяти располагается та же информация, что и в ОП. Любое обращение процессора к памяти вначале всегда направляется в кэш-память, и только при отсутствии в ней соответствующей информации продолжается ее поиск в ОП. Найденное слово передается в процессор для обработки, но при этом из ОП забирается целый блок информации, состоящий из нескольких слов, которые заносятся в кэш-память. При повторном обращении процессора к данным или командам из этого блока они уже будут находиться в кэш-памяти. Так как и команды, и данные обычно занимают последовательные ячейки памяти, высока вероятность, что следующее обращение в кэш-память будет успешным. При работе с кэш-памятью применяется ассоциативный принцип: старшие разряды адреса используются в качестве признака, а младшие — для выбора слова.
Существует три вида организации кэш-памяти: с прямым отображением, полностью ассоциативная и множественно ассоциативная.
В кэш-памяти с прямым отображением информационный блок из ОП записывается всегда в одно и то же фиксированное место. При записи блока в кэш-память используются младшие разряды его адреса ОП. Они также записываются в виде тега вместе с информацией. Для информации, хранящейся в ячейках ОП с одинаковыми младшими разрядами адреса, предназначен один блок кэшпамяти. Так, если ОП разделена на 16 384 блока, а объем кэшпамяти позволяет разместить только 128 блоков, то в строке 0
кэш-памяти могут находиться данные из 0, 128, 256,..., 16 256 блоков ОП, в строке 1 — данные из 1, 129, 257, ..., 16 257 блоков ОП и т.д. Такая кэш-память наиболее дешева, но и требует очень частой замены блоков; вероятность «попадания» сравнительно низкая. Кэш с прямым отображением используется в простых недорогих компьютерах.
Если информационный блок ОП может быть помещен на любое место кэш-памяти, то она называется полностью ассоциативной. Ее почти не используют из-за сложности схем управления.
В множественно ассоциативной кэш-памяти информационный блок ОП может располагаться на ограниченном числе мест. Обычно такое множество состоит из четырех каналов. В персональных компьютерах, как правило, используют именно четырехканаль-ную множественно ассоциативную кэш-память. В ней сочетаются достоинства прямого и полностью ассоциативного отображения.
На рис. 6.7 приведена одна из возможных организаций множественно ассоциативной кэш-памяти. Такая память состоит из собственно блочного запоминающего устройства (БЗУ), в котором хранятся копии взятых в ОП информационных блоков, таблицы адресов (ТА) и управляющих схем. Рассмотрим операцию чтения. Поступающий из процессора адрес разбивается на три части: поле смещения (Кв), служащее для выбора нужного байта внутри блока, поле индекса(Аинд), определяющее номер множества, и поле тега (Ат), т.е.
А = Ат, Аинд, Ад.
Обмен данными между кэш-памятью и ОП производится блоками. В таблице адресов (называемой также справочником) для каждого блока, расположенного в ЗУ по адресу Аинд, находятся адреса страниц, или тегов, А,, тех блоков, которые были уже скопированы в кэш-память во время предыдущих операций чтения. При обращении процессора адрес запрашиваемой информациипередается в регистр, где он разбивается на три части. Находящиеся в таблице адресов номера страниц сравниваются с номером страницы (т. е. старшими разрядами адреса) запрашиваемого блока. Если выявляется совпадение адресов страниц, то запрашиваемый блок находится в соответствующем разделе кэш-памяти.
Производится выборка этого блока по адресу А = Аинд, AD. Если совпадения номеров страниц не произошло, то искомый блок отсутствует в ассоциативной памяти, и адрес нужного слова передается ОП. (Для ускорения работы памяти обычно адрес передается в кэш-память и ОЗУ одновременно, но если искомое слово находится в кэш-памяти, то там оно будет найдено быстрее, поэтому результат поиска в ОЗУ будет не нужен.)
Найденное слово из оперативной памяти передается в процессор для обработки, а весь блок переписывается в кэш-память. При копировании блока он направляется в раздел кэш-памяти, адрес которого определяется с помощью таблицы активности блоков (на рисунке она не показана). Эта таблица содержит предысторию обращений к каждому блоку и служит для вытеснения из кэшпамяти неиспользуемых блоков. Применяется одна из двух стратегий — случайная или LRU (least recently used — заменяется блок, который дольше других не использовался). В первом случае новый блок вытесняет из кэш-памяти любой блок, выбираемый случайным образом; эту стратегию значительно проще реализовать в аппаратуре. Во втором случае из кэш-памяти удаляется блок, к которому в течение последнего времени не было обращений. Эта стратегия требует фиксации обращений в таблице активности, что может значительно усложнить ее реализацию. Обычно реализация этой стратегии выполняется с помощью очереди, в которую заносятся ссылки на заполняемые строки кэш-памяти. При обращении к строке ссылка на нее перемещается в конец очереди. Таким образом, в начале очереди всегда будет находиться ссылка к строке, к которой обращение производилось раньше, чем к другим строкам.
Операции записи в память встречаются намного реже операций чтения; обычно они составляют менее 10 % общего числа операций, но пренебрегать ими нельзя. Существует две возможности:
сквозная запись (write through), при которой запись осуществляется одновременно и в кэш-память, и в ОП. В этом случае наличие кэш-памяти никак не повлияет на скорость работы машины при записи обработанной информации в память. Время, необходимое для записи слова в ОП, превышает длительность записи в кэш-память, а пока не завершена запись результата предыдущей операции, продолжать работу невозможно;
запись с обратным копированием (write back), при которой запись информации при обработке производится только в кэшпамять. Это происходит быстро, но при этом в кэш-памяти и ОП могут храниться различающиеся копии одних и тех же данных. Измененный блок из кэш-памяти передается в ОП только при его замещении. Для еще большего сокращения операций записи каждому блоку ставится в соответствие бит модификации, который отменяет запись блока в ОП, если он не изменялся.
Как правило, в персональных компьютерах сегодня используют сквозную запись, хотя она и не обеспечивает выигрыша во времени при записи. Это вызвано тем, что ее проще реализовать, чем запись с обратным копированием. Кроме того, при сквозной: записи ОП и кэш-память всегда содержат одинаковые копии данных, что значительно упрощает процедуру ввода-вывода и организацию мультипроцессорных систем.