История оперативной памяти
Мы давно привыкли к тому, что модуль оперативной памяти выглядит как небольшая плата с микросхемами. Но так, конечно же, было далеко не всегда. На заре компьютерной эры существовало множество видов оперативной памяти, совершенно не похожих друг на друга. Достаточно сказать, что за время перехода от первого поколения ЭВМ (на электронных лампах) ко второму (на транзисторах) сменилось не менее пяти технологий ОЗУ. Из этого поста вы узнаете, какие причудливые формы порой принимала такая вроде бы знакомая вещь, как «оперативка».

1. Конденсаторы
Создателем первого компьютера в современном понимании этого слова принято считать немецкого инженера Конрада Цузе. Ещё в 30-е годы, работая в одиночку, он сумел спроектировать и построить в гостиной родительского дома устройство, способное автоматически выполнять различные вычисления по заданной программе. Машина, получившая название Z1, была электромеханической и потому не фигурирует в списках первых ЭВМ (электронных вычислительных машин). При этом она работала в двоичной системе счисления, как и современные компьютеры, а не в двоично-десятичной, как знаменитый ENIAC, созданный почти десятью годами позже.

Оперативная память Z1 была организована на конденсаторах, причём не покупных, а разработанных самим изобретателем. Конструкция, в которой чередовались слои стекла и металлические пластины, позволяла хранить 64 вещественных числа, каждое из которых состояло из 14 бит мантиссы и 8 бит, отводившихся под знак и порядок.
Стоит отметить, что эта вычислительная машина работала ненадёжно из-за низкой точности изготовления деталей, и последующие свои конструкции (Z2–Z4) Цузе создавал на базе выпускавшихся промышленностью телефонных реле.
В 1987–1989 гг. пожилой Цузе воссоздал компьютер Z1, утраченный во время войны, и теперь его рабочая копия выставлена в Немецком техническом музее. По ссылке доступна интерактивная панорама, позволяющая рассмотреть компьютер со всех сторон.
2. Электронные лампы
Первые ЭВМ, например, вышеупомянутый ENIAC или отечественная БЭСМ, использовали электронные лампы как для вычислений, так и для промежуточной записи команд и операндов. Чтобы хранить один бит данных, нужна была одна запоминающая ячейка (триггер), собранная на двух триодах. В ЭВМ ставили двойные триоды, у которых в одном баллоне размещались, по сути, две независимые электронные лампы, поэтому можно упрощённо говорить, что для хранения N бит информации требовалось N электронных ламп (без учёта обвязки).
Неудивительно, что эти машины имели огромный размер и потребляли колоссальное количество энергии. БЭСМ содержала около 4000 электронных ламп, а ENIAC — почти
18 000. Дело в том, что, в отличие от чисто двоичной БЭСМ, ENIAC использовал весьма своеобразную двоично-десятичную систему представления чисел. Младшие 5 битов в ней кодировали число от 0 до 4 в унитарной системе счисления (когда значение определяет номер позиции, на которой в коде стоит единица, — скажем, 01000 означает 3, а 00001 — 0), а два старших бита определяли определяли, нужно ли прибавлять к этому числу пятёрку (10 — да, 01 — нет).
В итоге запоминающая ячейка ENIAC всего лишь на одну десятичную цифру (правда, объединённая со счётчиком) выглядела вот так:

Запоминающая ячейка БЭСМ на 1 бит тоже особой компактностью не отличалась:

