Оперативная память
Память компьютера — то, где хранятся данные и код. Разных «памятей» много, и они сильно отличаются по скорости, объёму и назначению: от регистров внутри процессора до дисков и флеш-памяти прошивки.
Эта страница — обзор: какие бывают виды памяти, как процессор к ним обращается и как память развивалась. Про конкретные модули оперативной памяти — в статье SODIMM.
Иерархия памяти
Чем ближе память к процессору, тем она быстрее — и тем её меньше и дороже:
| Уровень | Объём | Скорость | Энергозависимость |
|---|---|---|---|
| Регистры процессора | байты | самая высокая | теряется при выключении |
| Кэш (L1 / L2 / L3) | килобайты — десятки мегабайт | очень высокая | теряется |
| Оперативная память (ОЗУ) | гигабайты | высокая | теряется |
| SSD / NVMe | терабайты | средняя | сохраняется |
| HDD | терабайты | низкая | сохраняется |
Процессор старается держать нужное как можно ближе к себе: то, что не влезло в кэш, идёт в ОЗУ, а то, что не влезло в ОЗУ — на диск (в подкачку).
Виды памяти
Энергозависимая: DRAM и SRAM
Энергозависимая память работает, пока есть питание. Именно к ней относится оперативная память компьютера, и внутри неё есть всего два «сорта» ячеек.
Что такое DRAM
DRAM (Dynamic Random Access Memory, динамическая память с произвольным доступом) — та самая «оперативка», о которой говорят «сколько у тебя памяти». Одна ячейка — это один транзистор и один конденсатор:
- конденсатор хранит заряд: есть заряд — единица, нет — ноль;
- транзистор открывает и закрывает доступ к этому заряду.
Конденсатор неидеален: заряд из него постепенно утекает, за считанные миллисекунды. Если ничего не делать, данные просто исчезнут. Поэтому память постоянно регенерируют (refresh): контроллер памяти регулярно перечитывает ячейки и записывает заряд обратно. Из-за этой непрерывной работы память и называется динамической — она «жива», пока её обновляют.
Что из этого следует:
- Дёшево и ёмко. На один бит нужен всего один транзистор — меньше, чем у любой другой памяти. Поэтому гигабайты оперативной памяти стоят относительно недорого.
- Нужен контроллер памяти. Регенерацию кто-то должен выполнять, и он же должен знать параметры модулей — тайминги, частоты, напряжения. Сегодня контроллер памяти находится в самом процессоре.
- Медленнее регистров и кэша. Обращение к ячейке занимает десятки наносекунд — в сотни раз дольше, чем у регистров.
- Энергозависима. Пропало питание — заряд утёк, данных нет.
- Иногда ошибается. От космических частиц и помех бит может «перевернуться». В серверах поэтому применяют память с коррекцией ошибок — ECC.
Именно из DRAM собирают модули, о которых говорит dmidecode: чипы на плате модуля — это и есть DRAM-микросхемы (см. SODIMM).
Что такое SRAM
SRAM (Static RAM, статическая память) устроена иначе: одна ячейка — это триггер из 4–6 транзисторов, который держит состояние, пока есть питание. Никакой регенерации не нужно — отсюда «статическая».
- быстрее DRAM: единицы наносекунд против десятков;
- дороже и крупнее в пересчёте на бит — транзисторов в несколько раз больше, значит на том же кристалле уместится меньше памяти;
- поэтому её ставят туда, где важна скорость, а не объём: кэш процессора (L1/L2/L3) и небольшие буферы внутри чипов.
Чем DRAM отличается от SRAM
| DRAM | SRAM | |
|---|---|---|
| Ячейка | 1 транзистор + конденсатор | 4–6 транзисторов (триггер) |
| Регенерация | нужна постоянно | не нужна |
| Скорость доступа | десятки наносекунд | единицы наносекунд |
| Плотность | высокая | низкая |
| Цена за гигабайт | низкая | высокая |
| Где применяется | оперативная память | кэш процессора |
Отсюда и неоднородность памяти в компьютере: маленький и дорогой SRAM стоит вплотную к процессору, большой и дешёвый DRAM — дальше (см. «Иерархия памяти» выше). Оба вида энергозависимы: выключили питание — содержимое потеряно.
Энергонезависимая (сохраняет содержимое)
- Flash (флеш-память) — то, на чём живут SSD, eMMC, SD-карты и прошивка материнской платы (Прошивка). Умеет стираться и перезаписываться блоками.
- ROM — память только для чтения. В чистом виде сегодня почти не встречается, но её родня жива: PROM программируется один раз, EPROM стирается ультрафиолетом, EEPROM — электрически. Из EEPROM, по сути, и выросла флеш-память.
- NVRAM — энергонезависимая память для настроек: там же лежат переменные UEFI (UEFI).
Отдельно стоит кэш процессора: он не является отдельным устройством, а встроен в кристалл и работает как «карманная» память для горячих данных.
Как память развивалась
Память — самая «историчная» часть компьютера: за семьдесят лет она прошла путь от трубок с ртутью до кристаллов на миллиарды ячеек.
Механическое и магнитное время
- 1940-е: линии задержки и электронно-лучевые трубки. В первых машинах памятью служили ртутные линии задержки — данные шли по трубке со ртутью в виде звуковых импульсов, и их приходилось «догонять». Параллельно использовали трубки Уильямса–Килбурна: точка на экране осциллографа, которую считывал электронный луч. Память занимала шкаф, а хранила сотни-тысячи бит.
- 1949–1970-е: ферритовая память. Крошечные ферритовые кольца (сердечники) нанизывались на сетку проводов, и направление намагничивания задавало 0 или 1. Именно она сделала память быстрой и «произвольной» — доступ к любой ячейке за одинаковое время. Отсюда и до сих пор живое слово «дамп ядра» (core dump): core — это сердечник.
Полупроводниковая эра
- Начало 1960-х: SRAM. Первая полупроводниковая память — на триггерах. Быстрая, но дорогая и малой ёмкости.
- 1966–1968: DRAM. Роберт Деннард из IBM предложил ячейку из одного транзистора и одного конденсатора — ту самую, что используется до сих пор. Она оказалась в разы плотнее и дешевле SRAM.
- 1970: Intel 1103. Первый коммерчески успешный чип DRAM ёмкостью 1 Кбит. С него полупроводниковая память начала вытеснять ферритовую, и к середине 1970-х сердечники ушли в историю.
- Дальше — гонка за плотностью: килобиты, мегабиты, гигабиты на одном кристалле.
Кстати, кристаллы DRAM делают всего несколько компаний в мире (Samsung, SK Hynix, Micron и ещё пара). Все остальные — Kingston, Patriot, ADATA и прочие — покупают чипы и собирают из них модули. Поэтому марка на наклейке модуля не говорит, чьи внутри чипы.
Модули и поколения
Сначала память была просто микросхемами, которые вставляли в панельки. Потом их стали собирать в модули — небольшие платы с чипами и контактами, которые удобно ставить в слоты: сначала SIMM, затем DIMM для настольных компьютеров и SO-DIMM для ноутбуков.
Внутри модулей сменялись поколения памяти:
| Поколение | Год | Напряжение | Скорость | Полоса (на канал) |
|---|---|---|---|---|
| SDR SDRAM | 1996 | 3,3 В | 66–133 МТ/с | 0,5–1 ГБ/с |
| DDR | 1998 | 2,5 В | 200–400 МТ/с | 1,6–3,2 ГБ/с |
| DDR2 | 2003 | 1,8 В | 400–1066 МТ/с | 3,2–8,5 ГБ/с |
| DDR3 | 2007 | 1,5 В | 800–2133 МТ/с | 6,4–17 ГБ/с |
| DDR4 | 2014 | 1,2 В | 1600–3200 МТ/с | 12,8–25,6 ГБ/с |
| DDR5 | 2020 | 1,1 В | 4000–8800 МТ/с | 32–70 ГБ/с |
Что менялось от поколения к поколению:
- Скорость. Название DDR расшифровывается как Double Data Rate — «двойная скорость»: данные передаются и по переднему, и по заднему фронту тактового сигнала, то есть в два раза чаще, чем у прежней SDR-памяти.
- Напряжение. С 3,3 В у SDR до 1,1 В у DDR5 — меньше нагрев и потребление. Для ноутбуков выпускают отдельные «энергосберегающие» версии — LPDDR.
- Разъёмы. У каждого поколения своя нарезка ключа и своё число контактов, поэтому модули несовместимы: DDR4 физически не влезет в слот DDR5, и наоборот.
Куда движется память
- 3D-компоновка. Память HBM укладывают этажами и соединяют сквозными переходами, размещая рядом с процессором или видеочипом. Она используется в ускорителях и топовых видеокартах — там, где нужна огромная полоса.
- Память на корпусе. В ноутбуках и телефонах LPDDR часто распаяна прямо на плате: компактно и экономично, но не расширяется.
- Больше кэша. Чтобы не ждать медленный DRAM, процессоры несут десятки мегабайт SRAM-кэша.
- Спрос решает всё. В последние годы производственные мощности DRAM сильно перетягивает на себя память для ИИ (HBM), а обычная память дорожает. Поэтому цены на модули — вещь непостоянная.
Адресация: как процессор обращается к памяти
Побайтовая адресация. Память организована как последовательность байтов, и к ней обращаются по адресу. Чтобы прочитать один или несколько байтов, используется адрес — указание, где этот байт лежит. Диапазон адресов, к которым можно обратиться, называется адресным пространством.
Сегментная адресация. Форма адресации, при которой программа может иметь несколько независимых адресных пространств — сегментов. Например, код (инструкции) и стек можно держать в разных сегментах: адреса кода всегда ссылаются на пространство кода, адреса стека — на пространство стека. Так работала адресация в реальном режиме x86, и эти сегменты (CS, DS, SS, ES) видны в ассемблере.
Виртуальная память. Современные процессоры работают не с физическими адресами напрямую, а через виртуальные: каждому процессу выдаётся собственное адресное пространство, а специальный блок процессора (MMU) переводит виртуальные адреса в физические по таблицам страниц. Отсюда:
- изоляция: процесс не может залезть в память другого;
- память больше, чем есть: неиспользуемые страницы вытесняются в подкачку;
- общая память: одни и те же страницы могут отображаться в разные процессы (библиотеки).
Именно поэтому программа «видит» большой непрерывный диапазон, хотя физически память может быть разбросана кусками.
Контроллер памяти и каналы. Между процессором и модулями ОЗУ стоит контроллер памяти (сегодня — в самом процессоре). Модули подключаются к каналам; когда их два и модули стоят в разных каналах, память работает в двухканальном режиме — вдвое шире полоса. Именно поэтому важно, в какие слоты ставить модули и какими они должны быть.
Полезные команды
# сколько памяти видит система
free -h
cat /proc/meminfo | head
# слоты и модули: производитель, модель, скорость, ранг
sudo dmidecode -t memory
# максимум памяти и число слотов
sudo dmidecode -t 16
# структура памяти процессора и кэши
lscpu
lsmem
Что дальше
- SODIMM — модули оперативной памяти: как выбрать второй модуль, чем отличаются односторонние от двусторонних, и какая память стоит в моём ноутбуке.
Комментарии
Пока комментариев нет.