Организация кэш-памяти современных процессоров

Автор: Пользователь скрыл имя, 19 Мая 2013 в 15:37, курсовая работа

Описание работы

Основная память компьютеров реализуется на относительно медленной динамической памяти (DRAM), обращение к ней приводит к простою процессора – появляются такты ожидания (wait states). Статическая память (SRAM), построенная, как и процессор, на триггерных ячейках, по своей природе способна догнать современные процессоры по быстродействию и сделать ненужными такты ожидания (или хотя бы сократить их количество). Разумным компромиссом для построения экономичных и производительных систем явился иерархический способ организации оперативной памяти. Идея заключается в сочетании основной памяти большого объема на DRAM с относительно небольшой кэш-памятью на быстродействующих микросхемах SRAM.

Содержание

Введение 3
Соответствие между строками кэша и блоками оперативной памяти 7
Функция прямого отображения 8
Ассоциативная функция отображения 10
Секционированная ассоциативная функция отображения 12
Алгоритм замены строк кэша 14
Целостность информации в кэше и оперативной памяти 16
Размер блока 19
Кэширование в современных процессорах 21
Управление кэшированием 26
Кэш трасс 35
Общая организация и способ хранения трасс в кэше 38
Сравнение с альтернативной организацией кэша инструкций 42
Заключение 46
Список литературы 47

Работа содержит 1 файл

Курсовая Работа (Наташенька).doc

— 7.60 Мб (Скачать)

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

 

7. Размер блока

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

Следует учитывать и  такие последствия увеличения размера блока.

•   При фиксированной  физической емкости кэш-памяти применение блоков большого размера уменьшает  общее количество строк кэша. Это  приводит к тому, что каждая из строк  обновляется значительно чаще.

•   По мере увеличения размера блока каждое дополнительное слово находится все дальше от затребованного, и, таким образом, уменьшается вероятность, что процессору оно в ближайшее время потребуется (этот вывод следует из все того же свойства локализации ссылок).

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

 

8. Кэширование в современных процессорах

Структура средств  кэширования 32-разрядных процессоров  приведена на рисунке:


 

 

 

 

 

 

 

 

 

 

 

Первичный кэш инструкций тесно связан с блоком предварительной выборки, первичный кэш данных – с исполнительным блоком процессора. В процессоре 486 применялся единый первичный кэш. Вторичный кэш – общий, в Р6 он подключен к выделенной внутренней шине кэш-памяти. В процессорах 486 и Pentium вторичный кэш являлся внешним и подключается к системной шине процессора. Длина строки кэша: 16 байт – в 486,32 байт в Р5+, 64 байт – в современных процессорах. Строки процессор заполняет всегда целиком пакетными циклами чтения (4 передачи на строку) из основной памяти, выровненными по 64-байтным границам (32-байтным в P5). Любой внутренний запрос процессора на обращение к памяти направляется во внутренний кэш. Если затребованная область памяти присутствует в строке внутреннего кэша, то он обслужит этот запрос. В случае промаха запрос удовлетворяется сразу, как только затребованные данные считываются из ОЗУ, – заполнение строки до конца может происходить параллельно с обработкой полученных данных. Выделение и замещение строк у процессоров до Р6 выполняется только для кэш-промахов при чтении, при промахах записи заполнение строк производится только в Р6.

Буфер ассоциативной  трансляции TLB хранит вхождения в  каталог и таблицы страниц, к  которым обращались в последнее  время. В процессоре 486 для данных и инструкций применяется единый буфер TLB, в процессорах более поздних моделей этот буфер разделен. В Р6 и выше большие страницы (2 Мбайт в режиме РАЕ и 4 Мбайт в режиме PSE) обслуживаются раздельными буферами TLB. Буферы TLB активны в защищенном режиме при разрешенной страничной трансляции. При запрещенной трансляции или в реальном режиме TLB сохраняет свое содержимое до явной или неявной его очистки.

Буферы записи связаны  с исполнительным блоком процессора. Они позволяют на некоторое время откладывать фактическую запись во внешний кэш и основную память, уступая шину для других обменов, необходимых для исполнения следующих инструкций. Запись буферизуется во всех режимах процессора. Буферизация записи в порты ввода/вывода не производится.