Хотя у меня есть подозрение, что подпись к этой фотографии из музея неверна, и на ней — тоже не просто запоминающая, а суммирующая ячейка. Дело в том, что у БЭСМ были и двухламповые ячейки, которые, скорее всего, как раз представляли собой просто триггеры. Но информации по ним я в интернете не нашёл, а запрос в музей ИТМиВТ остался без ответа.
3. «Трубка Уильямса»
Очень любопытный тип памяти, впервые использованный в английском компьютере SSEM (Manchester Small-Scale Experimental Machine, «Манчестерская малая экспериментальная машина». Хотя правильнее будет сказать, что это компьютер SSEM был построен для тестирования памяти на «трубке Уильямса».

Созданный в 1948 году, он оказался первым в мире электронным компьютером, построенным по принципу совместного хранения данных и программ в памяти (фон-неймановская архитектура). Также это была первая универсальная ЭВМ в Великобритании (созданный ранее компьютер Colossus, хотя и имел ограниченные возможности программирования, всё-таки предназначался для одной узкой задачи — взлома немецкого шифра Lorenz SZ).
«Трубка Уильямса» — это, по сути, обычная электронно-лучевая трубка, на экране которой рисуется двумерный массив из точек или тире. В зависимости от того, какой элемент был нарисован, на люминофоре образуются разные заряды. Чтобы прочитать информацию, на участки экрана, соответствующие ячейкам массива, нужно снова направить электронный луч. Все ячейки получат положительный заряд, но изменение заряда будет разным для точек и тире. Электрод на внешней стороне экрана позволяет отследить эту разницу и получить значение прочитанного бита. Если информацию не нужно менять, при следующем проходе луча по ячейкам их значения восстанавливают. Таким образом, трубка Уильямса представляет собой динамическую (постоянно обновляемую) память.

Что интересно, на такую трубку, в принципе, можно было выводить изображения, в том числе движущиеся, если последовательно записывать в память соответствующие значения. «Разрешение» составляло 32 x 32 элемента (1024 бит памяти).
В 1998 году с использованием оригинальных компонентов была построена реплика компьютера SSEM, которую теперь можно увидеть в Манчестерском музее науки и промышленности.
4. Декатроны
О компьютере, в котором использовалась такая память, у меня был отдельный пост. Это Harwell Dekatron, или WITCH, единственный компьютер первого поколения, сохранившийся до наших дней в рабочем состоянии. Он использует чисто десятичную систему счисления, и для хранения информации в нём используются декатроны — газоразрядные десятичные счётчики.

Колба декатрона заполнена инертным газом (обычно — неоном, поэтому при работе они светятся оранжево-красным светом). Вокруг центрального дискового анода расположены десять изолированных индикаторных катодов, а между каждой парой соседних индикаторных катодов — два так называемых подкатода. Подавая в нужном порядке на анод и подкатоды импульсы напряжения, можно заставлять разряд либо «перескакивать» с катода на катод (что соответствует увеличению/уменьшению хранимого значения на 1, или операции записи), либо переходить с катода на анод (что соответствует операции чтения).
Поскольку разработчики компьютеров почти сразу отказались от десятичной системы счисления, оперативная память на декатронах быстро стала достоянием истории, хотя в других областях декатроны использовались ещё много лет.
5. Ртутные линии задержки.
Это, пожалуй, самая брутальная технология из всех, что будут рассмотрены в этом посте. Такую линию задержки можно представить себе как длинную заполненную ртутью колбу, на концах которой расположены пьезоэлементы — передатчик и приёмник. Передатчик возбуждает акустические колебания в ртути, и по ней бегут волны, как от камня, брошенного в воду. Когда колебания достигают приёмника, они усиливаются, при необходимости изменяются и вновь подаются на вход той же линии. Таким образом получается, что по линии задержки постоянно циркулирует пакет данных, представленный в виде цепочки волн. Память на линиях задержки не является дискретной и может хранить как цифровую, так и аналоговую информацию, что использовалось, например, в первых радарах.

Ртуть была выбрана благодаря тому, что её удельное акустическое сопротивление почти равно акустическому сопротивлению пьезокристаллов, а скорость распространения звуковых волн в ней выше, чем в других жидкостях.
Такая память была сложна в производстве, требовала тонкой настройки, представляла опасность в случае повреждения, нуждалась в системах поддержания постоянной температуры, а главное — предполагала только последовательный доступ (то есть приходилось ждать, пока на выходе линии задержки появится нужная информация). Почему же при таком огромном наборе недостатков её использовали? Всё дело в экономичности и надёжности. Одна ртутная линия задержки могла хранить несколько сотен бит информации (скажем, 576 бит в компьютере EDSAC). Чтобы реализовать такой же объём памяти на триггерах, понадобилось бы больше тысячи электронных ламп, которые занимали бы больше места и потребляли бы больше энергии, а главное — регулярно бы перегорали. Ртутные же линии, при всей их сложности, после грамотной настройки работали очень долго.

На фотографии запечатлён один блок «ртутной» памяти компьютера UNIVAC I (1951 г., США). Этот барабан содержал 18 трубок, по каждой из которых постоянно циркулировало 120 бит данных, а всего барабанов было 7. Время доступа к памяти составляло 222 мкс.
В 1953 г. оперативная память на ртутных трубках объёмом 1024 слова (по 39 бит в каждом) появилась и у отечественной БЭСМ.
6. Селектроны
Если трубка Уильямса и ртутные линии задержки считаются прототипами динамической памяти (DRAM), то следующее устройство можно назвать одним из прототипов статической памяти (SRAM).
Это — селектрон, особая электронная лампа, разработанная компанией RCA (кстати, под руководством небезызвестного В. К. Зворыкина) в конце 40-х — начале 50-х годов. На фоне памяти на триггерах, где одна электронная лампа была способна хранить в лучшем случае один бит данных, возможности этого устройства казались фантастическими: один селектрон мог иметь внутри матрицу ёмкостью до 4096 бит! Время доступа к информации при этом было на порядок меньше, чем у ртутной памяти (называлась цифра в 16 мкс).

Селектрон сочетает в себе признаки электронно-лучевой трубки и обычной электронной лампы: у него есть покрытый люминофором экран и управляющие сетки, точнее решётки из скрещённых узких металлических полосок с отверстиями, образующих ряд «окон». Окно, к которому подводится напряжение, открывается для прохождения электронного луча к фосфорному экрану для записи или чтения информации.
Впечатление о компактности памяти на селектронах всё-таки немного обманчиво. Им требовалась довольно громоздкая обвязка, и на фотографии можно увидеть, как выглядело запоминающее устройство на 256-битных селектронах.

7. Магнитные барабаны
Магнитные барабаны являются прародителями современных жёстких дисков, только информация в них записывается не на основание, а на боковую поверхность цилиндра. Вы можете спросить, что же они тогда делают в списке технологий оперативной памяти. Действительно, мы привыкли к тому, что магнитные накопители используются для долговременного хранения данных. Тем не менее, в некоторых ранних компьютерах (особенно относившихся к «бюджетному» классу малых ЭВМ) магнитные барабаны использовались и в качестве оперативки. Первым таким компьютером, судя по всему, был узкоспециализированный «Atlas» производства ERA, разработанный в 1950 г. В дальнейшем память на магнитном барабане встречалась в IBM 650, Univac Scientific 1103, а также первой крупносерийной отечественной ЭВМ «Урал».

На фотографии из Политехнического музея — как раз тот самый барабан. Он позволял хранить всего 1024 36-разрядных слова, что в 10 раз меньше, чем у американского «Атласа». Ёмкость была принесена в жертву быстродействию: за счёт высокой скорости вращения (100 оборотов в секунду) и крупного формата записи удалось получить среднее время обращения на уровне 8 мс. Впрочем, это всё равно было в разы больше, чем у других видов памяти — что поделаешь, ограничение системы с подвижными деталями. Поэтому в высокопроизводительных ЭВМ память на магнитных барабанах никогда не использовалась в качестве оперативной. Обычно ей отводилась роль буфера между оперативной и долговременной памятью.
8. Ферритовые сердечники
Появление памяти на магнитных сердечниках, или ферритовой памяти, ознаменовало наступление новой эпохи. Идею такого ОЗУ предложил Джон Преспер Экерт (один из разработчиков ENIAC) в 1945 г., а первые практические реализации появились в начале 50-х. Патент на ферритовую память получили американские инженеры китайского происхождения Ван Ань и Во Вайдун в 1955 г.
Внешне память на магнитных сердечниках представляет собой матрицу из ферритовых элементов (обычно колец), пронизанных проволочками.

Принцип её работы основан на свойствах ферромагнитного материала, который может находиться в двух устойчивых состояниях намагниченности — +B и –В. Чтобы перемагнитить такой элемент, необходимо в проводниках, на пересечении которых он находится, возбудить магнитное поле величиной не менее H. Для этого в «вертикальном» и «горизонтальном» проводниках возбуждается поле величиной H/2. Оно не может изменить состояние какого-либо иного элемента строки или столбца, кроме того единственного, который находится на пересечении этих проводников и для которого величина магнитного поля складывается, давая H.
Для считывания информации используется третий провод, который змейкой проходит через все сердечники.

Чтобы прочитать содержимое ячейки, в проводниках нужно возбудить отрицательное поле величиной –H/2. Тогда кольцо, находившееся в состоянии +В, перемагнитится в состояние
–В, и на считывающем проводе наведётся ЭДС, соответствующая значению «1». А кольцо, находившееся в состоянии –В, не перемагнитится, и на считывающем проводе никакого сигнала не появится, что компьютер истолкует как значение «0». Таким образом, чтение информации из памяти на ферритовых кольцах — разрушающее, то есть после считывания какой-либо ячейки требуется её регенерация.
По сравнению со всеми предшественниками ферритовая память была колоссальным шагом вперёд в плане простоты, компактности и энергоэффективности. Неудивительно, что она «прописалась» в компьютерах на добрых два десятилетия, а в отдельных системах, где требовалась стойкость к воздействию радиации (например, в космосе), применялась до 1990-х годов.
Вытеснила её уже привычная нам память на микросхемах, но это — уже совсем другая история.
. Оперативная память — из глубин времен до наших дней

Оперативная память персональных компьютеров сегодня, как и десять лет тому назад, строится на базе относительно недорогой динамической памяти — DRAM (Dynamic Random Access Memory). Множество поколений интерфейсной логики, соединяющей ядро памяти с «внешним миром», сменилось за это время. Эволюция носила ярко выраженный преемственный характер — каждое новое поколение памяти практически полностью наследовало архитектуру предыдущего, включая, в том числе, и свойственные ему ограничения. Ядро же памяти (за исключением совершенствования проектных норм таких, например, как степень интеграции) и вовсе не претерпевало никаких принципиальных изменений! Даже «революционный» Rambus Direct RDRAM ничего подлинного революционного в себе не содержит и хорошо вписывается в общее «генеалогическое» древо развития памяти.
Поэтому, устройство и принципы функционирования оперативной памяти лучше всего изучать, понимаясь от основания ствола дерева (т.е. самых древних моделей памяти) по его веткам вверх — к самым современным разработкам, которые только существуют на момент написания этой статьи.
Устройство и принципы функционирования оперативной памяти
Ядро микросхемы динамической памяти состоит из множества ячеек, каждая из которых хранит всего один бит информации. На физическом уровне ячейки объединяются в прямоугольную матрицу, горизонтальные линейки которой называются строками (ROW), а вертикальные — столбцами (Column) или страницами (Page).
Линейки представляют собой обыкновенные проводники, на пересечении которых находится «сердце» ячейки — несложное устройство, состоящее из одного транзистора и одного конденсатора (см. рис. 2.4).
Конденсатору отводится роль непосредственного хранителя информации. Правда, хранит он очень немного — всего один бит. Отсутствие заряда на обкладках соответствует логическому нулю, а его наличие — логической единице. Транзистор же играет роль «ключа», удерживающего конденсатор от разряда. В спокойном состоянии транзистор закрыт, но, стоит подать на соответствующую строку матрицы электрический сигнал, как спустя мгновение-другое (конкретное время зависит от конструктивных особенностей и качества изготовления микросхемы) он откроется, соединяя обкладку конденсатора с соответствующим ей столбцом.
Чувствительный усилитель (sense amp), подключенный к каждому из столбцов матрицы, реагируя на слабый поток электронов, устремившихся через открытые транзисторы с обкладок конденсаторов, считывает всю страницу целиком. Это обстоятельство настолько важно, что последняя фраза вполне заслуживает быть выделенной курсивом. Именно страница является минимальной порцией обмена с ядром динамической памяти. Чтение/запись отдельно взятой ячейки невозможно! Действительно, открытие одной строки приводит к открытию всех, подключенных к ней транзисторов, а, следовательно, — разряду закрепленных за этими транзисторами конденсаторов.
«…эти шары содержат информацию… Их надо переписать на пленку, потому что они разового действия. Молекулы после прослушивания снова приходят в хаос»«Имею скафандр — готов путешествовать» Роберт Ханлайн
Чтение ячейки деструктивно по своей природе, поскольку sense amp (чувствительный усилитель) разряжает конденсатор в процессе считывания его заряда. «Благодаря» этому динамическая память представляет собой память разового действия. Разумеется, такое положение дел никого устроить не может, и потому во избежание потери информации считанную строку приходится тут же перезаписывать вновь. В зависимости от конструктивных особенностей эту миссию выполняет либо программист, либо контроллер памяти, либо сама микросхема памяти. Практически все современные микросхемы принадлежат к последней категории. Редко какая из них поручает эту обязанность контроллеру, и уж совсем ни когда перезапись не возлагается на программиста.
Ввиду микроскопических размеров, а, следовательно, емкости конденсатора записанная на нем информация хранится крайне недолго, — буквально сотые, а то тысячные доли секунды. Причина тому — саморазряд конденсатора. Несмотря на использование высококачественных диэлектриков с огромным удельным сопротивлением, заряд стекает очень быстро, ведь количество электронов, накопленных конденсатором на обкладках, относительно невелико. Для борьбы с «забывчивостью» памяти прибегают к ее регенерации — периодическому считыванию ячеек с последующей перезаписью. В зависимости от конструктивных особенностей «регенератор» может находиться как в контроллере, так и в самой микросхеме памяти. Например, в компьютерах XT/AT регенерация оперативной памяти осуществлялась по таймерному прерыванию каждые 18 мс через специальный канал DMA (контроллера прямого доступа). И всякая попытка «замораживания» аппаратных прерываний на больший срок приводила к потере и/или искажению оперативных данных, что не очень-то радовало программистов, да к тому же снижало производительность системы, поскольку во время регенерации память была недоступна. Сегодня же регенератор чаще всего встраивается внутрь самой микросхемы, причем перед регенерацией содержимое обновляемой строки копируется в специальный буфер, что предотвращает блокировку доступа к информации.
Conventional DRAM (Page Mode DRAM) — «обычная» DRAM
Разобравшись с устройством и работой ядра памяти, перейдем к рассмотрению ее интерфейса. Физически микросхема памяти (не путать с модулями памяти) представляет собой прямоугольный кусок керамики (или пластика) «ощетинившийся» с двух (реже — с четырех) сторон множеством ножек. Что это за ножки?
В первую очередь выделим среди них линии адреса и линии данных. Линии адреса, как и следует из их названия, служат для выбора адреса ячейки памяти, а линии данных — для чтения и для записи ее содержимого. Необходимый режим работы определяется состоянием специального вывода Write Enable (Разрешение Записи).
Низкий уровень сигнала WE готовит микросхему к считыванию состояния линий данных и записи полученной информации в соответствующую ячейку, а высокий, наоборот, заставляет считать содержимое ячейки и «выплюнуть» его значения в линии данных.
Такой трюк значительно сокращает количество выводов микросхемы, что в свою очередь уменьшает ее габариты. А, чем меньше габариты, тем выше предельно допустимая тактовая частота. Почему? Увы! В двух словах не расскажешь — тут замешен целый ряд физических явлений и эффектов. Во-первых, в силу ограниченной скорости распространения электричества, длины проводников, подведенных к различным ножкам микросхемы, должны не сильно отличаться друг от друга, иначе сигнал от одного вывода будет опережать сигнал от другого. Во-вторых, длины проводников не должны быть очень велики — в противном случае задержка распространения сигнала «съест» все быстродействие. В-третьих, любой проводник действует как приемная и как передающая антенна, причем уровень помех резко усиливается с ростом тактовой частоты. Паразитному антенному эффекту можно противостоять множеством способов (например, путем перекашивания сигналов в соседних разрядах), но самой радикальной мерой было и до сих пор остается сокращение количества проводников и уменьшение их длины. Наконец, в-четвертых, всякий проводник обладает электрической емкостью. А емкость и скорость передачи данных — несовместимы! Вот только один пример: «…первый трансатлантический кабель для телеграфа был успешно проложен в 1858 году,… когда напряжение прикладывалось к одному концу кабеля, оно не появлялось немедленно на другом конце и вместо скачкообразного нарастания достигало стабильного значения после некоторого периода времени. Когда снимали напряжение, напряжение приемного конца не падало резко, а медленно снижалось. Кабель вел себя как губка, накапливая электричество. Это свойство мы теперь называем емкостью»
Таким образом, совмещение выводов микросхемы увеличивает скорость обмена с памятью, но не позволяет осуществлять чтение и запись одновременно. (Забегая вперед, отметим, что, размещенные внутри кристалла процессора микросхемы кэш-памяти, благодаря своим микроскопическим размерам на количество ножек не скупятся и беспрепятственно считывают ячейку во время записи другой).
Столбцы и строки матрицы памяти тем же самым способом совмещаются в единых адресных линиях. В случае квадратной матрицы количество адресных линий сокращается вдвое, но и выбор конкретной ячейки памяти отнимает вдвое больше тактов, ведь номера столбца и строки приходится передавать последовательно. Причем, возникает неоднозначность, что именно в данный момент находится на адресной линии: номер строки или номер столбца? А, быть может, и вовсе не находится ничего? Решение этой проблемы потребовало двух дополнительных выводов, сигнализирующих о наличии столбца или строки на адресных линиях и окрещенных RAS (от row address strobe — строб адреса строки) и CAS (от column address strobe — строб адреса столбца) соответственно. В спокойном состоянии на обоих выводах поддерживается высокий уровень сигнала, что говорит микросхеме: никакой информации на адресных линиях нет и никаких действий предпринимать не требуется.
Но вот программист захотел прочесть содержимое некоторой ячейки памяти. Контроллер преобразует физический адрес в пару чисел — номер строки и номер столбца, а затем посылает первый из них на адресные линии. Дождавшись, когда сигнал стабилизируется, контроллер сбрасывает сигнал RAS в низкий уровень, сообщая микросхеме памяти о наличии информации на линии. Микросхема считывает этот адрес и подает на соответствующую строку матрицы электрический сигнал. Все транзисторы, подключенные к этой строке, открываются и бурный поток электронов, срываясь с насиженных обкладок конденсатора, устремляется на входы чувствительного усилителя. Чувствительный усилитель декодирует всю строку, преобразуя ее в последовательность нулей и единиц, и сохраняет полученную информацию в специальном буфере. Все это (в зависимости от конструктивных особенностей и качества изготовления микросхемы) занимает от двадцати до сотни наносекунд, в течение которых контроллер памяти выдерживает терпеливую паузу. Наконец, когда микросхема завершает чтение строки и вновь готова к приему информации, контроллер подает на адресные линии номер колонки и, дав сигналу стабилизироваться, сбрасывает CAS в низкое состояние. «Ага!», говорит микросхема и преобразует номер колонки в смещение ячейки внутри буфера. Остается всего лишь прочесть ее содержимое и выдать его на линии данных. Это занимает еще какое-то время, в течение которого контроллер ждет запрошенную информацию. На финальной стадии цикла обмена контроллер считывает состояние линий данных, дезактивирует сигналы RAS и CAS, устанавливая их в высокое состояние, а микросхема берет определенный тайм-аут на перезарядку внутренних цепей и восстановительную перезапись строки.
Задержка между подачей номера строки и номера столбца на техническом жаргоне называется «RAS to CAS delay» (на сухом официальном языке — tRCD). Задержка между подачей номера столбца и получением содержимого ячейки на выходе — «CAS delay» (или tCAC), а задержка между чтением последней ячейки и подачей номера новой строки — «RAS precharge» (tRP). Здесь и далее будут использоваться исключительно жаргонизмы — они более наглядны и к тому же созвучны соответствующим настойкам BIOS, что упрощает восприятие материала неподготовленными читателями.

Рисунок 2 Схематическое изображение модуля оперативной памяти (1); микросхемы памяти (2); матрицы (3) и отдельной ячейки памяти (4).

Рисунок 3 Устройство ячейки динамической памяти.
Эволюция динамической памяти.
В микросхемах памяти, выпускаемых вплоть до середины девяностых, все три задержки (RAS to CAS Delay, CAS Delay и RAS precharge) в сумме составляли порядка 200 нс., что соответствовало двум тактам в 10 мегагерцовой системе и, соответственно, двенадцати — в 60 мегагерцовой. С появлением Intel Pentium 60 (1993 год) и Intel 486DX4 100 (1994 год) возникла потребность в совершенствовании динамической памяти — прежнее быстродействие уже никого не устраивало.
FPM DRAM (Fast Page Mode DRAM) быстрая страничная память
Первой ласточкой стала FPM-DRAM — Fast-Page Mode DRAM (Память быстрого страничного режима), разработанная в 1995 году. Основным отличием от памяти предыдущего поколения стала поддержка сокращенных адресов. Если очередная запрашиваемая ячейка находится в той же самой строке, что и предыдущая, ее адрес однозначно определяется одним лишь номером столбца и передача номера строки уже не требуется. За счет чего это достигается? Обратимся к диаграмме, изображенной на рис.4. Смотрите, в то время как при работе с обычной DRAM (верхняя диаграмма) после считывания данных сигнал RAS дезактивируется, подготавливая микросхему к новому циклу обмена, контроллер FPM-DRAM удерживает RAS в низком состоянии, избавляясь от повторной пересылки номера строки.
При последовательном чтении ячеек памяти, (равно как и обработке компактных одно-двух килобайтовых структур данных), время доступа сокращается на 40%, а то и больше, ведь обрабатываемая строка находится во внутреннем буфере микросхемы, и обращаться к матрице памяти нет никакой необходимости!
Правда, хаотичное обращение к памяти, равно как и перекрестные запросы ячеек из различных страниц, со всей очевидностью не могут воспользоваться преимуществами передачи сокращенных адресов и работают с FPM-DRAM в режиме обычной DRAM. Если очередная запрашиваемая ячейка лежит вне текущей (так называемой, открытой) строки, контроллер вынужден дезактивировать RAS, выдержать паузу RAS precharge на перезарядку микросхемы, передать номер строки, выдержать паузу RAS to CAS delay и лишь затем он сможет приступить к передаче номера столбца.
Ситуация, когда запрашиваемая ячейка находится в открытой строке, называется «попаданием на страницу» (Page Hit), в противном случае говорят, что произошел промах (Page Miss). Поскольку, промах облагается штрафными задержками, критические к быстродействию модули должны разрабатываться с учетом особенностей архитектуры FPM-DRAM, так что абстрагироваться от ее устройства уже не получается.
Возникла и другая проблема: непостоянство времени доступа затрудняет измерение производительности микросхем памяти и сравнение их скоростных показателей друг с другом. В худшем случае обращение к ячейке составляет RAS to CAS Delay + CAS Delay + RAS precharge нс., а в лучшем: CAS Delay нс. Хаотичное, но не слишком интенсивное обращение к памяти (так, чтобы она успевала перезарядиться) требует не более RAS to CAS Delay + CAS Delay нс.
Поскольку, величины RAS to CAS Delay, CAS Delay и RAS precharge непосредственно не связаны друг с другом и в принципе могут принимать любые значения, достоверная оценка производительность микросхемы требует для своего выражения как минимум трех чисел. Однако производители микросхем в стремлении приукрасить реальные показатели, проводят только два: RAS to CAS Delay + CAS Delay и CAS Delay. Первое (называемое так же «временем [полного] доступа») характеризует время доступа к произвольной ячейке, а второе (называемое так же «временем рабочего цикла») — время доступа к последующим ячейкам уже открытой строки. Время, необходимое для регенерации микросхемы (т.е. RAS precharge) из полного времени доступа исключено. (Вообще-то, в технической документации, кстати, свободно доступной по Интернету, приводятся все значения и тайминги, так что никакого произвола в конечном счете нет).
Формула памяти
К середине девяностых среднее значение RAS to CAS Delay составляло порядка 30 нс., CAS Delay — 40 нс., а RAS precharge — менее 30 нс. (наносекунд). Таким образом, при частоте системной шины в 60 МГц (т.е.
17 нс.) на открытие и доступ к первой ячейки страницы уходило около 6 тактов, а на доступ к остальным ячейкам открытой страницы — около 3 тактов. Схематически это записывается как 6-3-x-x и называется формулой памяти.
Формула памяти упрощает сравнение различных микросхем друг с другом, однако для сравнения необходимо знать преобладающий тип обращений к памяти: последовательный или хаотичный. Например, как узнать, что лучше: 5-4-x-x или 6-3-x-x? В данной постановке вопрос вообще лишен смысла. Лучше для чего? Для потоковых алгоритмов с последовательной обработкой данных, бесспорно, предпочтительнее последний тип памяти, в противном случае сравнение бессмысленно, т.к. чтение двух несмежных ячеек займет не 5-5-х-х и, соответственно, 6-6-х-х тактов, а 5+RAS precharge-5+RAS precharge-x-x и 6+RAS prechange-6+RAS prechange-x-x. Поскольку время регенерации обоих микросхем не обязательно должно совпадать, вполне может сложиться так, что микросхема 6-3-x-x окажется быстрее и для последовательного, и для хаотичного доступа. Поэтому, практическое значение имеет сравнение лишь вторых цифр — времени рабочего цикла. Совершенствуя ядро памяти, производители сократили его сначала до 35, а затем и до 30 нс., достигнув практически семикратного превосходства над микросхемами прошлого поколения.
EDO-DRAM (Extended Data Out) память с усовершенствованным выходом
Между тем тактовые частоты микропроцессоров не стояли на месте, а стремительно росли, вплотную приближаясь к рубежу в 200 МГц. Рынок требовал качественного нового решения, а не изнуряющей борьбы за каждую наносекунду. Инженеров вновь отправили к чертежным доскам, где (году эдак в 1996) их осенила очередная идея. Если оснастить микросхему специальным триггером-защелкой, удерживающим линии данных после исчезновения сигнала CAS, станет возможным дезактивировать CAS до окончания чтения данных, подготавливая в это время микросхему к приему номера следующего столбца.
Взгляните на диаграмму рис. 4: видите, у FPM низкое состояние CAS удерживается до окончания считывания данных, затем CAS дезактивируется, выдерживается небольшая пауза на перезарядку внутренних цепей, и только после этого на адресную шину подается номер колонки следующей ячейки. В новом типе памяти, получившем название EDO-DRAM (Extend Data Output), напротив, CAS дезактивируется в процессе чтения данных параллельно с перезарядкой внутренних цепей, благодаря чему номер следующего столбца может подаваться до завершения считывания линий данных. Продолжительность рабочего цикла EDO-DRAM (в зависимости от качества микросхемы) составляла 30, 25 и 20 нс., что соответствовало всего двум тактам в 66 МГц системе. Совершенствование производственных технологий сократило и полное время доступа. На частоте 66 МГц формула лучших EDO-микросхем выглядела так: 5-2-x-x. Простой расчет позволяет установить, что пиковый прирост производительности (в сравнении с FPM-DRAM) составляет около 30%, однако, во многих компьютерных журналах тех лет фигурировала совершенно немыслимая цифра 50%, — якобы настолько увеличивалась скорость компьютера при переходе с FPM на EDO. Это могло быть лишь при сравнении худшей FMP-DRAM с самой «крутой» EDO-памятью, т.е. фактически сравнивались не технологии, а старые и новые микросхемы.

Рисунок 4 Временная диаграмма, иллюстрирующая работу некоторых типов памяти
BEDO (Burst EDO) — пакетная EDO RAM
Двукратное увеличение производительности было достигнуто лишь в BEDO-DRAM (Burst EDO). Добавив в микросхему генератор номера столбца, конструкторы ликвидировали задержку CAS Delay, сократив время цикла до 15 нс. После обращения к произвольной ячейке микросхема BEDO автоматически, без указаний со стороны контроллера, увеличивает номер столбца на единицу, не требуя его явной передачи. По причине ограниченной разрядности адресного счетчика (конструкторы отвели под него всего лишь два бита) максимальная длина пакета не могла превышать четырех ячеек (22=4).
Забегая вперед, отметим, что процессоры Intel 80486 и Pentium в силу пакетного режима обмена с памятью никогда не обрабатывают менее четырех смежных ячеек за раз. Поэтому, независимо от порядка обращения к данным, BEDO всегда работает на максимально возможной скорости и для частоты 66 Мгц ее формула выглядит так: 5-1-1-1, что на
40% быстрее EDO-DRAM! Все же, несмотря на свои скоростные показатели, BEDO оказалась не конкурентоспособной и не получила практически никакого распространения. Просчет состоял в том, что BEDO, как и все ее предшественники, оставалась асинхронной памятью. Это накладывало жесткие ограничения на максимально достижимую тактовую частоту, ограниченную 60 — 66 (75) мегагерцами.
Действительно, пусть время рабочего цикла составляет 15 нс. (1 такт в 66 MHz системе). Однако, поскольку «часы» контроллера памяти и самой микросхемы памяти не синхронизованы, нет никаких гарантий, что начало рабочего цикла микросхемы памяти совпадет с началом такового импульса контроллера, вследствие чего минимальное время ожидания составляет два такта. Вернее, если быть совсем точным, рабочий цикл микросхемы памяти никогда не совпадает с началом тактового импульса. Несколько наносекунд уходит на формирование контроллером управляющего сигнала RAS или CAS, за счет чего он уже не совпадет с началом тактирующего импульса. Еще несколько наносекунд требуется для стабилизации сигнала и «осмысления» его микросхемой, причем, сколько именно времени потребуется заранее определить невозможно, т.к. на результат влияет и температура, и длина проводников, и помехи на линии, и… еще миллион факторов!
SDRAM (Synchronous DRAM) — синхронная DRAM
Появление микропроцессоров с шинами на 100 MHz привело к радикальному пересмотру механизма управления памятью, и подтолкнуло конструкторов к созданию синхронной динамической памяти — SDRAM (Synchronous-DRAM). Как и следует из ее названия, микросхемы SDRAM памяти работают синхронно с контроллером, что гарантирует завершение цикла в строго заданный срок. (Помните, «как хочешь, крутись, теща, но что бы к трем часам как штык была готова»). Кроме того, номера строк и столбцов подаются одновременно, с таким расчетом, чтобы к приходу следующего тактового импульса сигналы уже успели стабилизироваться и были готовы к считыванию.
Так же, в SDRAM реализован усовершенствованный пакетный режим обмена. Контроллер может запросить как одну, так и несколько последовательных ячеек памяти, а при желании — всю строку целиком! Это стало возможным благодаря использованию полноразрядного адресного счетчика уже не ограниченного, как в BEDO, двумя битами.
Другое усовершенствование. Количество матриц (банков) памяти в SDRAM увеличено с одного до двух (а, в некоторых моделях, и четырех). Это позволяет обращаться к ячейкам одного банка параллельно с перезарядкой внутренних цепей другого, что вдвое увеличивает предельно допустимую тактовую частоту. Помимо этого появилась возможность одновременного открытия двух (четырех) страниц памяти, причем открытие одной страницы (т.е. передача номера строки) может происходить во время считывания информации с другой, что позволяет обращаться по новому адресу столбца ячейки памяти на каждом тактовом цикле.
В отличие от FPM-DRAM\EDO-DRAM\BEDO, выполняющих перезарядку внутренних цепей при закрытии страницы (т.е. при дезактивации сигнала RAS), синхронная память проделывает эту операцию автоматически, позволяя держать страницы открытыми столь долго, сколько это угодно.
Наконец, разрядность линий данных увеличилась с 32 до 64 бит, что еще вдвое увеличило ее производительность! Формула чтения произвольной ячейки из закрытой строки для SDRAM обычно выглядит так: 5-1-x-x, а открытой так: 3-1-х-х. В настоящее время (2002 год) подавляющее большинство персональных компьютеров оснащаются SDRAM памятью, которая прочно удерживает свои позиции, несмотря на активный натиск современных разработок.

Рисунок 5 Временная диаграмма, иллюстрирующая работу современных типов памяти
DDR SDRAM, SDRAM II (Double Data Rate SDRAM) SDRAM с удвоенной скоростью передачи данных
Дальнее развитие синхронной памяти привело к появлению DDR-SDRAM — Double Data Rate SDRAM (SDRAM удвоенной скорости передачи данных). Удвоение скорости достигается за счет передачи данных и по фронту, и по спаду тактового импульса (в SDRAM передача данных осуществляется только по фронту). Благодаря этому эффективная частота увеличивается в два раза — 100 MHz DDR-SDRAM по своей производительности эквивалента 200 MHz SDRAM. Правда, по маркетинговым соображениям, производители DDR-микросхем стали маркировать их не тактовой /* рабочей */ частой, а максимально достижимой пропускной способностью, измеряемой в мегабайтах в секунду. Т.е. DDR-1600 работает вовсе не 1.6 GHz (что пока является недостижимым идеалом), а всего лишь на 100 MHz. Соответственно, DDR?2100 работает на частоте 133 MHz.
Претерпела изменения и конструкция управления матрицами (банками) памяти. Во-первых, количество банков увеличилось с двух до четырех, а, во-вторых, каждый банк обзавелся персональным контроллером (не путать с контроллером памяти!), в результате чего вместо одной микросхемы мы получили как бы четыре, работающих независимо друг от друга. Соответственно, максимальное количество ячеек, обрабатываемых за один такт, возросло с одной до четырех.
RDRAM (Rambus DRAM) — Rambus-память
С DDR-SDRAM жесточайше конкурирует Direct RDRAM, разработанная компанией Rambus. Вопреки распространенному мнению, ее архитектура довольно прозаична и не блещет новизной. Основных отличий от памяти предыдущих поколений всего три:
а) увеличение тактовой частоты за счет сокращения разрядности шины, б) одновременная передача номеров строки и столба ячейки, в) увеличение количества банков для усиления параллелизма.
А теперь обо всем этом подробнее. Повышение тактовой частоты вызывает резкое усиление всевозможных помех и в первую очередь электромагнитной интерференции, интенсивность которой в общем случае пропорциональна квадрату частоты, а на частотах свыше 350 мегагерц вообще приближается к кубической. Это обстоятельство налагает чрезвычайно жесткие ограничения на топологию и качество изготовления печатных плат модулей микросхемы, что значительно усложняет технологию производства и себестоимость памяти. С другой стороны, уровень помех можно значительно понизить, если сократить количество проводников, т.е. уменьшить разрядность микросхемы. Именно по такому пути компания Rambus и пошла, компенсировав увеличение частоты до 400 MHz (с учетом технологии DDR эффективная частота составляет 800 MHz) уменьшением разрядности шины данных до 16 бит (плюс два бита на ECC). Таким образом, Direct RDRAM в четыре раза обгоняет DDR-1600 по частоте, но во столько же раз отстает от нее в разрядности! А от DDR?2100, Direct RDRAM даже отстает, притом, что себестоимость DDR заметно дешевле!
Второе (по списку) преимущество RDRAM — одновременная передача номеров строки и столбца ячейки — при ближайшем рассмотрении оказывается вовсе не преимуществом, а фичей — т.е. конструктивной особенностью. Это не уменьшает латентности доступа к произвольной ячейке (т.е. интервалом времени между подачей адреса и получения данных), т.к. она, латентность, в большей степени определяется скоростью ядра, а RDRAM функционирует на старом ядре. Из спецификации RDRAM следует, что время доступа составляет 38,75 нс. (для сравнения время доступа 100 MHz SDRAM составляет 40 нс.). Ну, и стоило бы огород городить?
Стоило! Большое количество банков позволяет (теоретически) достичь идеальной конвейеризации запросов к памяти, — несмотря на то, что данные поступают на шину лишь спустя 40 нс. после подачи запроса (что соответствует 320 тактам в 800 MHz системе), сам поток данных непрерывен.
Стоило?! Для потоковых алгоритмов последовательной обработки памяти это, допустим, хорошо, но во всех остальных случаях RDRAM не покажет никаких преимуществ перед DDR-SDRAM, а то и обычной SDRAM, работающей на скромной частоте в 100 MHz. К тому же (как будет показано ниже), «солидный» объем кэш-памяти современных процессоров позволяет обрабатывать подавляющее большинство запросов локально, вообще не обращаясь к основной памяти или на худой конец, отложить это обращение до «лучших времен». Производительность памяти реально ощущается лишь при обработке гигантских объемов данных, например редактировании изображений полиграфического качества в PhotoShop.
Таким образом, использование RDRAM в домашних и офисных компьютеров, ничем, кроме желания показать свою «крутость», не оправдано. Для высокопроизводительных рабочих станций лучший выбор — DDR-SDRAM, не уступающей RDRAM в производительности, но значительно выигрывающей у последней в себестоимости.
В этом свете становится не очень понятно стремление компании Intel к продвижению Rambus’а на рынке. Еще раз обращу внимание читателя: ничего революционного Rambus в себе не несет. Чрезвычайно сложная и требовательна к качеству производства интерфейсная обвязка, обеспечивает высокую тактовую частоту, но не производительность! Соотношение 400×2 MHz на 16 бит оптимальным соотношением категорически не является, уже хотя бы потому, что DDR-SDRAM без особых ухищрений тянет 133×2 MHz на 64 бит. Причем ее производители в ближайшем будущем планируют взять барьер в 200×4 MHz на 128 бит, что увеличит пропускную способность до 12,8 Гбайт/с., что в восемь раз превосходит пропускную способность Direct RDRAM при меньшей себестоимости и аппаратной сложности.
Не стоит, однако, бросаться и в другую крайность — считать Rambus «кривой», «идиотской» памятью. Отнюдь! Инженерный опыт, приобретенный в процессе создания этой, не побоюсь сказать, чрезвычайно высокотехнологичной памяти, несомненно, найдет себе применение в дальнейших разработках. Взять хотя бы машину Бэббиджа. Согласитесь, несмотря на передовые идеи, ее реальное воплощение проигрывало по всем позициям даже конторским счетам. Аналогично и с Direct RDRAM. Достичь пропускной способности в 1,6 Гбайт/с. можно и более прозаическими путями…

