Чем отличается динамическая память от статической

от admin

14. Устройство оперативной памяти. Основные отличия между динамической и статической оперативной памятью.

Оперативная память (или как ее еще называют «динамическая память», «физическая память») компьютера относится к разряду быстродействующей и энергозависимой памяти.

Динамическая память DRAM (Dynamic Random Access Memory) используется в качестве оперативной памяти компьютера, а статическая память SRAM (Static Random Access Memory) — для создания высокоскоростной кэш-памяти процессора.

В статической памяти ячейки построены на различных вариантах триггеров — на транзисторных схемах с двумя устойчивыми состояниями. После записи бита в такую ячейку она может пребывать в одном из этих состояний и сохранять записанный бит сколь угодно долго — необходимо только наличие питания. Отсюда и название памяти — статическая, то есть пребывающая в неизменном состоянии. Достоинством статической памяти является ее быстродействие, а недостатками — высокое энергопотребление и низкая удельная плотность

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

К достоинствам динамической памяти относится высокая удельная плотность размещения данных и низкое энергопотребление, а к недостаткам — низкое быстродействие по сравнению со статической памятью.

Вспомнить всё. Разбираемся в полупроводниковой памяти

Когда я писал в начале года статью “Кто есть кто в мировой микроэлектронике”, меня удивило, что в десятке самых больших полупроводниковых компаний пять занимаются производством памяти, в том числе две – только производством памяти. Общий объем мирового рынка полупроводниковой памяти оценивается в 110 миллиардов долларов и является постоянной головной болью участников и инвесторов, потому что, несмотря на долгосрочный рост вместе со всей индустрией микроэлектроники, локально рынок памяти очень сильно лихорадит – 130 миллиардов в 2017 году, 163 в 2018, 110 в 2019 и 110 же ожидается по итогам 2020 года.

Топ-10 мировых микроэлектронных компаний, производители памяти выделены красным.

Объем рынка памяти близок к трети всей микроэлектроники, а в десятке самых больших компаний памятью занимается половина. Так чем же полупроводниковая память такая особенная? Давайте разбираться.

Особую важность памяти придает то, что ее всегда нужно много. Я бы даже сказал, что ее всегда нужно больше, чем есть. Билл Гейтс, которого вы наверняка сейчас вспомнили, на самом деле никогда ничего не говорил про 640 Кб, примерно как Мария-Антуанетта ничего не говорила про пирожные. Впрочем, в начале восьмидесятых 640 КБ были огромной цифрой. “И что с того, что памяти нужно много?” – спросите вы. Очень просто – большие тиражи позволяют разработчикам концентрироваться на одном продукте и оптимизировать не только дизайн, но и технологию производства. Сейчас в большинстве случаев чипы памяти производятся на фабриках, специально предназначенных для чипов памяти и принадлежащих производителям памяти. Это принципиальное отличие от всех остальных типов микросхем, где пути разработчиков и производителей давным-давно разошлись, и бал правят контрактные фабрики типа TSMC.

Начнем, собственно, с определения и классификации. Точнее, с классификаций, потому что типов памяти очень много, и различных применений тоже. Классическое разделение памяти по применению – на кэш-память, оперативную память и память хранения данных. Оно же примерно соответствует делению на статическую (SRAM), динамическую память (DRAM) и “диски” (HDD и SSD).

Зачем нужны разные типы памяти? Почему нельзя выбрать самый лучший и производить только его? Разница растет из того, что для разных применений важны разные качества памяти. В кэше, рядом с вычислительными мощностями – скорость. В хранении – объем и энергонезависимость. В оперативной памяти – плотность упаковки. Разумеется, никто бы не отказался от быстрой, плотной, энергонезависимой и малопотребляющей памяти, но соединить все эти качества в одной технологии еще никому не удалось, поэтому приходится совместно использовать разные варианты в тех частях систем, куда они подходят лучше всего.

Диаграмма иерархии памяти в вычислительных системах, с относительными объемами памяти и задержками обращения.

Кэш-память

Самый первый уровень памяти в вычислительной системе – это регистровый файл и кэш-память. Для них определяющее значение имеет скорость доступа, а вот объем может быть небольшим, особенно если его вдумчиво наполнять. Кэш обычно делается на основе статической памяти. Ячейка статической памяти может быть выполнена по-разному, но обязательно содержит в себе положительную обратную связь, которая позволяет хранить информацию и не терять ее (в отличие от динамической памяти, которой требуется периодическая перезапись). В КМОП-технологии ячейка статической памяти состоит из четырех транзисторов собственно запоминающего элемента и одного и более транзисторов, обеспечивающих чтение и запись информации. “Промышленный стандарт” – так называемая 6T-ячейка.

Электрическая схема 6T-ячейки SRAM

