Архитектура оперативной памяти.


В современный компьютер оперативная память устанавливается с помощью специальных модулей в соответствующие разъемы на материнской плате. И, естественно, мы с Вами изучим, как эти модули называются, чем отличаются. Но модуль памяти - это всего лишь договоренность о форме и размерах маленькой платки с припаянными чипами и о разъеме, куда она устанавливается. Ведь в первую очередь модуль состоит из микросхем памяти, и именно параметры микросхем (их архитектура и быстродействие) определяют эффективность того или иного модуля. Поэтому давайте сразу договоримся, что мы, с одной стороны, будем изучать типы памяти, т.е. логику организации тех или иных типов чипов памяти, их быстродействие и эффективность; с другой стороны - в компьютер устанавливаются именно модули, и мы изучим внешний вид и параметры модулей, состоящих из чипов памяти конкретного типа (архитектуры).

Архитектуры оперативной памяти
Естественно было бы основным фактором производительности системы оперативной памяти назвать ее пропускную способность, т.е. количество мегабайт в секунду, которое способна считать (записать) оперативная память. Разумеется, пропускная способность оперативной памяти напрямую зависит от частоты работы чипов памяти и от ширины шины, связывающей память и процессор, и обычно определяется как произведение ширины шины на частоту ее работы. Например, ширина шины 64 бита, частота работы памяти 100 МГц, пропускная способность - 8 байт (64 бита) * 100 МГц = 800 Мбайт/с.

Но пропускная способность - не единственный фактор, определяющий производительность подсистемы памяти. Важнейшим параметром также является время доступа, т.е. временная задержка между запросом на выдачу какой-либо информации из памяти и ее реальной выдачей. Какая память лучше: с малой задержкой и малой пропускной способностью или с большой задержкой и большой пропускной способностью? Однозначного ответа на этот вопрос, конечно, быть не может. Если конкретная программа работает с большими массивами непрерывных данных, т.е. лишь однажды получает доступ, а затем много линейно считывает, то для такой программы оптимальна память с большой пропускной способностью, а если программа оперирует малыми блоками данных, т.е. постоянно получает доступ к разным областям памяти и понемногу читает из каждой области, то оптимальна память с малым временем доступа, а пропускная способность имеет меньшее значение. Так как обычно на компьютере исполняются разные приложения, то очень трудно найти компромисс. В общем случае, естественно, необходимо стремиться к тому, чтобы и время доступа и пропускная способность памяти были хорошими. Разобравшись с параметрами скорости, которыми мы будем описывать архитектуру памяти, теперь можно рассмотреть какие конкретно типы памяти применялись и применяются в персональном компьютере.

В самых первых PC в качестве оперативной памяти использовалась так называемая DRAM (Dynamic RAM). Ячейки памяти в микросхеме DRAM - это крошечные конденсаторы, которые удерживают заряды. Именно наличием или отсутствием заряда кодируются биты. Основная проблема такой организации памяти в том, что она динамическая, т.е. должна регенерироваться, так как в противном случае заряды с конденсаторов "стекают" и данные будет потеряны. Регенерация происходит, когда контроллер памяти системы (встроенный обычно в чипсет) берет перерыв и обращается ко всем строкам данных в микросхеме памяти. Регенерация, естественно, занимает время работы системы, во время, когда происходит регенерация памяти, процессор фактически ждет, ничего полезного не делая. Чем быстрее происходит регенерация, тем меньше процессорного времени теряется и тем производительнее работает система.

