Организация кэш-памяти.
Программные модели процессоров и управление периферийными устройствами
При обращении к оперативной памяти процессор указывает в качестве критерия поиска адрес данных в оперативной памяти. Контроллеру кэш-памяти при перехвате обращения к оперативной памяти этот адрес становится доступным. При первом обращении к конкретному слову данных, контроллер кэш-памяти его не обнаружит. Это кэш-промах. В этом случае запрос процессора обслужит оперативная память, но выбрано… Читать ещё >
Организация кэш-памяти. Программные модели процессоров и управление периферийными устройствами (реферат, курсовая, диплом, контрольная)
Назначение и общая схема подключения кэш-памяти
Кэш-память — это промежуточная память между оперативной памятью и процессором.
Основной целью использования кэш-памяти в ЭВМ является согласование полосы пропускания оперативной памяти и процессора. Полоса пропускания определяется количеством передаваемых бит за единицу времени (количество передаваемых бит на частоту передачи).
В современных ЭВМ быстродействие процессоров (количество выполняемых команд за единицу времени) в десятки раз превышает потока данных обмена с оперативной памятью.
Оперативная память большой емкости принципиально не может работать на тактовой частоте процессора. Основная проблема — большие задержки при выборке информации. Тому имеются две основные причины: большие задержки в адресных цепях (пропорциональные емкости памяти) и ограничения по использованию больших значений энергий при чтении и записи информации в массовой памяти в связи с проблемами охлаждения. Все это приводит к увеличению времени ожидания данных (уменьшения частоты обращений) с ростом емкости памяти.
В современных ЭВМ в качестве элементной базы в оперативной памяти используются интегральные схемы с большой степенью интеграции, часто на основе МОП-транзистров. При этом в качестве элементарной ячейки хранения используется однотранзисторный вариант элемента динамической памяти с хранением информации в виде заряда на конденсаторе © в цепи стока транзистора.
Транзистор в динамической ячейке работает как ключ, управляющий передачей заряда. При записи информации открывают транзисторный ключ (Т) управляющим напряжением на числовой шине и заряжают конденсатор © до напряжения нуля или единицы с использованием разрядной шины 1.
При считывании информации специальная схема предзаряда сообщает потенциал (опорное напряжение) разрядным шинам. При подаче напряжения на числовую шину открывается транзистор, и на разрядную шину 1 передается заряд конденсатора. При единичном значении считываемой информации потенциал на разрядной шине 1 становится больше, чем потенциал на разрядной шине 2, при чтении нуля — меньше. По разности потенциалов определяется значение считываемого разряда. При чтении заряд на конденсаторе меняется, т. е. чтение производится с разрушением информации. Поэтому производится процедура восстановления прочитанной информации с использованием схемы регенерации. Схема однобитового среза матрицы динамической памяти представлена на рис. 9.2.
В этой памяти время задержек обращения по чтению включает время задержки при чтении и регенерации. Периодическая регенерация в динамических ЗУ необходима и при отсутствии обращений к памяти. Причиной является саморазряд емкостей С ячеек памяти. Для сохранения информации в ячейках памяти требуется циклическая регенерация ячеек памяти. Буфер данных используется для временного хранения прочитанных или записываемых данных. В качестве буфера данных используется регистр на статических триггерах.
Потери на регенерацию также уменьшают быстродействие динамической памяти. Но наибольшие потери времени при обращениях к памяти (динамической и статической) составляют задержки в адресных цепях выборки данных при обращении как по чтению, так и по записи. Увеличение емкости памяти всегда связано с увеличением задержек в адресных цепях, т. е. с уменьшением быстродействия.
Память, представленная на рис. 9.2 является однобитовой. Память для полноразрядных данных реализуется параллельной работой системы из множества однобитовых.
Основной причиной увеличения задержек в адресных цепях при увеличении емкости оперативной памяти являются задержки в дешифраторе.
Рассмотрим схему оперативной памяти, например, емкостью в 1Мбайт. Для задания адреса байта в такой, относительно небольшой, памяти требуется 20 разрядов. Для уменьшения оборудования адресных схем запоминающие элементы памяти располагают в виде восьми равносторонних матриц (1024 строки по 1024 бита). В соответствии с этим распределением адрес конкретной ячейки в разрядных матрицах определяется пересечением соответствующих строки и столбца.
Выбор строки и столбца производится двумя дешифраторами: строки и столбца (см. рис. 9.2).
Входами дешифраторов являются, соответственно, адресные шины строки и столбца. Каждый дешифратор имеет 10 входных адресных шин и 1024 выходные шины.
Полезный сигнал формируется только на одной «выбранной шине». На остальных шинах (не выбранных) входные токи выходных шин шунтируются диодами при несовпадении разрядов адресов (поданного и «прошитых» в дешифраторе). Таким образом, ток чтения «выбранных строк» уменьшается по отношению к входному на все строки в 102 раза, и этот ток должен создать «канал» чтения (заряд на затворе МПД транзисторов) для транзисторов всей строки матрицы (1024 транзистора). Затвор МДП-транзистора является емкостной нагрузкой, и время заряда затвора обратно пропорционально току заряда.
Эта задержка в адресных цепях является основной задержкой при использовании любой памяти.
Информационный поток данных определяется количеством подаваемых или обработанных данных за единицу времени.
Для простоты рассмотрим работу процессора с одноадресной системой команд. В этом варианте выполнение одной команды связано с одним обращением к оперативной памяти по чтению или записи операнда.
Пусть процессор за такт (t) выполняет одну команду с формированием одного результата в формате двойного слова (4 байта), а обращение к оперативной памяти по чтению или записи составляет 4 такта процессора.
Очевидно, что в этом случае полосы пропускания процессора и оперативной памяти не совпадают, что приводит к простою процессора по 3 такта из четырех. Для согласования информационных потоков увеличивают ширину обращения к памяти. Например, можно при обращении к памяти производить чтение не одного двойного слова (4 байта), а строку из четырех двойных слов (16 байт). Простейший вариант этого решения представлен на рис. 9.3.
Эффективность этого решения основывается на статистической локальности обращений к памяти по месту и времени. Это означает, что существует большая вероятность того, что обращения к памяти в локальный промежуток времени с большой вероятностью будут производиться в локальный участок адресов памяти.
Здесь важно, что память разбивается на несколько блоков с обязательным расслоением адресов. Расслоение адресов (интерливинг) означает, что последовательность адресов двойных слов располагается в независимых блоках памяти.
Но это еще не кэш-память, а просто выборка данных с упреждением.
Передачу выбранной строки байтов на процессор можно выполнять параллельно или последовательно. Так как процессору при каждом обращении требуются данные в соответствии с шириной обработки, например, по 4 байта (двойное слово), то передачу данных можно производить последовательно по 4 байта без расширения разрядности шины данных, например, с использованием пакетной передачи.
Это параллельная работа нескольких блоков оперативной памяти с поблочным чередованием адресов. За одно обращение к оперативной памяти выбирается в N раз больше байтов (строка байтов со смежными адресами), что уравнивает информационные потоки быстрого процессора и «медленной» оперативной памяти.
Но процессор работает по командам, каждая из которых оперирует с данными ограниченной разрядности и необязательно расположенными по смежным адресам в пределах ширины обращения. Любое обращение к памяти за пределами выбранной строки приводит к чтению новой строки и замене содержимого регистра данных. Этот случай характерен для обработки двух массивов, например, при сложении их элементов. В этих случаях, при каждом обращении к памяти по чтению, содержимое регистра данных будет обновляться, и эффект групповой выборки данных сведется к нулю.
Проблема решается введением множества регистров, по одному для множества чтений из памяти, т. е. использованием дополнительной памяти, но уже на основе статических регистров, расположенных как можно ближе к процессору или в самом процессоре.
Важность расположения кэш-памяти в процессоре определяется тем, что в этом случае она может использовать тактовую частоту процессора, а не материнской платы.
Схема использования многоблочной оперативной памяти с расслоением адресов и использования дополнительной (промежуточной) кэш-памяти представлена на рис. 9.4.
При использовании умеренного адресного пространства кэш-памяти и расположении этой памяти в кристалле процессора можно избежать временных потерь, т. е. согласовать информационные потоки данных оперативной памяти и процессора. Но, даже если кэш-память размещается в кристалле процессора, при обращении к ней может теряться один такт.
Взаимодействие устройств, представленных на рис. 9.4, следующее.
Для выборки команды или данных процессор посылает запрос к оперативной памяти: код операции (прочитать, записать), адрес данных в оперативной памяти и размер операнда (для данных).
Кэш-контроллер перехватывает (копирует) запрос к оперативной памяти и проверяет наличие запрашиваемых данных или команд в кэш-памяти, используя адреса данных (или команд) в оперативной памяти. При наличии в кэш-памяти данных по запрашиваемым адресам (кэш-попадание), обращение к оперативной памяти блокируется, и данные пересылаются в процессор из ячеек кэш-памяти, в противном случае (кэш промах) данные по запрашиваемому адресу пересылаются из оперативной памяти с сохранением копии всей строки в кэш-памяти.
Здесь возможны варианты. Рассмотренный алгоритм предусматривает одновременный запрос к двум устройствам: оперативной памяти и кэш-памяти, но и при кэш-попаданиях оперативная память оказывается занятой, и доступ к ней других процессоров или устройств ПДП блокирован. По этой причине в многопроцессорных системах часто используется другая схема: вначале проверяется наличие данных или команд в кэш-памяти, и только при кэш промахе запрос пересылается в оперативную память. В этой схеме при кэш-промахах время незначительно увеличивается, но при кэш-попаданиях память остается доступной для других процессоров или устройств ПДП.
Альтернативой многоблочной памяти с расслоением (рис. 9.4) является одноблочная память с внутренним регистром на статических триггерах на строку (или несколько строк) кэш-памяти.
В этой схеме нет «расслоения» адресов по блокам. Вся память может быть выполнена в виде разрядных матриц. При выборке данных из памяти данные выбираются не по двойным словам, а строками кэш-памяти (например, по 4 двойных слова).
Такая выборка реализуется за счет того, что при адресации строки матриц каждого разряда производится фиксация ее значения на внутреннем регистре матрицы оперативной памяти. На этом регистре, выполненном на быстродействующих статических триггерах, может сохраняться вся строка бит или часть строки (одна или несколько строк кэш-памяти). Нужные биты (по младшим разрядам адреса) выбираются уже из быстродействующего регистра. При этом выбираются значения разрядов по соседним адресам, т. е. вся строчка кэш-памяти.
Дополнительной проблемой для кэш-памяти остается задержка первого чтения строки данных из оперативной памяти. Но и эта проблема в современных ЭВМ решается разделением команд на команды действия и команды обращения к памяти.
Команды действия — это команды типа регистр/регистр, без обращения к оперативной памяти.
Команды обращения к памяти — это команды только обращения к оперативной памяти по чтению или записи (загрузки данных в РОН или сохранения данных в ячейке памяти).
Проблема задержек при первом обращении к памяти может решаться вынесением команд загрузки данных вперед на несколько команд до их исполнения.
Вопросы для самопроверки:
- 1. Цель использования кэш-памяти.
- 2. Особенности схемы ячейки динамической памяти.
- 3. Природа основных задержек при обращении к оперативной памяти.
- 4. Механизм считывания информации из ячейки динамической памяти.
- 5. Простейший механизм согласования плотности информационных потоков памяти и процессора.
- 6. Взаимодействие устройств: процессор — оперативная память — кэш-память.
- 7. Взаимодействие устройств в системе: процессор, кэш-память, оперативная память.
- 8. Поисковый адрес данных, используемый при обращении к кэш-памяти.
Системы адресации кэш-памяти
При обращении к оперативной памяти процессор указывает в качестве критерия поиска адрес данных в оперативной памяти. Контроллеру кэш-памяти при перехвате обращения к оперативной памяти этот адрес становится доступным. При первом обращении к конкретному слову данных, контроллер кэш-памяти его не обнаружит. Это кэш-промах. В этом случае запрос процессора обслужит оперативная память, но выбрано будет не одно заданное двойное слово, а вся строчка, например, четыре двойных слова, причем, в целочисленных границах строки. Вся строка будет записана в кэш-памяти, а затребованное двойное слово будет отправлено в процессор.
Здесь встает проблема адресации ячеек строк данных в кэш-памяти. Адресация строк данных в кэш-памяти должна допускать нахождение данных по адресам двойных слов (тегов) в оперативной памяти.
В настоящее время широко известны три схемы адресации, удовлетворяющие этому требованию. Это системы адресации на основе:
- · аппаратной ассоциативной выборки,
- · адресации с прямым отображением адресов,
- · множественно-ассоциативной выборки.
Рассмотрим эти схемы применительно к процессору с параметрами МП intel 486:
- · ширина обработки данных — 4 байта,
- · размер адресного пространства — 4 Гбайта,
- · размер строки кэш-памяти — 128 байт,
- · размер адресного пространства кэш-памяти — 8 Кбайт.
Для упрощения схемы, добавим требование расположения слов в ячейках памяти только в целочисленных границах и передачи данных из кэш-памяти в процессор только двойными словами. В этом случае для задания адреса двойного слова используются 30 бит.
Последнее требование упрощает схему, но не соответствует большинству реальных схем. В МП Intel 486 это требование не соблюдается и адреса данных по интерфейсу передаются с использованием 34х бит. 30 бит определяют адрес двойного слова, 4 бита (сигналы #BE0, #BE1, #BE2 и #BE3) используются для индивидуального указания позиций передаваемых байтов (см. 7.5.1. Особенности локального интерфейса i486).
Организация кэш-памяти на основе ассоциативной выборки
В ядро кэш-памяти входят:
- · ассоциативная память тегов со схемами параллельного сравнения входного слова (адреса данных в оперативной памяти) с тегами,
- · схемы обнаружения кэш-промаха,
- · регистры хранения строк данных,
- · регистр команд обращения процессора к оперативной памяти,
- · дешифратор адреса двойного слова в строке кэш-памяти,
- · входные/выходные усилители и вентильные схемы.
При включении процессора строки адресных тегов и данных не заполнены. При первом же обращении процессора к памяти, например по чтению, контроллер кэш-памяти проверяет присутствие запрашиваемых данных в кэш-памяти. Для этого адрес строки оперативной памяти (старшие 24 бита адреса данных в оперативной памяти) сравнивается со всеми адресами строк, записанными в памяти в качестве тегов поиска. Если совпадений нет, то:
- · фиксируется кэш-промах,
- · производится обращение к оперативной памяти,
- · читается и записывается в схемы хранения строк данных вся строчка (8 байт), по любому свободному адресу, а адрес строки — в соответствующую ячейку поисковой части ассоциативной памяти,
- · запрашиваемые данные (слово или двойное слово) пересылаются в процессор,
- · дополнительная информация (например, биты присутствия, модификации операцией записи и т. д.).
Повторное обращение к данным из этой же строчки производится уже без обращения к оперативной памяти.
Первоначальное заполнение памяти при промахах может производиться в любом порядке. При полном заполнении кэш-памяти, новые строчки данных, как и при использовании виртуальной памяти, записываются с использованием алгоритмов листания. Для реализации алгоритмов листания каждая строка данных имеет поле дополнительной информации, в котором отмечаются обращения и типы обращения (по чтению или по записи).
Основным недостатком ассоциативной памяти является сложность её реализации на микросхемах из-за сложной топологии поисковой части, вернее, наличия многочисленных вертикальных (адресных) и горизонтальных (разрядных) линий. В интегральном исполнении памяти каждой линии должен соответствовать выводной штырек (ножка микросхемы). Для соединения штырька с линиями микросхемы требуется отдельная «пайка», которая занимает много места на кристалле. При использовании микросхем малой степени интеграции, на саму схему ассоциативной памяти не хватает площади кристалла. Ассоциативная память широко использовалась до появления интегральной технологии.
В современных ЭВМ кэш-память размещают на одной микросхеме с процессором, в этом случае количество выводов микросхемы определяется не кэш-памятью, а интерфейсом процессора. Но и в этом случае использование чисто ассоциативной памяти ограничено.
Организация кэш-памяти с прямым отображением адресов
Основная идея кэш-памяти с прямым отображением — это нахождение функциональной зависимости адресов кэш-памяти от адресов оперативной памяти:
Адрес кэш-памяти = f (адрес оперативной памяти).
Но такой детерминированной функции для не равновеликих множеств не существует. На практике используют вероятностные функции — хеш-функции. Это функции (вернее класс функции) равномерного разбрасывания. Их часто используют для формирования псевдослучайных чисел с равномерным распределением.
Используя свойство локальности обращений программ к памяти по времени, в качестве хеш-функции используют функцию прямого отображения.
Функция прямого отображения заключается в выделении младших разрядов аргумента. Количество выделяемых разрядов определяется емкостью кэш-памяти, вернее, количеством строк в кэш-памяти. Для рассматриваемого случая:
- · емкость кэш-памяти — 8 Кбайт (215 байт),
- · разрядность строки кэш-памяти — 128 Кбайт (27 байт),
- · количество строк кэш-памяти — 256.
Для сохранения каждой строки оперативной памяти определена единственная строка кэш-памяти. Это строка, адрес которой совпадает с адресом, составленным из старших цифр адреса этой строки в оперативной памяти.
Но по этим же адресам могут быть записаны данные из множества строк оперативной памяти, адреса которых различаются младшими разрядами. При максимально возможной емкости оперативной памяти (равной математической) количество совпадающих строк может быть равным 217.
Для идентификации строк в старшие разряды строк кэш-памяти записываются «идентифицирующие» теги, равные (по численному значению) старшим разрядам адреса оперативной памяти.
При обращении к кэш-памяти старшие разряды адреса строк оперативной памяти сравниваются с тегами на внешних схемах сравнения. При несовпадении этих строк фиксируется кэш-промах, при совпадении — фиксируется попадание. При кэш-попадании данные (двойное слово) выбираются из кэш-памяти по адресу двойных слов в строке с использованием дешифратора.
Таким образом, здесь используется тройная адресация: адресация строки кэш-памяти по младшим разрядам адреса оперативной памяти, ассоциативный поиск по сравнению старших разрядов адреса оперативной памяти с тегами и для выбора двойного слова из строки кэш-памяти.
Рассмотренная схема относительно проста, но имеет свои недостатки.
Основным недостатком схемы является повышенная вероятность кэш-промахов. Этот недостаток проявляется при обработке массивов, например, при сложении двух массивов. Перебор строк производится путем изменения младших разрядов при сохранении старших. При несовпадении старших адресов и совпадении младших, будут выявляться «сплошные» промахи с перезаписью информации в кэш-память. В этих случаях использование кэш-памяти будет только тормозить работу процессора.
При использовании кэш-памяти с прямым отображением нет проблемы выбора устаревшей строки, так как каждому адресу соответствует одна строка. Она и удаляется при кэш-промахе. Но поле для дополнительной информации предусмотрено, например, для отметок присутствия данных и модификации информации операцией записи.
Организация кэш-памяти на основе множественно-ассоциативной памяти
Это модификация поиска с прямым отображением адресов. В этой схеме отображение адресов оперативной памяти в адреса кэш-памяти производится не для одной строки (кэш-памяти), а для множества строк, имеющих совпадения в младших разрядах их адресов в оперативной памяти.
Правомерна и другая интерпретация этой схемы как множеств отдельных блоков памяти с ассоциативным поиском информации, но с адресной выборкой «целевого» блока.
В этой схеме для строк оперативной памяти с совпадающими значениями младших разрядов оперативной памяти определена для сохранения не единственная строка кэш-памяти, а множество строк, кратное степени двух: два, четыре или восемь, наиболее часто — четыре. На рис. 9.7 представлена схема множественно-ассоциативной памяти с двумя множествами строк (М0 и М1 в одной выбранной строке кэш-памяти). Каждая из этих строк идентифицируется адресами, составленными из старших цифр адреса строки в оперативной памяти.
При обращении к кэш-памяти старшие разряды адреса строки оперативной памяти сравниваются с тегами на внешних схемах сравнения. При несовпадении этих строк фиксируется кэш-промах, при совпадении — фиксируется попадание для одного из множеств (М0 или М1 на рис. 9.7). При кэш-попадании данные (двойное слово) выбираются из кэш-памяти с учетом выбранного множества (М0 или М1) по адресу двойного слова в строке с использованием дешифратора двойных слов.
В множественно-ассоциативной кэш-памяти при кэш-промахе для обновления информации имеется альтернатива выбора множества с устаревшими данными. Для случая использования в строках кэш-памяти только двух множеств, определение устаревшего множества определяется элементарно. Устаревшее множество то, в которое не было обращения в последнем кэш-попадании.
Для 4-х и более множеств при решении этого вопроса используются более сложные алгоритмы выбора по «вероятности неиспользования» (LRU). Сложность этих алгоритмов значительно возрастает по мере роста числа множеств. Для 4 множеств (наиболее часто используемый вариант кэш-памяти) алгоритм (LRU) использует три бита дополнительной информации B0, B1 и B2, кроме битов присутствия и модификации информации операцией записи.
Алгоритм выбора устаревшей строки предусматривает при последних доступах:
- · к массиву М0 или М1 установление бита В0 = 1,
- · к массиву М0 установление бита В1,
- · к массиву М1 очищение бита В1.
- · к массиву М2, установление бита В2,
- · к массиву М3 очищение бита В2.
Биты LRU обновляются после каждого доступа к кэш-памяти и очищаются при каждой перезаписи или очистке кэш-памяти.
При кэш-промахе кэш-контроллер определяет множество-кандидата на удаление по его адресу, составленному из значений В0, В1 и В3. Это адрес удаляемого множества в двоичной системе счисления:
- · старшая двоичная цифра адреса соответствует значению бита В0,
- · младшая двоичная цифра адреса соответствует значению функции (В0 В2) V (В0 В1).
Кэш-память на основе прямого отображения и множественно-ассоциативной памяти является наиболее распространенной. Но, по сравнению с реализацией на основе чисто ассоциативной памяти, она требует не два, а три такта работы:
- 1. определение строки кэш-памяти (по младшим разрядам адреса физической оперативной памяти),
- 2. определение строки или множества строк (по части старших разрядов адреса физической оперативной памяти),
- 3. чтение или обновление (запись) строки.
Этот недостаток можно компенсировать совместной оптимизацией алгоритмов работы механизмов кэш-памяти и виртуальной памяти на основе использования таблицы математических страниц (наиболее распространенный вариант реализации виртуальной памяти).
Программист пишет свои программы в диапазоне адресов своей математической памяти, операционная система с использованием механизма виртуальной памяти производит динамическую переадресацию команд и данных в пространство адресов физической памяти, выделенных данной программе.
В установившихся режимах работы процессора переадресация программ производится с использованием TLB (буфера быстрой переадресации на основе ассоциативной памяти) за один такт процессора.
Этот такт работы механизма виртуальной памяти можно совместить с первым тактом работы кэш-памяти. В этом случае, в первом такте работы кэш-памяти, при формировании адресов кэш-памяти с прямым отображением можно использовать не физические адреса команды или данных, которые еще не сформированы, а математические. Но в следующем такте сравнения тегов, для идентификации массивов строк данных необходимо использовать в качестве тегов старшие разряды уже физической памяти. Следующий (третий) такт кэш-памяти используется для обращения к массиву команд или данных при кэш-попаданиях.
Вопросы для самопроверки:
- 1. Проблема адресации данных в кэш-памяти.
- 2. Кэш-память на основе ассоциативного поиска.
- 3. Кэш память с прямым отображением.
- 4. Кэш-память на основе множественно-ассоциативной схемы поиска.
- 5. Алгоритм определения множества-кандидата на удаление.
- 6. Совместная оптимизация работы системы виртуальной и кэш-памяти.