Шесть транзисторов – это очень много, особенно в сравнении с DRAM или флэш-памятью, где для хранения одного бита информации требуется два, а то и всего один элемент. Тем не менее, скорость работы сделала свое дело, и в большинстве современных цифровых микросхем статическая память занимает десятки процентов площади. Этот факт, кстати, сделал ячейку SRAM точкой опоры в определении проектных норм производства чипов: когда маркетинговые цифры – те самые пресловутые 28, 7 или 5 нм – отвязались от физических размеров элементов на кристалле, улучшение плотности упаковки стали считать как соотношение площади ячейки SRAM на старом и новом техпроцессах. Если в новой технологии ячейка стала в два раза меньше, значит проектные нормы уменьшились в корень из двух раз.

Разные варианты топологии шеститранзисторной ячейки статической памяти. Источник — G. Apostolidis et. al., «Design and Simulation of 6T SRAM Cell Architectures in 32nm Technology», Journal of Engineering Science and Technology Review, 2016

Отдельные чипы SRAM были популярны в составе многокристалльных микропроцессоров, таких как девайсы, построенные на базе серии Am2900 или советской 581 серии. При этом, как только появилась возможность поместить достаточно транзисторов на один чип, кэш-память стали размещать на том же кристалле, что и вычислитель, чтобы сэкономить мощность и увеличив скорость работы, избавившись от медленных и громоздких соединений между чипами. В современных микропроцессорах на одном кристалле помещается многоуровневый набор блоков кэш-памяти объемом в несколько Мегабайт. Это, кстати, привело к тому, что рынок SRAM как отдельного продукта практически перестал существовать: его объем оценивается всего в 420 миллионов долларов, то есть в 0.3% от всего рынка полупроводниковой памяти, и продолжает сокращаться. Последние из остающихся могикан – чипы для тяжелых условий эксплуатации, вроде космоса, высокотемпературных промышленных установок или медицинской техники, где нельзя свободно применять обычные коммерческие микросхемы и где из-за этого микроэлектронный прогресс несколько отстает. Есть некоторые перспективы роста в автомобильной электронике и в интернете вещей, где для постоянно включенных устройств не играет роли главный недостаток SRAM – неспособность хранить информацию после отключения питания. Только хранить, а не обрабатывать SRAM может с минимальным энергопотреблением, так что это может быть интересным вариантом. Впрочем, в этой конкретной нише, кроме флэш-памяти, есть еще активно развивающиеся новые виды памяти, такие как MRAM, так что перспективы на самом деле весьма туманны, а производители один за одним уходят из стагнирующего сегмента, что позволило Cypress получить больше половины рынка – повторюсь, крошечного по мировым меркам.

Оперативная память и динамическая память

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

Схемы ячейки динамической и статической памяти

Намного более простая ячейка позволяет существенно увеличить количество памяти на кристалле. Уже самый первый серийный кристалл DRAM (Intel 1103) в 1970 году содержал 1024 бита, а современные чипы умещают уже 16 Гигабит! Это стало возможным благодаря постоянному прогрессу технологии производства, а именно разнообразным улучшениям конструкции интегрального конденсатора. Если в самых первых чипах использовалась просто МОП-емкость, крайне похожая по конструкции на транзистор, в современных чипах DRAM конденсатор для экономии площади располагается не горизонтально, а вертикально, под или над транзистором.

Условная схема прогресса технологии производства DRAM.

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

Небольшой исторический экскурс, про Intel

Компания Intel была основана в 1968 году с прицелом на рынок памяти. Основатели фирмы считали, что относительно новые тогда интегральные схемы имеют потенциал вытеснить с рынка вычислительных машин память на магнитных сердечниках. Первыми продуктами Intel были чипы биполярной статической памяти, почти сразу же за ними последовала серия крайне успешных чипов DRAM, а вот заказы на разработку микропроцессоров очень долго рассматривались как что-то временное и побочное до середины восьмидесятых, когда серьезная конкуренция со стороны японских производителей DRAM, таких как Toshiba, вынудила компанию уйти с рынка памяти.

Позднее, Intel развивал бизнес по производству флэш-памяти, совместно с другой американской компанией, Micron, но буквально на днях продал эти активы ей же, и в ближайшем будущем под маркой Intel будет выпускаться только память Optane, основанная на фазовых эффектах.

Общий объем мирового рынка DRAM оценивается в 60-80 миллиардов долларов и составляет чуть больше половины мирового рынка памяти. Оставшуюся часть почти целиком занимает NAND Flash, а на долю всего остального разнообразия приходится не более трех процентов рынка. Производство чипов DRAM держится на трех китах – корейских Samsung и SK Hynix, а также американской компании Micron. Все три – в пятерке крупнейших полупроводниковых компаний мира, причем если Samsung чем только не занимается, то Micron и SK Hynix производят только память, DRAM и Flash. Три гиганта занимают без малого 95% рынка, а остатки рынка почти полностью разделены между несколькими тайваньскими компаниями.

Основные рыночные ниши – это потребительская электроника, включая смартфоны (40-50%), а также персональные компьютеры (15-20% ), серверное и телекоммуникационное оборудование (20-25%). Самые большие перспективы роста при этом ожидаются в автомобильном секторе, благодаря разного рода автопилотам и другим системам помощи водителю, а также в вычислениях, связанных с искусственным интеллектом.