В DRAM для хранения одного бита данных используется только один транзистор и один конденсатор, поэтому технология DRAM позволяет делать достаточно компактные чипы с немалой емкостью. Например, сегодня существуют чипы, базирующиеся на технологии DRAM емкостью 512 Мбит, т.е. они содержат 1/2 миллиарда транзисторов. Для сравнения в современных процессорах количество транзисторов измеряется десятками миллионов. Но структура чипа DRAM весьма проста, представляя собой двумерную матрицу, в отличие от сложной архитектуры современного процессора. Итого: основное достоинство динамической памяти - немалая емкость при малых физических размерах чипа и небольшая цена. Применяемые в первых компьютерах и применяемые сегодня архитектуры памяти базируются в основном на динамической памяти. Давайте рассмотрим разновидности DRAM, нашедшие применение в PC и их достоинства.

Первой, нашедшей применение в PC модификацией DRAM, была память, которая работала в так называемом быстром страничном режиме и ее принято называть FPM DRAM (Fast Page Mode DRAM) или просто FPM. Чтобы сократить время ожидания на выборку данных (на доступ) стандартная DRAM разбивается на страницы. Обычно для доступа к данным в памяти требуется указать строку и столбец адреса, что занимает некоторое время. Разбиение на страницы обеспечивает более быстрый доступ ко всем данным в пределах данной строки памяти, т.е. если изменяется лишь номер столбца, но не номер строки.

Страничная организация памяти - простая схема повышения эффективности, в соответствии с которой память разбивается на страницы от 512 байт до нескольких килобайт. Соответствующая схема обращения позволяет в пределах страницы уменьшить количество состояний ожидания.

Чтобы увеличить скорость доступа к памяти был разработан так называемы пакетный (burst) режим доступа. Преимущества пакетного режима доступа проявляются тогда, когда доступ к памяти является последовательным (т.е. считывание происходит последовательно одно за другим из соседних ячеек). После задания строки и столбца и считывания информации, к следующим трем соседним адресам можно обращаться без дополнительных циклов ожидания. Однако доступ в таком пакетном режиме ограничивается лишь четырьмя операциями чтения-записи, затем необходимо снова полностью адресоваться к строке и столбцу.

Принято говорить о схеме синхронизации доступа в пакетном режиме в виде x-y-y-y, где х - количество тактов ожидания для произведения чтения первого адреса, а затем y - количество тактов ожидания для чтения каждого следующего адреса в пакетном режиме. (Такт - один период электромагнитного колебания той частоты, на которой работает память. Например: частота памяти 100МГц, один период равен 1/100млн, т.е. равен 10нс).

Архитектура DRAM такова, что для получения доступа первый раз необходимо 5 тактов ожидания. Если не разбивать память на страницы и не пользоваться пакетным режимом доступа, то каждая следующая операция получения доступа к следующей ячейке памяти тоже будет занимать 5 тактов ожидания. Однако если пользоваться разбиением на страницы и режимом burst, то, получив доступ первый раз, потратив на это 5 тактов ожидания, содержимое следующих ячеек можно считать, потратив на это лишь три такта ожидания, т.е. в режиме FPM схема доступа имеет вид не 5-5-5-5, как у обычной DRAM, а 5-3-3-3. В этом и преимущество памяти типа FPM перед обычной DRAM. Т.е. использование памяти типа FPM позволяет при той же частоте работы чипов памяти увеличить производительность обмена за счет сокращения времени на получение доступа к памяти.

Начиная с 1995 года, в PC используется новый тип оперативной памяти - EDO (Extended Data Out). Это усовершенствованный тип памяти FPM, у него было еще одно название, которое сейчас не используется Hyper Page Mode. Микросхемы памяти EDO учитывают перекрытие синхронизации между очередными операциями доступа. За счет этого удается частично совместить по времени следующий цикл чтения с предыдущим, т.е. чипсет при работе с EDO памятью может начать выполнение новой команды выборки столбца, пока данные считываются по текущему адресу, за счет чего еще уменьшаются задержки на получение доступа.

Для оперативной памяти EDO схема синхронизации в пакетном режиме имеет вид 5-2-2-2, т.е. на четырех операциях считывания тратится не 14, а 11 тактов. Т.е. налицо явный прирост производительности, в то время как стоимость чипов типа EDO лишь немного отличалась от чипов FPM.

