Виды и принципы работы кэш-памяти
Виды и принципы работы кэш-памяти
Реферат по предмету: Информатика и Вычислительная Техника выполнил студент группы 4381С Гаффарова Р.З.
Камский Государственный Политехнический Институт
Кафедра ЭОУП
г. Набережные Челны
2003 г.
Одним из важнейших устройств компьютера является память, или запоминающее устройство (ОЗУ). По определению, данном в книге "Информатика в понятиях и терминах", ОЗУ - "функциональная часть цифровой вычислительной машины, предназначенной для записи, хранения и выдачи информации, представленных в цифровом виде." Однако под это определение попадает как собственно память, так и внешние запоминающие устройства (типа накопителей на жестких и гибких дисках, магнитной ленты, CD-ROM), которые лучше отнести к устройствам ввода/вывода информации. Таким образом под компьютерной памятью в дальнейшем будет пониматься только "внутренняя память компьютера: ОЗУ, ПЗУ, кэш память и флэш-память".
Однако ОЗУ работает намного медленнее процессора. Другое дело - кэш. Очень быстрая и очень дорогая память. Но именно из-за дороговизны в компьютерной системе объем кэш составляет всего 10-15% от объема обычной ОЗУ. А также используются специальные алгоритмы работы материнской платы и процессора, обеспечивающие максимальную производительность при наличии встроенной кэш-памяти.
1. Общие понятие о кэшировании и кэш-памяти
Существующая уже более 100 лет архитектура компьютера, предложенная еще Фон Нейманом, практически не претерпела изменения. Все также процессор окружает оперативная, постоянная и внешняя память. И все также оперативная память, являющаяся одной из скоростных элементов памяти внутри компьютера, не достигает по скорости процессор на несколько порядков.
Естественно, что такой «тормоз» в виде одного из необходимых элементов компьютера не устраивал его создателей. Тем более, что в больших компьютерах уже давно существовало понятие кэш-памяти (cashe-memory), более быстрой, чем ОЗУ, но меньшей емкости. Было решено перенести ее архитектуру с БЭВМ на обычные персональные компьютеры.
Принцип работы кэш-памяти заключается в следующем. Процессор редко использует весь объем ОЗУ практически одновременно. Скакать из одного угла памяти в другой, периодически пошвыриваясь по всему ее объему – это не лучший способ использования ресурсов компьютера. Зачастую все обращения процессора к памяти сосредоточены в небольшой области (как показывает статистика – 5-10% от общего объема). Если данные из этой области как либо аппаратно скопировать в кэш, а затем постоянно сверять кэш и ОЗУ на предмет целостности данных, то можно обеспечить режим работы, при котором процессор будет обращаться только к кэш-памяти, тратя на это значительно меньше ресурсов и времени, чем обычно.
Естественно, что весь объем ОЗУ скопировать в кэш нет возможности – такой объем кэш-памяти по цене сравнивается со стоимостью компьютера, а смысла уменьшать объем ОЗУ тоже нет. Было решено реализовать алгоритм работы процессора, кэш-памяти и ОЗУ аппаратно, чтобы не тратить ресурсы процессора.
Принцип заключается в следующем: когда процессор обращается к определенной ячейке памяти, сегмент памяти определенного объема (этот объем называется объемом страницы кэш) копируется в кэш полностью. Если процессор дальше не совершит глобальный скачек на другой, далекий от текущего, адрес памяти, то дальнейшая работа процессора будет происходить напрямую с кэш, минуя ОЗУ, а контроллер кэш-памяти в промежутках, когда процессор занят вычислениями (либо параллельно с работой процессора) будет восстанавливать верные данные в ОЗУ либо в кэш (в случае наличия устройств, напрямую работающих с памятью). Естественно, чем больше будет страниц и чем больше будет их объем – тем выше будет скорость работы процессора.
Начиная с 386-х процессоров кэш-память устанавливалась на большинство материнских плат. Все это позволяло повышать производительность систем не в разы, а на порядки. Но с выходом 486 процессора кэш-память была разделена: появился кэш, реализованный непосредственно на кристалле процессора (в 486DX). Несмотря на малый его объем – 1 Кб – это уже был скачек в производительности и очень большой: ведь кэш, расположенный на кристалле процессора работает на частоте процессора, что в несколько раз превышает скорость работы кэш-памяти, установленной на материнской плате.
Начиная с 486 процессоров кэш-память испытывает подобное разделение на кэш 1-го уровня – установленный на кристалле (или в одном корпусе) процессора и работающий с ним на одной частоте, и кэш 2-го уровня, установленный на материнской плате, работающий быстрее обычной ОЗУ, но медленнее КЭШа первого уровня.
Однако этим не ограничивается использования кэш-памяти. Ведь таким образом ее можно использовать там, где существует проблема быстродействия, но есть возможность упорядочить данные. К таким применениям относят:
аппаратное кэширование жестких дисков (кэш-память устанавливается непосредственно на жестком диске либо на специальном контроллере);
программное кэширование CD-ROM, а также прочих устройств хранения информации (программно – при помощи операционной системы, аппаратно – на самом устройстве либо на контроллере).
И не только: сегодня зачастую даже самое простейшее устройство обладает своей памятью, работающей быстрее, чем само устройство. К таким относят принтеры, сканеры, модемы и т.д.
Но все-таки наиболее популярной является кэш-память первого уровня (процессорная) и второго (установленная на материнской плате).
2. Внутренний кэш процессора
Внутренне кэширование обращений к памяти применяется в процессорах, начиная с 486-го. С кэшированием связаны новые функции процессоров, биты регистров и внешние сигналы.
Процессоры 486 и Pentium имеют внутренний кэш первого уровня, в Pentium Pro и Pentium II имеется и вторичный кэш. Процессоры могут иметь как единый кэш инструкций и данных, так и общий. Выделенный кэш инструкций обычно используется только для чтения. Для внутреннего кэша обычно используется наборно-ассоциативная архитектура.
Строки в кэш-памяти выделяются только при чтении, политика записи первых процессоров 486 – только Write Through (сквозная запись) – полностью программно-прозрачная. Более поздние модификации 486-го и все старшие процессоры позволяют переключаться на политику Write Back (обратная запись).
Работу кэша рассмотрим на примере четырехканального наборно-ассоциативного кэша процессора 486. Кэш является несекторированным – каждый бит достоверности (Valid bit) относится к целой строке, так что стока не может являться “частично достоверной”.
Работу внутренней кэш-памяти характеризуют следующие процессы: обслуживание запросов процессора на обращение к памяти, выделение и замещение строк для кэширования областей физической памяти, обеспечение согласованности данных внутреннего кэша и оперативной памяти, управление кэшированием.
Любой внутренний запрос процессора на обращение к памяти направляется на внутренний кэш. Теги четырех строк набора, который обслуживает данный адрес, сравниваются со старшими битами запрошенного физического адреса. Если адресуемая область представлена в строке кэш-памяти (случая попадания –cache hit), запрос на чтение обслуживается только кэш-памятью, не выходя на внешнюю шину. Запрос на запись модифицирует данную строку, и в зависимости от политики записи либо сразу выходит на внешнюю шину (при сквозной записи), либо несколько позже (при использовании алгоритма обратной записи).
В случае промаха (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#. Если адресованная память присутствует в первичном кэше, процессор аннулирует строку – сбрасывает бит достоверности этой строки (она освобождается). Аннулирование строки процессор выполняет в любом состоянии.
Управление заполнением кэша возможно и на аппаратном и на программном уровнях. Процессор позволяет кэшировать любую область физической памяти, но внешние схемы могут запрещать процессору кэшировать определенные области памяти. Это делается по различным причинам, зачастую связанным с определенными условиями создания компьютерной системы.
3. Внешний кэш процессора
В отличие от внутренней кэш-памяти, внешняя больше напоминает обычную память. Однако алгоритм работы с ней практически такой же.
Внешняя кэш-память состоит из памяти данных, построенная на микросхемах SRAM, и контроллера кэша. В кэш-памяти хранится информация, копируемая из основной оперативной памяти. Каждый раз при обращении микропроцессора к памяти контроллер кэш-памяти проверяет наличие данных в кэше. Если эти данные в кэше есть (“попадание”), то микропроцессор получает данные из кэша. Если этих данных нет (“промах”), выполняется обычный цикл обращения к оперативной памяти DRAM.
Основным фактором, определяющим вероятность попадания, является емкость кэш-памяти. Как правило, при объеме кэша в 2 Кбайта вероятность попадания составляет от 50 до 60%. Поскольку размер кэш-памяти на современных компьютерах превышает 256 Кбайт, то вероятность попадания будет выше 90% (для компьютеров с объемом памяти ~ 256 Мбайт.)
Для реализации кэш-памяти в настоящее время разработаны эффективные однокристальные контроллеры. Наиболее широкое распространение получили контроллеры i82385 фирмы Intel и A38152 фирмы Asustec Microsystems.
Контроллер i82385 поддерживает 32 Кбайта кэш-памяти, и может работать в двух конфигурациях:
кэш-память с прямым отображением;
двухканальная модульно-ассоциативная кэш-память.
Первая конфигурация характеризуется простотой реализации, однако она оказывается неэффективной при работе в мультизадачных системах. В двухканальной реализации кэш-память разбивает все 4 Гбайтное адресное пространство на 262144 страницы по 16 Кбайт. 32-х разрядный физический адрес состоит из четырнадцатиразрядного адреса, определяющего информацию в кэш-памяти, и восемнадцатиразрядного тега, определяющего номер страницы. Каждый адрес оперативной памяти может быть отображен в одну из двух ячеек кэш-памяти.
Особенность контроллера кэш-памяти – обеспечение возможности параллельной работы микропроцессора с кэш-памятью и периферийных устройств с оперативной памятью в режиме прямого доступа. При записи данных по адресам, находящихся в кэше, контроллер ликвидирует копии этих блоков в кэше. Всю работу по синхронизации данных в DRAM и кэше берет на себя этот контроллер.
Одним из популярных контроллеров кэш-памяти является однокристальный контроллер кэш-памяти фирмы ASUSTEC, совместно с памятью данных 32 Кбайта обеспечивает вероятность попадания более 95%. Это достигается благодаря использованию четырехканального модульно-ассоциативного обращения, который отображает адрес оперативной памяти в одну из четырех ячеек кэш-памяти. При этом, вследствие организации последовательного обращения к памяти данных, требуется подключение всего одного банка памяти данных.
Контроллер A38152 фирмы Asustec имеет аппаратные и программные средства, обеспечивающие связанность информации: логика слежения за шиной, которая обеспечивает ликвидацию копий блоков в кэш-памяти, задание области адресов, не отображаемой в кэш-память.
На многих материнских платах можно выбирать между одноуровневой или многоуровневой системами организации памяти. По умолчанию устанавливается ражим многоуровневой памяти. Если Вы установите режим одноуровневой памяти, то кэш-память SRAM просто добавляется к адресному пространству основной оперативной памяти. Одноуровневую память лучше использовать, когда внутренний кэш процессора по объему превосходит емкость кэш-памяти на материнской плате.
4. Дополнительная кэш-память и программное кэширование
4.1. Кэширование дисков
Однако кэш-память процессора и оперативной памяти – это не единственный вариант ее использования. Фактически кэширование как процесс увеличения скорости за счет подмены устройства более быстрым, используется уже давно. Причем не аппаратно, а программно (аппаратно тоже, но это остается за высоким забором закрытых технологий производителей жестких дисков и других устройств).
Операционная система MS-DOS с 4 версии имеет в своем составе программу smartdrive, позволяющую наиболее используемые данные с жесткого диска (или дисков) перенести в память компьютера. При этом ОС, обращаясь к диску, будет фактически обращаться к памяти, за счет чего увеличится быстродействие. Позже, при наименьшей загрузке данные из памяти будут скинуты на диск.
Естественно, так как идеала не существует, то и в данной модели приходится чем-то жертвовать. Такой жертвой является свободная память. Однако если на первых компьютерах с объемом памяти 1-16 Мб это было существенно, то сегодня, когда объем памяти нередко всего лишь в несколько раз меньше объема диска, выделить под кэш 4-16 Мб не так уж и страшно.
Но сегодня думать об этом пользователю нет необходимости. Современные операционные системы Windows 95/98/Me/2000/XP организуют кэш для жесткого диска (и вообще для всех устройств хранения информации) в памяти самостоятельно, автоматически выделяя под любое устройство требуемый объем и делая это совершенно незаметно для пользователя.
Единственным недостатком подобной организации остается то, что в случае пропадания питания (и не очень хорошем блоке питания) данные из памяти на диск ОС сбросить не успеет, и они будут утеряны.
Стоит добавить, что сегодня практически все жесткие диски имеют встроенный кэш для увеличения работы. Причем ему не свойственен недостаток, описанный нами выше. Современные технологии позволяют жесткому диску даже после пропадания питания нормально очищать кэш и завершать работу.
4.2. Файл подкачки как кэш
Однако говоря о кэш, нельзя не упомянуть о такой его своеобразной реализации, как файл подкачки в Windows. Казалось бы: если компьютер и так тормозит из-за работы с ОЗУ, то зачем создавать лишние проблемы и скидывать часть данных из ОЗУ на диск - ведь это еще сильнее уменьшит скорость работы системы. Однако цели здесь совсем иные.
Основное назначение файла подкачки заключается в том, чтобы позволить активной программе воспользоваться практически всем объемом памяти, установленным на компьютере. Естественно, что если вы работаете в word и печатаете (уже два часа) три страницы какого-то текста, то все 512 Мб ОЗУ вам не нужны. Но если сфера вашей деятельности – видео, звуки либо работа в интернете (особенно в роли web-мастера), то это уже является существенным плюсом ОС. Вы можете запустить все нужные вам программы, а затем не только пользоваться практически 100% объема ОЗУ, установленного на компьютере, но и использовать его в качестве этакого громадного буфера обмена.
Кроме того, данная организация позволяет выполнить еще одну функцию: периодическую оптимизацию данных, содержащихся в ОЗУ с целью более рационального его использования. Удаление данных, уже не используемых, а также сохранение данных, редко используемых, на диске, позволяет высвободить дополнительный объем пространства.
Заключение
Кэш-память, появившаяся в конце 80-х, первоначально была доступна немногим и зачастую ей пророчили короткое будущее: цены на нее были астрономические, а реальной прибавки быстродействия было недостаточно. Однако бум высоких технологий в 90-х изменил отношение пользователей и специалистов к подобному явлению: сейчас кэш любят и уменьшают зачастую в случае опять же дороговизны со слезами.
Выпустив 486 процессор, фирма Intel произвела настоящую революцию. Здесь не только наличие встроенного математического сопроцессора и умножение частоты, но еще и наличие встроенного кэш. Грустно признать, но с этого момента подобных революций Intel уже не производила.
После этого был Pentium Pro, несущий на себе уже два уровня кэш-памяти, а затем и Pentium II, аналогичный предыдущему, но более быстрый и более дешевый.
Затем наметилось разделение: встроенный кэш второго уровня обеспечивал серьезный подъем производительности, но стоил дорого. Поэтому в дешевых моделях процессоров (Celeron Covington – 266-300 МГц) его устанавливать не спешили (опять же есть мнение, что кэш-то там есть, просто его работа запрещена).
Однако в следующей модели Celeron – Mednocino (300-433 МГц) кэш второй памяти уже был. И на сегодняшний день, по крайней мере Intel, больше не заявляет о том, что собирается лишать какой-либо свой будущий процессор этого полезного довеска.
Список литературы
Гук. М. Процессоры intel от 8086 до Pentium 4. С-Питербург -“Питер Паблишинг” – 2002.
В.Э. Фигурнов IBM PC для пользователя; 8 издание. Москва - «Финансы», 2001.
Обзор процессоров и шин ПВМ. Москва – 2001.
Косячков Р. Дед мороз – красный нос. Компьютерра-Спецвыпуск, Зима 2002, Зимние подарки. С. 8-13.
Радовский Н. Пути апгрейда. Компьютерра-Спецвыпуск, Зима 2002, Зимние подарки. С. 14-21.