Стоит отметить, что все чаще речь идет не о привычных нам “планках памяти”, а об аккуратной интеграции чипов на плату телефона или даже непосредственно в корпус процессора, в виде так называемой HBM – high bandwidth memory. Такая конфигурация позволяет увеличить пропускную способность памяти за счет использования многоразрядных шин, которые нет возможности реализовать при соединении корпусов на печатной плате, уменьшить задержки и потребление, а также эффективно разместить кристаллы памяти в несколько слоев, разместить большую емкость на меньшей площади.

Внутренности корпуса графического ускорителя AMD Fiji. Центральный кристалл – собственно вычислитель, по обеим сторонам – упакованные в несколько слоев чипы HBM DRAM.

Впрочем, и планки памяти тоже никуда не денутся в обозримом будущем, и спрос на них стабильно растет – стараниями не только геймеров, но и производителей серверов. Объем рынка модулей памяти составляет приблизительно 16 миллиардов долларов, и он выглядит как Гулливер в окружении лилипутов – рыночная доля Kingston Technology превышает 80%, против 2-3% у ближайших конкурентов. При этом сами чипы Kingston закупают у двух из трех больших производителей – Micron и SK Hynix. Samsung не привлекается, видимо, в силу того, что большинство их чипов DRAM предназначено для мобильных телефонов.

Еще один небольшой исторический экскурс, про Kingston

Kingston – американская компания, основанная в 1987 году, стала одним из пионеров внедрения SIMM-модулей как удобной альтернативы прямому поверхностному монтажу микросхем памяти. Быстро развиваясь на фоне роста рынка персональных компьютеров, Kingston стали “единорогом” с миллиардной капитализацией уже к 1995 году, и с тех пор выросли еще на порядок, увеличив долю на рынке модулей DRAM c 25% до 80% и расширившись на производство других продуктов, таких как SSD, где Kingston тоже является мировым лидером, правда с более скромными 26% мирового рынка против 8% и 6% у ближайших конкурентов.

Модуль оперативной памяти Kingston. Обратите внимание на плотность упаковки чипов на плате.

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

А что же японцы, правившие бал в восьмидесятых и вытеснившие с рынка DRAM Intel? В 1999 году профильные подразделения Hitachi и NEC объединились в компанию Elpida, которая позже поглотила DRAM-бизнес Mitshibishi. В двухтысячных компания активно развивалась, много вкладывала в перспективные производства и была поставщиком, например, для Apple. Но финансовый кризис 2009 года очень сильно подкосил Elpida, и в 2012 году она была вынуждена подать на банкротство, после чего была куплена Micron.

На этой печальной ноте давайте заканчивать с DRAM и переходить к flash-памяти, где все еще есть по крайней мере одна успешная японская компания.

Флэш-память и системы хранения данных

Главный недостаток как SRAM, так и DRAM – то, что информация в них пропадает в случае, если им отключить питание. Но, сами понимаете, никогда не отключать питание довольно затруднительно, поэтому всю историю вычислительной техники использовались какие-нибудь системы для постоянного хранения данных – начиная от перфокарт. Большую часть времени в качестве систем постоянного хранения данных использовались магнитные носители – лента или жесткий диск. Жесткие диски – сложные электромеханические системы, которые прошли огромный путь от первого образца IBM размером с небольшой холодильник, до 2.5-дюймовых HDD для ноутбуков. Тем не менее, прогресс в микроэлектронной технологии был быстрее, и сейчас мы с вами наблюдаем процесс практически полного замещения жестких дисков полупроводниковыми SSD. Последним годом денежного роста для рынка HDD был 2012, и сейчас он составляет уже не более трети от рынка флэш-памяти.

Разные поколения жестких дисков.

Ячейка флэш-памяти устроена как МОП-транзистор с двумя затворами, один из которых подключен к схемам управления, а второй – “плавающий”. В обычной ситуации на плавающем затворе нет никакого заряда, и он не влияет на работу схемы, но если подать на управляющий затвор высокое напряжение, то напряженности поля будет достаточно для того, чтобы какое-то количество заряда попало в плавающий затвор, откуда ему потом некуда деться – даже если питание чипа отключено! Собственно, именно так и достигается энергонезависимость флэш-памяти – для изменения ее состояния нужно не низкое напряжение, а высокое.

Структура ячейки флэш-памяти

Чтение из флэш-памяти происходит следующим образом: на сток транзистора подается напряжение, после чего измеряется ток через транзистор. Если ток есть, значит на одном из двух затворов есть напряжение, если тока нет – на обоих затворах ноль.

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

Сравнение архитектур NOR Flash и NAND Flash