Пока что все рассмотренные нами архитектуры были лишь вариантами оригинальной DRAM, отличаясь схемой доступа в пакетном режиме, что, конечно, давало соответствующий прирост производительности. Частоты, на которых функционировала память перечисленных типов примерно таковы: DRAM функционировала с частотой 4,77 МГц (в первых PC) до 10-12 МГц. Затем применялась память типа FPM, ее частота функционирования составляла 10-40 МГц в 386 системах, 25-50 МГц в 486 системах и 50-66 МГц в Pentium системах. Память типа EDO применялась наряду с FPM в 486 и Pentium системах на аналогичных частотах. Те технологии, которые мы рассмотрели на данный момент, можно назвать вчерашним днем. Что мы видим в период развития архитектуры памяти в период с первых PC, до середины доминирования на рынке процессоров Pentium?

Улучшение идеологии построения чипов памяти, приведшее к разработке новых типов архитектур (в рамках DRAM), в каждой новой архитектуре применяется новая схема работы с памятью, приводящая к уменьшению задержек при получении доступа и планомерное увеличение тактовой частоты работы памяти. При этом нужно отметить, что увеличение тактовой частоты памяти увеличивает не только пропускную способность (естественно, линейно), но и уменьшает время доступа. Почему?

Мы описывали время доступа как количество тактов ожидания, соответствующих задержке перед получением доступа. Но ведь реальная задержка измеряется в единицах времени, а не в каких-то абстрактных тактах. А величина одного такта как раз и определяется тактовой частотой, на которой работает память. Ведь чем больше тактовая частота, тем меньше время одного такта, и, следовательно, тем меньше время доступа. Если, к примеру, память работает на частоте 100 МГц, то время одного такта 1/100млн = 10нс, и 5 тактов ожидания соответствуют задержке в 50нс, то при частоте работы памяти 133 МГц время одного такта 7,5 нс, а задержка в 5 тактов равна 37,5 нс.

Модули памяти
В самые первые персональные компьютеры память устанавливали непосредственно чипами. Разумеется, такой подход имеет ряд недостатков. Во-первых, установка множества чипов памяти на материнскую плату неэффективна с точки зрения использования свободного места; во-вторых, каждый устанавливаемый чип содержит много гибких контактов, таким образом уменьшается надежность, так как неконтакт хотя бы одного чипа приводит к неработоспособности всей системы.

Чипы памяти стали размещать на так называемых модулях памяти: маленьких платках с контактными площадками, которые устанавливались в материнскую плату в специальные разъемы. Модули помогают решить обе описанные выше проблемы: обычно они устанавливаются в материнскую плату вертикально, что позволяет решить проблему свободного места, во вторых, между модулем памяти и разъемом обычно надежный электрический контакт.

Самым первым модулем, который использовался в PC, был так называемы модуль SIMM 30pin (Single Inline Memory Module, Модуль Памяти с Односторонним Расположением контактов, имевший 30 контактных площадок). Рассмотрев такой модуль, можно заметить, что контактные площадки расположены у модуля в обеих сторон, но с обратной стороны модуля за счет внутренней металлизации контактных площадок происходит их дублирование, т.е. все же у модуля одностороннее расположение контактов.

