Реферат по предмету "Информатика"


Кэш память

--PAGE_BREAK--  

Рис 1. Структура первичного кэша процессора 486
В случае промаха (Cache Miss) запрос на запись направляется только на внешнюю шину, а запрос на чтение обслуживается сложнее. Если этот зарос относится к кэшируемой области памяти, выполняется цикл заполнения целой строки кэша – все 16 байт (32 для Pentium) читаются из оперативной памяти и помещаются в одну из строк кэша, обслуживающего данный адрес. Если затребованные данные не укладываются в одной строке, заполняется и соседняя. Заполнение строки процессор старается выполнить самым быстрым способом – пакетным циклом с 32-битными передачами (64-битными для Pentium и старше).
Внутренний запрос процессора на данные удовлетворяется сразу, как только затребованные данные считываются из ОЗУ – заполнение строки до конца может происходить параллельно с обработкой полученных данных. Если в наборе, который обслуживает данный адрес памяти, имеется свободная строка (с нулевым битом достоверности), заполнена будет она и для нее установится бит достоверности. Если свободных строк в наборе нет, будет замещена строка, к которой дольше всех не было обращений. Выбор строки для замещения выполняется на основе анализа бит LRU (Least Recently Used) по алгоритму “псевдо-LRU”. Эти биты (по три на каждый из наборов) модифицируются при каждом обращении к строке данного набора (кэш-попадании или замещении).
Таким образом, выделение и замещение строк выполнятся только кэш-промахов чтения, при промахах записи заполнение строк не производится. Если затребованная область памяти присутствует в строке внутреннего кэша, то он обслужит этот запрос. Управлять кэшированием можно только на этапе заполнения строк; кроме того, существует возможность их аннулирования – объявления недостоверными и очистка всей кэш-памяти.
Очистка внутренней кэш-памяти при сквозной записи (обнуление бит достоверности всех строк) осуществляется внешним сигналом FLUSH# за один такт системной шины (и, конечно же, по сигналу RESET). Кроме того, имеются инструкции аннулирования INVD и WBINVD. Инструкция INVDаннулирует строки внутреннего кэша без выгрузки модифицированных строк, поэтому ее неосторожное использование при включенной политике обратной записи может привести к нарушению целостности данных в иерархической памяти. Инструкция WBINVD предварительно выгружает модифицированные строки в основную память (при сквозной записи ее действие совпадает с INVD). При обратной записи очистка кэша подразумевает и выгрузку всех модифицированных строк в основную память. Для этого, естественно, может потребоваться и значительное число тактов системной шины, необходимых для проведения всех операций записи. 
Аннулирование строк выполняется внешними схемами – оно необходимо в системах, у которых в оперативную память запись может производить не только один процессор, а и другие контроллеры шины – процессор или периферийные контроллеры. В этом случае требуются специальные средства для поддержания согласованности данных во всех ступенях памяти – в первичной и вторичной кэш-памяти и динамического ОЗУ. Если внешний (по отношению к рассматриваемому процессору) контроллер выполняет запись в память, процессору должен быть подан сигнал AHOLD. По этому сигналу процессор немедленно отдает управление шиной адреса A[31:4], на которой внешним контроллером устанавливается адрес памяти, сопровождаемый стробом EADS#. Если адресованная память присутствует в первичном кэше, процессор аннулирует строку – сбрасывает бит достоверности этой строки (она освобождается). Аннулирование строки процессор выполняет в любом состоянии.
Управление заполнением кэша возможно и на аппаратном и на программном уровнях. Процессор позволяет кэшировать любую область физической памяти. Внешние схемы могут запрещать процессору кэшировать определенные области памяти установкой высокого уровня сигнала KEN# во время циклов доступа к этим областям памяти. Этот сигнал управляет только возможностью заполнения строк кэша из адресованной области памяти. Программно можно управлять кэшируемостью каждой страницы памяти – запрещать единичным значением бита PCD(Page Cache Disable) в таблице или каталоге страниц. Для процессоров с WB-кэшем бит PWT(Page Write Through) позволяет постранично управлять и алгоритмом записи. Общее программное управление кэшированием осуществляется посредством бит управляющего регистра CR0:CD (Cache Disable) и NW(No Write Through). Возможны следующие сочетания бит регистра:
· CD=1, NW=1 – если после установки такого значения выполнить очистку кэша, кэш будет полностью отключен. Если же перед установкой этого сочетания бит кэша был заполнен, а очистка не производилась, кэш превращается в “замороженную” область статической памяти;
· CD=1, CW=0 – заполнение кэша запрещено, но сквозная запись разрешена. Эффект аналогичен временному переводу сигнала KEN# в высокое (пассивное) состояние. Этот режим может использоваться для временного отключения кэша, после которого возможно его включение без очистки;
· CD=0, NW=1 – запрещенная комбинация (вызывает отказ общей защиты);
· CD=0, NW=0 – нормальный режим работы со сквозной записью.
Для полного запрета кэша необходимо установить CD=1 и NW=1, после чего выполнить очистку (Flush). Без очистки кэш будет обслуживать запросы в случае попаданий.
Процессоры 486 и старше имеют выходные сигналы PCDи PWT, управляющие работой вторичного (внешнего) кэша (они же управляют и внутренним кэшем). В циклах обращения к памяти, когда страничные преобразования не используются (например, при обращении к таблице каталогов страниц), источником сигналов являются биты PCD и PWT регистра CR3, при обращении к каталогу страниц – биты PCD и PWT из дескриптора соответствующего вхождения каталога, при обращении к самим данным – биты PCD и PWT из дескриптора страницы. Кроме того, оба этих сигнала могут принудительно устанавливаться общими битами управления кэшированием CD и NW регистра CRO.
Режим обратной записи может разрешаться только аппаратно сигналом WB/WT#, вырабатываемым внешними схемами.
В пространстве памяти РС имеются области, для которых кэширование принципиально недопустимо (например, разделяемая память адаптеров) или непригодна политика обратной записи. Кроме того, кэширование иногда полезно отключать при выполнении однократно исполняемых участков программы (например, инициализации) с тем,  чтобы из кэша не вытиснялись более часто используемые фрагменты. Напомним, что запретить можно только заполнение строк, а обращение к памяти, уже представленной действительными строками кэша, все равно будет обслуживаться из кэша. Для полного запрета работы кэша строки должны быть аннулированы.
Программно при включенном режиме страничного преобразования кэшированием управляют биты атрибутов страниц (на уровне таблицы страниц и их каталога), биты PCD и PWT регистра CR3, и, наконец, глобально кэшированием управляют биты CD и NW регистра CR0.
Аппаратно (сигналом KEN#) внешние схемы могут управлять кэшированием (разрешать заполнение строк) для каждого конкретного адреса обращения к физической памяти.
Смешанная и разделенная кэш-память. Внутренняя кэш-память использовалась ранее как для инструкций(команд), так и для данных. Такая память называлась смешанной, а ее архитектура – Принстонской, в которой в единой кэш-памяти, в соответствии с классическими принципами фон Неймана, хранились и команды и данные.
Сравнительно недавно стало обычным разделять кэш-память на две – отдельно для инструкций и отдельно для данных.
Преимуществом смешанной кэш-памяти является то, что при заданном объеме, ей свойственна более высокая вероятность попаданий, по сравнению с разделенной, поскольку в ней автоматически устанавливается оптимальный баланс между инструкциями и данными. Если в выполняемом фрагменте программы обращения к памяти связаны, в основном, с выборкой инструкций, а доля обращений к данным относительно мала, кэш-память имеет тенденцию заполнения инструкциями и наоборот.
С другой стороны, при раздельной кэш-памяти, выборка инструкций и данных  может производиться одновременно, при этом исключаются возможные конфликты. Последнее особенно существенно в системах, использующих конвейеризацию команд, где процессор извлекает команды с опережением и заполняет ими буфер или конвейер.
Так, например, в процессоре Intel® 486 DX2 применялась смешанная кэш-память,
В  Intel® Pentium®  и в  AMD Athlon™ с их суперскалярной организацией – раздельная. Более того, в этих процессорах помимо кэш-памяти инструкций и кэш-памяти данных используется также и адресная кэш-память. Этот вид кэша используется в устройствах управления памятью, в том числе для преобразования виртуальных адресов в физические.
Благодаря использованию нанотехнологий, для снижения потребляемой мощности, увеличения быстродействия ЭВМ( что достигается сокращением времени обмена данными между процессором и кэш-памятью) существует возможность, а более того имеются реальные примеры того, что кэш-память реализуют в одном кристале с процессором. Такая внутренняя кэш-память реализуется по технологии статического ОЗУ и является наиболее быстродействующей. Объем ее обычно составляет 64-128 Кбайт, причем дальнейшее увеличение ее объема приводит обычно к снижению быстродействия из-за усложнения схем управления и дешифрации адреса.
 Альтернативой, широко применяемой в настоящее время, является вторая (внешняя) кэш-память большего объема, расположенная между внутренней кэш-памятью и ОП. В этой двухуровневой системе кэш-памяти, внутренней памяти отводится роль первого уровня  L1, а внешней — второго  L2. емкость  L2 обычно на порядок и более выше, чем L1, а быстродействие и стоимость ниже. Память второго уровня также строится обычно как статическое ОЗУ. Емкость ее может составлять от 256 Кбайт до 1 Мбайта и технически реализуется как в виде отдельной микросхемы, однако может размещаться и на одном кристалле с процессором.                                                                            
 Самые современные процессоры от крупнейших производителей оснащаются сегодня кэш-памятью емкостью у Intel  Pentium 4 на ядре Northwood — 512 Кбайт кэш-памяти L2, а  процессоры Prescott будут выпускаться по 0,09-микронной технологии и получат кэш-память второго уровня удвоенного объема, который составит 1 Мбайт. Intel продолжает широко рекламировать свой «экстремальный» игровой процессор Pentium 4 Extreme Edition на основе модифицированного серверного ядра Gallatin с тактовой частотой 3,40 ГГц и кэш-памятью третьего уровня объемом 2 Мбайта.  Она дополняет стандартный нортвудовский кэш L2 512 Кбайт и тоже работает на частоте ядра процессора (правда, с большей раза в два латентностью). Таким образом, в сумме новый Pentium 4 Extreme Edition имеет кэш-память объемом 2,5 Мбайт.                                                                              
Дополнительная кэш-память третьего уровня ведет начало от серверных процессоров Xeon MP на 0,13-микронном ядре Gallatin и не имеет ничего общего с грядущим 90-нанометровым Prescott, однако этот кристалл (ядро) все же немного переработали с целью поддержки системной шины 800 МГц, уменьшения энергопотребления и др. и упаковали в стандартный корпус от текущих Pentium 4.                                                                                               В свою очередь AMD Athlon 64 и AMD Opteron работающие на более высокой частоте 2200 МГц, производятся по 0,13-микронной технологии (SOI) и содержат 105,9 млн. транзисторов и отличаются от предшествующих Athlon XP новым ядром с 64-битными возможностями вычислений (наряду с улучшенными 32-битными на базе прежнего ядра Athlon XP), кэш-памятью второго уровня объемом 1 Мбайт (причем кэш у Атлонов инклюзивный, то есть полный объем с учетом 128 Кбайт L1 составляет 1152 Кбайт).
При доступе к памяти, ЦП  сначала обращается к кэш-памяти первого уровня. При промахе производится обращение к кэш-памяти второго уровня. Если информация отсутствует и в L2, производится обращение к ОП, и соответствующий блок заносится сначала в L2, а затем и в L1. Благодаря такой процедуре, часто запрашиваемая информация может быть легко восстановлена из кэш-памяти второго уровня.
Потенциальная экономия за счет применения L2 зависит от вероятности попаданий как в L1, так и L2. Однако, опыт  Intel и AMD показывает, что использование кэш-памяти второго уровня существенно улучшает производительность. Именно поэтому во всех проанонсированых производителями новейших версиях процессоров применяется двухуровневая и даже трехуровневая организация кэш-памяти.
Статическая и динамическая память
В каждом современном ЦП предусмотрено некоторое количество статической памяти, работающей на частоте ядра. Именно статической, поскольку использование динамической памяти в этих целях представляется крайне нерациональным.
Одна ячейка статической памяти состоит из шести транзисторов и двух резисторов (для техпроцессов с проектными нормами до 0,5 мкм могли быть использованы только четыре транзистора на одну ячейку, с дополнительным слоем поликремния и с более жесткими ограничениями по максимальной тактовой частоте), в то время как аналогичная структура динамической памяти состоит из одного транзистора и одного конденсатора.
Быстродействие статической памяти намного выше (емкость, используемая в динамической памяти, имеет определенную скорость зарядки до требуемого уровня, определяющую «частотный потолок»), но из-за большего количества составляющих элементов она существенно дороже в производстве и отличается более высоким энергопотреблением. Битовое значение ячейки статической памяти характеризуется состоянием затворов транзисторов, а динамической — уровнем заряда конденсатора. Так как конденсаторы имеют свойство с течением времени разряжаться, то для поддержания их состояния требуется регулярная перезарядка (для современных микросхем динамической памяти — приблизительно 15 раз в секунду). Кроме того, при операции чтения из ячейки динамической памяти конденсатор разряжается, т. е. ячейка утрачивает свой первоначальный заряд, а следовательно должна быть перезаряжена.
Очевидно, что статическая память используется там, где требуется максимальное быстродействие (регистры ЦП, кэш-память, локальная память сигнального процессора), а динамическая — там, где приоритетом является объем, а не скорость чтения-записи (оперативная память, буферы периферийных устройств).
TLB как разновидность кэш-памяти
Почти все современные ЦП обладают TLB (Translation Look-aside Buffers, вспомогательные буфера преобразования). Своим существованием они обязаны тому факту, что ЦП в работе используют преимущественно виртуальные адреса оперативной памяти, в то время как контроллеры оперативной и кэш-памяти работают преимущественно с реальными адресами. Для того чтобы не вычислять при каждом обращении к памяти реальный адрес из виртуального, в ЦП присутствуют таблицы соответствия виртуальных адресов страниц памяти реальным. Как правило, их объем невелик (от единиц до сотен записей), но этого вполне достаточно, поскольку часто запрашиваемые данные или команды обычно хорошо локализуются в пределах страницы памяти размером 4 или 8 Кбайт.
    продолжение
--PAGE_BREAK--Что же происходит, если запрашиваемого реального адреса какой-либо страницы не находится в TLB? A-box ЦП отрабатывает специальный вызов (exception trap), на который ОС должна адекватно отреагировать, т. е. произвести поиск нужной страницы в своих таблицах подсистемы виртуальной памяти. Если в процессе поиска окажется, что указанная страница находится в файле или разделе подкачки, то она должна незамедлительно быть оттуда считана в оперативную память. В итоге А-box ЦП получит реальный адрес нужной страницы памяти и процесс пойдет своим путем.
Стоит также заметить, что единой схемы адресации записей кэш-памяти не существует. Поэтому в зависимости от иерархического расположения и целевого назначения данной структуры кэш-памяти, а также идей построения определенного ЦП может использоваться выборочно как реальная, так и виртуальная адресация записей, или даже гибридная схема (реальное тегирование с виртуальной индексацией), что предполагает и соответствующую организацию структуры TLB.
Раздел 2
Организация кэш-памяти
Концепция кэш-памяти возникла раньше чем архитектура IBM/360, и сегодня кэш-память имеется практически в любом классе компьютеров, а в некоторых компьютерах — во множественном числе.

Рис. 2. Типовые значения ключевых параметров для кэш-памяти рабочих станций и серверов
Все термины, которые были определены раньше могут быть использованы и для кэш-памяти, хотя слово «строка» (line) часто употребляется вместо слова «блок» (block).
На рисунке 2 представлен типичный набор параметров, который используется для описания кэш-памяти.
Рассмотрим организацию кэш-памяти более детально, отвечая на четыре вопроса об иерархии памяти.
1. Где может размещаться блок в кэш-памяти?
Принципы размещения блоков в кэш-памяти определяют три основных типа их организации:
Если каждый блок основной памяти имеет только одно фиксированное место, на котором он может появиться в кэш-памяти, то такая кэш-память называется кэшем с прямым отображением (direct mapped). Это наиболее простая организация кэш-памяти, при которой для отображение адресов блоков основной памяти на адреса кэш-памяти просто используются младшие разряды адреса блока. Таким образом, все блоки основной памяти, имеющие одинаковые младшие разряды в своем адресе, попадают в один блок кэш-памяти, т.е.
(адрес блока кэш-памяти) =
(адрес блока основной памяти) mod (число блоков в кэш-памяти)
Если некоторый блок основной памяти может располагаться на любом месте кэш-памяти, то кэш называется полностью ассоциативным (fully associative).
Если некоторый блок основной памяти может располагаться на ограниченном множестве мест в кэш-памяти, то кэш называется множественно-ассоциативным (set associative). Обычно множество представляет собой группу из двух или большего числа блоков в кэше. Если множество состоит из n блоков, то такое размещение называется множественно-ассоциативным с n каналами (n-way set associative). Для размещения блока прежде всего необходимо определить множество. Множество определяется младшими разрядами адреса блока памяти (индексом):
(адрес множества кэш-памяти) =
(адрес блока основной памяти) mod (число множеств в кэш-памяти)
Далее, блок может размещаться на любом месте данного множества.
Диапазон возможных организаций кэш-памяти очень широк: кэш-память с прямым отображением есть просто одноканальная множественно-ассоциативная кэш-память, а полностью ассоциативная кэш-память с m блоками может быть названа m-канальной множественно-ассоциативной. В современных процессорах как правило используется либо кэш-память с прямым отображением, либо двух- (четырех-) канальная множественно-ассоциативная кэш-память.
2. Как найти блок, находящийся в кэш-памяти?
У каждого блока в кэш-памяти имеется адресный тег, указывающий, какой блок в основной памяти данный блок кэш-памяти представляет. Эти теги обычно одновременно сравниваются с выработанным процессором адресом блока памяти.
Кроме того, необходим способ определения того, что блок кэш-памяти содержит достоверную или пригодную для использования информацию. Наиболее общим способом решения этой проблемы является добавление к тегу так называемого бита достоверности (valid bit).
Адресация множественно-ассоциативной кэш-памяти осуществляется путем деления адреса, поступающего из процессора, на три части: поле смещения используется для выбора байта внутри блока кэш-памяти, поле индекса определяет номер множества, а поле тега используется для сравнения. Если общий размер кэш-памяти зафиксировать, то увеличение степени ассоциативности приводит к увеличению количества блоков в множестве, при этом уменьшается размер индекса и увеличивается размер тега.
3. Какой блок кэш-памяти должен быть замещен при промахе?
При возникновении промаха, контроллер кэш-памяти должен выбрать подлежащий замещению блок. Польза от использования организации с прямым отображением заключается в том, что аппаратные решения здесь наиболее простые. Выбирать просто нечего: на попадание проверяется только один блок и только этот блок может быть замещен. При полностью ассоциативной или множественно-ассоциативной организации кэш-памяти имеются несколько блоков, из которых надо выбрать кандидата в случае промаха. Как правило для замещения блоков применяются две основных стратегии: случайная и LRU.
В первом случае, чтобы иметь равномерное распределение, блоки-кандидаты выбираются случайно. В некоторых системах, чтобы получить воспроизводимое поведение, которое особенно полезно во время отладки аппаратуры, используют псевдослучайный алгоритм замещения.
Во втором случае, чтобы уменьшить вероятность выбрасывания информации, которая скоро может потребоваться, все обращения к блокам фиксируются. Заменяется тот блок, который не использовался дольше всех (LRU — Least-Recently Used).
Достоинство случайного способа заключается в том, что его проще реализовать в аппаратуре. Когда количество блоков для поддержания трассы увеличивается, алгоритм LRU становится все более дорогим и часто только приближенным. На рисунке 3 показаны различия в долях промахов при использовании алгоритма замещения LRU и случайного алгоритма.

Рис. 3. Сравнение долей промахов для алгоритма LRU и случайного алгоритма замещения
при нескольких размерах кэша и разных ассоциативностях при размере блока 16 байт
4. Что происходит во время записи?
При обращениях к кэш-памяти на реальных программах преобладают обращения по чтению. Все обращения за командами являются обращениями по чтению и большинство команд не пишут в память. Обычно операции записи составляют менее 10% общего трафика памяти. Желание сделать общий случай более быстрым означает оптимизацию кэш-памяти для выполнения операций чтения, однако при реализации высокопроизводительной обработки данных нельзя пренебрегать и скоростью операций записи.
К счастью, общий случай является и более простым. Блок из кэш-памяти может быть прочитан в то же самое время, когда читается и сравнивается его тег. Таким образом, чтение блока начинается сразу как только становится доступным адрес блока. Если чтение происходит с попаданием, то блок немедленно направляется в процессор. Если же происходит промах, то от заранее считанного блока нет никакой пользы, правда нет и никакого вреда.
Однако при выполнении операции записи ситуация коренным образом меняется. Именно процессор определяет размер записи (обычно от 1 до 8 байтов) и только эта часть блока может быть изменена. В общем случае это подразумевает выполнение над блоком последовательности операций чтение-модификация-запись: чтение оригинала блока, модификацию его части и запись нового значения блока. Более того, модификация блока не может начинаться до тех пор, пока проверяется тег, чтобы убедиться в том, что обращение является попаданием. Поскольку проверка тегов не может выполняться параллельно с другой работой, то операции записи отнимают больше времени, чем операции чтения.
Очень часто организация кэш-памяти в разных машинах отличается именно стратегией выполнения записи. Когда выполняется запись в кэш-память имеются две базовые возможности:
сквозная запись (write through, store through) — информация записывается в два места: в блок кэш-памяти и в блок более низкого уровня памяти. запись с обратным копированием (write back, copy back, store in) — информация записывается только в блок кэш-памяти. Модифицированный блок кэш-памяти записывается в основную память только когда он замещается. Для сокращения частоты копирования блоков при замещении обычно с каждым блоком кэш-памяти связывается так называемый бит модификации (dirty bit). Этот бит состояния показывает был ли модифицирован блок, находящийся в кэш-памяти. Если он не модифицировался, то обратное копирование отменяется, поскольку более низкий уровень содержит ту же самую информацию, что и кэш-память. Оба подхода к организации записи имеют свои преимущества и недостатки. При записи с обратным копированием операции записи выполняются со скоростью кэш-памяти, и несколько записей в один и тот же блок требуют только одной записи в память более низкого уровня. Поскольку в этом случае обращения к основной памяти происходят реже, вообще говоря требуется меньшая полоса пропускания памяти, что очень привлекательно для мультипроцессорных систем. При сквозной записи промахи по чтению не влияют на записи в более высокий уровень, и, кроме того, сквозная запись проще для реализации, чем запись с обратным копированием. Сквозная запись имеет также преимущество в том, что основная память имеет наиболее свежую копию данных. Это важно в мультипроцессорных системах, а также для организации ввода/вывода.
Когда процессор ожидает завершения записи при выполнении сквозной записи, то говорят, что он приостанавливается для записи (write stall). Общий прием минимизации остановов по записи связан с использованием буфера записи (write buffer), который позволяет процессору продолжить выполнение команд во время обновления содержимого памяти. Следует отметить, что остановы по записи могут возникать и при наличии буфера записи.
При промахе во время записи имеются две дополнительные возможности:
разместить запись в кэш-памяти (write allocate) (называется также выборкой при записи (fetch on write)). Блок загружается в кэш-память, вслед за чем выполняются действия аналогичные выполняющимся при выполнении записи с попаданием. Это похоже на промах при чтении. не размещать запись в кэш-памяти (называется также записью в окружение (write around)). Блок модифицируется на более низком уровне и не загружается в кэш-память. Обычно в кэш-памяти, реализующей запись с обратным копированием, используется размещение записи в кэш-памяти (в надежде, что последующая запись в этот блок будет перехвачена), а в кэш-памяти со сквозной записью размещение записи в кэш-памяти часто не используется (поскольку последующая запись в этот блок все равно пойдет в память).
Стратегия размещения.      На сложность этого механизма существенное влияние оказывает
стратегия размещения, определяющая, в какое место кэш-памяти
следует поместить каждый блок из основной памяти.
В зависимости от способа размещения данных основной памяти в кэш-памяти существует три типа кэш-памяти:
-                            кэш с прямым отображением (размещением);
-                            полностью ассоциативный кэш;
-                            множественный ассоциативный кэш или частично-ассоциативный.
      Кэш с прямым отображением (размещением) является самым
простым типом буфера. Адрес памяти однозначно определяет строку
кэша, в которую будет помещен блок информации. При этом предпо-
лагается, что оперативная память разбита на блоки и каждому та-
кому блоку в буфере отводится всего одна строка. Это простой и недорогой в реализации способ отображения. Основной его недостаток – жесткое закрепление за определенными блоками ОП одной строки в кэше. Поэтому, если программа поочередно обращается к словам из двух различных блоков, отображаемых на одну и ту же строку кэш-памяти, постоянно будет происходить обновление данной строки и вероятность попадания будет низкой.                                                        
      Кэш с полностью ассоциативным отображением  позволяет преодолеть недостаток прямого, разрешая загрузку любого блока ОП в любую строку кэш-памяти. Логика управления выделяет в адресе ОП два поля: поле тега и поле слова. Поле тега совпадает с адресом блока ОП. Для проверки наличия копии блока в кэш-памяти, логика управления кэша должна одновременно проверить теги всех строк на совпадение с полем тега адреса. Ассоциативное отображение обеспечивает гибкость при выборе строки для вновь записываемого блока. Принципиальный недостаток этого способа – в необходимости использования дорогой ассоциативной памяти.                                                                         
     Множественно-ассоциативный тип или частично-ассоциативный тип отображения – это один из возможных компромиссов, сочетающий достоинства прямого и ассоциативного способов. Кэш-память ( и тегов и данных) разбивается на некоторое количество модулей. Зависимость между модулем и блоками ОП такая же жесткая, как и при прямом отображении. А вот размещение блоков по строкам модуля произвольное и для поиска нужной строки в пределах модуля используется ассоциативный принцип. Этот способ отображения наиболее широко распространен в современных микропроцессорах.
Отображение секторов ОП в кэш-памяти.
Данный тип отображения применяется во всех современных ЭВМ и состоит в том, что вся ОП разбивается на секторы, состоящие из фиксированного числа последовательных блоков. Кэш-память также разбивается на секторы, содержащие такое же количество строк. Расположение блоков  в секторе ОП и секторе кэша полностью совпадает. Отображение сектора на кэш-память осуществляется ассоциативно, те любой сектор из ОП может быть помещен в любой сектор кэша. Таким образом, в процессе работы АЛУ обращается в поисках очередной команды к ОП, в результате чего, в кэш загружается( в случае отсутствия там блока, содержащего эту команду), целый сектор информации из ОП, причем по принципу локальности, за счет этого достигается значительное увеличение быстродействия системы.
Иерархическая модель кэш-памяти
Как правило, кэш-память имеет многоуровневую архитектуру. Например, в компьютере с 32 Кбайт внутренней (в ядре ЦП) и 1 Мбайт внешней (в корпусе ЦП или на системной плате) кэш-памяти первая будет считаться кэш-памятью 1-го уровня (L1), а вторая — кэш-памятью 2-го уровня (L2). В современных серверных системах количество уровней кэш-памяти может доходить до четырех, хотя наиболее часто используется двух- или трехуровневая схема.
В некоторых процессорных архитектурах кэш-память 1-го уровня разделена на кэш команд (Instruction Cache, I-cache) и кэш данных (Data Cache, D-cache), причем необязательно одинаковых размеров. С точки зрения схемотехники проще и дешевле проектировать раздельные I-cache и D-cache: выборку команд проводит I-box, а выборку данных — Е-box и F-box, хотя в обоих случаях задействуются А-box и С-box. Все эти блоки велики, и обеспечить им одновременный и быстрый доступ к одному кэшу проблематично. Кроме того, это неизбежно потребовало бы увеличения количества портов доступа, что также усложняет задачу проектирования.
Так как I-cache и D-cache должны обеспечивать очень низкие задержки при доступе (это справедливо для любого кэша L1), приходится жертвовать их объемом — обычно он составляет от 16 до 32 Кбайт. Ведь чем меньше размер кэша, тем легче добиться низких задержек при доступе.
Кэш-память 2-го уровня, как правило, унифицирована, т. е. может содержать как команды, так и данные. Если она встроена в ядро ЦП, то говорят о S-cache (Secondary Cache, вторичный кэш), в противном случае — о B-cache (Backup Cache, резервный кэш). В современных серверных ЦП объем S-cache составляет от одного до нескольких мегабайт, a B-cache — до 64 Мбайт. Если дизайн ЦП предусматривает наличие встроенной кэш-памяти 3-го уровня, то ее именуют T-cache (Ternary Cache, третичный кэш). Как правило, каждый последующий уровень кэш-памяти медленнее, но больше предыдущего по объему. Если в системе присутствует B-cache (как последний уровень модели кэш-памяти), то он может контролироваться как ЦП, так и набором системной логики.
    продолжение
--PAGE_BREAK--Если в момент выполнения некоторой команды в регистрах не окажется данных для нее, то они будут затребованы из ближайшего уровня кэш-памяти, т. е. из D-cache. В случае их отсутствия в D-Cache запрос направляется в S-cache и т. д. В худшем случае данные будут доставлены непосредственно из памяти. Впрочем, возможен и еще более печальный вариант, когда подсистема управления виртуальной памятью операционной системы (ОС) успевает вытеснить их в файл подкачки на жесткий диск. В случае доставки из оперативной памяти потери времени на получение нужных данных могут составлять от десятков до сотен тактов ЦП, а в случае нахождения данных на жестком диске речь уже может идти о миллионах тактов.
Ассоциативность кэш-памяти
Одна из фундаментальных характеристик кэш-памяти — уровень ассоциативности — отображает ее логическую сегментацию. Дело в том, что последовательный перебор всех строк кэша в поисках необходимых данных потребовал бы десятков тактов и свел бы на нет весь выигрыш от использования встроенной в ЦП памяти. Поэтому ячейки ОЗУ жестко привязываются к строкам кэш-памяти (в каждой строке могут быть данные из фиксированного набора адресов), что значительно сокращает время поиска. С каждой ячейкой ОЗУ может быть связано более одной строки кэш-памяти: например, n-канальная ассоциативность (n-way set associative) обозначает, что информация по некоторому адресу оперативной памяти может храниться в п мест кэш-памяти.
Выбор места может проводиться по различным алгоритмам, среди которых чаще всего используются принципы замещения LRU (Least Recently Used, замещается запись, запрошенная в последний раз наиболее давно) и LFU (Least Frequently Used, запись, наименее часто запрашиваемая), хотя существуют и модификации этих принципов. Например, полностью ассоциативная кэшпамять (fully associative), в которой информация, находящаяся по произвольному адресу в оперативной памяти, может быть размещена в произвольной строке. Другой вариант — прямое отображение (direct mapping), при котором информация, которая находится по произвольному адресу в оперативной памяти, может быть размещена только в одном месте кэш-памяти. Естественно, этот вариант обеспечивает наибольшее быстродействие, так как при проверке наличия информации контроллеру придется «заглянуть» лишь в одну строку кэша, но и наименее эффективен, поскольку при записи контроллер не будет выбирать «оптимальное» место. При одинаковом объеме кэша схема с полной ассоциативностью будет наименее быстрой, но наиболее эффективной.
Полностью ассоциативный кэш встречается на практике, но, как правило, у него очень небольшой объем. Например, в ЦП Cyrix 6x86 использовалось 256 байт такого кэша для команд перед унифицированным 16-или 64-Кбайт кэшем L1. Часто полноассоциативную схему применяют при проектировании TLB (о них будет рассказано ниже), кэшей адресов переходов, буферов чтения-записи и т. д. Как правило, уровни ассоциативности I-cache и D-cache довольно низки (до четырех каналов) — их увеличение нецелесообразно, поскольку приводит к увеличению задержек доступа и в итоге негативно отражается на производительности. В качестве некоторой компенсации увеличивают ассоциативность S-cache (обычно до 16 каналов), так как задержки при доступе к этому кэшу неважны. Например, согласно результатам исследований часто используемых целочисленных задач, у Intel Pentium III 16 Кбайт четырехканального D-cache было достаточно для покрытия около 93% запросов, а 16-Кбайт четырехканального I-cache — 99% запросов.
Размер строки и тега кэш-памяти
Немаловажная характеристика кэш-памяти — размер строки. Как правило, на одну строку полагается одна запись адреса (так называемый тег), которая указывает, какому адресу в оперативной памяти соответствует данная линия. Очевидно, что нумерация отдельных байтов нецелесообразна, поскольку в этом случае объем служебной информации в кэше в несколько раз превысит объем самих данных. Поэтому один тег обычно полагается на одну строку, размер которой обычно 32 или 64 байта (реально существующий максимум 1024 байта), и эквивалентен четырем (иногда восьми) разрядностям системной шины данных. Кроме того, каждая строка кэш-памяти сопровождается некоторой информацией для обеспечения отказоустойчивости: одним или несколькими битами контроля четности (parity) или восемью и более байтами обнаружения и коррекции ошибок (ЕСС, Error Checking and Correcting), хотя в массовых решениях часто не используют ни того, ни другого.
Размер тега кэш-памяти зависит от трех основных факторов: объема кэш-памяти, максимального кэшируемого объема оперативной памяти, а также ассоциативности кэш-памяти. Математически этот размер рассчитывается по формуле:
Stag=log2(Smem*A/Scache),
где Stag — размер одного тега кэш-памяти, в битах; Smem — максимальный кэшируемый объем оперативной памяти, в байтах; Scache — объем кэш-памяти, в байтах; А — ассоциативность кэш-памяти, в каналах.
Отсюда следует, что для системы с 1-Гбайт оперативной памятью и 1-Мбайт кэш-памятью с двухканальной ассоциативностью потребуется 11 бит для каждого тега.      Примечательно, что собственно размер строки кэш-памяти никак не влияет на размер тега, но обратно пропорционально влияет на количество тегов. Следует понимать, что размер строки кэш-памяти не имеет смысла делать меньше разрядности системной шины данных, но многократное увеличение размера приведет к чрезмерному засорению кэш-памяти ненужной информацией и излишней нагрузке на системную шину и шину памяти. Кроме того, максимально кэшируемый объем кэш-памяти не обязан соответствовать максимально возможному устанавливаемому объему оперативной памяти в системе. Если возникнет ситуация, когда оперативной памяти окажется больше, чем может быть кэшировано, то в кэш-памяти будет присутствовать информация только из нижнего сегмента оперативной памяти. Именно такой была ситуация с платформой Socket7/Super7. Наборы микросхем для этой платформы позволяли использовать большие объемы оперативной памяти (от 256 Мбайт до 1 Гбайт), в то время как кэшируемый объем часто был ограничен первыми 64 Мбайт (речь идет о B-cache, находящемся на системной плате) по причине использования дешевых 8-бит микросхем теговой SRAM (2 бита из которых резервировалось под указатели действительности и измененности строки). Это приводило к ощутимому падению производительности.
Какая информация содержится в тегах кэш-памяти? Это информация об адресах, но как можно точно отобразить расположение строки кэш-памяти на всем пространстве кэшируемого объема оперативной памяти, используя столь незначительное количество адресных битов? Это понятие является фундаментальным в понимании принципов функционирования кэш-памяти. Рассмотрим предыдущий пример, с 11-бит тегами. Учитывая логическое сегментирование благодаря двухканальной ассоциативности, можно рассматривать данную кэш-память как состоящую из двух независимых сегментов по 512 Кбайт каждый. Представим оперативную память как состоящую из «страниц» по 512 Кбайт каждая — их будет соответственно 2048 штук. Далее, Iog2 (2048) = 11 (основание логарифма равно 2, так как возможны только два логических состояния каждого бита). Это означает, что фактически тег — не номер отдельной строки кэш-памяти, а номер «страницы» памяти, на которую отображается та или иная строка. Другими словами, в пределах «страницы» сохраняется прямое соответствие ее «строк» с соответствующими строками кэш-памяти, т. е. п-я строка кэш-памяти соответствует n-й «строке» данной «страницы» оперативной памяти.
Рассмотрим механизм работы кэш-памяти разных видов ассоциативности. Допустим, имеется абстрактная модель с восемью строками кэш-памяти и 64 эквивалентными строками оперативной памяти. Требуется поместить в кэш строку 9 оперативной памяти (заметим, что все строки нумеруются от нуля и по возрастающей). В модели с прямым отображением эта строка может занять только одно место: 9 mod 8=1 (вычисление остатка от деления нацело), т. е. место строки 1. Если взять модель с двухканальной ассоциативностью, то эта строка может занять одно из двух мест: 9 mod 4=1, т. е. строку 1 любого канала (сегмента). Полноассоциативная модель предоставляет свободу для размещения, и данная строка может занять место любой из восьми имеющихся. Другими словами, фактически имеется 8 каналов, каждый из которых состоит из 1 строки.
Ни одна из вышеуказанных моделей не позволит, разумеется, поместить в кэш больше строк, чем он физически в состоянии разместить, они лишь предлагают различные варианты, различающиеся балансом эффективности использования кэша и скорости доступа к нему.
Типы подключения кэш-памяти
Количество портов чтения-записи кэш-памяти — показатель того, сколько одновременных операций чтения-записи может быть обработано. Хотя жестких требований и нет, определенное соответствие набору функциональных устройств ЦП должно прослеживаться, так как отсутствие свободного порта во время исполнения команды приведет к вынужденному простою.
Существует два основных способа подключения кэшпамяти к ЦП для чтения: сквозной и побочный (Look-Through и Look-Aside). Суть первого в том, что при необходимости данные сначала запрашиваются у контроллера кэш-памяти самого высокого уровня, который проверяет состояние подключенных тегов и возвращает либо нужную информацию, либо отрицательный ответ, и в этом случае запрос перенаправляется в более низкий уровень иерархии кэш-памяти или в оперативную память. При реализации второго способа чтения запрос одновременно направляется как кэш-контроллеру самого высокого уровня, так и остальным кэш-контроллерам и контроллеру оперативной памяти. Недостаток первого способа очевиден: при отсутствии информации в кэше высокого уровня приходится повторять запрос, и время простоя ЦП увеличивается. Недостаток второго подхода — высокая избыточность операций и, как следствие, «засорение» внутренних шин ЦП и системной шины ненужной информацией. Логично предположить, что если для кэшей L1 оптимальна сквозная схема, то для T-cache или B-cache побочная схема может оказаться более выгодной. Для S-cache выбор неоднозначен.
Различают также локальный и удаленный кэш. Локальным называют кэш, находящийся либо в ядре ЦП, либо на той же кремниевой подложке или в корпусе ЦП, удаленным — размещенный на системной плате. Соответственно локальным кэшем управляет контроллер в ядре ЦП, а удаленным — НМС системной платы. Локальный кэш с точки зрения быстродействия предпочтительнее, так как интерфейс к удаленному кэшу обычно мультиплексируется с системной шиной. С одной стороны, когда другой ЦП захватывает общую системную шину или какой-либо периферийный контроллер обращается к памяти напрямую, удаленный кэш может оказаться временно недоступным. С другой — такой кэш легче использовать в многопроцессорных системах.
Существуют два распространенных способа записи в кэш: сквозной (Write-Through) и обратной (Write-Back) записи. В первом случае информация одновременно сохраняется как в текущий, так и в более низкий уровень иерархии кэш-памяти (или прямо в оперативную память при отсутствии такового). Во втором — данные сохраняются только в текущем уровне кэш-памяти, при этом возникает ситуация, когда информация в кэше и оперативной памяти различается, причем последняя становится устаревшей. Для того чтобы при сбросе кэша информация не была необратимо потеряна, к каждой строке кэша добавляется «грязный» бит (dirty bit, иначе известный как modified). Он нужен для обозначения того, соответствует ли информация в кэше информации в оперативной памяти, и следует ли ее записать в память при сбросе кэша.
Также следует упомянуть способ резервирования записи (write allocation). При записи данных в оперативную память часто возникает ситуация, когда записываемые данные могут скоро понадобиться, и тогда их придется довольно долго подгружать. Резервирование записи позволяет частично решить эту проблему: данные записываются не в оперативную память, а в кэш. Строка кэша, вместо которой записываются данные, полностью выгружается в оперативную память. Так как вновь записанных данных обычно недостаточно для формирования полной строки кэша, из оперативной памяти запрашивается недостающая информация. Когда она получена, новая строка записывается, и тег обновляется. Определенных преимуществ или недостатков такой подход не имеет — иногда это может дать незначительный прирост производительности, но также и привести к засорению кэша ненужной информацией.
Сегментирование кэш-памяти и быстродействие жестких дисков
 
В первой части данного обзора мы познакомились с режимом Performance Mode у SCSI-дисков Seagate Cheetah со скоростью вращения 10 000 и 15 000 об./мин — Cheetah 10K.7 и Cheetah 15K.4. Напомню, что утилита Seagate SeaTools Enterprise позволяет пользователю управлять политикой кэширования и, в частности, переключать новейшие SCSI-диски Seagate между двумя разными моделями кэширования — Desktop Mode и Server Mode. Этот пункт в меню SeaTools носит название Performance Mode (PM) и может принимать два значения — On (Desktop Mode) и Off (Server Mode). Отличия между этими двумя режимами чисто программные — в случае Desktop Mode кэш-память жесткого диска разбивается на фиксированное число сегментов постоянного (одинакового) объема и далее они используются для кэширования обращений при чтении и записи. Причем, в отдельном пункте меню пользователь даже может сам назначать количество сегментов (управлять сегментированием кэша): например, вместо дефолтных 32-х сегментов проставить другое значение (при этом объем каждого сегмента пропорционально уменьшится).
В случае же Server Mode сегменты буфера (кэша диска) могут динамически (пере)назначаться, меняя при этом свой размер и количество. Микропроцессор (и микропрограмма) диска сами динамически оптимизируют количество (и емкость) сегментов кэш-памяти в зависимости от поступающих для исполнения на диск команд.
Тогда мы смогли выяснить, что использование новых накопителей Seagate Cheetah в режиме «Desktop» (при фиксированном сегментировании по умолчанию — на 32 сегмента) вместо дефолтного «Server» с динамическим сегментированием способно немного поднять производительность дисков в ряде задач, более характерных для настольного компьютера или медиа-серверов. Причем, эта прибавка порой может достигать 30-100% (!) в зависимости от типа задачи и модели диска, хотя в среднем она оценивается величиной 30%, что, согласитесь, тоже неплохо. Среди таких задач — рутинная работа настольного ПК (тесты WinBench, PCmark, H2bench), чтение и копирование файлов, дефрагментация. При этом в чисто серверных приложениях производительность накопителей почти не падает (если и падает, то незначительно). Впрочем, заметный выигрыш от использования Desktop Mode мы смогли наблюдать только на диске Cheetah 10K.7, тогда как ее старшей сестрице Cheetah 15K.4 оказалось почти все равно, в каком из режимов работать над настольными приложениями.
Пытаясь разобраться дальше, как влияет сегментирование кэш-памяти этих жестких дисков на производительность в различных приложениях и какие режимы сегментирования (какое количество сегментов памяти) более выгодно при выполнении тех или иных задач, я исследовал влияние количества сегментов кэш-памяти на производительность диска Seagate Cheetah 15K.4 в широком диапазоне значений — от 4 до 128 сегментов (4, 8, 16, 32, 64 и 128). Результаты этих исследований и предлагаются вашему вниманию в этой части обзора. Подчеркну, что данные результаты интересны не только сугубо для этой модели дисков (или SCSI-дисков Seagate в целом) — сегментирование кэш-памяти и выбор количества сегментов — это одно из основных направлений оптимизации firmware, в том числе, настольных дисков с интерфейсом ATA, которые сейчас также оснащаются преимущественно буфером 8 Мбайт. Поэтому описанные в данной статье результаты производительности накопителя в различных задачах в зависимости от сегментирования его кэш-памяти имеют отношение и к индустрии настольных ATA-накопителей. А поскольку методика испытаний была описана в первой части, переходим непосредственно к самим результатам.
Впрочем, прежде, чем перейти к обсуждению результатов, взглянем чуть подробнее на устройство и работу сегментов кэш-памяти диска Seagate Cheetah 15K.4, чтобы лучше понимать, о чем идет речь. Из восьми мегабайт для собственно кэш-памяти (то есть для кэширующих операций) здесь доступно 7077 Кбайт (остальное — служебная область). Эта область делится на логические сегменты (Mode Select Page 08h, byte 13), которые используются для чтения и записи данных (для осуществления функций упреждающего чтения с пластин и отложенной записи на поверхность диска). Для обращения к данным на магнитных пластинах сегменты используют именно логическую адресацию блоков накопителя. Диски этой серии поддерживают максимум 64 сегмента кэш-памяти, причем длина каждого сегмента равна целому числу секторов диска. Объем доступной кэш-памяти, по всей видимости, распределяется поровну между сегментами, то есть если сегментов, скажем, 32, то объем каждого сегмента равен примерно 220 Кбайт. При динамической сегментации (в режиме PM=off) количество сегментов может меняться винчестером автоматически в зависимости от потока команд от хоста.
    продолжение
--PAGE_BREAK--


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.