Чтение из NOR Flash происходит ровно так, как описано выше, и позволяет удобно добраться до любого интересующего нас куска памяти. Чтение из NAND Flash несколько более занятно: для того, чтобы узнать значение интересующего нас бита в последовательно включенном стеке, нужно открыть управляющие затворы всех остальных транзисторов – тогда на состояние выхода будет влиять только интересующий нас бит. Согласитесь, заряжать-разряжать множество управляющих затворов ради того, чтобы узнать значение только одного бита – это как-то чересчур расточительно? Особенно с учетом того, что мы должны открыть управляющие затворы всех транзисторов не только в интересующем нас стеке, но и во всех соседних стеках, подключенных к тем же word line. Именно поэтому на практике NAND Flash читается не побитно, а целыми страницами. Это может показаться неудобным, ведь мы, по сути, делаем нашу память не совсем random-access.

Любые рассуждения на тему того, что лучше – NAND Flash или NOR Flash, неизбежно натыкаются на мнение рынка, сделавшего однозначный выбор: объем рынка NAND – 40-60 миллиардов долларов, а NOR – около четырех. Почему же побеждает менее удобная память? Дело на самом деле не в удобстве или неудобстве, а в целевых приложениях и в стоимости. NOR Flash удобнее и быстрее читается, но очень медленно записывается, зато ячейка NAND Flash в два с лишним раза меньше, что, разумеется, критично в ситуации, когда вам нужно БОЛЬШЕ ПАМЯТИ.

Кроме того, если немного подумать над главным недостатком NAND Flash – чтением только большими кусками, то в обычной вычислительной системе чтение из долгосрочной памяти в любом случае происходит большими кусками – чтобы оптимизировать работу кэш-памяти и минимизировать число кэш-промахов. То есть этот недостаток на самом деле и не недостаток вовсе. Так что по факту единственное настоящее преимущество NOR Flash – быстрота чтения, и ее основные применения – как раз те, где требуется быстрое чтение, но не нужна частая и быстрая запись. Например, прошивки разнообразных embedded девайсов, где NOR Flash активно заменяет другие виды EEPROM.

Небольшое отступление: PROM