Каковы характеристики модуля? А чем вообще можно характеризовать модуль, если все его параметры, такие как тип и объем памяти, быстродействие, зависят в первую очередь от припаянных на модуль чипов? Но есть по крайней мере один параметр, который характеризует именно модуль. Этот параметр - разрядность модуля, т.е. ширина той шины, по которой происходит доступ к конкретному модулю, или количество контактов, по которым передаются биты данных. (Например, модуль с 30 ножками, естественно, не может обеспечить 32-битный обмен данными - для этого нужно только 32 ножки для передачи данных, а ведь еще питание, адресация и т.д.). Т.е., модули друг от друга в первую очередь отличаются разрядностью. Разрядность модуля SIMM 30 pin составляет 8 бит (на самом деле 9 бит, но последний, девятый бит используется для передачи так называемых данных четности, об этом мы поговорим позднее). Модуль SIMM 30 pin (иногда еще называют: короткий SIMM) использовался в 286, 386 и 486 системах. Рассмотрим применение короткого модуля SIMM на примере 386 системы. Ширина шины, связывающая 386 процессор с памятью, составляет 32 бита. Можно ли в такой системе в качестве оперативной памяти использовать 1 SIMM 30 pin? Представьте себе: процессор использует для связи с памятью шину, в которой данные передаются по 32 проводам. Будет ли система работать, если из этих проводов задействовать только 8? Разумеется, нет! Естественно, что в системе должна использоваться 32-битная память, а иначе процессор не сможет работать с памятью. Но как реализовать 32-битную память, если в Вашем распоряжении только 8-битные модули? Нужно использовать несколько модулей одновременно! Фактически, минимальной единицей оперативной памяти системы можно считать совокупность модулей памяти, полностью "закрывающих" шину память - процессор. В 386 системе при использовании SIMM 30 pin (шириной 8 бит каждый модуль), нужно одновременно использовать кратное четырем количество модулей для того, чтобы обеспечить работоспособность системы. Поэтому на материнских платах тех времен количество разъемов под короткие SIMMы было всегда кратно четырем: 4 или 8 штук. Совокупность разъемов, полностью закрывающих шину память - процессор называется банк памяти. То, о чем мы говорили только что, можно сказать следующим образом: в системе память всегда должна устанавливаться только банками, и хотя бы один банк должен быть установлен.

Неудобства использования 30 pin SIMM в системах 386 и 486 вполне очевидны: банк памяти состоит из четырех модулей. Поэтому был разработан новый тип модуля: SIMM 72 pin. Такой модуль, как ясно из названия, так же имел контакты, расположенные с одной стороны модуля (Single Inline) и при этом увеличившееся количество контактных площадок позволило сделать ширину шины модуля 32 бит (на самом деле 36 бит, остальные снова для данных четности). Стало быть, в 486 системах, у которых ширина шины обмена процессор - память составляла 32 бита, банком памяти являлся единственный модуль памяти SIMM 72 pin. Таким образом, в 486 системы можно было устанавливать либо по 4 30pin SIMMa, либо по одному 72 pin SIMM (который иногда называли длинный SIMM).

С выходом процессора Pentium, у которого ширина шины память - процессор увеличивается до 64 бит, снова возникает ситуация, когда банк не равен модулю. В Pentium-системы память при использовании 72pin SIMM снова необходимо устанавливать парами. Для решения этой проблемы, а точнее для применения уже упоминавшейся нами SDRAM, был разработан новый тип модуля: DIMM 168 pin (Dual Inline Memory Module). Как ясно из названия, у этого модуля 168 контактных площадок, расположенных по обеим сторонам модуля, по 84 с каждой стороны. Модуль DIMM 168 pin является 64-битным, и использование единственного модуля DIMM позволяет закрыть шину память - процессор для процессора Pentium, как, впрочем, и для любого современного процессора. Таким образом, в современную систему можно вставлять модули DIMM 168 pin по одному или 72pin SIMM парами. 30 pin SIMM уже весьма давно полностью вышли из употребления, длинные же SIMM сегодня применяются крайне редко. Наиболее часто используемый тип модуля сегодня - модуль DIMM.

Обращаю Ваше внимание на то, что нужно очень четко различать и не смешивать типы памяти (DRAM, FPM, EDO, SDRAM etc) и модули памяти (SIMM30, SIMM72, DIMM168).