Рисунок 6 Внешний вид модуля Rambus-памяти

Рисунок 7 Четыре Rambus-модуля, установленные на системную плату
Сравнительная характеристика основных типов памяти
С точки зрения пользователя PC главная характеристика памяти — это скорость или, выражаясь другими словами, ее быстродействие. Казалось, что может быть проще, чем измерять быстродействие? Достаточно подсчитать количество информации, выдаваемой памятью в единицу времени (скажем, Мегабайт в секунду), и… ничего не получится! Ведь, как мы уже знаем, время доступа к памяти непостоянно и в зависимости от ряда обстоятельств варьируется в очень широких пределах. Наибольшая скорость достигается при последовательном чтении, а наименьшая — при чтении в разброс.
Хорошо, условимся измерять максимально достижимое быстродействие памяти по скорости последовательного считывания ячеек. Конечно, это будет несколько идеализированная характеристика, ощутимо завышающая реальную производительность (ведь не все алгоритмы могут быть «заточены» под последовательный доступ), но… тут не обходится без тонкостей.
Современные модули памяти имеют несколько независимых банков и потому могут обрабатывать более одного запроса одновременно. Таким образом, несмотря на то, что выполнение каждого отдельно взятого запроса по-прежнему будут занимать весьма внушительное время (конденсаторное ядро так ведь и не было переработано!), запросы могут следовать непрерывно. А раз так, — непрерывно будут приходить и ответы.
Теоретически все так и есть, но на практике возникает множество затруднений. Основной камень преткновения — фундаментальная проблема зависимости по данным. Рассмотрим следующую ситуацию. Пусть ячейка N 1 хранит указатель на ячейку N 2, содержащую обрабатываемые данные. До того, как мы получим содержимое ячейки N 1, мы не сможем послать запрос на чтение ячейки N 2, поскольку, еще не знаем ее адрес. Следовательно, производительность памяти в данном конкретном случае будет определяться не пропускной способностью, а ее латентностью, т.е. полным временем доступа к одной ячейке.
Причем, описываемый случай отнюдь не является надуманным, скорее наоборот. Это — типичная ситуация. Базовые структуры данных — деревья и списки — имеют ярко выраженную зависимость по данным, т.к. объединяют свои элементы именно посредством указателей, что сводит на нет весь выигрыш от параллелизма. Большинство функции штатных библиотек Си/Си++ также имеют зависимость по данным и не могут обрабатывать их параллельно.
Маскировать латентность позволяют лишь очень немногие алгоритмы, да и то не без помощи специальных команд предвыборки (см. статью » Управление кэшированием в x86 процессорах старших поколений», опубликованную в апрельском номере журнала за этот год). Команды предвыборки, во-первых, отсутствуют в микропроцессорах Pentium младшего поколения. Во-вторых, они чрезвычайно аппаратно зависимы и требуют реализовать код как минимум в двух вариантах — отдельно для процессоров Pentium и отдельно для процессоров K6/K7, причем, реализация для Pentium-III будет весьма не оптимальна для Pentium-4 и, соответственно, наоборот. (На Pentium-II это же и вовсе не будет работать и вызовет исключение «неверный опкод»). Наконец, в-третьих, команды предвыборки до сих пор не поддерживаются ни одним оптимизатором, и вряд ли будут поддерживаться в ближайшем будущем. Ручная же оптимизация — слишком сложна и трудоемка, чтобы стать массовой.
Короче говоря, теоретическая пропускная способность памяти, заявленная производителями, совсем не то же самое, что и реальная производительность. Давайте, отбросив параллелизм (который все равно не ускоряет работу подавляющего большинства существующих на данный момент приложений) попробуем подсчитать максимально достижимую пропускную способность при обработке зависимых данных. Используем для этого следующую формулу:
(1)
здесь: C — пропускная способность (Мегабайт/c), N — разрядности памяти (бит), T — полное время доступа (нс.).
Сравнив полученные результаты с теоретической пропускной способностью (см. рис. 8), мы увидим, что, во-первых, расхождение между ними чрезвычайно велико и к тому же неуклонно увеличивается по мере совершенствования памяти. Во-вторых, при обработке зависимых данных эффективная производительность SDRAM и DDR-SDRAM практически неразличима, а Direct RDRAM и вовсе идет на уровне памяти начала девяностых. Причем, фактическая производительность всех типов памяти будет еще ниже, чем рассчитанная по формуле (1). Это объясняется тем, что, во-первых, современные процессоры обмениваются с памятью не отдельными ячейками, а блоками по 32 и ли 128 байт (в зависимости от длины кэш-линеек), вследствие чего издержки на хаотичный доступ чрезвычайно велики. Во-вторых, приведенная выше формула не учитывает ни латентности контроллера памяти, ни штрафа за асинхронность, ни времени регенерации памяти, ни…
Фактически, разница в реальной и заявленной производительности отличается приблизительно в десять раз для DDR-SDRAM и в пятьдесят (!) для Direct-Rambus. Кошмар! Что это: преднамеренное введение потребителя в заблуждение или несбалансированная конфигурация системы? Оказывается, верно последнее предположение.
Разработчики аппаратного обеспечения перегнали прогресс, заставив телегу бежать впереди лошади. Программистский мир к такому развитию событий оказался не готов и новые, замечательные возможности параллельной обработки памяти до сих пор остаются не востребованными и вряд ли будут востребованы в обозримом будущем.
Как минимум потребуется разработать принципиально новые алгоритмы обработки данных, обеспечить соответствующую поддержку параллелизма со стороны компилятора и/или штатных библиотек, наконец, маркетоидам надлежит придумать: зачем рядовому пользователю обрабатывать терабайты данных. Вообще-то, все три этих пункта давным-давно реализованы, но… только не на IBM PC, а на суперкомпьютерах! Однако, главное отличие суперкомпьютеров от персоналок заключается отнюдь не в вычислительной мощности, а в возложенных на них задачах. Задачи, стоящие перед персоналками, колоссальной пропускной способности просто не требуют (при грамотном подходе к программированию, конечно). И даже из тех, что требуют, далеко не все поддаются эффективному распараллеливанию по данным.
Короче говоря, «официальная» пропускная способность — это абстракция чистейшей воды, интересная скорее с маркетинговой точки зрения, но абсолютно бесполезная для конечного пользователя…

