Управление операциями с основной памятью осуществляется контроллером памяти, который либо входит в состав процессора, либо реализуется как самостоятельное внешнее устройство. Контроллер - это синхронное устройство, которое срабатывает исключительно по тактовым импульсам. На вход микросхемы подаётся адрес столбца, который по заднему фронту сигнала CAS заносится в регистр адреса столбца. Одновременно подготавливается выходной регистр данных, куда после стабилизации сигнала CAS выгружается информация выбранных усилителей считывания записи. Быстродействие микросхем характеризуется четырьмя параметрами: 1. $t_{ras}$ - минимальное время от перепада сигнала RAS с высокого уровня к низкому до момента появления и стабилиации считанных данных на выходе микросхемы. Это соответствует $T_д$. 2. $t_{rc}$ - минимальное время от начала доступа к одной строке микросхемы до начала доступа к следующей строке. Это соответствует $T_ц$. 3. $t_{cas}$ - минимальное время от перепада сигнала. CAS с высокого уровня к низкому до момента появления и стабилиации считанных данных на выходе микросхемы. 4. $t_{pc}$ - минимальное время от начала доступа к одному столбцу микросхемы до начала доступа к следующему столбцу. Возможности ускорения ядра микросхемы ограничены и связаны в основном с миниатюризацией запоминающих элементов. Наибольшее распространение получили шесть подходов к операции чтения: 1. Последовательный 2. Конвеерный 3. Регистровый 4. Страничный 5. Пакетный 6. Режим удвоенной скорости При использовании последовательного режима адрес и управляющие сигналы подаются на микросхему до поступления синхроимпульса. В момент прихода синхроимпульса вся входная информация запоминается в регистрах по его переднему фронту и начинается цикл чтения. Через некоторое время в пределах цикла данные появляются на внешней шине. Конвеерный режим - метод доступа, когда запрос к следующему адресу начинает появляться пока операция чтения по предыдущему не закончилась. В этом режиме цикл разбивается на два этапа: пока данные из предыдущего цикла передаются на внешнюю шину, происходит запрос на следующую операцию чтения. Таким образом два цикла перекрываются во времени, а время считывания увеличивается на один такт и данные поступают на вход только в следующем такте при первом чтении, а при последующих - следуют друг за другом. Регистровый режим используется редко, отличается наличием регистра на выходе микросхемы. Адрес и управляющие сигналы выдаются на шину до поступления синхроимпульса. С приходом положительного фронта синхроимпульса адрес записывается во внутренний регистр и начинается цикл чтения. Считанные данные заносятся в промежуточный выходной регистр и хранятся там до появления отрицательного фронта синхроимпульса, а с его поступлением передаются на шину. Метод однозначно определяет момент появления данных на внешней шине. Изменяя ширину импульса синхронизации можно менять время появления данных на шине. Страничный режим. При последующих ячейках кроме первой адрес строки уже известен и сигнал RAS можно не подавать - достаточно только подавать на микросхему адрес столбца, сопровождая его сигналом CAS. Режим быстрого страничного доступа - это когда полный адрес передаётся только при первом обращении к строке. Активизация регистра адреса столбца производится не по сигналу CAS, а по заднему фронту сигнала RAS. Сигнал RAS остаётся активным на протяжение всего страничного цикла и позволяет заносить в регистр адреса столбца новую информацию практически по переднему фронту сигнала CAS. Пакетный режим - это режим, при котором на запрос по конкретному адресу память возвращает пакет данных по этому адресу и нескольким следующим. Чаще всео разрядность ячейки памяти равно одному байту, а ширина шины четырём байтам, то одно обращение к памяти требует последовательного доступа к четырём смежным ячейкам - то есть пакету. Иногда длина пакета может программироваться и составлять 1/2/4/8 ячеек памяти. Адрес столбца заносится в микросхему только для первой ячейки пакета, а переход к следующему столбцу происходит уже внутри микросхемы. Это позволяет для каждого пакета исключить три из четырёх операций занесения адреса столбца, следовательно сократить среднее время доступа. В процессе разработки вычислительной машины Атлас было предложено использовать двухуровневую память, когда между основной память и процессором размещается небольшая, но быстродействующая буферная память. Эта память была названа "подчинённой", а затем распространение получил термин "кэш-память". Когда процессор пытается прочитать слово из основной памяти, сначала осуществляется поиск копии этого слова в кэше. Если такая копия существует, обращение к основной памяти не производится, а в процессор передаётся слово, извлечённое из кэш-памяти. Такая ситуация называется успешным обращением или попаданием. При отсутствии нужного слова в кэше, требуемое слово передаётся из основной памяти и одновременно из основной памяти в кэш пересылается блок данных, содержащих это слово. При взаимодействии с кэш-памятью основная память рассматривается как $M$ блоков фиксированной длины по $k$ слов в каждом. При считывании из какого-либо блока основной памяти, этот блок копируется в одну из строк кэш памяти. Так как $c$ - количество строк, намного меньше $M$ - количества блоков, то отдельная строка не может быть выделена постоянно одному и тому же блоку основной памяти. Каждой строке кэш-памяти соответствует признак или тег содержащий сведения о том какой блок в данный момент в данной строке. В качестве тега обычно используется часть адреса основной памяти. На эффективность применения кэш-памяти влияют: 1. Ёмкость кэш-памяти 2. Размер строки 3. Способ отображения основной памяти на кэш память 4. Алгоритм замещения информации в заполненной кэш-памяти 5. Алгоритм согласования содержимого основной и кэш-памяти 6. Число уровней кэш-памяти Выбор ёмкости кэш-памяти это определённый компромисс. С одной стороны, кэш-память должна быть достаточно мала, чтобы её стоимость не была высокой. С другой стороны, она должна быть достаточно большой, чтобы среднее время доступа к системе определялось временем доступа к кэш-памяти. Для большинства задач, близкой к оптимальной является кэш-памят от 1 до 512 КБ. Когда в кэш-память помещается строка, вместе с требуемым словом попадает и соседнее. По мере увеличения размера строки вероятность промахов сначала падает, так как в кэш попадают данные, которые потребуются в ближайшее время. Однако, когда размер строки становится излишне большим, вероятность промахов начинает расти. По мере увеличения размера строки каждое дополнительное слово оказывается дальше от запрошенного, поэтому оно менее вероятно понадобится в ближайшее время. На практике размер строки обычно выбирают равным ширине шины данных между кэш-памятью и основной. Способ отображения должен отвечать трём требованиям: 1. Обеспечивать быструю проверку кэш-памяти на наличие в ней копии блока основной памяти 2. Обеспечивать быстрое преобразование адреса блока основной памяти 3. Реализовывать 1 и 2 пункты более экономными средствами Рассмотрим систему с основной памятью из 256к слов и кэш-памятью 2 слова. Для адресации каждого слова основной памяти необходим 18-разрядный адрес. ОП разбивается на блоки по 16 слов. Всего блоков $2^{14}=16384$. При такой организации 18-разрядный адрес делится на две части: младшие 4 разряда - адрес слова в пределах блока, оставшиеся 14 - номер блока. В свою очередь для адресации любого слова в кэш памяти требуется 11-разрядный адрес. Кэш-память разбита на 128 строк, тогда 11-разрядный адрес слова делится на две части: 4 младших разряда - адрес слова в строке, остальные 7 - номер/адрес строки в кэш-памяти. Поэтому остаётся преобразовать 14-разрядный адрес блока в 7-разрядный адрес строки.