ЭВМ, реализованная по классической
фон-неймановской архитектуре, включает в себя:
• процессор, содержащий арифметико-логическое устройство (АЛУ) и центральное
устройство управления (ЦУУ);
• память, которая в современных ЭВМ подразделяется на оперативную (ОП или ОЗУ)
и сверхоперативную (СОЗУ);
• внешние устройства, к которым относят внешнюю память
(ВЗУ) и устройства ввода/вывода (УВВ).
В этой главе рассмотрим организацию устройств памяти. Принципы взаимодействия
других устройств ЭВМ с процессором рассмотрены в разд. 6.3.
Концепция многоуровневой
памяти
Известно, что память ЭВМ предназначена для хранения программ и данных, причем
эффективность работы ЭВМ во многом определяется характеристиками ее памяти. Во
все времена к памяти предъявлялись три основных требования: большой объем,
высокое быстродействие и
низкая (умеренная) стоимость.
Все перечисленные выше требования к памяти являются взаимно-противоречивыми,
поэтому пока невозможно реализовать один тип ЗУ, отвечающий всем названным
требованиям. В современных ЭВМ организуют комплекс разнотипных ЗУ,
взаимодействующих между собой и обеспечивающих приемлемые характеристики памяти
ЭВМ для каждого конкретного применения. В основе большинства ЭВМ лежит
трехуровневая организация памяти: сверхоперативная (СОЗУ) — оперативная (ОЗУ) —
внешняя (ВЗУ). СОЗУ и ОЗУ могут непосредственно взаимодействовать с
процессором, ВЗУ взаимодействует только с ОЗУ.
СОЗУ обладает максимальным быстродействием (равным процессорному), небольшим
объемом (105 — 107 байтов)
и располагается, как правило, на кристалле процессорной БИС. Для обращения к
СОЗУ не требуются магистральные (машинные) циклы. В СОЗУ размещаются наиболее
часто используемые на данном участке программы данные, а иногда — и фрагменты
программы.
Быстродействие ОЗУ может быть ниже процессорного (не более чем на порядок), а
объем составляет 105 — 107 байтов.
В ОЗУ располагаются подлежащие выполнению программы и обрабатываемые данные.
Связь между процессором и ОЗУ осуществляется по системному или
специализированному интерфейсу и требует для своего осуществления машинных
циклов.
Информация, находящаяся в ВЗУ, не может быть непосредственно использована
процессором. Для использования программ и данных, расположенных в ВЗУ, их
необходимо предварительно переписать в ОЗУ. Процесс обмена информацией между
ВЗУ и ОЗУ осуществляется средствами специального канала или (реже) —
непосредственно под управлением процессора. Объем ВЗУ практически неограничен,
а быстродействие на 3 — 6 порядков ниже процессорного.
Схематически взаимодействие между процессором и уровнями памяти представлено на
рис.
Следует
помнить, что положение ЗУ в иерархии памяти ЭВМ определяется не элементной
базой запоминающих ячеек (известны случаи реализации ВЗУ на БИС —
"электронный диск" и, наоборот, организация оперативной памяти на
электромеханических ЗУ — магнитных барабанах), а возможностью доступа
процессора к данным, расположенным в этом ЗУ.
При организации памяти современных ЭВМ (МПС) особое внимание уделяется
сверхоперативной памяти и принципам обмена информацией между ОЗУ и ВЗУ.
Сверхоперативная память
Применение СОЗУ в
иерархической памяти ЭВМ может
обеспечить повышение производительности ЭВМ за счет снижения среднего времени
обращения к памяти Т при
условии, что время цикла СОЗУ Тс будет
(значительно) меньше времени цикла ОЗУ Т~.
Очевидно:
где рc — вероятности
обращения к СОЗУ. Обозначим
так же: рo — вероятности
обращения к ОЗУ.
Из рис. следует, что повышение производительности ЭВМ может осуществляться
двумя путями:
уменьшением отношения —
увеличением вероятности рc обращения
в СОЗУ.
Первый путь связан, прежде всего, с технологическими особенностями производства
БИС и здесь не рассматривается.
Если считать, что информация размещается в СОЗУ
и ОЗУ случайным образом, то вероятности рc и рo пропорциональны объемам соответствующих ЗУ. В этом
случае рc <
рo и наличие в ЭВМ
СОЗУ практически не влияет на ее производительность.
То же можно было бы сказать и о ситуации,
когда отношение =1; но
не следует забывать, что наличие в ЭВМ СОЗУ
с прямой адресацией (POH) позволяет включать в систему команд короткие команды,
использовать косвенно-регистровую адресацию и, в конечном итоге, увеличивать
производительность ЭВМ даже при Тс = Тo.
Итак, для эффективного применения СОЗУ следует
таким образом распределять информацию по уровням памяти ЭВМ, чтобы
в СОЗУ всегда
располагались наиболее часто используемые в данный момент коды.
Принято различать СОЗУ по
способу доступа к хранимой в нем информации. Известны два основных класса СОЗУ по
этому признаку:
• с прямым доступом;
• с ассоциативным доступом.
СОЗУ с прямым доступом
СОЗУ с прямым доступом (POH
— регистры общего назначения) получило широкое распространение в большинстве
современных ЭВМ. Фактически РОН — это небольшая регистровая намять, доступ к которой
осуществляется специальными командами. Стратегия размещения данных в РОН
целиком определяется программистом (компилятором). Обычно в РОН размещают
многократно используемые адреса (базы, индексы), счетчики циклов, данные
активного фрагмента задачи, что повышает вероятность обращения в ячейки РОН по
сравнению с ячейками ОЗУ.
СОЗУ с ассоциативным
доступом
Применение СОЗУ с ассоциативным доступом позволяет
автоматизировать процесс размещения данных в СОЗУ, обеспечивая
"подмену" активных в данный момент ячеек ОЗУ ячейками СОЗУ.
Эффективность такого подхода существенно зависит от выбранной стратегии замены
информации в СОЗУ, причем использование ассоциативного СОЗУ имеет смысл только
при условии Тc <<T0.
Принцип ассоциативного доступа состоит в следующем. Накопитель ассоциативного
запоминающего устройства (АЗУ) разбит на два поля — информационное и признаков.
Структура информационного поля накопителя
соответствует структуре обычного ОЗУ, а запоминающий элемент поля признаков,
помимо функции записи, чтения и хранения бита, обеспечивает сравнение хранимой
информации с поступающей и выдачу признака равенства.
Признаки равенства всех элементов одной ячейки поля признаков объединяются по
"И" и устанавливают в 1 индикатор совпадения ИС, если информация,
хранимая в поле признака ячейки, совпадает с информацией, подаваемой в качестве
признака на вход Р накопителя.
Во второй фазе обращения (при чтении) на выход данных D последовательно
поступает содержимое информационных полей тех ячеек, индикаторы совпадения
которых установлены в 1 (если таковые найдутся).
Способ использования АЗУ в качестве сверхоперативного иллюстрирует рис. В
информационном поле ячеек АСОЗУ — копия информации некоторых ячеек ОЗУ, а в
поле признаков — адреса этих ячеек ОЗУ. Когда процессор генерирует обращение к ОЗУ,
он одновременно (или прежде) инициирует процедуру опроса АСОЗУ, выдавая в
качестве признака адрес ОЗУ.
Если имеет место совпадение признака ячейки с запрашиваемым адресом (не более
одного раза, алгоритм загрузки АСОЗУ не предусматривает возможности появления
одинаковых признаков), то процессор обращается (по чтению или по записи) в
информационное поле этой ячейки АСОЗУ, при этом блокируется обращение к ОЗУ.
Если требуемый адрес не найден в АСОЗУ, инициируется (или продолжается)
обращение к ОЗУ, причем в АСОЗУ создается копия ячейки ОЗУ, к которой обратился
процессор. Повторное обращение процессора по этому адресу будет реализовано в
АСОЗУ (на порядок быстрее, чем в ОЗУ).
Таким образом, в АСОЗУ создаются копии тех
ячеек ОЗУ, к которым
в данный момент обращается процессор в надежде, что "в ближайшее
время" произойдет новое обращение по этому адресу. (Существуют и другие
стратегии загрузки АСОЗУ, например, если процессор обращается в ОЗУ по
определенному адресу, то в АСОЗУ перемещается содержимое целого блока соседних
ячеек.)
При необходимости записи в АСОЗУ новой информации требуется отыскать свободную
ячейку, а при ее отсутствии (что чаще всего и бывает) — отыскать ячейку,
содержимое которой можно удалить из АСОЗУ. При этом следует помнить, что если
во время пребывания ячейки в АСОЗУ в нее производилась запись, то требуется не
просто очистить содержимое ячейки, а записать его в ОЗУ по адресу, хранящемуся
в поле признаков, т. к. процессор,
отыскав адрес в АСОЗУ, производит запись только туда, оставляя в ОЗУ старое
значение (т. н. "АСОЗУ с обратной записью"). Возможен
и другой режим работы СОЗУ — со сквозной записью, при котором всякая запись
осуществляется и СОЗУ, и в ОЗУ.
При поиске очищаемой ячейки чаще всего используют метод
случайного выбора. Иногда отмечают ячейки, в которые не проводилась
запись, и поиск "кандидата на удаление" проводят из них.
Более сложная процедура замещения предполагает учет длительности пребывания
ячеек в АСОЗУ, или частоты обращения по этому адресу, или времени с момента
последнего обращения. Однако все эти методы требуют дополнительных аппаратных и
временных затрат.
Одним из наиболее дешевых способов, позволяющих учитывать поток обращений к
ячейкам, является следующий. Каждой ячейке АСОЗУ ставится в соответствие бит
(триггер) обращения, который устанавливается при обращении к этой ячейке. Когда
биты обращения всех ячеек АСОЗУ установятся в 1, все они одновременно
сбрасываются в О. Поиск
очищаемой ячейки осуществляется среди ячеек, биты обращения которых нулевые,
причем если таких ячеек несколько, то среди них осуществляется случайная
выборка.
Наличие АСОЗУ в ЭВМ позволяет (при достаточном его объеме и правильно выбранной
стратегии загрузки) значительно увеличить производительность системы. При этом
наличие или отсутствие АСОЗУ никак не отражается на построении программы. АСОЗУ
не является программно-доступным объектом, оно скрыто от пользователя. Недаром
в литературе для обозначения АСОЗУ часто используется термин
"кэш-память" (cache — тайник).
Кэш-память, структура которой приведена на рис., носит название полностью
ассоциативной. Здесь каждая ячейка кэш может подменять любую ячейку
ОЗУ. Достоинство такой памяти — максимальная вероятность кэш- попадания (при
прочих равных условиях), по сравнению с другими способами организации кэш. К недостаткам
можно отнести сложность ее структуры (а следовательно, и высокую стоимость).
Действительно, в каждом разряде поля признаков необходимо реализовать, наряду с
возможностями записи и хранения, функцию сравнения хранимого бита с
соответствующим битом признака, а потом конъюнкцию результатов сравнения
разрядов в каждой ячейке.
Кэш-память с прямым отображением требует
минимальных затрат оборудования (по сравнению с другими вариантами организации
кэш), но имеет минимальную вероятность кэш-попаданий. Суть организации (рис.) состоит в следующем. Физическая оперативная
намять разбивается на блоки (множества) одинакового размера, количество которых
(блоков) соответствует числу ячеек кэш, причем каждой строке ставится в
соответствие определенное множество ячеек памяти, не пересекающееся с другими.
Все ячейки множества претендуют на одну строку кэш.
Такая организация кэш исключает собственно ассоциативный поиск, а
следовательно, значительно упрощается схема ячейки поля признаков.
Действительно, здесь копия требуемой ячейки оперативной памяти может
располагаться в единственной строке
кэш. Часть физического адреса (на
рис.— старшая) определяет номер множества и, следовательно, строку кэш.
Содержимое этой строки выбирается по обычному адресному принципу, и поле тега
сравнивается с младшей частью физического адреса. Таким образом, для всей
кэш-памяти (любого размера) достаточно единственной схемы сравнения.
Однако предложенная выше структура имеет
существенный недостаток. Если проводить разбиение памяти на множества, как
показано на рис., то в большинстве случаев кэш будет использоваться крайне неэффективно.
Во-первых, хотя адресное пространство физической памяти 32-разрядных
микропроцессоров составляет 232 байтов,
в современных ПЭВМ обычно используют намять объемом 225 — 229 байтов.
Следовательно, строки кэш, отображаемые на старшие (физически отсутствующие)
множества памяти, никогда не будут использованы.
Во-вторых, если в множества включать
следующие подряд ячейки ОЗУ, то копии никаких двух последовательных ячеек ОЗУ
нельзя одновременно иметь в кэш (кроме случая последней и первой ячеек двух
соседних множеств), что противоречит одной из основополагающих стратегий
загрузки кэш — целесообразности копирования в кэш группы последовательных ячеек
ОЗУ.
Для исключения отмеченных недостатков разбиение ячеек памяти на множества осуществляется
таким образом, чтобы соседние ячейки относились к разным множествам, что
достигается размещением поля номера множества не в старших, а в младших
разрядах физического адреса.
Для дальнейшего увеличения вероятности кэш-попаданий можно реализовать вариант
кэш-памяти, ассоциативной по множеству, которая
отличается от кэш с прямым отображением наличием нескольких строк кэш на одно
множество ячеек памяти.
Например, внутренняя кэш-память
процессоров i80486 и Pentium — ассоциативная по множеству. Вся физическая
память разбивается на 128 множеств, а каждому множеству соответствуют 4 строки
кэш. Рассмотрим подробнее организацию внутренней кэш-памяти процессора 80486
[3].
Внутренняя кэш 80486 (рис. 5.4) имеет объем 8 Кбайт и предназначена для
хранения как команд, так и данных — копий информации ОЗУ. Информация
перемещается из ОЗУ в кэш выровненными 16-байтовыми блоками (4 младшие бита
физического адреса — нули). Кэш имеет четырех направленную (или четырехканальную)
ассоциативную по множеству организацию, что является компромиссом между
быстродействием и экономичностью кэш- памяти с прямым отображением и большим
коэффициентом попаданий полностью ассоциативной кэш-памяти.
Блок информации из ОЗУ может располагаться в кэш только в одном из 128
множеств, причем в каждом множестве возможно хранение четырех блоков. Адресация
кэш осуществляется путем разделения физического адреса на три поля:
• 7 битов
поля индекса (А4 — А10) определяют номер множества, в котором проводится поиск;
• старшие 21 бит адреса являются полем тега (признака), по которому
осуществляется ассоциативный поиск (внутри множества из четырех блоков);
• четыре младшие бита адреса определяют позицию байта в блоке.
Когда при чтении возникает промах, в кэш копируется из ОЗУ 16-байтовый
блок (строка), содержащий запрошенную
информацию.