Таблица 1 Важнейшие характеристики основных типов памяти

Рисунок 8 Максимально достижимая пропускная способность основных типов памяти при наличии зависимости по данным и при отсутствии таковой.
Взаимодействие памяти и процессора.
Ввиду несоответствия интерфейсов памяти и процессора, для совместного взаимодействия им необходим посредник — контроллер памяти. Контроллер памяти в значительной мере определяет скорость обмена с памятью а, значит, и быстродействие всей системы в целом.
В настоящее время, такие контролеры выпускаются не в виде отдельных микросхем, а входят в состав чипсета (см. рис. 9), поэтому, очень важно выбрать «правильный» чипсет. Чем они отличаются друг от друга, или на какие характеристики следует обращать внимание в первую очередь?
Прежде всего — синхронный или асинхронный режим работы. Синхронные чипсеты требуют, чтобы частота памяти совпадала с частой шины. Имея такой чипсет, вы не сможете использовать преимущества процессора с 133 MHz шиной, если у вас установлена память SDRAM PC 100. Асинхронные чипсета выгодно отличаются тем, что позволяют тактировать память «своей» частотой, не обязательно совпадающей с тактовой частотой системной шины. Благодаря этому, они поддерживают практически любые комбинации процессоров и памяти. Согласитесь, — немаловажно для апгрейда. Однако если тактовые частоты системной шины и памяти не могут быть соотнесены как целые числа, возникают штрафные задержки (см. рис. 10), негативно сказывающиеся на производительности.
Другой немаловажный момент — политика открытия страниц и максимально возможное количество одновременно открываемых страниц. Как уже было показано выше, удерживание сигнала RAS позволяет читать ячейки в пределах этой страницы передачей одного лишь адреса столбца, что значительно увеличивает производительность системы. Чем больше страниц удерживается в открытом состоянии, тем выше вероятность того, что очередной запрос попадет в уже открытую страницу и потому обработается значительно быстрее.

Рисунок 9 Контроллер памяти в современных системах интегрирован в чипсет

Рисунок 10 Если тактовая частота памяти и тактовая частота системной шины не могут быть соотнесены как целые числа возникают штрафные задержки на их синхронизацию.
Вычисление полного времени доступа.
Приводя формулу (1) мы упомянули, что она дает несколько завышенное представление о производительности памяти, т.к. не учитывает ряда факторов. Настало время восполнить этот пробел, рассмотрев процесс обращения к памяти под «микроскопом».
Рассмотрим следующий пример. Пусть у нас имеется 10-нс память и процессор CELERON-300A, с системной шиной на 66 MHz. Сколько тактов потребуется для чтения одной ячейки памяти? Чтобы вычислить это, разберем весь процесс обмена по «косточкам». Итак…
процессор (вернее кэш-контроллер второго уровня) запрашивает 32 байта памяти и передает запрос чипсету. На это уходит один такт системной шины;
в течение следующего такта чипсет вычисляет номер столбца и строки первой ячейки цепочки и смотрит: открыта ли соответствующая строка или нет?
если строка действительно открыта, то чипсет выставляет сигнал CAS и спустя 2-3 такта (в зависимости от величины задержки CAS, обусловленной качеством микросхемы памяти) на шине появляются долгожданные данные;
чипсет их считывает за один такт;
еще 1 такт расходуется на передачу данных процессору;
если адрес запрошенной ячейки кратен 32, она возвращается в первой интеграции цикла чтения, в противном случае нам придется немного подождать;
три последующих ячейки считываются процессором за три такта — по такту на каждую;
если же требуемая строка закрыта, но максимально допустимое количество одновременно открытых строк еще не достигнуто, чипсет посылает микросхеме памяти сигнал RAS вместе с адресом строки и дает ей 2-3 такта на его «переваривание», затем посылается CAS и все происходит по сценарию описанному выше;
в том случае, когда требуемая строка закрыта и к несчастью открыто максимально допустимое количество других строк, требуется один дополнительный такт на закрытие строки.
Итак, по меньшей мере, требуется шесть тактов системной шины на чтение одной ячейки, а в худшем случае — все четырнадцать. Поскольку, в данном случае частота ядра процессора в 4.5 раза превышает частоту системной шины, чтение ячейки занимает от тридцати (6 x 5 = 30) до семидесяти (12 x 5 = 70) тактов процессора!
А теперь (интереса ради) попробуйте подсчитать: сколько тактов занимает одно обращение к памяти в системе вашей конфигурации.
Сегодня, когда счет оперативной памяти пошел на сотни мегабайт, мы, программисты, наконец-то лишились «удовольствия» оптимизации своих программ по скорости и размеру одновременно. Пусть будет нужен хоть гигабайт — система выделит его за счет жесткого диска.
Правда, производительность подсистемы памяти все еще оставляет желать лучшего. Причем, современная ситуация даже хуже, чем десять-пятнадцать лет тому назад. Если персональные компьютеры конца восьмидесятых — начала девяностых оснащались микропроцессорами с тактовой частотой порядка 10 MHz и оперативной памятью со временем доступа 200 нс., типичная конфигурация ПК ближайшего будущего: 1.000 — 2.000 MHz и 20 ns. Нетрудно подсчитать, что во времена главенства IBM XT/AT обращение к одной ячейке занимало буквально пару тактов процессора и это притом, что большинство арифметических команд отнимало десятки тактов! Современные же процессоры тратят на чтение произвольной ячейки порой сотни тактов, выполняя в это же самое время чуть ли не по трое вычислительных инструкций за такт.
Несмотря на стремительный рост производительности оперативной памяти, наблюдающиеся в последние годы, разрыв «CPU vs Memory» растет с чудовищной быстротой. Забавно, но та же самая картина наблюдалась и тридцать-сорок лет назад, — в эпоху «больших» машин с быстродействующими (по тем временам!) процессорами и жутко медленной барабанной (а позже и ферритовой) памятью.Как же конструкторы ЭВМ выходили из этой ситуации? Откроем, например, «Структуры ЭВМ и их математическое обеспечение» Л. Н. Королева: «Для того чтобы достичь необходимого баланса между высокой скоростью выполнения арифметических и логических действий в центральном процессоре и ограниченным быстродействием блоков оперативного ферритового запоминающего устройства (время цикла работы каждого блока — 2 мксек), были предприняты следующие меры.
Оперативное запоминающее устройство состоит из восьми блоков, допускающих одновременную выборку информации (командных слов и операндов), что резко повышает эффективное быстродействие системы памяти. Подряд идущие физические адреса памяти относятся к разным блокам, и если оказалось, например, так, что последовательно выбираемые операнды имеют последовательно возрастающие (убывающие) адреса, то они могут выбираться со средней скоростью, равной 2 мксек/8=0,25 мксек.
Второй структурной особенностью организации обращений к оперативному запоминающему устройству является метод буферизации, или метод накопления очереди заказов к системе памяти. В машине БЭСМ-6 существуют группы регистров, на которых хранятся запросы (адреса), называемые буферами адресов слов и команд. Разумеется, что эти буфера могут работать эффективно только в том случае, если структура машины позволяет просматривать команды «вперед», т. е. загодя готовить запросы. Устройство управления БЭСМ-6 позволяет это делать. Буфера адресов позволяют в конечном итоге сгладить неравномерность поступления запросов к памяти и тем самым повысить эффективность ее использования.
Третьей структурной особенностью БЭСМ-6 является метод использования сверхоперативной, не адресуемой из программы памяти небольшого объема, цель которого — автоматическая экономия обращений к основному оперативному запоминающему устройству. Эта сверхоперативная память управляется таким образом, что часто используемые операнды и небольшие внутренние командные циклы оказываются на быстрых регистрах и готовы к немедленному использованию в арифметическом устройстве или в системе управления машиной. Быстрые регистры в ряде случаев позволяют экономить до 60% всех обращений к памяти и уменьшают тем самым временные затраты на ожидание чисел и команд из основной памяти.
Следует еще раз подчеркнуть, что об использовании быстрых регистров заботится аппаратура самой машины и при составлении программ об экономии обращений к памяти думать нет необходимости.
Эти структурные особенности БЭСМ-6 получили название водопроводного принципа построения структуры машины. В самом деле, если подсчитать время от начала выполнения команды до его окончания, то для каждой команды оно будет очень велико, однако глубокий параллелизм выполнения, просмотр вперед, наличие буфера адресов, быстрых регистров приводят к тому, что «поток» команд и темп обработки информации очень высок. Аналогия с водопроводом состоит в том, что если проследить время, за которое частица воды проходит по некоторому участку водопровода, то оно будет большим, хотя скорость на выходе потока может быть очень велика. Четвертой структурной особенностью БЭСМ-6, имеющей очень важное значение для построения операционных систем и работы машины в мультипрограммном режиме, является принятый аппаратный способ преобразования математических, или виртуальных адресов в физические адреса машины. В машине БЭСМ-6 четко выдержано деление на физическую и математическую память, принята постраничная организация, однако способ отображения, заложенный в аппаратуру, значительно отличается от того, который был применен в машине «.
Такое впечатление, что читаешь описание процессора Pentium, — настолько эти решения похожи! Создается впечатление, что никакого прогресса вообще нет. Меняются лишь технологии и проектные нормы, но эксплуатируется один и те же идеи. Хороший повод для размышлений, не правда ли, господа?
Принципы функционирования SRAM
История создания статической памяти уходит своими корнями в глубину веков. Память первых релейных компьютеров по своей природе была статической и долгое время не претерпевала практически никаких изменений (во всяком случае — концептуальных), — менялась лишь элементарная база: на смену реле пришли электронные лампы, впоследствии вытесненные сначала транзисторами, а затем TTL- и CMOS-микросхемами… но идея, лежащая в основе статической памяти, была и остается прежней…
Динамическая память, изобретенная, кстати, значительно позднее, в силу фундаментальных физических ограничений, так и не смогла сравняться со статической памятью в скорости.
Ядро микросхемы статической оперативной памяти (SRAM — Static Random Access Memory) представляет собой совокупность триггеров — логических устройств, имеющих два устойчивых состояния, одно из которых условно соответствует логическому нулю, а другое — логической единице. Другими словами, каждый триггер хранит один бит информации, — ровно столько же, сколько и ячейка динамической памяти (см. статью «Устройство и принципы функционирования оперативной памяти. В ядре»).
Между тем, триггер как минимум по двум позициям обыгрывает конденсатор: а) состояния триггера устойчивы и при наличии питания могут сохраняться бесконечно долго, в то время как конденсатор требует периодической регенерации; б) триггер, обладая мизерной инертностью, без проблем работает на частотах вплоть до нескольких ГГц, тогда как конденсаторы «сваливаются» уже на 75-100 МГц.
К недостаткам триггеров следует отнести их высокую стоимость и низкую плотность хранения информации. Если для создания ячейки динамической памяти достаточного всего одного транзистора и одного конденсатора, то ячейка статической памяти состоит как минимум из четырех, а в среднем шести — восьми транзисторов, поэтому мегабайт статической памяти оказывается по меньшей мере в несколько раз дороже.
Устройство триггера
В основе всех триггеров лежит кольцо из двух логических элементов «НЕ» (инверторов), соединенных по типу «защелки» (см. рис. 1). Рассмотрим, как он работает. Если подать на линию Q сигнал, соответствующий единице, то, пройдя сквозь элемент D.D1 он обратится в ноль. Но, поступив на вход следующего элемента, — D.D2 — этот ноль вновь превратится в единицу. Поскольку, выход элемента D.D2 подключен ко входу элемента D.D1, то даже после исчезновения сигнала с линии Q, он будет поддерживать себя самостоятельно, т.е. триггер перейдет в устойчивое состояние. Образно это можно уподобить дракону, кусающему себя за хвост.
Естественно, если на линию Q подать сигнал, соответствующий логическому нулю, — все будет происходить точно так же, но наоборот!