Технологии защиты от сбоев
Нам следует разобрать еще несколько вопросов, связанных с организацией памяти, точнее с методами выявления и даже устранения ошибок в оперативной памяти. В качестве метода выявления сбоев в оперативной памяти применялась так называемая память с контролем четности.

Контроль четности - довольно старый метод проверки сохраняемых в памяти данных на отсутствие ошибок. Вкратце метод заключается в том, что при записи данных в память для некоторого количества (как правило, 8) бит данных вычисляется контрольная сумма (т.е. двоичная сумма значений всех бит, от которой потом отбрасываются старшие разряды), которая сохраняется вместе с данными в виде бита четности. При считывании данных контрольная сумма вычисляется еще раз и сравнивается с битом четности. Если они совпадают, то данные считаются истинными, в противном случае генерируется сообщение об ошибке четности, которое приводит к остановке компьютера.

Данный метод имел определенный смысл на сравнительно ранней стадии развития PC, когда подсистема памяти была одним из самых ненадежных мест во всей системе, а компьютеры выполняли в основном ответственные задачи. Собственно достоинством метода являлось то, что если память компьютера была ненадежна, то его владелец мог определить это по частым остановкам системы ввиду ошибки четности и принять меры по замене памяти.

Со временем надежность памяти ощутимо выросла, операционные системы стали многозадачными, пользовательский интерфейс - графическим; наконец, операционные системы стали выполнять тесты памяти при загрузке. В этой ситуации стали особенно заметны недостатки памяти с четностью, а именно:

1. По оценкам специалистов, среднее время между сбоями доброкачественной памяти (статистически от сбоев не застрахован никто) сопоставимо со временем жизни компьютера. В этой ситуации платить за дополнительные чипы четности (стоимость которых составляет десятки процентов стоимости основной памяти) кажется расточительством.
2. Малозначительный сбой ведет за собой полную остановку системы и возможную потерю ценной информации (что особенно обидно в многозадачной среде).
3. Как ни грустно, к потере информации может привести ошибка в бите четности.
4. Метод никак не застрахован от двойных ошибок (одновременное изменение значений двух бит не влияет на контрольную сумму).
Логические операции над данными могут, вообще говоря, потребовать лишних тактов ожидания.

В результате, примерно в 1994 году стал происходить постепенный отход от использования "простой" схемы контроля четности. Подавляющее большинство настольных систем отказалось от контроля четности вообще, а в серверах стали применять более прогрессивный, с точки зрения сохранности данных, метод ECC. Для апгрейда старых систем, требовавших память с контролем четности, на рынке появилась "логическая четность". В настоящее время схема обычного контроля четности практически не применяется.

Как раз для работы с битами четности и использовался 9-ый бит в SIMM 30pin и 33-36 биты в SIMM 72pin.

Логическая четность (logic parity, известна также под названием bridge parity, parity emulation, наиболее правдивое название fake parity - "ложная четность") - техническое решение, впервые примененное в 1994-1995 году. В это время происходил массовый переход индустрии PC на более дешевую память без четности. Обделенными при этом чувствовали себя владельцы еще относительно новых на тот момент 486-х компьютеров, подсистема памяти которых не позволяла использовать такое решение, в результате чего они без особой на то необходимости были вынуждены использовать дорогостоящую четность. Для них и была предназначена четность логическая.