И, раз уж я упомянул EEPROM, нелишне обсудить и экстремальный случай – когда память только читается, но не перезаписывается – то есть Read-Only Memory или ROM. Такая память гораздо чаще используется в промышленных применениях и для разнообразных прошивок. Такая память может быть запрограммирована на этапе производства с помощью наличия или отсутствия металлических соединений (или транзисторов, как это было сделано в Intel 8086. Но что, если раз-другой записать память все-таки нужно, причем уже после того, как чип произведен? На этот случай существует довольно много разновидностей PROM (P – programmable), довольно часто встраиваемых на кристалл вычислительной системы, например, микроконтроллера, но продолжающих активно использоваться и в качестве отдельных чипов.

Самый простой вариант – это однократно программируемая память типа Antifuse, она же память на пережигаемых перемычках. Идея очень проста: у нас есть структура (транзистор или резистор), которая может быть необратимо разрушена, превратившись в короткое замыкание или разрыв цепи. Чтение такой памяти выглядит как проверка на наличие замыкания или разрыва, а запись возможна только один раз, потому что изменение структуры необратимо.

Внешний вид памяти на пережигаемых перемычках

В случае, если может быть нужно записывать память несколько раз, например изредка обновлять прошивку, в дело вступают разные варианты EPROM (E – erasable) и EEPROM (EE – electrically erasable). Технологически они базируются на транзисторах с плавающим затвором и являются примитивной разновидностью флэш-памяти. Сейчас под термином EEPROM обычно подразумевают NOR Flash c возможностью побайтной записи и удаления данных.

NAND Flash

Что же касается NAND Flash, то ее стоимость за бит уже давно снизилась настолько, что этот вид памяти стремительно завоевывает рынок памяти для хранения информации, один за одним забивая гвозди в крышку гроба HDD и, например, дав нам возможность иметь много памяти в крошечных мобильных телефонах. Ключевые производители чипов NAND Flash – Samsung (33% и почти половина накопителей для телефонов), Kioxia (бывшая Toshiba, 20% рынка), Western Digital (14%), SK Hynix (11%), Micron (10%), Intel (8%).

Из этого списка, впрочем, надо исключить Intel, которые недавно объявили о переходе своей доли в совместном с Micron производстве к последним и об уходе с рынка флэш-памяти. Еще один интересный игрок – Western Digital, один из гигантов HDD, ныне стремительно переориентирующийся на твердотельные диски и ставший для этого уникальным зверем – fabless-производителем памяти. WD выкупили для этого больше трети производственных мощностей Kioxia, которые делают одни и те же чипы для себя и для клиента. Еще одно неожиданное последствие переориентации WD – они стали одним из наиболее заметных участников коммьюнити RISC-V, активно внедряя эту систему команд в свои контроллеры накопителей.

И в завершение рассказа про NAND Flash, надо непременно рассказать о произошедшей в последние годы технологической революции. Флэш-память, как и “обычная” микроэлектроника, уже уперлась в технологический предел миниатюризации транзисторов, и если в вычислительных системах можно хотя бы попробовать отыграть что-то за счет архитектуры, то в памяти плотность упаковки – это главное и единственное, что по-настоящему волнует. Поэтому, пока разговоры о переходе обычных КМОП-микросхем в третье измерение все еще остаются разговорами, 3D NAND уже четыре года как массово присутствует на рынке, позволяя разместить на кристалле в десятки, а то и в сотни раз больше ячеек памяти, чем обычное планарное решение.

Схематичный разрез двухмерной и трехмерной NAND Flash памяти

На электрической схеме выше транзисторы размещены последовательно, сверху вниз, тогда как в планарном варианте изготовления они расположены на плоскости, занимая ценную площадь на кристалле. Однако простая и монотонная структура позволила реализовать самое логичное, что можно сделать – сквозной вертикальный канал транзистора, выглядящий примерно так же, как и электрическая схема (и показанный на схеме справа желтым, идущим сквозь зеленые затворы). Разумеется, оно только звучит логично и просто, а на практике создание глубокого отверстия с вертикальными стенками – это одна из самых сложных операций, возможных в микроэлектронной технологии. Тем не менее, инженерные задачи были решены, и сейчас такие этажерки, как на рисунке выше, включают в себя уже до 128 транзисторов в серийно производимых чипах и до 192 слоев в девайсах, ожидаемых через год-два. Проектные нормы производства современной флэш-памяти примерно соответствуют уровню 15-20 нм, так что такая плотность упаковки – это эквивалент норм 0.1-0.2 нм! В обычном КМОП повторить этот фокус в точности не удастся, но свежие исследования по GAAFET предполагают упаковку нескольких горизонтальных каналов друг поверх друга. Samsung рассчитывает таким образом выйти на уровень 1 нм, а то и чуть меньше.

Читать:
Как в linux создать файл с текстом

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

Новые типы энергонезависимой памяти

Читая научные исследования новых видов полупроводниковой памяти, я в какой-то момент перестал воспринимать их всерьез, потому что обещания златых гор можно было лицезреть ежегодно, а вот с готовыми к серийному производству продуктами вечно была напряженка. В основном исследования концентрировались и концентрируются на том, чтобы преодолеть разрыв между DRAM и флэш-памятью, создав нечто одновременно быстрое, энергонезависимое и дешевое. Никаких серьезных достижений на этом поприще пока не достигнуто, и те разработки, которые все же дошли до стадии коммерциализации, в основном составляют небольшую долю от рынка EEPROM, как в виде отдельных чипов, так и дополнительных опций в КМОП-технологии.

Три наиболее зрелых технологии такого рода – это MRAM (магнитная RAM), FRAM (ферроэлектрическая или сегнетоэлектрическая RAM) и PCM (phase-change memory).

FRAM основана на сегнетоэлектрическом эффекте – свойстве некоторых материалов менять свои свойства под действием высокого напряжения. В частности, в FRAM используется изменение емкости конденсатора. Эта память появилась в серийных продуктах, например в микроконтроллерах MSP430, еще двадцать лет назад, но почти тогда же проявился ее главный недостаток – пленки сегнетоэлектрических слоев оказались плохо масштабируемыми, и развитие технологии остановилось на уровне 130 нм, а существующие до сих пор продукты – в основном довольно старые радиационностойкие микросхемы. Впрочем, в последние годы работы по сегнетоэлектрикам снова активизировались, и возможно нас ждет новое пришествие FRAM, на этот раз в виде FeFET, где из сегнетоэлектрика будет делаться затвор транзистора.

Разные варианты MRAM используют несколько физических эффектов, позволяющих манипулировать спином магнитных материалов и посредством него, на их электрические свойства. По сути, мы говорим о физической реализации концепции мемристора – резистора, сопротивление которого зависит от его предыдущего состояния. Первые серийные чипы MRAM появились еще в 2004, но проиграли технологическую войну флэш-памяти. Тем не менее, технология продолжает активно развиваться, подогреваемая тем, что у MRAM потенциально на несколько порядков большее количество циклов перезаписи, чем у флэш, а значит ее можно использовать как гибрид кэша и памяти долгосрочного хранения. Считается, что такое сочетание может быть востребовано в малопотребляющих микросхемах интернета вещей, и сейчас встраиваемые блоки MRAM предлагают такие именитые фабрики, как Samsung и GlobalFoundries.

PCM – класс памяти, основанной на изменении фазового состояния некоторых веществ, например с кристаллического в аморфное, под действием внешних факторов типа высокого напряжения или кратковременного нагрева (обычно проводимого при помощи пропускания большого тока через запоминающий элемент). Потенциальные преимущества PCM примерно такие же, как у MRAM – быстрое чтение и большое количество циклов перезаписи, что в теории может позволить заменить даже все три типа памяти одним унифицированным решением. На практике же изначальное внедрение PCM обернулось грандиозным провалом: в 2012 году Micron с помпой представили серийную линейку для применения в мобильных телефонах, однако уже к 2014 году все эти продукты были отозваны с рынка. Их вторая попытка стала более успешной – совместно с Intel в 2017 году была представлена память 3D Xpoint и линейка SSD Optane (Intel) X100 (Micron). Продажи пока что невелики, но отзывы потребителей довольно хорошие. Посмотрим, выдержит ли новая технология проверку временем и сможет ли действительно потеснить традиционные SSD на основе NAND Flash.

Традиционная невеселая рубрика “А что в России?”

И, конечно же, мой рассказ был бы неполон без упоминания о том, что происходит в России. К сожалению, хорошего можно рассказать немного. Производство памяти – это именно что производство, а с микроэлектронными заводами у России довольно печальная ситуация. Соответственно, речи о собственных чипах DRAM и flash-памяти нет и в обозримом будущем не предвидится. А что есть?

Во-первых, есть какое-то количество микросхем SRAM. Самый технологически продвинутый продукт – микросхема 1663РУ1, представляющая собой 16 Мбит статической памяти по нормам 90 нм, производства завода “Микрон”. Кроме этого чипа, есть и другие, в основном предназначенные для аэрокосмических применений.

Во-вторых, «Микрон» на нормах 180 нм имеет опцию производства EEPROM, с максимальным заявленным в серийных продуктах (RFID-микроконтрроллерах) размером блока в 16 кбит. Это отличное решение для недорогих МК, но, к сожалению, мало подходящее для производства больших накопителей информации.

Кроме статической памяти и EEPROM, есть еще одно производство – “Крокус-наноэлектроника”, производящая MRAM. Расположенная в Москве фабрика КНЭ – единственная в России, умеющая работать с пластинами диаметром 300 мм. Правда, Крокус-нано не обладает полным циклом производства, а может делать только металлизацию и совмещенные с ней магнитные слои, формирующие ячейку MRAM. Транзисторная часть при этом должна быть изготовлена на другой фабрике (иностранной, потому что в России с пластинами 300 мм работать некому). На сайте КНЭ заявлена доступность микросхем объемом от 1 до 4 Мбит, скоростью считывания 35 нс и записи 35/90/120/150 нс. Еще немного света на функционирование и происхождение этих чипов проливают также заявленные в качестве продуктов на официальном сайте сложнофункциональные блоки MRAM, совместимые с техпроцессами китайской фабрики SMIC и израильской TowerJazz. Вероятно, именно эти производители являются технологическими партнерами и при производстве собственных чипов КНЭ.

Последнее, о чем стоит упомянуть в контексте производства памяти в России – это твердотельные системы хранения данных, являющиеся одним из важных драйверов импортозамещения в российской электронике. Российский рынок подобных систем оценивается в 122 миллиона долларов, доля отечественной продукции растет, идут жаркие споры насчет протекционистского законодательства и сравнения качества отечественных и импортных решений – в общем, настоящая жизнь. К сожалению, как уже было сказано выше, о собственном производстве чипов NAND flash речи не идет, и под импортозамещением понимается сборка импортных чипов в корпус и на плату, а также разработка или адаптация встроенного ПО. Из хороших новостей – в России ведутся разработки микросхем контроллеров флэш-памяти. Собственные контроллеры, хоть и не смогут решить проблему технологического отставания и зависимости от импорта, позволяют обеспечить контроль за функционированием импортных кристаллов памяти и безопасность решений на их основе. На этой позитивной ноте, я пожалуй, и закончу на сегодня.

Модель памяти в языках программирования

Память — одна из самых сложных тем в информатике, но понимание устройства памяти компьютера позволяет разрабатывать более эффективные программы, а для более низкоуровневого программирования, например, при разработке ОС, это понимание и вовсе является обязательным.

В этой статье будет рассмотрена модель памяти с высокоуровневой точки зрения — виды памяти, аллокаторы, сборщик мусора.

Виды памяти

Существует 3 типа памяти: статический, автоматический и динамический.

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

Автоматический, также известный как «размещение на стеке», — самый основной, автоматически выделяет аргументы и локальные переменные функции, а также прочую метаинформацию при вызове функции и освобождает память при выходе из неё.

Стек, как структура данных, работает по принципу LIFO («последним пришёл — первым ушёл»). Другими словами, добавлять и удалять значения в стеке можно только с одной и той же стороны.

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

Проще всего это понять из примера на С++:

Стек при вызове последней рекурсивной функции будет выглядеть следующим образом:

Детали реализации автоматической памяти могут быть разными в зависимости от конкретной платформы. Например, кому очищать из стека метаинформацию функции и её аргументы: вызывающей функции или вызываемой? Как передавать результат: через стек или, что намного быстрее, через регистры процессора (память, расположенную прямо на кристалле процессора. В этой статье не рассматривается, т. к. в языках программирования высокого уровня зачастую нет прямого доступа к регистрам процессора). На все эти вопросы отвечает конкретная реализация calling convention — описание технических особенностей вызова подпрограмм, определяющее способы передачи параметров/результата функции и способы вызова/возврата из функции.

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

Размер автоматической памяти, а он тоже фиксированный, определяется линковщиком (обычно — 1 мегабайт), максимальный размер зависит от конкретной системы и настроек компилятора/линковщика.

Если приложение выйдет за максимум автоматической памяти, его там может ждать Page Fault (сигнал SIGSEGV в POSIX-совместимых системах: Mac OS X, Linux, BSD и т. д.) — ошибка сегментации, приводящая к аварийному завершению программы.

Динамическая — выделение памяти из ОС по требованию приложения.

Автоматическая и статическая память выделяются единоразово перед запуском программы. При их нехватке, либо если модель LIFO не совсем подходит, используется динамическая память.

Приложение при необходимости может запросить у ОС дополнительную память через аллокатор или напрямую через системный вызов. Пример использования динамической памяти с помощью аллокатора ниже на примере языка Си.

После выделения памяти в распоряжение программы поступает указатель на начало выделенной памяти, который, в свою очередь, тоже должен где-то храниться: в статической, автоматической или также в динамической памяти. Для возвращения памяти обратно в аллокатор необходим только сам указатель. Попытка использования уже очищенной памяти может привести к завершению программы с сигналом SIGSEGV.

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

Максимальный размер динамической памяти зависит от многих факторов: среди них ОС, процессор, аппаратная архитектура в целом, не говоря уже о самом очевидном — максимальном размере ОЗУ у конкретного устройства. Например x86_64 процессоры используют только 48 бит для адресации виртуальной памяти, что позволяет использовать до 256 ТБ памяти. В следующей статье про более низкоуровневую архитектуру памяти будет объяснено, почему не все 64 бита.

Аллокатор

У динамической памяти есть две явные проблемы. Во-первых, любое выделение/освобождение памяти в ОС — системный вызов, замедляющий работу программы. Решением этой проблемы является аллокатор.

Аллокатор — это часть программы, которая запрашивает память большими кусками напрямую у ОС через системные вызовы (в POSIX-совместимых ОС это mmap для выделения памяти и unmap — для освобождения), затем по частям отдаёт эту память приложению (в Си это могут быть функции malloc() / free() ). Такой подход увеличивает производительность, но может вызвать фрагментацию памяти при длительной работе программы.

malloc() / free() и mmap / unmap — это не одно и то же. Первый является простейшим аллокатором в libc , второй является системным вызовом. В большинстве языков можно использовать только аллокатор по умолчанию, но в языках с более низкоуровневой моделью памяти можно использовать и другие аллокаторы.

Например, boost::pool аллокаторы, созданные для оптимальной работы с контейнерами ( boost::pool_allocator для линейных ( std::vector ), boost::fast_pool_allocator для нелинейных ( std::map, std::list )). Или аллокатор jemalloc, оптимизированный для решения проблем фрагментации и утилизации ресурсов CPU в многопоточных программах. Более подробно о jemalloc можно узнать из доклада с конференции C++ Russia 2018.

Способы контроля динамической памяти

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

RAII (Получение ресурса есть инициализация) — в ООП — организация получения доступа к ресурсу в конструкторе, а освобождения — в деструкторе соответствующего класса. Достаточно реализовать управление памятью в конструкторах и деструкторах, а компилятор вызовет их автоматически. Например, немного урезанный класс String из статьи про Move-семантику. Выделяем память в конструкторе, очищаем в деструкторе:

Умные указатели на основе RAII — указатели, автоматически владеющие динамической памятью, то есть автоматически освобождающие её, когда она больше не нужна. Умные указатели инкапсулируют только управление памятью объекта, но не сам объект, как, например, происходит в String, который инкапсулирует объект целиком. Примеры умных указателей ниже.

std::unique_ptr — класс уникального указателя, является единственным владельцем памяти и очищает её в своём деструкторе. Поэтому объекты класса std::unique_ptr не могут иметь копий, но могут быть перемещены. Подробнее о семантике перемещения в этой статье.

std::shared_ptr — класс общего указателя, использующий атомарный счётчик ссылок для подсчёта количества владельцев памяти. В конструкторе счётчик инкрементируется, в деструкторе — декрементируется. Как только счётчик становится равным нулю, память освобождается.

Но у std::shared_ptr есть проблема, например, когда объект A ссылается на объект B, а объект B ссылается на объект A. В таком случае у обоих объектов счётчик ссылок никогда не будет меньше 1 и произойдёт утечка памяти. Решений у этой проблемы два. Использование std::weak_ptr , который ссылается на объект, но без счётчика ссылок, и не может быть разыменован без предварительной конвертации в std::shared_ptr . Вторым решением этой проблемы является сборщик мусора.

Сборка мусора — одна из форм автоматического управления динамической памятью, которая помечает все доступные из стека или статической памяти динамически выделенные объекты. Объекты, до которых нельзя добраться через цепочку указателей, начиная с автоматической или статической памяти, т. е. не помеченные сборщиком мусора, очищаются.

Умные указатели и RAII используются в основном в относительно низкоуровневых языках, например, С++ или Swift. В более высокоуровневых языках обычно используется сборщик мусора (Java), хотя может применяться комбинация умного указателя и сборщика мусора (Python).

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

# факты | Как работает оперативная память?

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

Оперативная память

Ячейка памяти подобна дырявому ведру

Оперативная память

Подобно подробно рассмотренному ранее микропроцессору, чип памяти является интегральной микросхемой (ИС, IC), собранной из миллионов транзисторов и конденсаторов. Одним из наиболее распространенных видов памяти произвольного доступа является DRAM (динамическая память произвольного доступа, dynamic random access memory). В ней транзистор и конденсатор спарены и именно они образуют ячейку, содержащую один бит информации. Конденсатор содержит один бит информации, то есть «0» или «1». Транзистор же играет в этой паре роль переключателя (свитча), позволяющего управляющей схеме чипа памяти считывать или менять состояние конденсатора.

Конденсатор можно представить себе в виде небольшого дырявого «ведерка», которое при необходимости заполняется электронами. Если оно заполнено электронами, его состояние равно единице. Если опустошено, то нулю. Проблемой конденсатора является утечка. За считанные миллисекунды (тысячные доли секунды) полный конденсатор становится пустым. А это значит, что или центральный процессор, или контроллер памяти вынужден постоянно подзаряжать каждый из конденсаторов, поддерживая его в наполненном состоянии. Подзарядку следует осуществлять до того, как конденсатор разрядится. С этой целью контроллер памяти осуществляет чтение памяти, а затем вновь записывает в нее данные. Это действие обновления состояния памяти осуществляется автоматически тысячи раз за одну только секунду.

Конденсатор динамической оперативной памяти можно сравнить с протекающим ведром. Если его не заполнять электронами снова и снова, его состояние станет нулевым. Именно эта операция обновления и внесла в название данного вида памяти слово «динамическая». Такая память или обновляется динамически, или «забывает» все, что она «помнила». Есть у этой памяти существенный недостаток: необходимость постоянно обновлять ее требует времени и замедляет работу памяти.

Устройство ячейки динамической оперативной памяти (DRAM)

Оперативная память

Итак, представим себе тетрадный лист. Некоторые клеточки закрашены красным фломастером, а некоторые остались белыми. Красные клеточки это ячейки, состояние которых «1», а белые — «0».

Только вместо листа из тетради в оперативной памяти используется кремниевая пластина, в которую «впечатаны» столбцы (разрядные линии, bitlines) и строки (словарные шины, wordlines). Пересечение столбца и строки является адресом ячейки оперативной памяти.

Динамическая оперативная память передает заряд по определенному столбцу. Этот заряд называют стробом адреса столбца (CAS, Column Adress Strobe) или просто сигналом CAS. Этот сигнал может активировать транзистор любого бита столбца. Управляющий сигнал строки именуется стробом адреса строки (RAS, Row Adress Strobe). Для указания адреса ячейки следует задать оба управляющих сигнала. В процессе записи конденсатор готов принять в себя заряд. В процессе чтения усилитель считывания (sense-amplifier) определяет уровень заряда конденсатора. Если он выше 50 %, бит читается, как «1»; в остальных случаях, как «0».

Осуществляется также обновление заряда ячеек. За порядком обновления следит счетчик. Время, которое требуется на все эти операции, измеряется в наносекундах (миллиардных долях секунды). Если чип памяти 70-наносекундный, это значит, полное чтение и перезарядка всех его ячеек займет 70 наносекунд.

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

  • Идентификации строк и столбцов (выбор адреса строки и адреса ячейки)
  • Отслеживание порядка обновления (счетчик)
  • Чтение и возобновление сигнала ячейки (усилитель)
  • Донесение до ячейки сведений о том, следует ли ей удерживать заряд или нет (активация записи)

У контроллера памяти есть и другие функции. Он выполняет набор обслуживающих задач, среди которых следует отметить идентификацию типа, скорости и объема памяти, а также проверку ее на ошибки.

Статическая оперативная память

Оперативная память

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

В современном мире чипы памяти комплектуются в компонент, именуемый модулем. Порой компьютерные специалисты называют его «планкой памяти». Один модуль или «планка» содержит несколько чипов памяти. Не исключено, что вам приходилось слышать такие определения, как «память 8×32» или «память 4×16». Разумеется, цифры могли быть иными. В этой простой формуле первым множителем является количество чипов в модуле, а вторым емкость каждого модуля. Только не в мегабайтах, а в мегабитах. Это значит, что результат действия умножения следует разделить на восемь, чтобы получить объем модуля в привычных нам мегабайтах.

К примеру: 4×32 означает, что модуль содержит четыре 32-мегабитных чипа. Умножив 4 на 32, получаем 128 мегабит. Поскольку нам известно, что в одном байте восемь бит, нам нужно разделить 128 на 8. В итоге узнаем, что «модуль 4×32» является 16-мегабайтным и устарел еще в конце минувшего века, что не мешает ему быть превосходным простым примером для тех вычислений, которые нам потребовались.

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

Похожие статьи