Рис. 1. Устройство простейшего триггера (слева). Образно это можно представить драконом, кусающим свой хвост
Устройство элемента «НЕ» (инвертора)
Как устроен элемент «НЕ»? На этот вопрос нельзя ответить однозначно. В зависимости от имеющейся у нас элементарной базы, конечная реализация варьируется в очень широких пределах. Ниже в качестве примера приведена принципиальная схема простейшего инвертора, сконструированного из двух последовательно соединенных комплементарых /* взаимно дополняемых */ CMOS-транзисторов — p- и n- канального (см. рис. 2). Если на затворы подается нулевой уровень, то открывается только p-канал, а n-канал остается разомкнутым. В результате, на выходе мы имеем питающее напряжение (т. е. высокий уровень). Напротив, если на затворы подается высокий уровень, размыкается n-канал, а p-канал — замыкается. Выход оказывается закорочен на массу и на нем устанавливается нулевое напряжение (т. е. низкий уровень).

Рис. 2.Устройство элемента НЕ (инвертора)
Устройство матрицы статической памяти
Подобно ячейкам динамической памяти (см. статью «Устройство и принципы функционирования оперативной памяти. Conventional DRAM Page Mode DRAM — «обычная» DRAM»), триггеры объединяются в единую матрицу, состоящую из строк (row) и столбцов (column), последние из которых так же называются битами (bit).
В отличии от ячейки динамической памяти, для управления которой достаточно всего одного ключевого транзистора, ячейка статической памяти управляется как минимум двумя. Это не покажется удивительным, если вспомнить, что триггер, в отличии от конденсатора, имеет раздельные входы для записи логического нуля и единицы соответственно. Таким образом, на ячейку статической памяти расходуется целых восемь транзисторов (см. рис. 3) — четыре идут, собственно, на сам триггер и еще два — на управляющие «защелки».

Рис.3.Устройство 6-транзистроной одно-портовой ячейки SRAM-памяти
Причем, шесть транзисторов на ячейку — это еще не предел! Существуют и более сложные конструкции! Основной недостаток шести транзисторной ячейки заключается в том, что в каждый момент времени может обрабатываться всего лишь одна строка матрицы памяти. Параллельное чтение ячеек, расположенных в различных строках одного и того же банка невозможно, равно как невозможно и чтение одной ячейки одновременно с записью другой.
Этого ограничения лишена многопортовая память. Каждая ячейка многопортовой памяти содержит один-единственный триггер, но имеет несколько комплектов управляющих транзисторов, каждый из которых подключен к «своим» линиям ROW и BIT, благодаря чему различные ячейки матрицы могут обрабатываться независимо. Такой подход намного более прогрессивен, чем деление памяти на банки. Ведь, в последнем случае параллелизм достигается лишь при обращении к ячейкам различных банков, что не всегда выполнимо, а много портовая память допускает одновременную обработку любых ячеек, избавляя программиста от необходимости вникать в особенности ее архитектуры. (Замечание: печально, но кэш-память x86-процессор не истинно многопортовая, а состоит из восьми одно-портовых матриц, подключенных к двух портовой интерфейсной обвязке)
Наиболее часто встречается двух — портовая память, устройство ячейки которой изображено на рис. 4. (внимание! это совсем не та память которая, в частности, применяется в кэше первого уровня микропроцессоров Intel Pentium). Нетрудно подсчитать, что для создания одной ячейки двух — портовой памяти расходуется аж восемь транзисторов. Пусть емкость кэш-памяти составляет 32 Кб, тогда только на одно ядро уйдет свыше двух миллионов транзисторов!

Рис. 4.Устройство 8-транзистроной двух портовой ячейки SRAM-памяти

Рис. 5, 6.Ячейка динамической памяти воплощенная в кристалле
Устройство интерфейсной обвязки
По своему устройству, интерфейсная обвязка матрицы статической памяти, практически ничем не отличается от аналогичной ей обвязки матрицы динамической памяти (см. статью Устройство и принципы функционирования оперативной памяти. Conventional DRAM Page Mode DRAM — обычная DRAM») Поэтому, не будем подробно останавливаться на этом вопросе и рассмотрим его лишь в общих чертах.
Пожалуй, единственное различие в интерфейсах статической и динамической памяти заключается в том, что микросхемы статической памяти имея значительно меньшую емкость (а, следовательно — и меньшее количество адресных линий) и геометрически располагаясь гораздо ближе к процессору, могут позволить себе роскошь не прибегать к мультиплексированию. И потому, для достижения наивысшей производительности, номера строк и столбцов чаще всего передаются одновременно.
Если статическая память выполнена в виде самостоятельной микросхемы, а не располагается непосредственно на кристалле процессора, линии ее входа зачастую объединяют с линиями выхода, и требуемый режим работы приходится определять по состоянию специального вывода WE (Write Enable). Высокое состояние вывода WE готовит микросхему к чтению данных, а низкое — к записи. Статическая память, размещенную на одном кристалле вместе с процессором, обычно не мультиплексирует, и в этом случае содержимое одной ячейки можно читать параллельно с записью другой (линии входа и выхода ведь раздельные!).
Номера столбцов и строк поступают на декодеры столбца и строки соответственно (см. рис. 7). После декодирования расшифрованный номер строки поступает на дополнительный декодер, вычисляющий, принадлежащую ей матрицу. Оттуда он попадает непосредственно на выборщик строки, который открывает «защелки» требуемой страницы. В зависимости от выбранного режима работы чувствительный усилитель, подсоединенный к битовым линейкам матрицы, либо считывает состояние триггеров соответствующей raw-линейки, либо «перещелкает» их согласно записываемой информации.

Рис. 7.Устройство типовой микросхемы SRAM-памяти
Временные диаграммы чтения/записи
Временные диаграммы чтения/записи статической памяти практически ничем не отличаются от аналогичных им диаграмм микросхем динамической памяти (что и неудивительно, т. к. интерфейсная обвязка в обоих случаях схожа).
Цикл чтения
Цикл чтения начинается со сброса сигнала CS (Chip Select — Выбор Чипа) в низкое состояние, давая понять тем самым микросхеме, что чип «выбран» и сейчас с ним будут работать (и работать будут, и прорабатывать!).
К тому моменту, когда сигнал стабилизируется, на адресных линиях должен находиться готовый к употреблению адрес ячейки (т.е. номер строки и номер столбца), а сигнал WE должен быть переведен в высокое состояние (соответствующее операции чтения ячейки). Уровень сигнала OE (Output Enable — разрешение вывода) не играет никакой роли, т.к. на выходе пока ничего не содержится, точнее выходные линии находятся в, так называемом, высоко импедансом состоянии.
Спустя некоторое время (tAddress Access), определяемое быстродействием управляющей логики и быстротечностью переходных процессорах в инверторах, на линиях выхода появляются долгожданные данные, которые вплоть до окончания рабочего цикла (tCycle) могут быть непосредственно считаны. Обычно время доступа к ячейке статической памяти не превышает 1 — 2 нс., а зачастую бывает и меньше того!
Цикл записи
Цикл записи происходит в обратном порядке. Сначала мы выставляем на шину адрес записываемой ячейки и одновременно с этим сбрасываем сигнал WE в низкое состояние. Затем, дождавшись, когда наш адрес декодируется, усилиться и поступит на соответствующие битовые линии, сбрасываем CS в низкий уровень, приказывая микросхеме подать сигнал высокого уровня на требуемую линию row. Защелка, удерживающая триггер, откроется и в зависимости от состоянии bit-линии, триггер переключится в то или иное состояние.

Рис. 8.Временные диаграммы чтения/записи асинхронной статической памяти
Типы статической памяти
Существует как минимум три типа статической памяти: асинхронная (только что рассмотренная выше), синхронная и конвейерная. Все они практически ничем не отличаются от соответствующих им типов динамической памяти (см. статью «Устройство и принципы функционирования оперативной памяти»), поэтому, во избежание никому не нужного повторения ниже приведено лишь краткое их описание.
Асинхронная статическая память
Асинхронная статическая память работает независимо от контроллера и потому, контроллер не может быть уверен, что окончание цикла обмена совпадет с началом очередного тактового импульса. В результате, цикл обмена удлиняется по крайней мере на один такт, снижая тем самым эффективную производительность. «Благодаря» последнему обстоятельству, в настоящее время асинхронная память практически нигде не применяется (последними компьютерами, на которых она еще использовались в качестве кэша второго уровня, стали «трешки» — машины, построенные на базе процессора Intel 80386).
Синхронная статическая память
Синхронная статическая память выполняет все операции одновременно с тактовыми сигналами, в результате чего время доступа к ячейке укладывается в один-единственный такт. Именно на синхронной статической памяти реализуется кэш первого уровня современных процессоров.
Конвейерная статическая память
Конвейерная статическая память представляет собой синхронную статическую память, оснащенную специальными «защелками», удерживающими линии данных, что позволяет читать (записывать) содержимое одной ячейки параллельно с передачей адреса другой.
Так же, конвейерная память может обрабатывать несколько смежных ячеек за один рабочий цикл. Достаточно передать лишь адрес первой ячейки пакета, а адреса остальных микросхема вычислит самостоятельно, — только успевай подавать (забирать) записывание (считанные) данные!
За счет большей аппаратной сложности конвейерной памяти, время доступа к первой ячейке пакета увеличивается на один такт, однако, это практически не снижает производительности, т.к. все последующие ячейки пакета обрабатываются без задержек.
Конвейерная статическая память используется в частности в кэше второго уровня микропроцессоров Pentium-II и ее формула (см. статью «Устройство и принципы функционирования оперативной памяти Формула памяти») выглядит так: 2 — 1 — 1 — 1.
Ребус Rambus: былое, настоящее и будущее памяти RDRAM, а также других перспективных технологий компании
Автор: Павел Данилов Опубликовано 13 мая 2003 года
Февраль 1998 года. Компания Rambus объявляет о результатах двухлетнего сотрудничества с Intel — завершена разработка нового интерфейса памяти — Direct RDRAM. Питер Мак-Вильямс, ведущий специалист Intel по архитектуре платформ, вещает: «Это важная веха в переходе от сегодняшней PC100 SDRAM к Direct RDRAM в начале 1999 года». Джим Хэнди, руководитель и аналитик из Dataquest’s Memories Worldwide Service, еще более категоричен: «Мы видим начало новой эры — эры Rambus-PC. Intel ясно дала понять, что будет использовать Rambus в будущих поколениях PC». Лидеры индустрии выстраиваются в очередь за лицензией Rambus — Fujitsu и Hitachi, IBM и Siemens, Samsung и Micron, Hyundai и LG, Texas Instruments и Toshiba… AMD заявляет о безоговорочной поддержке DRDRAM и обещает выпустить чипсет для своего процессора Athlon. Тринадцать производителей чипов памяти приступают к развертыванию производства. Характеристики новой памяти повергают в шок: 1,6 Гбайт/с пропускной способности с одного чипа, шестнадцать сдвоенных банков, частота передачи данных 800 МГц, — кажется, ничто не спасет безнадежно устаревшую PC100 SDRAM. Аналитики дают прогнозы: 50 процентов рынка памяти в 2001 году захватит продукция с логотипом Rambus. Статьи о Direct RDRAM в прессе полны оптимизма, порой доходящего до истерии.
Прошло пять лет.
Доля памяти Rambus на рынке DRAM составляет около 3% и непрерывно уменьшается; Intel сконцентрировалась на DDR и уже больше года не анонсирует новых чипсетов с поддержкой памяти DRDRAM. Пока еще можно купить новую плату на i850E; память PC800 и PC1066 все еще присутствует в прайсах многих фирм. Но с каждым днем привлекательность этих решений падает; сборщики ПК стремительно сокращают ассортимент машин, оснащенных DRDRAM. Кажется, что Pentium 4 с шиной 800 МГц (QP) и чипсеты i865/875 c двухканальной DDR400 способны окончательно похоронить технологии Rambus для PC. Тем временем появляются ростки надежды: SiS начинает поставки набора логики R658, первого чипсета с поддержкой DRDRAM не от Intel. ASUS, SiS и Rambus заявляют о своих планах по разработке четырехканального чипсета на базе PC1200 DRDRAM для Pentium 4 с шиной 800 МГц QP. В то же время Rambus смотрит в будущее — видимо, более отдаленное будущее, чем эпоха DDRII, демонстрируя значительный интеллектуальный потенциал и способность предлагать разработки, опережающие потребности индустрии на много лет вперед. Речь идет о совокупности технологий под названием «Yellowstone». Но начнем мы все-таки с рассмотрения «болезненного дитя» Rambus — DRDRAM.
Direct RDRAM
За время, прошедшее со времени анонса DRDRAM, вышло огромное число публикаций, описывающих принципы работы этой технологии и многочисленные результаты тестирования реальных систем. Здесь вы не найдете леденящих душу подробностей схем терминации или пошаговой инициализации контроллера — это не руководство для проектировщика системных плат. Мы сконцентрируемся на основных аспектах этой спорной технологии — преимуществах, которые слишком часто оборачиваются поражением (резюме выделены курсивом).
Канальная архитектура
Архитектура Direct RDRAM (так называемая система с длинным каналом) представлена на рис. 1. К контроллеру памяти Rambus (Rambus Memory Controller, RMC) через Rambus ASIC Cell (RAC) могут быть подсоединены до четырех каналов Rambus (Rambus Channel).