Идея, в сущности, была довольно простая. Как мы уже упомянули, в рамках контроля четности для группы бит, записываемых в память, контроллер вычисляет контрольную сумму и записывает ее в виде специального бита четности. При считывании данных контрольная сумма вычисляется снова и сравнивается с хранящейся в бите четности, при совпадении двух сумм данные считаются верными. Необходимость хранения битов четности и удорожала всю систему. Модули с логической четностью вообще не имеют чипов четности, зато имеют логический чип, который при считывании данных сам вычисляет "контрольную" сумму и предъявляет ее контроллеру, как если бы эта сумма сохранялась в модуле. Понятно, что эта сумма всегда совпадает с той, которую вычислит сам контроллер, таким образом, фактически контроль четности отсутствует. Цена логической микросхемы по сравнению с чипами четности исчезающе мала, так что главную задачу - экономию - можно считать выполненной. Таким образом, вообще говоря, можно признать правомерным использование модулей с логической четностью там, куда они первоначально были предназначены - в устаревших настольных системах, в которых невозможно отключить контроль четности, однако отсутствует реальная необходимость его осуществлять. При условии, конечно, что эти модули там заработают - во многих системах такая память неработоспособна. Тому есть естественное объяснение - никакая логика не срабатывает мгновенно, соответственно, логическая четность вносит изменения во временные диаграммы модуля памяти, и эти изменения одобрит не всякий контроллер. Кроме того, бессмысленно было бы возражать против использования таких модулей в системах без контроля (или с отключенным контролем) четности, при условии, конечно, что вы не проиграете в деньгах по сравнению с обычной памятью без четности - никакого вреда в такой ситуации ложная четность не принесет. К сожалению, у ряда пользователей сложилось впечатление, что логическая четность просто является более современным (и в силу этого дешевым) вариантом четности истинной. К еще большему сожалению, многие торговцы памятью не устояли перед соблазном заработать легкие деньги. Грешки за ними водились разные, начиная от вполне невинных (например, продажа "логики" чуть дешевле истинной четности, когда стоить она должна всего лишь чуть дороже памяти "без четности"; или объявление в прайс-листах очень низкой цены на память с четностью, которая после прямого вопроса оказывается "логикой") до довольно несимпатичных (сокрытие от покупателя того факта, что он приобретает "логику", вплоть до камуфляжа логики под истинную четность; агитация за "логику" как за лучшее, чем истинная четность, решение). Поэтому хотелось бы обратить внимание на отрицательные стороны "логической четности":

1. Логическая четность, как минимум, не повышает совместимость модулей с вашим компьютером - не исключено, что работать она не будет или будет вызывать сбои.
2. Сумматор в лучшем случае не ухудшит временные характеристики подсистемы памяти, но вполне может это сделать.
3. Установка ложной четности в сервер не рекомендуется ни под каким предлогом - даже если сервер и будет с ней работать, в конце концов, большие деньги за него платили именно во имя надежности, которой вы поступаетесь.
4. Наконец - имейте в виду, что уважающие себя производители НИКОГДА не выпускали SIMM с логической четностью - таким образом, вы покупаете продукт низшей, чем это возможно, категории качества.
Таким образом, вывод - за исключением двух описанных выше применение логической четности рекомендовать нельзя никак, в этих же двух случаях - можно с определенной натяжкой.

Помимо памяти с контролем четности применялась, а главное, и сейчас применяется, так называемая ECC память. ECC обычно расшифровывается как Error Checking and Correction, существуют и другие версии перевода, но смысл заключается в том, что речь идет о схеме обнаружения И ИСПРАВЛЕНИЯ ошибок в памяти. За счет чего удается добиться таких потрясающих результатов? Идея, лежащая в основе метода, довольно проста - пусть каждый бит основной памяти входит БОЛЕЕ ЧЕМ В ОДНУ контрольную сумму. Это потребует увеличения числа контрольных бит (напомним - стандартный метод контроля четности реально не требует более 1 контрольного бита на всю шину), но даст возможность восстанавливать позицию (а, следовательно, и значение) сбойного бита по позициям не сошедшихся контрольных сумм. Предполагается, что контроллер памяти самостоятельно восстанавливает это значение, не прерывая работу всей системы (хотя разумно при этом генерировать системное сообщение об исправленной ошибке, чтобы владелец системы, если такие сообщения повторяются, мог принять меры по замене памяти, не дожидаясь более значительных сбоев).

Разумеется, что память с ECC стоит заметно дороже обычной памяти и находит применение в первую очередь в серверах.
Категория: