Расчет времени обращения микропроцессора к ячейкам памяти
При запросе к произвольной ячейки памяти первые 64 бита будут получены через 50 нсек. Зато три последующих 64 битных ячейки считаются за 10 нсек каждая. Это называется пакетный цикл чтения и 32 байта являются наименьшей единицей обмена. Таким образом, 32 байта считываются за 50+10х3=80 нсек. Это реальное время чтения произвольной ячейки. При этом первые 64 бита будут доступны для обработки уже через50 нсек, а три последующих будут загружаться в фоновом режиме. Для того чтобы перевести полученное время в такты МП необходимо знать соотношение частоты системной шины и частоты работы МП. Например, МП CELERON 300, а частота системной шины 66МГц, 50 нсек соответствует 3,3 такта, т. е. доступ к первым 64 битам длится 4 такта системной шины; 10 нсек приблизительно равно 1 такту системной шины, поэтому последующие 64 бита будут прочитаны за 3 такта. Таким образом, последовательность 4 – 1 – 1 – 1 называется формулой памяти.
Весь цикл чтения занимает 7 тактов системной шины, сама шина работает в 4,5 раза медленнее (300/66 =4,5). Таким образом, если 7х5=35 тактов процессора при обращении к произвольной ячейки памяти.
АРХИТЕКТУРА КЭШ-ПАМЯТИ
Существует понятие КЭШ-попадания, это если нужные данные оказались в КЭШ-памяти, и КЭШ-промах – если они там отсутствуют. При отсутствии данных, необходимо из ОП загрузить следующий блок данных.
Поиск блока данных для замены в КЭШ-памяти называется стратегией замещения. Можно выбрать блок, к которому реже всего обращаются (частотный анализ), можно выбрать по дате последнего обращения, можно по дате взятия из ОП, вернув те данные, которые были получены раньше всех, либо просто выбрать блок случайным образом.
Эффективность работы КЭШ-памяти в значительной мере зависит от интеллектуальности алгоритма замещения. Как правило, используется стратегия выбора по дате последнего обращения. Она относительно проста в реализации, но менее эффективна, чем частотная стратегия так как, современная DRAM память оптимизирована под 32 байтовые циклы чтения. Для этого КЭШ-память разбита на 32 байтовые блоки, называемые КЭШ-линейками или КЭШ-строками.
Каждая КЭШ-строка полностью заполняется за 1 цикл чтения и всегда заполняется или выгружается целиком, даже если процессор обращается к одному байту памяти, КЭШ-контроллер инициирует полный цикл обращения к основной памяти и запрашивает весь 32 байтный блок.
Так как объем КЭШ-памяти значительно меньше объема кэшируемой им оперативной памяти, каждой ячейке КЭШа соответствует множество ячеек кэшируемой памяти. Следовательно, приходится сохранять не только содержимое кэшируемой ячейки, но и ее адрес. Для этой цели каждая КЭШ-линейка имеет специальное поле, называемое тегом. В теге хранится адрес одного байта КЭШ-линейки, называемый базовым адресом. Разрядность тегов определяет объем кэшируемой памяти и если разрядность недостаточна, то часть памяти не сможет кэшироваться.
Рис.20. Архитектура КЭШ-памяти: 1- кэш прямого отображения; 2- полностью ассоциативный кэш; 3- множественно ассоциативный кэш
В КЭШ-памяти прямого отображения одна конкретная ячейка КЭШа соответствует нескольким конкретным ячейкам ОП. Это означает, что когда МП обращается за определенными данными, КЭШ должен найти эту информацию у себя в конкретной одной ячейке. КЭШ этого типа имеет следующий недостаток: так как несколько блоков ОП отображаются на один и тот же блок КЭШа в случае обращения программы за этими данными приходится постоянно перезаполнять КЭШ с доступом к ОП.
В полностью ассоциативной КЭШ-памяти данные блоков ОП могут размещаться в любых свободных блоках КЭШа. Преимущество такого подхода в том, что КЭШ, как правило, содержит информацию, к которой обращалась программа в самое последнее время. Недостаток в том, что поиск информации происходит медленно.
Множественно ассоциативная КЭШ-память сочетает в себе элементы двух предыдущих архитектур. Он делится на 2, 4 или 8 множеств. Эти множества имеют по много ячеек, в каждой из которых может размещаться блок данных. Каждый блок ОП может отображаться на любом из этих множеств. Однако, будет находиться только в одном конкретном месте в каждом множестве. Таким образом, достигается уменьшение времени поиска, причем становится менее вероятным, что часто используемые данные будут накладываться друг на друга.
Информация, содержащаяся в КЭШ-памяти, часто обновляется процессором. КЭШ-память транслирует подобные изменения в основную память, используя один из двух основных алгоритмов: сквозной или обратной записью.
В случае КЭШ-памяти со сквозной записью каждый раз, когда МП будет направлять измененные данные в КЭШ, контроллер КЭШа будет обновлять эти данные как в самом КЭше, так и в основной памяти, причем одновременно.
В случае КЭШ-памяти с обратной записью, измененный блок будет хранится в самом КЭШе, однако его обновление в основной памяти будет происходить только при определенных обстоятельствах:
1. когда необходимо будет записывать весь блок данных в связи с необходимостью размещения более нового блока вместо него;
2. когда другое устройство системы пытается произвести доступ к этому блоку данных в основной памяти;
3. когда контроллер устанавливает, что данные слишком долго ждут своего обновления.