В функции RAC входит синхронизация входящих в контроллер и исходящих из него сигналов. Канал Rambus — узкая шина всего из тридцати линий, в ней предусмотрены шестнадцать линий для передачи данных (плюс еще две линии для ECC), она поддерживает до 32 микросхем DRDRAM, или трех модулей RIMM (реально — до двух модулей). С обратной стороны канал Rambus терминируется серией сопротивлений. Каждая микросхема памяти DRDRAM независима, имеет шину данных, равную ширине канала — 16 бит. Канал синхронизируется с частотой от 267 до 533 МГц; за один такт происходит передача двух бит данных. Для хранения информации о параметрах чипов памяти на модуле имеется специальная микросхема SPD. Вот, собственно, и вся Direct Rambus DRAM. В принципе, канал Rambus — самодостаточная структура, и при желании можно разработать контроллер, поддерживающий более четырех каналов, проблема лишь в сложности и стоимости такого решения. Практически же были разработаны спецификации на контроллер RMC, работающий максимум с четырьмя каналами.
Узкая высокочастотная шина обеспечивает отменный показатель «пропускная способность на вывод» (PBW), который у DRDRAM примерно вдвое выше, чем у DDR SDRAM. Это имеет особенно большое значение для многоканальных конфигураций, так как уменьшает число проводников, упрощает разводку сигнальных трасс и удешевляет системные платы. Скажем, для двухканальных чипсетов под Rambus и DDR ситуация такова: MCH (северный мост) чипсета i850E имеет 615 выводов, а у E7205 — уже 1004 вывода при почти идентичной производительности и функциональности.
Высокая частота хороша еще тем, что цикл синхронизации очень короткий — 1,87 нс у PC1066 DRDRAM против 7,5 нс у PC2100 DDR, поэтому многие задержки, не связанные с обращением к ядру, занимают гораздо меньшее время. Об этом иногда говорят как о «тонкой гранулярности» (fine granularity) тактов. Почему же JEDEC, наиболее влиятельная организация по разработке стандартов памяти, продолжает цепляться за «устаревшую» 64-разрядную шину?
Проблема здесь в том, что хотя сужение шины и вызывает уменьшение электромагнитной интерференции, она тем не менее возрастает пропорционально квадрату частоты — и с целью уменьшения наводок микросхемы DRDRAM упаковываются в более дорогие корпуса типа BGA; применяется восьмислойная плата модуля вместо шестислойной у DDR SDRAM. Далее, поскольку данные реально считываются из банков по широкой внутренней шине, а передаются по узкой внешней, необходимы высокочастотные мультиплексоры и демультиплексоры в чипах памяти и контроллере, на лету «упаковывающие» данные в высокочастотный канал и выполняющие обратные операции. То же самое с адресами — они преобразуются в пакеты, которые демультиплексируются и декодируются специальными схемами внутри чипов DRDRAM. Конечно, все это приводит к увеличению размера кристалла и снижению выхода годных микросхем. В итоге, при равных скоростных параметрах ядра, емкости микросхем и пиковой пропускной способности модуль RIMM всегда обойдется производителю заметно дороже, чем модуль DDR DIMM. Не менее важно, что усложняется не только память, но и чипсет, поскольку в нем тоже должны быть высокочастотные декодеры, мультиплексоры и демультиплексоры. Еще один минус — высокочастотная интерфейсная логика в микросхемах памяти рассеивает большую мощность, поэтому каждый RIMM с самого начала снабжался металлическим радиатором. Плохо, что по мере «взросления» технологии, роста частот и увеличения емкости чипов общее энергопотребление подсистемы памяти может стать серьезной проблемой. Для борьбы с тепловыделением были введены режимы пониженного энергопотребления — в точности как у процессоров — в случае простоев часть схем перестает тактироваться, и тепловыделение падает. Правда, еще никто не придумал, как с помощью подобной схемы уменьшить выделение тепла в режиме с максимальным быстродействием, а ведь именно ради скорости и создавалась DRDRAM.
Хотя узкая высокочастотная шина («фирменная» особенность DRDRAM) может упростить разводку системных плат за счет уменьшения числа линий, тем не менее она приводит к значительному усложнению и удорожанию микросхем памяти по сравнению с альтернативными технологиями (DDR SDRAM, DDRII SDRAM) при той же пропускной способности.
Модули и банки
Первоначально (1998 год) были разработаны спецификации на «одноканальные» модули памяти PC800 с шириной шины данных 16 бит (18 бит ECC) и частотой синхронизации интерфейса 400 МГц. Их пиковая скорость передачи данных равна, таким образом, 1,6 Гбайт/с, а «результирующая частота» обмена данными — 800 МГц. Некоторое время выпускались также PC600 и PC700 RIMM, но скорость оставляла желать лучшего, а само их появление сильно смахивало на попытку утилизации отбракованных экземпляров PC800 — поначалу у большинства производителей выход высокочастотных чипов был весьма низок.
В этих ранних модулях применялись микросхемы с 16 или 32 зависимыми банками памяти (16d, 2х16d) емкостью 128/144 и 256/288 Мбит. Слово «зависимый» в данном случае означает, что последовательный доступ к соседним банкам происходит с задержкой — они разделяют общие усилители уровня (Sense Amps); для извлечения максимума скорости из этой архитектуры был создан довольно хитроумный механизм избежания обращения к смежным банкам. Дело в том, что после чтения пакета данных ячейки памяти банка должны перезарядиться, а на это уходит время (RAS Precharge). Направляя запросы большому числу банков, хорошо спроектированный чипсет способен минимизировать эту латентность и повысить пропускную способность — пока одни банки будут перезаряжаться, из других будут считываться данные. Огромное число банков DRDRAM с самого начала считалось ее «джокером» в игре против SDRAM. Великолепно, но каждый банк требует дополнительных усилителей, декодеров и логики управления; площадь кристалла DRDRAM оказывалась примерно на 15% больше площади кристалла DDR SDRAM той же емкости, а это означает автоматическое увеличение стоимости. Очень скоро стало ясно, что цена и без того недешевой памяти превышает все разумные пределы, и с целью снижения себестоимости число банков было уменьшено до четырех (как в SDR/DDR SDRAM). Так на свет появились чипы 4i (четыре независимых банка). На все модули, сертифицированные для работы с частотой 533(1066) МГц — PC1066 и RIMM 4200, устанавливаются именно эти чипы. Насколько снижение числа банков ухудшило производительность? Весьма незначительно, и вот почему. Микросхемы SDR/DDR SDRAM имеют разрядность шины данных в несколько раз меньше, чем разрядность модуля, — скажем, 8 или 16 бит; при запросе контроллера каждый чип занят обработкой части запроса. Поэтому общее число независимых банков невелико, и, хотя в типичном одностороннем модуле с восемью микросхемами присутствует 8х4=32 банка, общее число банков, которые может использовать контроллер, равно четырем. А как же обстоят дела у DRDRAM? Каждый чип, подключенный к каналу Rambus, работает независимо — и число банков, доступных RMC, равно числу банков во всех чипах памяти, подключенных к RMC. Например, при установке двух модулей 4i по восемь чипов в каждом мы получим 32 независимых банка. Между тем практика показывает, что дальнейшее увеличение числа банков приводит к мизерному росту пропускной способности — меньше 2%. Поэтому производительность реальных систем с модулями памяти из «старых» чипов 16d (2х16d) и «новых» 4i практически одинакова — конечно, при условии равной частоты синхронизации и настроек таймингов.
Архитектура DRDRAM поддерживает во много раз большее число банков, чем DDR SDRAM, что при условии адекватной поддержки чипсетом может дать значительные преимущества в скорости. Ранние микросхемы DRDRAM обладали большим числом банков, но оказались слишком дороги в производстве, и были вытеснены современными более дешевыми чипами с четырехбанковой архитектурой. Благодаря независимой работе чипов памяти на канале Rambus общее число банков, доступных чипсету, суммируется по всем каналам и микросхемам, достигая нескольких десятков даже для четырехбанковых микросхем, поэтому сколь либо существенного падения производительности не происходит. Плохо то, что сделано это было слишком поздно — высокая цена DRDRAM успела отпугнуть производителей чипсетов и материнских плат, большинство производителей чипов памяти сделали выбор в пользу DDR SDRAM. Intel в это время уже «поставила крест» на DRDRAM.
Расширение шины
Расширение шины модуля — следующий шаг эволюции DRDRAM. Идея такова — оставив неизменной архитектуру и ширину канала, «спарить» и «счетверить» каналы памяти на одном модуле. На 32-битном RIMM, таким образом, «проложено» два канала Rambus, на 64-битном — четыре. На схеме 2 первый канал обозначен оранжевым цветом, второй — черным. Можно видеть, как канал, «начинаясь» от контроллера, пронизывает оба RIMM.

Хотя топология шин, разумеется, полностью изменена, интерфейс остается тот же, и контроллер, разработанный для 16-битных RIMM, может успешно работать с новыми модулями. Поэтому, кстати, в платах на i850E, предназначенных для 16- и 32-битных RIMM (скажем, ASUS P4T533C и P4T533), используются одинаковые микросхемы «хаба контроллера памяти» MCH. Апогей технологии DRDRAM — четырехканальные 64-битные RIMM — полностью используют весь потенциал Direct Rambus. При частоте синхронизации 533 (1066) МГц пропускная способность этих устройств составляет 8,5 Гбайт/с — больше, чем полоса пропускания 800-МГц QP-шины Pentium 4 (6,4 Гбайт/с) и прототипов модулей DDRII 667 (5,2 Гбайт/с). Неплохо для разработки пятилетней давности! Но на этом история не заканчивается: недавно Rambus опубликовала спецификации на чипы и модули памяти с частотой синхронизации 600 (1200) МГц, и Samsung в ближайшее время начнет их поставки. В четырехканальной конфигурации это даст 10 Гбайт/с — двухканальная DDRII 533 (8,5 Гбайт/с) растоптана в пыль, см. рис. 3.

Становится понятным решение SiS использовать в своем будущем чипсете четырехканальную PC1200 DRDRAM — ничего подобного по пропускной способности в чипсетах Intel для рынка PC не будет еще очень долго. Инженеры Rambus сделали свою работу на совесть — и пять лет спустя DRDRAM обеспечивает более чем достаточную пропускную способность.
Но, как мы знаем, пропускная способность — это еще далеко не все. Латентность, зависящая главным образом от скорости ядра, может свести на нет весь эффект от гигантской пропускной способности.
Ядро DRAM
Для любой DRAM, включая FPM, EDO, DDR, RDRAM и т. д., скорость ядра — важнейший параметр, влияющий на быстродействие. Хотя с помощью высокопроизводительного интерфейса можно достичь высокой пропускной способности, латентность почти полностью зависит от скорости ядра. Ядро (core) — это сами однобитовые ячейки памяти, организованные в виде матрицы или решетки. В этой структуре адрес каждой ячейки задается двумя числами — номером строки и номером столбца. Для чего понадобилась такая организация? Очень просто — емкость микросхем DRAM составляет многие мегабайты, а поскольку к каждой ячейке понадобилось бы провести шину, чип вместо ячеек памяти в основном состоял бы из миллионов проводников, а разводка шины адреса стала бы почти невозможной задачей. К счастью, фирма Intel избавила нас от схемотехнического ада, подключив каждую ячейку в своем первом чипе DRAM к паре проводов — для адресации по строкам и столбцам. Кстати, это был вообще самый первый чип DRAM в индустрии, и с тех пор никто не смог создать приемлемую альтернативу этой схеме. Теперь посмотрим, как происходит чтение данных из памяти. В процессе считывания данных сначала указывается адрес строки (Row), что отмечается сигналом /RAS. После этого специальные усилители уровня считывают адрес строки, активизируя нужные ячейки памяти. На это уходит время — его обозначают RAS-to-CAS Delay, tRCD. Это первый важнейший «тайминговый» параметр, характеризующий скорость ядра памяти. Иногда активизацию ячеек на определенной строке называют «открытием страницы». Страница — это просто все ячейки памяти, подключенные к одной строке. Дальше указывается адрес столбца, что отмечается сигналом /CAS. Опять приходится ждать — теперь усилители должны выбрать данные из ячеек столбца; эту задержку обозначают tCAC, а для синхронной DRAM она называется CAS Latency, СL. После задержки CL на шине данных появляются данные по нужному адресу, и чипсет может приступить к их считыванию. Понятно, что чем меньше эти задержки (латентность), тем меньше процессор будет простаивать в ожидании данных, и тем быстрее будет общая производительность системы. На самом деле, величина задержек — скорость ядра ограничивается скоростью перемещения зарядов в конденсаторах ячеек памяти, поэтому задача ее увеличения лежит в области полупроводниковых технологий.
Теперь сравним быстродействие различных DDR SDRAM и DRDRAM по одному параметру — tCAC (для наглядности приводим рис. 4), поскольку реальная производительность особенно сильно зависит от него.

Для PC2100 DDR SDRAM с CL=2 tCAC равна 15 нс. У DDRII 533 CL=4 этот параметр, кстати, точно такой же. Для хорошей PC1066 DRDRAM c tCAC=7 тактам, что составляет 13,1 нс. Видите — латентность Rambus почти на 2 нс меньше! Хотя оба типа памяти в двухканальном режиме идеально подходят для систем с шиной 533 МГц (QP), в случае использования DRDRAM чипсет и процессор получат данные быстрее. Неудивительно, что i850E c высококачественной Direct Rambus DRAM нередко обгоняет E7205. Хорошо, давайте ускорим нашу DDR SDRAM — пусть теперь это будет PC2700 (DDR333). tCAC уменьшился до 12 нс — Rambus начинает проигрывать. Ядро PC3200 (DDR400) с CL=2 еще быстрее — tCAC равен 10 нс, что значительно меньше показателя DRDRAM. Настало время «разогнать» и Rambus — до 1200(600) МГц — ведь память именно такой частоты по планам Samsung должна сражаться против DDR400 в этом году. При семи циклах задержки время tCAC на этой частоте будет равняться 11,6 нс. Как видно, это на 1,6 нс больше, чем у самой лучшей DDR400 SDRAM. К слову сказать, большинство модулей DDR400, доступных на рынке, устойчиво работают лишь при CL=3, что дает время tCAC, равное 15 нс. Неудивительно, что производительность систем с такими модулями существенно ниже.
Какой вывод можно из этого сделать? Direct RDRAM, долгое время лидировавшая по скорости ядра, отстает. Латентность теперь играет против Rambus, что в ряде случаев может оказаться критическим для систем, использующих DRDRAM 1200 МГц. Позиции Intel c чипсетами i865/875, использующими DDR400, выглядят очень сильными.
Перспективы
С технической точки зрения, DRDRAM была, есть и остается hi-end решением для подсистемы памяти, по крайней мере с точки зрения пропускной способности. С самого начала целью сотрудничества Intel и Rambus было создание быстрой памяти — и им это удалось. Плохо, что эта высокопроизводительная память — не совсем то, что нужно индустрии. Фактически, DRDRAM никогда не была универсальным стандартом, подобно SDR/DDR SDRAM, и никогда не сможет им стать. Смотрите — SDRAM можно найти везде, от мобильных телефонов и контроллеров холодильников до серверов с десятками процессоров и векторных суперкомпьютеров. Посмотрим на DRDRAM — и что же? Область применения, за редкими исключениями — рабочие станции, высокопроизводительные PС, игровые приставки и сетевые устройства — как раз те случаи, когда требуется быстродействующая подсистема памяти не слишком большого объема. Раскаленный радиатор RIMM в карманном ПК или ноутбуке? Абсурд. RDRAM в недорогом офисном компьютере? Зачем, когда такой же с DDR стоит на $100 дешевле и в типичных для этого класса машин приложениях всего на 10% медленнее. Для hi-end систем с гигабайтами RAM, чтобы получить требуемую пропускную способность, оказывается дешевле развести несколько каналов DDR, пусть даже с 64-битной шиной, потому что цены на модули RIMM высокой емкости просто запредельные. И дело тут не только в желаниях, скажем, Samsung, Elpida или Corsair снять сливки — таковы объективные характеристики DRDRAM.
А как же наши «бунтовщики» — Samsung, SiS и ASUSTeK c четырехканальным чипсетом для 1200 МГц DRDRAM? Сегодня Samsung контролирует до 80% рынка чипов DRDRAM и имеет хорошо отлаженное производство, приносящее доход, и, конечно, компании хотелось бы и дальше продолжать выпуск DRDRAM. ASUSTeK Computer известна как крупнейший производитель hi-end материнских плат для рынка PC под DRDRAM, и было бы логично продолжить выпуск высокопроизводительных плат для этого типа памяти. SiS в последнее время испытывает снижение прибыли — и существует явное стремление проникнуть на рынок hi-end решений. Месяц назад была проведена реструктуризация, в ходе которой отдел, занимающийся разработкой графических чипов, был выделен в самостоятельную фирму. Сделано это было в том числе и с целью избавиться от негативного имиджа производителя медленных графических чипов. К сожалению, скорость R658, первого чипсета SiS для DRDRAM, пока разочаровывает: он проиграл как Intel 850E, так и чипсету SiS655 для двухканальной DDR SDRAM. Разочаровала как низкая скорость чтения из памяти, так и повышенная латентность, причем ситуацию не спасает даже увеличение частоты передачи данных DRDRAM до 1333 МГц (см. исчерпывающий отчет на www.terralab.ru/system/24864). Конечно, хочется верить, что SiS удастся улучшить свой контроллер памяти Rambus — но пока информацией об этом владеют лишь сами разработчики. Потенциально, применение четырехканальной 1200 МГц DRDRAM вполне может прибавить достаточно скорости, чтобы обогнать даже Intel 875P. Но хотя DRDRAM уходит из PC, она продолжает применяться в сетевых устройствах вроде коммутаторов Gigabit Ethernet — для буферизации пакетов — там, где нужна ее высокая пропускная способность. Объем памяти в них редко превышает 512 Мбайт, и DRDRAM смотрится довольно привлекательно. Тем временем, пока объемы продаж чипов DRDRAM плавно падают, Rambus занята созданием нового интерфейса, способного поднять производительность как минимум в четыре раза. Речь идет о Yellowstone.
Yellowstone
Вероятно, мы никогда не сможем вставить модуль памяти с интерфейсом Yellowstone в ПК, рабочую станцию или сервер. Новейший интерфейс памяти Rambus создается с прицелом на сетевые и графические приложения — с чрезвычайно высокими требованиями к пропускной способности. Сейчас создание Yellowstone еще не завершено, но известны основные технологии, на которых он будет базироваться.
DRSL
Differential Rambus Signaling Levels — DRSL — потомок RSL, сигнального протокола, применяемого в DRDRAM. Разность логических уровней в DRSL уменьшилась в четыре раза и составляет 0,2 В вместо 0,8 В в RSL. Интересно, что интерфейс Yellowstone, в отличие от DRDRAM — двунаправленный. Двунаправленная шина памяти выглядит дорогостоящим излишеством на PC, но очень полезна для сетевых и видео приложений; это сразу раскрывает назначение Yellowstone (см. рис. 5).

