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

Память компьютера — то, где хранятся данные и код. Разных «памятей» много, и они сильно отличаются по скорости, объёму и назначению: от регистров внутри процессора до дисков и флеш-памяти прошивки.

Эта страница — обзор: какие бывают виды памяти, как процессор к ним обращается и как память развивалась. Про конкретные модули оперативной памяти — в статье 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 — модули оперативной памяти: как выбрать второй модуль, чем отличаются односторонние от двусторонних, и какая память стоит в моём ноутбуке.

Смотрите также

  • Прошивка — где живёт память с прошивкой
  • Ядро — как ядро распоряжается памятью при загрузке
  • Загрузка — весь процесс по шагам
Оценка статьи 0

Комментарии

Пока комментариев нет.