Автор: Пользователь скрыл имя, 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
Некэшируемая память. В оперативной памяти выделяется отдельный сегмент, доступный всем процессорам, и он помечается как некэшируемый, т.е. информация из этого сегмента не копируется в кэши процессоров, а процессоры обращаются к ней напрямую. Обращение к некэшируемому сегменту идентифицируется либо по сигналам выбора модуля памяти, либо по содержимому старших разрядов кода адреса.
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», поскольку он не допускает записи. Состояния строк для каждого процессора определяются следующим образом:
Процессор контролирует операции записи в память на попадание в область, представленную в кэше инструкций. Контроль выполняется на уровне физических адресов, в случае попадания строка аннулируется. На случай самомодифицирующегося кода в Р5 и Р6 дополнительно выполняется контроль на попадание записи в предварительно выбранные инструкции. Этот контроль выполняется на уровне линейных адресов, в случае попадания очередь предварительно выбранных инструкций аннулируется. Если программа модифицирует область кода, обращаясь к нему через иной линейный адрес, чем тот, что используется в потоке инструкций, перед выполнением модифицированной инструкции должна выполняться сериализация (инструкцией CPUID).
В пространстве памяти компьютера имеются области, для которых кэширование принципиально недопустимо (например, разделяемая память адаптеров) или для которых непригодна политика обратной записи. Кроме того, кэширование иногда полезно отключать при выполнении однократно исполняемых участков программы (например инициализации) с тем, чтобы из кэша не вытеснялись более полезные фрагменты.
В процессорах шестого поколения в связи с их «беспорядочностью» и «спекулятивностью» обращения к памяти могут производиться с различными методами повышения эффективности. По возможностям кэширования память можно классифицировать следующим образом.
Доступные методы кэширования зависят от возможностей процессора. Базовые методы (сквозная и обратная запись или отмена кэширования) управляются атрибутами 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). Возможны следующие сочетания бит регистра:
Информация о работе Организация кэш-памяти современных процессоров