ODR
Yellowstone будет использовать передачу 8 бит за такт, используя технику Octal Data Rate, ODR. При частоте синхронизации 400 МГц «эффективная» частота передачи данных составит 3,2 ГГц, причем в дальнейшем будет возможно повышение частоты как минимум вдвое. На самом деле, ODR — разновидность техники DDR. Частота 400 МГц, создаваемая внешним генератором, внутри чипов будет умножаться до 1600 МГц, и по фронту/срезу синхросигнала такой частоты и будет происходить передача данных (см. рис. 6).

FlexPhase
Название «FlexPhase» можно перевести как «адаптируемая фаза». Наверное, это самая загадочная из трех составляющих Yellowstone (см. рис. 7). Ее назначение — автоподстройка фаз сигналов данных и адреса для упрощения разработки межчиповых соединений.

FlexPhase внутри чипа выравнивает данные по частоте, упрощая расчеты длин линий шин и проектирование печатных плат. Обещается, что ее действие не будет вносить задержек в работу интерфейса. Хочется верить, что интеграция этой технологии в микросхемы памяти не приведет к их значительному удорожанию. Уже существуют тестовые образцы чипов по техпроцессу 0,13 мкм, реализующие технологию FlexPhase.
Ничего подобного мы еще не встречали. Потенциально, Yellowstone может предложить пропускную способность, превосходящую DDRII в четыре раза — с учетом двунаправленной шины. Однако не будем спешить с выводами до выхода финальных спецификаций. В свое время DRDRAM тоже выглядела как революционная и абсолютно недостижимая по скорости технология. Подчеркнем: даже если Yellowstone и станет самым быстрым интерфейсом DRAM, эта технология разрабатывается не для использования в ПК.
Заключение
Хотя DRDRAM не оправдала первоначальных надежд Intel и Rambus, она, тем не менее, нашла применение во многих областях. Rambus в сотрудничестве с Samsung довольно успешно развивает DRDRAM, и она до сих пор способна обеспечить пропускную способность, перекрывающую потребности шины любого современного 32-разрядного процессора Intel. Однако чувствуется усталость и увядание. Частоты растут намного медленнее, чем у конкурента — DDR SDRAM, для требуемого уровня производительности требуется уже максимальная, четырехканальная конфигурация. Но Rambus, получая львиную долю дохода от продаж DRDRAM, не спит — разрабатываются новые быстродействующие интерфейсы. Помимо Yellowstone, интерфейса памяти следующего поколения, создается другая важнейшая технология Redwood — универсальная параллельная шина, способная бросить вызов HyperTransport и PCI Express. Cможет ли Rambus одержать победу в схватке с влиятельным консорциумом HT, включающим nVidia и AMD, и корпорацией Intel? Об этом — в другой раз.
Память Synchronous Dynamic Random Access Memory, третье поколение стандарта Double Data Rate — попросту DDR3 SDRAM, представляет собой новое поколение памяти DDR, идущей на смену нынешнего поколения DDR2 SDRAM.
Среди основных преимуществ нового стандарта, прежде всего, стоит отметить меньшее энергопотребление, примерно на 40% чем у ходовых образцов модулей DDR2. Основной причиной экономии энергопотребления называют использование нового поколения чипов памяти DDR3, выпуск которых налажен у большинства производителей. Это позволяет снизить рабочие напряжения чипов – до 1,5 В у DDR3, что ниже 1,8 В у DDR2 или 2,5 В у DDR.
Производительность модулей памяти DDR3 в перспективе должна значительно превысить возможности нынешнего поколения памяти DDR2 – хотя бы потому, что теоретически эффективные частоты DDR3 будут располагаться в диапазоне 800 МГц – 1600 МГц (при тактовых частотах 400 МГц – 800 МГц). В то время как у DDR2 эффективные рабочие частоты составляют 400 МГц — 1066 МГц (тактовые частоты 200 МГц — 533 МГц), а у DDR – и вовсе 200 МГц — 600 МГц (100 МГц — 300 МГц).
Память DDR3 обладает 8-битным буфером предварительной выборки, в то время как у нынешней памяти DDR2 он 4-битный, а у DDR и вовсе был 2-битный. Буфер предварительной выборки (prefetch buffer), надо отметить, достаточно важный элемент современных модулей памяти, поскольку он отвечает за кэширование данных перед тем, как они будут востребованы.
Еще одним преимуществом DDR3 можно смело назвать новую схемотехнику динамической внутрикристальной терминации (Dynamic On-Die Termination), калибровка которой производится в процессе инициализации для достижения оптимального взаимодействия памяти и системы.
Наконец, в отличие от DDR2, где терминация применялась только частично, память DDR3 обладает полной терминацией, включая адреса и команды.
Модули памяти DDR3 DIMM для настольных ПК будут обладать 240-контактной структурой, привычной нам по модулям DDR2; однако физической совместимости не будет благодаря различному расположению ключей DIMM. Такая защита, предотвращающая установку модулей DDR3 в платы под DDR2 и наоборот предусмотрена не только по причине поконтактной несовместимости модулей, но и в связи с разными напряжения питания и сигнальными уровнями разных поколений оперативной памяти.
Что было до ddr 1

Источник: Университет Чикаго
Еще не электронная и даже не механическая, письменность сама по себе была невероятным открытием. Она позволила не только общаться людям, находящимся в разных местах, но и передавать знания из поколения в поколение. Согласно исследованиям университета Чикаго, письменность появилась около 3500 до н.э. и это событие стало «началом информационной революции». По-моему, лучше и не скажешь.

Иллюстрация в журнале Scientific American от 30 августа 1890 г. Источник: Wikipedia
Перфокарты громко заявили о себе при переписи населения США 1890 года; машина, изобретенная Германом Холлеритом, обработала ее результаты в течение года – людям понадобилось бы на это в 10 раз больше времени. Идею для устройства подсказали кондукторы в поездах, компостировавшие билеты пассажиров; большое влияние оказали также машины французского ткача Жозефа-Мари Жаккарда, использовавшие перфоленту для управления ткацким процессом.

Схема триггера из патента Екклеса и Джордана, 1918 г. Источник: Wikipedia
Триггер, изобретенный в 1918 году, дает нам подсказку, как работает современная компьютерная память. Эти старомодные громоздкие устройства, способные сохранять и изменять свое состояние, зависящее от внешнего электрического сигнала, принципиально не так далеки от того, как компьютеры работают сейчас.

MT4C1024 — интегрированный DRAM модуль производства Micron Technology. Источник: Wikipedia
DRAM (Dynamic random access memory, Динамическая память с произвольным доступом), изобретенная в 1966 году (не путать с древней монетой!), использовала конденсаторы для хранения информации. Заряженный конденсатор представлял собой единицу, разряженный – ноль. Упоминавшийся в названии термин «динамический» означал не функциональную особенность, а свойство конденсаторов со временем терять свой заряд, что вызывало необходимость в перезарядке.
SDRAM

Source: Royan/Wikipedia commons
SDRAM (Synchronous Dynamic Random Access Memory, Синхронная динамическая память с произвольным доступом) имела ограниченное применение еще в 70-х, однако заявила о себе широко только в 1993. Ранее RAM изменяла свое состояние так быстро, как было возможно, чтобы принять данные, синхронная же DRAM использовала тактовый генератор компьютера для настройки процесса хранения. Это позволило разделить данные на отдельные банки для синхронного исполнения нескольких операций с памятью одновременно.
EPROM

Первый EPROM Intel, 1971 г. Источник: Wikipedia
Дов Фроман разработал стираемую программируемую память только для чтения (EPROM, Erasable Programmable Read Only Memory) в 1971 году в Intel. Она энергонезависима, то есть содержимое памяти не уничтожается при потере питания. Эти чипы программируются с помощью электрического тока, информация стирается путем облучения ультрафиолетовым светом.

Источник: Michael Holley/Wikipedia
Побывавший в 1975 году на обложке журнала Popular Electronics, Altair 8800 стал первым компьютером для тысяч новоявленных компьютерных гиков. Хотя об этом компьютере можно рассказать много любопытного, в данной статье нас более всего интересует его 8-дюймовый дисковод, изображенный на фото. Согласно rwebs.net, диск мог хранить 300,000 байт. Сейчас нам странно видеть размер памяти без добавления приставки мега- или гига-, однако в то время это был приличный объем. Любопытно, что вы могли также приобрести и кассетный интерфейс, если дисковод не пришелся вам по душе.
EEPROM

Источник: Amit Bhawani
Электрически стираемая программируемая память только для чтения (EPROM, Electrically Erasable Programmable Read Only Memory) появилась в 1978 году. Ее преимуществом по сравнению с EPROM стала возможность программирования и стирания данных во время использования. Имелось и одно существенное ограничение – в количестве циклов перепрограммирования. Однако в современных чипах количество циклов чтения-записи было значительно увеличено.

Источник: Ian Wilson/Wikipedia
Seagate произвел свой первый 5-дюймовый жесткий диск в 1980 году. С этого времени компоненты памяти начинают напоминать те, которые мы имеем сейчас, однако есть и нюансы. Скажем, в том же году IBM выпустила первый винчестер емкостью 1 Гб – он весил 550 кг.

Брошюра к проигрывателю Sony CDP-101. Источник: TechHive.com
Продажи аудио CD начались в 1982. Первоначально они не предназначались для компьютеров, однако представляли собой средство хранения цифровой информации, и к 1985 году появились первые приводы CD-ROM. CD опережали свое время – лишь в начале 90-х компьютеры догнали их по объемам хранимой мультимедийной информации.
Несмотря на возраст, CD до сих пор, пусть и не так широко, используются для распространения данных. 30 лет – это огромный срок для всего цифрового.

Чип слева — флеш память, справа — контроллер. Источник: Wikimedia Commons
Флеш память была изобретена в 80-х и представлена публике в 1988. Технически представляя собой разновидность EEPROM, флеш память существенно превосходит предшественников по скорости. Были разработаны две разновидности, основанные на логических вентилях NAND и NOR соответственно. Технология эксплуатируется по сегодняшний день, одним из наиболее ее распространенных примеров являются карты памяти Compact Flash.
DDR SDRAM

Память Corsair DDR-400 с радиаторами. Источник: Martyn M aka Martyx/Wikipedia
Торговая ассоциация JDEC сертифицировала DDR SDRAM (Double Data Rate Synchronous Dynamic Random Access Memory, Синхронная динамическая память с произвольным доступом и удвоенной скоростью передачи данных) в 2000 году. Как следует из названия, при определенных условиях этот тип памяти может обеспечить двойную скорость данных по сравнению с обычной SDRAM.
Вслед за DDR SDRAM последовала DDR2, представленная в 2003 и обеспечивавшая еще примерно двукратный прирост. Затем DDR3 удвоила его еще раз в 2007. Если кого-то не удовлетворяет 8-кратное увеличение, DDR4 уже не за горами; помимо удвоения скорости, она имеет более низкое рабочее напряжение.

Источник: Toshiba
JDEC опубликовала стандарт UFS (Universal Flash Storage, Универсальный флеш-накопитель) в 2012 году и обновила его в сентябре 2013. В дополнение в функциям энергосбережения, эти чипы обеспечат дуплексную пропускную способность данных 300 Мбит/с. Будет интересно посмотреть, как этот тип памяти будет развиваться в будущем.

Источник: Micron/TechWeekEurope.co.uk
Помимо DDR4 и UFS, еще один памяти у нас на горизонте – трехмерная память. Исчерпав возможности плоских чипов, мы пытаемся выжать максимум из третьего измерения. Эта перспективная технология описана в посте Janine Love.
1 ТБ USB-носитель

