|
"Третьей структурной особенностью БЭСМ-6 является метод использования
сверхоперативной, не адресуемой из программы памяти небольшого объёма, цель
которого — автоматическая экономия обращений к основному оперативному
запоминающему устройству. Эта сверхоперативная память управляется таким
образом, что часто используемые операнды и небольшие внутренние командные циклы
оказываются на быстрых регистрах и готовы к немедленному использованию в
арифметическом устройстве или системе управления машиной. Быстрые регистры в
ряде случаев позволяют экономить до 60% всех обращений к памяти, уменьшают тем
самым временные затраты на ожидание чисел и команд из основной памяти..."
"Четвёртой структурной особенностью БЭСМ-6, имеющей очень важное значение
для построения операционных систем и работы машины в мультипрограммном режиме,
является принятый аппаратный способ преобразования математических, или
виртуальных адресов в физические адреса машины. В машине БЭСМ-6 чётко
выдержано деление на физическую и математическую память, принята постраничная
организация..."
Л. Н. Королёв, "Структуры ЭВМ и их математическое обеспечение",
1974.
БЭСМ-6 (Большая Электронная Счётная Машина - 6) была последней советской ЭВМ
из семейства БЭСМ. Её проектировка велась в ИТМиВТ АН СССР (Институт Точной
Механики и Вычислительной Техники Академии Наук СССР) под руководством
С. А. Лебедева и В. А. Мельникова. Работы были завершены в
1966, а построенная машина стала обладателем рекордной на то время пиковой
вычислительной способности в 1 MIPS (Million Instructions Per Second).
|
|
БЭСМ-6 в помещении ИТМиВТ АН СССР
|
Вступление
Вопросы, связанные с устройством и функционированием кэш-памяти (cache
memory) часто интересуют людей, связанных или просто проявляющих интерес к
компьютерной технике. Тем не менее, найти относительно исчерпывающие ответы
на них весьма нелегко, в особенности без обращения к многочисленным книгам и
статьям. Когда заходит речь о кэш-памяти, люди обычно уделяют почти всё
внимание её размеру и тактовой частоте, опуская прочие характеристики как
малопонятные. Однако, этот подход настолько же абсурден, как сравнение
процессоров исключительно по их тактовой частоте или модулей оперативной памяти
по их размеру — разумеется, в байтах, а не в сантиметрах или дюймах, хотя
с точки зрения корректности сравнения разница невелика. В целом, данная статья
призвана ликвидировать это неуважение к кэш-памяти. В то же время, для понимания
излагаемого материала у читателя предполагается наличие некоторых познаний в
области математики и компьютерной архитектуры.
Коротко о главном
Кэш-память является местом временного хранения наиболее часто
запрашиваемой информации и представляет собой относительно небольшие участки
быстрой локальной памяти. Она позволяет значительно сократить временные
издержки на доставку информации в регистры процессора по причине куда меньшего
быстродействия внешних носителей (оперативной памяти и дисковой подсистемы).
Как следствие, уменьшаются вынужденные простои процессора, а часто и полностью
устраняются, что повышает общую производительность компьютерной системы.
Кэш-память почти всегда состоит из ячеек статической памяти, так как данный
подход обеспечивает максимальный уровень быстродействия. Одна ячейка
кэш-памяти (другими словами, хранилище одного бита информации) обычно состоит
из 6 полевых транзисторов, хотя возможны и другие варианты, например, с
увеличением их числа до 8 или 12. Стоит отметить, что в прошлом, примерно до
появления технологических процессов с детализацией в 0,5µ,
использовались и ячейки на 4 транзисторах, но такая реализация требовала наличие
дополнительного слоя поликремния и характеризовалась меньшим быстродействием.
Вне зависимости от реализации, логическое значение содержимого отдельной ячейки
("0" или "1") определяется по состоянию каналов транзисторов, которые
открываются или закрываются в зависимости от приложенного к затворам
транзисторов напряжения. Что касается размещения, то в современном процессоре
кэш-память обычно встраивается в его ядро, хотя также может находиться где-либо
снаружи, но быть связанной с ядром посредством высокоскоростных шинных
интерфейсов.
Оперативная память устанавливается в гораздо больших размерах, чем вся
имеющаяся в отдельно взятой машине кэш-память, так как предназначена для
хранения тел всех активных программных задач (процессов и потоков). Поскольку
использование для формирования микросхем оперативной памяти ячеек статического
типа является экономически нецелесообразным, почти всегда предпочтение отдаётся
ячейкам динамического типа, каждая из которых состоит всего из 1 полевого
транзистора и 1 конденсатора, откуда и следует низкая стоимость при
производстве. Логическое значение такой ячейки определяется по напряжению заряда
конденсатора. Тем не менее, время зарядки/разрядки конденсатора динамической
памяти выше, чем время открытия/закрытия канала полевого транзистора статической
памяти, и уже только этот фактор определяет более низкое быстродействие
динамической памяти по сравнению со статической. Кроме того, из-за неизбежных
утечек тока в конденсаторах их необходимо периодически перезаряжать, то есть
считывать содержимое ячеек и записывать прочитанное обратно. В конце концов,
любая операция чтения из ячейки динамической памяти сама по себе приводит к
потере конденсатором своего заряда. Итого, динамическая память дешевле
статической, но в то же время и медленнее. Фактически, выбор динамических ячеек
для оперативной памяти и статических ячеек для кэш-памяти обусловлен
соотношением цена/производительность, в оптимуме которого заинтересованы как
покупатели, так и производители.
Кэш-память не является универсальной альтернативой высокой пропускной
способности системной шины и шины памяти по той простой причине, что разные
программные задачи имеют обыкновение по-разному кэшироваться. Оптимально
используют кэш-память задачи, следующие принципам временной и пространственной
локальности (temporal and spatial locality). Если точнее, то принцип временной
локальности предполагает, что информация, которая была использована в недалёком
прошлом, с большой степенью вероятности будет запрошена и в ближайшем будущем.
Второй следует гипотезе, что информация, соседствующая с уже запрошенной, также
потребуется в ходе дальнейшего выполнения задачи. В то же время задачи,
использующие потоковые данные (например, видео- и аудиоинформацию), кэшируются
исключительно плохо, так как попросту забивают кэши информацией, которая явно не
потребуется в ближайшем будущем, хотя специальные команды невременного
(non-temporal) чтения и записи могут помочь в деле минимизации засорения
кэш-памяти. То же самое относится и к задачам, использующим слишком большие
объёмы данных, превышающие размеры имеющейся кэш-памяти.
Также стоит отметить, что кэш-память не всегда была стандартным
компонентом процессора. Долгое время процессоры работали с той же тактовой
частотой, что и их системные шины и оперативная память, причём из-за
отсутствия конвейеризации вычислений среднее количество выполненных команд в
расчёте на такт было низким, поэтому ярко выраженной необходимости в
кэш-памяти не было. Хотя и в то время на материнские платы иногда устанавливали
микросхемы кэш-памяти, используемые системной логикой для компенсации больших
задержек на доступ к оперативной памяти, особенно до массового внедрения
страничного режима работы. Только в начале 1990-х, когда тактовые частоты
процессоров превысили тактовые частоты их системных шин и оперативной памяти, а
также начали входить в моду основные принципы конвейеризации, тогда и началось
массовое внедрение кэш-памяти в процессорные ядра. С другой стороны, прироста
производительности можно достичь путём увеличения ширины системной шины и шины
памяти. На сегодняшний день имеются высокопроизводительные системы с 256-битными
или 512-битными каналами данных шин памяти, в то время как уделом массовых
компьютеров являются 64-битные или 128-битные каналы данных. Имеется много
причин, благодаря которым широкие каналы данных шин памяти и системных шин
непопулярны в наше время и никогда не были популярны в прошлом. Во-первых,
широкие каналы обмена данных предполагают наличие сложной обслуживающей логики с
большой площадью кремниевой подложки и большим количеством выходных контактов.
Естественно, это самым непосредственным образом отражается на производственных
расходах. Во-вторых, требуется большое количество проводников, соединяющих
контроллер памяти и модули памяти, проложенных на сложных печатных платах с
большим количеством слоёв. Очень желательно, чтобы все эти проводники обладали
одинаковой длиной/сопротивлением, низкой чувствительностью к помехам
и т. д. Должно быть очевидно, что чем больше шинных проводников
потребуется разместить, тем сложнее будет обеспечить их эффективную синхронную
работу. И опять же, всё это выливается в увеличение производственных затрат. С
другой стороны, значительно легче проложить шину к встроенной в процессор
кэш-памяти в те же 256 или даже 512 бит. В конечном итоге, коммерчески
эффективной альтернативы кэш-памяти пока не существует.
|