Кэш-память процессоров  строится с учетом возможности обращений  к памяти со стороны внешних абонентов – других процессоров или иных контроллеров шины. Процессоры имеют механизмы внешнего слежения за состоянием собственного кэша с соответствующими аппаратными интерфейсами. Для поддержания согласованности данных кэша и основной памяти процессор отрабатывает циклы слежения (Snoop Cycle или Inquire Cycle), инициированные внешней (для него) системой. В этих циклах, происходящих при обращении к памяти со стороны внешнего абонента, процессор определяет присутствие затребованной области в своем собственном кэше. Если область отображается в кэше, то действия процессора зависят от состояния соответствующей строки кэша и типа внешнего обращения. Обращение по записи вызовет аннулирование данной строки. Обращение по чтению к области, соответствующей модифицированной («грязной») строке, вызовет выгрузку ее содержимого в основную память, прежде чем внешний абонент выполнит реальное считывание. В процессорах Р6 обращение к «грязной» строке со стороны другого процессора может вызывать выгрузку ее содержимого непосредственно в обращающийся процессор, что экономит время. Выгрузка этой строки в основную память будет произведена позже, согласно алгоритму обратной записи.

Кэш процессоров, начиная с Pentium, поддерживает протокол MESI, названный по определяемым им состояниям М (Modified), E (Exclusive), S (Shared) и I (Invalid). Первичный кэш инструкций реализует протокол лишь в части «SI», поскольку он не допускает записи. Состояния строк для каждого процессора определяются следующим образом:

  • М-состояние – строка присутствует в кэше только этого процессора и модифицирована, то есть отличается от содержимого основной памяти. Запись в эту строку не приведет к генерации внешнего (по отношению к локальной шине) цикла обращения;
  • E-состояние – строка присутствует в кэше только этого процессора, но не модифицирована (ее копия в,основной памяти действительна). Запись переведет ее в М-состояние, не вызывая внешнего цикла обращения;
  • S-состояние – строка присутствует в кэше этого процессора и потенциальноможет присутствовать в кэшах других процессоров, копия в памяти действительна. Запись в нее должна сопровождаться сквозной записью в основную память, что повлечет аннулирование соответствующих строк в других кэшах;
  • I-состояние – строка отсутствует в кэше, ее чтение может привести к генерации цикла заполнения строки. Запись в нее будет сквозной и выйдет на внешнюю шину.

 

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

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

В процессорах шестого поколения в связи с их «беспорядочностью» и «спекулятивностью» обращения к памяти могут производиться с различными методами повышения эффективности. По возможностям кэширования память можно классифицировать следующим образом.

  • Некэшируемая память UC (Uncacheable). Все обращения процессора по чтению и записи выполняются строго в порядке, предписанном программным кодом, и выходят на системную шину. Никакие спекулятивные чтения и предварительные выборки не используются. Такой тип требуется для ввода/вывода, отображенного на память. Работа процессора в таком режиме с обычным ОЗУ приведет к значительному снижению производительности.
  • Память с комбинируемой записью WC (Write Combining). Некэшируемая память, когерентность памяти не поддерживается протоколом шины. Спекулятивное чтение допустимо, записи могут комбинироваться и откладываться долюбого события, вызывающего сериализацию. Такой тип применим, например, для видеопамяти графического адаптера (порядок записей не важен).
  • Память со сквозной записью WT (Write-through). Кэшируемая память, все операции записи и отражаются в кэше, и выходят на системную шину. Чтения по возможности выполняются из кэша, кэш-промахи вызывают заполнение строк кэша. Спекулятивное чтение и комбинирование записей разрешено. Данный тип применим, например, для буферов кадров, а также для памяти, к которой могут обращаться устройства, подключенные к шине и не поддерживающие протоколов обеспечения когерентности.
  • Память с обратной записью WB (Write-back). Кэшируемая память, все операции чтения и записи по возможности выполняются только с кэш-памятью. Запись на системную шину выходит только при необходимости освобождения строк или по требованию от других абонентов шины, что уменьшает необязательный трафик шины. Спекулятивное чтение и комбинирование записи разрешено. Этот тип самый производительный, но требует поддержки протокола обеспечения когерентности от всех абонентов шины, обращающихся к данной области памяти.
  • Память с защищенной записью WP (Write protected). Кэшируемая память, чтения по возможности выполняются из кэша, промахи вызывают заполнение строк. Записи выходят на системную шину и вызывают аннулирование строк в кэшах всех остальных абонентов шины (процессоров).

 

Доступные методы кэширования  зависят от возможностей процессора. Базовые методы (сквозная и обратная запись или отмена кэширования) управляются атрибутами PCD (Page Cache Disable – запрет кэширования страницы) и PWT (Page Write Through – сквозная запись для страницы) системы управления страничной переадресации, более совершенные методы программируются только через регистры MTRR или PAT (см. ниже), если таковые имеются в процессоре.

 