Источник: HardwareZone
Как я уже отмечал ранее, Kingston в 2013 году выпустил терабайтный USB-носитель. До сих пор поражаюсь плотности данных в этом устройстве размером в несколько сантиметров.
Удивительно, как далеко зашел прогресс в области памяти. Неужели и в дальнейшем мы будем наблюдать столь гигантские прорывы?
Эволюция оперативной памяти
Оперативная память (ОЗУ — оперативное запоминающее устройство) является одним из важнейших компонентов компьютера. Именно от объема ОЗУ зависит количество задач, которые одновременно может выполнять компьютер, а от его быстродействия во многом зависит скорость работы ПК. Оперативная память — это одна из трех (оперативная, постоянная и внешняя) разновидностей памяти, которые используются в современных компьютерах. Однако когда термин «память» упоминается без пояснения, чаще всего имеется в виду именно оперативка. Она больше предназначена для обработки, чем для хранения информации. Ведь именно сюда загружаются программы и данные, и именно из оперативной памяти центральный процессор получает команды. ОЗУ неотъемлемая часть твоего компьютера, связанная с процессором, материнской платой и чипсетом. Об истории развития и особенностях оперативки я тебе и расскажу.
Как все начиналось
Сейчас количество памяти, установленной в твоем компьютере, в несколько раз превышает количество памяти, которое было в первых персоналках. В конце семидесятых годов прошлого века ПК комплектовались всего 64 килобайтами памяти (и это еще много! были компьютеры и с 16 Кб), и этого первое время вполне хватало для работы с текстами, вычислениями и даже для игрушек. Но затем, естественно, памяти стало мало, и появились компьютеры с большим количеством памяти. Оригинальные PC поставлялись с 64 Кб, которые находились прямо на материнской плате, если пользователю требовалось увеличить размер оперативки, приходилось покупать платы расширения. Тогда еще не было отдельных слотов для памяти. С началом массового производства PC/XT стандартный объем памяти увеличился до 256 Кб, затем появились платы расширения объемом 384 Кб. Установка дополнительной памяти проходила следующим образом: в специальную плату расширения вставлялись (вручную) микросхемы памяти, затем с помощью перемычек на материнской плате компьютеру сообщалось, сколько у него памяти. Если ты думаешь, что это очень просто, то сильно ошибаешься. Все было просто, если в компьютере уже было 256 Кб, и ты просто прибавлял к ним еще 384. А если изначально есть только 64 Кб, и нужно установить плату расширения на 128 Кб (всего должно получиться 192 Кб), то правильно установить перемычки было очень нелегко. Даже сейчас многие путаются с джамперами на жестких дисках, а с памятью все было гораздо сложнее.
Таким образом, суммарная емкость оперативной памяти стала достигать «целых» 640 Кб. Это было уже в 80-х годах. Именно тогда, в 1981 году, Билл Гейтс сделал свое знаменитое заявление: «640 килобайт должно хватить всем!».
Процессор 8088, используемый в IBM PC, мог работать с памятью объемом до 1 Мб. Объем памяти, с которым может работать проц, называется адресным пространством. Объемы RAM больше 1 Мб были просто немыслимы для домашнего компьютера, никто не мог представить, что понадобится значительно больше.
Логическая организация памяти
Вся доступная память делится на куски по 64 Кб, они называются сегментами памяти. При этом память, установленная в любом персональном компьютере, кратна 16. Когда процессору требуется достать какую-то информацию из ОЗУ, он обращается к нему по номеру сегмента и смещению. Смещение — это порядковый номер байта в сегменте. Как уже упоминалось, процессор 8088 мог работать максимум с 1 Мб RAM. Она распределялась следующим образом: первые 640 Кб (10 сегментов по 64 Кб) были отданы под оперативную память. В них загружались программы и данные. Эта область памяти называлось нижней (low). Память от 640Кб до 1Мб называлась верхней (high). Первые два сегмента верхней памяти использовались для памяти видеоадаптера, следующий сегмент делили между собой винчестер и все тот же видеоадаптер, затем шли два зарезервированных сегмента. И последний сегмент использовался для загрузки копии bios в оперативную память. Такова типичная структура оперативки в персональных компьютерах.
Все было очень хорошо и всех устраивало, пока не появились компьютеры с процессором 80286. Новые процессоры могли работать с большими объемами оперативной памяти, нежели 1 Мб, для этого они переводились в так называемый защищенный режим работы (protected mode). Однако самая популярная ОС — MS DOS могла работать только в реальном режиме работы процессора и выполнять программы только в первых 640 Кб памяти. Так появились два способа увеличения памяти: дополнительная память (expanded memory) и расширенная память (extended memory). Физически обе памяти одинаковые — это просто микросхемы, устанавливаемые в компьютер, но логически работа с ними происходила совсем по-разному.
Говорят, что нехватка памяти впервые была отмечена пользователями электронных таблиц — они забивали слишком много данных, и память заканчивалась. В то время на всех бухгалтерских компьютерах стояли продукты не Microsoft, а Lotus. Именно Lotus был лидером в производстве такого софта. И вот, идя на встречу пользователям Intel, Microsoft и Lotus разработали спецификацию дополнительной памяти: Expanded Memory Specification (EMS). Логически эта память не была продолжением оперативной памяти, для обращения к ней было выделено «окно» в верхней части памяти (один из зарезервированных сегментов). Вся дополнительная память (ее могло быть максимум 32 Мб) также разбивалась на сегменты по 64 Кб, так называемые страницы (page frame). С помощью специального драйвера, через это «окно» можно было обратиться к любой странице дополнительной памяти. Однако в этой памяти можно было хранить только данные, ведь DOS могла выполнять программы только из первых 640 Кб.
EMS отлично справлялась со своей задачей на старых компьютерах, но владельцы 286 и уж тем более 386 процов хотели настоящую память, а не какое-то там окно. 🙂 Расширенная память (XMS) — это память, превышающая 1 Мб (как в современных компьютерах), однако ее не может использовать DOS. Для получения доступа к ней надо переводить процессор в защищенный режим работы. Именно в этом режиме проц работает под Windows, Linux и другими многозадачными ОС. Для DOS’а были также написаны специальные программы, при запуске переводящие проц в защищенный режим работы, а затем обратно. Но вот в 286 процессоре была ошибка, из-за которой он мог переключаться только в защищенный режим, а обратно никак. Так что расширенная память начала распространяться только с массовым появлением 386 компьютеров.
Первая память
В 1970 году молодая компания Intel выпустила первый модуль DRAM (Dynamic Random Access Memory, динамическая память со случайным доступом) памяти, под номером 1103. И к 1972 году это был самый продаваемый полупроводниковый чип памяти в мире. В коммерческих компьютерах он впервые стал использоваться в HP 9800. В основе этой памяти лежал очень маленький транзистор и конденсатор, а ее изобретателем был Robert H. Dennard, работавший в исследовательском центре IBM. В 1968 году он вместе с IBM получил патент на свое изобретение. Вся оперативная память, используемая в персональных компьютерах, является памятью со случайным доступом (RAM). Это значит что процессор может обращаться к любому байту памяти по номеру столбца и строки, не затрагивая остальные байты. Всего существует два основных вида RAM: динамическая (Dynamic RAM) и статическая (Static RAM). Различия заключается в том, что динамическая память нуждается в частом обновлении содержимого (этим занимается контроллер памяти) иначе конденсатор разряжается, и информация в памяти теряется. В статической памяти вместо конденсатора использовался триггер на биполярных транзисторах. Получив один раз заряд, такая ячейка способна хранить информацию, пока есть питание. Но когда питание отключается оба типа памяти все «забывают». Статическая память быстрее динамической, однако и стоит значительно дороже, поэтому она нашла свое применение в кэш-памяти процессора, где, кстати, сейчас и используется.
На первых персональных компьютерах вся оперативная память была представлена одним блоком микросхем памяти. Причем память работала с той же частотой что и процессор. С появлением 286 и 386 процессоров ситуация изменилась: память перестала успевать поставлять процессору данные — так появилось понятие временных задержек. Процессор ждал несколько тактов, пока память передавала ему информацию. Первая память имела время доступа не менее 100 нс (а зачастую оно бывало равным и 250 нс). Схема доступа к такой памяти выглядела как 5-5-5-5, то есть запись/чтение из памяти осуществлялись каждый пятый такт. Напряжение питания ОЗУ составляло 5 В.
Память, использовавшаяся в первых компьютерах, так и называется — Conventional DRAM (обычная DRAM).
Быстрая память
Для «двоек» и «троек» была разработана специальная быстрая память — FPM (fast page mode, постраничная адресация). Поскольку память стала «узким местом» вEAомпьютере, были придуманы несколько способов оптимизации передаваемой информации. Фишка FPM заключалась в том, что существовала область ОЗУ, к которой процессор мог обращаться без циклов ожидания (там использовались специальные микросхемы памяти). Принцип работы был следующий: если требовалось записать или прочитать информацию из определенной страницы памяти, и предыдущая команда по работе с памятью использовала информацию с той же страницы, цикла ожидания не требовалось. Однако когда программа обращалась к другой странице памяти, циклы ожидания все равно были. Стандартное время доступа к такой памяти было 60-70 нс. В FPM также использовалась другая схема доступа: 5-3-3-3, работающая даже с частотой системной шины 66 МГц. Постраничная адресация памяти и ее различные разновидности использовались очень долгое время, аж до 1994 года.
А в 1994 году появилась новая архитектура памяти: EDO (Extended Data Output или другое название Hyper Page Mode). По сути, это просто усовершенствованный вид FPM. EDO частично совмещала такты чтения, за счет чего появилась возможность считывания следующей порции данных не дожидаясь окончательной передачи предыдущих. Схема чтения у EDO была уже 5-2-2-2. Она могла работать даже с частотой шины 75 МГц. Память этого типа использовалась в системных платах до Intel 430 FX, то есть и в 486 компьютерах, и даже в Pentium’ах. Питание было 5 В или 3.3 В.
VIA Technologies, пытаясь отвоевать часть рынка материнских плат у Intel, предложила свою реализацию технологии EDO — BEDO (burst EDO — EDO с пакетной пересылкой данных). Особенностью этой памяти было то, что при первом обращении считывалось сразу несколько последовательных слов. BEDO работает по схеме 5-1-1-1 (всего 8 тактов вместо 20, как у простого DRAM). Этот тип RAM поддерживался чипсетами Intel 430 HX и VIA 580VP/590VP. Однако такая память не получила широкого распространения, и ее сменила SDRAM.
Новая вы2сота — SDRAM
Так как Pentium был революционным процессором, ему нужна была новая революционная память. В 1997 году на смену EDO приходит SDRAM (Synchronous DRAM, синхронная DRAM). Впервые поддержка этой памяти была реализована в чипсетах Intel TX и VX. Чипы SDRAM использовали новейшие технологии, применявшиеся при изготовлении кэш памяти. За счет этого они работали по схеме 5-1-1-1, такой же, как в BEDO. Первоначально SDRAM разрабатывалась для видеокарт, однако с удешевлением стоимости производства памяти она перекочевала в ОЗУ. Главной особенностью SDRAM стала синхронизация работы с процессором. До этого вся память работала асинхронно, то есть, обращаясь к памяти, процессор «не знал», сколько времени потребуется памяти для ответа, и ему ничего не оставалось, как ждать. С появлением синхронной памяти процессор уже «знал», сколько тактов ему ждать, и он мог начать выполнять следующую операцию, не дожидаясь ответа RAM, при условии, что последующая операция не использует результаты предыдущей команды. Первоначально память работает на частоте 66 МГц.
Но в первом квартале 1998 года Intel выпускает спецификацию PC100 и вместе с ней новый чипсет i440BX, который поддерживал частоту шины 100 МГц. Максимальная пропускная способность памяти (произведение частоты памяти на ее разрядность) составляла 0.8 ГБ/с. Питание осуществлялось от 3.3 В. Чуть позже появляется спецификация PC133 для материнских плат с частотой шины 133 МГЦ, однако Intel в этом не участвует, почему, ты поймешь ниже. Поддержкой PC133 занимались VIA
MD. Пропускная способность такой памяти вырастает до 1.06 ГБ/с.
Но и этого вскоре оказалось мало, и тогда на помощь «старым» игрокам рынка памяти приходит Samsung, представивший спецификацию SDRAM II или DDR SDRAM (Double Data Rate SDRAM). Ничего идеологически нового в DDR памяти не появилось, но она стала обеспечивать удвоенную пропускную способность за счет работы на обеих границах тактового сигнала (подъем и спад). Питание такой памяти было 2.5 В. Первоначально она работала на частоте 100 МГц (РС1600 аналогично обычной SDRAM на частоте 200 МГц) и 133 МГц (РС2100), а затем доросла аж до 266 МГц.
Rambus
Компания Rambus еще в 1995 году разработала новый вид памяти, который начал применяться в высокопроизводительных видеокартах и в приставке Nintendo 64. Память получила название RDRAM (Rambus DRAM). Год спустя Intel подписывает соглашение с Rambus, а в 1999 году начинает продвигать новую память. Intel решила, что от DDR SDRAM добиться больших скоростей нереально и для нового процессора Pentium IV требуется другая память. Но DDR не умер, ее поддержкой активно занялись AMD, VIA и другие производители.
Среди особенностей памяти от Rambus было: увеличение тактовой частоты за счет сокращения разрядности шины, передача управляющей информации отдельно от передачи данных по шине, увеличение количества банков для усиления параллелизма. Главным недостатком RDRAM было чрезвычайно требовательное к качеству производство и сложность изготовления микросхем из-за уменьшения размера элементов. Производители не спешили начинать выпускать память Rambus, производить DDR было гораздо выгоднее, так как требовалось платить большие отчисления в Rambus для получения лицензии и менять производственные линии. А покупатели не горели желанием приобретать Rambus из-за дороговизны и необходимости покупать модули парами. Первые модули Rambus были 16-разрядными и работали на удвоенной частоте шины: 800 МГц (РС800) с пропускной способностью 1.6 ГБ/с и 1066 МГц (РС1066). То есть реальная частота составляла, соответственно, 400 и 533 МГц, а эффективная — 800 и 1066 МГц. Затем появились 32-разрядные модули с эффективными частотами 800 МГц (РС3200) и 1066 МГц (РС4200), которые получили название DR DRAM (Direct Rambus DRAM). Опять же, идеологически от RDRAM они не отличались, но возросла скорость передачи данных, и изменился протокол.
Спустя короткое время становится ясно, что RDRAM не оправдывает возложенных на нее надежд, а DDR SDRAM догоняет и в некоторых случаях даже начинает обгонять по скорости Rambus. Однако пока Intel ничего не может сделать, она связанна контрактом с Rambus и не может выпускать материнские платы с поддержкой другой памяти до истечения срока контракта.
А тем временем.
VIA и AMD вполне успешно продолжали развитие DDR, а Intel испытывала серьезные трудности с чипсетом i820, который так и не смог нормально работать с памятью Rambus. Корпорации пришлось развивать поддержку медленной памяти SDRAM. И только в середине 2000 года на свет появляется чипсет i815, официально поддерживающий PC133 SDRAM. Хотя и раньше, разгоняя чипсет i440BX, можно было использовать эту память. Также для Pentium 4 появился чипсет i845, поддерживающий оба типа памяти.
Сегодня на большинстве компьютеров используется DDR SDRAM, однако Intel не успокоилась и принялась за стандарт DDR2, который уже в этом году был реализован в чипсетах i915/i925. Наученная горьким опытом с Rambus, Intel уже не делает ставку только на DDR2, новые чипы по-прежнему будут поддерживать обычную DDR. DDR2 также ничего революционно нового не принесла. Однако модули DDR2 несколько отличаются по конструкции и требуют меньшее питание. И снова DDR2 пришел к нам из видеокарт, где появился раньше. AMD и VIA пока что не планируют переход к новой памяти и продолжают использовать DDR.
Заглядывая дальше в будущее, можно предсказать переход к DDR3, которая уже сейчас используется в видеокартах.
Тайминги памяти
Для доступа к памяти используется схема синхронизации доступа в пакетном режиме в виде A-B-C-D. A — это количество тактов ожидания для произведения чтения первого адреса (Column Address Strobe Latency). B, C и D — количество тактов ожидания процессора для чтения каждого следующего адреса в пакетном режиме (внутренние задержки памяти: B — precharge-to-active, C — active-to-precharge, D — active-to-CMD). Такт — это один период электромагнитного колебания частоты, на которой работает память.
Например, память работает на частоте 100 МГц, время одного такта 1/100 млн, то есть 10 нс. Таким образом 5 тактов ожидания соответствуют задержке в 50 нс.