9. Управление кэшированием

Механизм управления кэшированием включает в себя как  программные флаги, так и аппаратные средства, позволяющие разрешать и ограничивать возможности кэширования. Программные средства управления включают флаги управляющих регистров и биты элементов каталога и таблиц страниц, а также специальные инструкции. Аппаратные средства включают входные сигналы разрешения кэширования и управления политикой записи и очистки кэша, а также выходные сигналы управления вторичным кэшем. В Р6 имеются также регистры MTRR, определяющие возможности кэширования на уровне областей физической памяти. Эти механизмы имеют различные области воздействия. Если различные механизмы определяют возможности кэширования конкретной области памяти по-разному, будет реализовано самое жесткое из ограничений: запрет кэширования имеет приоритет над разрешением, а политика WT отменяет политику WB.

Кэшированием управляют  на этапе заполнения строк, последующие  кэш-попадания чтений памяти будут  обслуживаться только из кэша. Кроме  того, существует возможность аннулирования  строк – объявление их недостоверными и очистка всей кэш-памяти. Очистка внутренней кэш-памяти при сквозной записи (обнуление бит достоверности всех строк) осуществляется внешним сигналом FLUSH# за один такт системной шины (и, конечно же, по сигналу RESET). При обратной записи очистка кэша подразумевает также выгрузку всех модифицированных строк в основную память. Для этого, естественно, может потребоваться значительное число тактов системной шины. Кроме того, имеются инструкции аннулирования (инвалидации) INVD и WBINVD. Инструкция INVD аннулирует строки внутреннего кэша без выгрузки модифицированных строк, поэтому ее неосторожное использование при включенной политике обратной записи может привести к нарушению целостности данных в иерархической памяти. Инструкция WBINVD предварительно выгружает модифицированные строки в основную память (при сквозной записи ее действие совпадает с INVD).

В процессорах Pentium III появились  новые инструкции, связанные с  кэшированием. Стало возможно выгружать  данные из регистров ММХ и ХММ  в оперативную память минуя кэш, а также закачивать группу байт памяти в строку кэша заданного уровня, не помещая их в какие бы то ни было регистры процессора.

Аннулирование строк  выполняется при записи в отображаемую ими область памяти со стороны  внешних контроллеров (например, других процессоров). Если внешний (по отношению к рассматриваемому процессору) контроллер выполняет запись в память, процессору должен быть подан сигнал AHOLD. По этому сигналу процессор немедленно отдает управление только шиной адреса, на которую внешним контроллером устанавливается адрес памяти, сопровождаемый стробом EADS#, Если адресуемая память присутствует в первичном кэше, процессор сбрасывает бит достоверности этой строки (она освобождается).

Общее программное управление кэшированием осуществляется посредством  бит управляющего регистра CR0: CD (Cache Disable) и NW (No Write Through). Возможны следующие сочетания бит регистра:

  • CD=0, NW=0 – разрешен нормальный режим работы с максимально возможной эффективностью (политика WB, если поддерживается). Для отдельных областей или страниц памяти кэширование может ограничиваться (запрещаться или устанавливаться политика WT).
  • CD=0, NW=1 – запрещенная комбинация (вызывает отказ #GP).
  • CD=1, NW=0 – заполнение кэша запрещено, когерентность памяти поддерживается. Попадания чтения обслуживаются из кэша. Попадания записи модифицируют строки, при этом операции записи выходят в основную память (в 486 для любых строк, а в Р5 и Р6 только для строк в S-состоянии). Аннулирование строк разрешено, внешнее слежение (сообщение состояния) выполняется. Эффект от установки бит в это состояние аналогичен временному переводу сигнала KEN# в высокое (пассивное) состояние. Этот режим может использоваться для временного отключения кэша, после которого возможно его включение без очистки.
  • CD=1, NW=1 – заполнение кэша запрещено, когерентность памяти не поддерживается. Попадания чтения обслуживаются из кэша, попадания записи модифицируют кэш, но не основную память. Аннулирование строк заблокировано, очистку вызывают только инструкции INVD и WBINVD, внешнее слежение выполняется. Если после установки такого значения выполнить очистку кэша, кэш будет полностью отключен. Если же перед установкой этого сочетания бит кэш был заполнен, а очистка не производилась, кэш превращается в «замороженную» область статической памяти.

Информация о работе Организация кэш-памяти современных процессоров