Устройство компьютерной памяти

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

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

Иерархия памяти

Чем ближе память к процессору, тем она быстрее — и тем её меньше и дороже:

Уровень Объём Скорость Энергозависимость
Регистры процессора байты самая высокая теряется при выключении
Кэш (L1 / L2 / L3) килобайты — десятки мегабайт очень высокая теряется
Оперативная память (ОЗУ) гигабайты высокая теряется
SSD / NVMe терабайты средняя сохраняется
HDD терабайты низкая сохраняется

Процессор старается держать нужное как можно ближе к себе: то, что не влезло в кэш, идёт в ОЗУ, а то, что не влезло в ОЗУ — на диск (в подкачку).

Виды памяти

Энергозависимая (теряет содержимое при выключении)

  • DRAM (динамическая) — основа оперативной памяти. Каждая ячейка — конденсатор, который постепенно разряжается, поэтому память нужно постоянно регенерировать. Дёшево и ёмко, но медленнее SRAM. Поколения: DDR3, DDR4, DDR5 — отличаются частотой, напряжением и разъёмом, несовместимы между собой.
  • SRAM (статическая) — быстрее и дороже, ячейка на нескольких транзисторах, регенерация не нужна. Используется в кэше процессора и в небольших буферах.

Энергонезависимая (сохраняет содержимое)

  • Flash (флеш-память) — то, на чём живут SSD, eMMC, SD-карты и прошивка материнской платы (Прошивка). Умеет стираться и перезаписываться блоками.
  • ROM — память только для чтения, в чистом виде сегодня почти не встречается.
  • NVRAM — энергонезависимая память для настроек: там же лежат переменные UEFI (UEFI).

Отдельно стоит кэш процессора: он не является отдельным устройством, а встроен в кристалл и работает как «карманная» память для горячих данных.

Адресация: как процессор обращается к памяти

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

Сегментная адресация. Форма адресации, при которой программа может иметь несколько независимых адресных пространств — сегментов. Например, код (инструкции) и стек можно держать в разных сегментах: адреса кода всегда ссылаются на пространство кода, адреса стека — на пространство стека. Так работала адресация в реальном режиме x86, и эти сегменты (CS, DS, SS, ES) видны в ассемблере.

Виртуальная память. Современные процессоры работают не с физическими адресами напрямую, а через виртуальные: каждому процессу выдаётся собственное адресное пространство, а специальный блок процессора (MMU) переводит виртуальные адреса в физические по таблицам страниц. Отсюда:

  • изоляция: процесс не может залезть в память другого;
  • память больше, чем есть: неиспользуемые страницы вытесняются в подкачку;
  • общая память: одни и те же страницы могут отображаться в разные процессы (библиотеки).

Именно поэтому программа «видит» большой непрерывный диапазон, хотя физически память может быть разбросана кусками.

Контроллер памяти и каналы. Между процессором и модулями ОЗУ стоит контроллер памяти (сегодня — в самом процессоре). Модули подключаются к каналам; когда их два и модули стоят в разных каналах, память работает в двухканальном режиме — вдвое шире полоса. Именно поэтому важно, в какие слоты ставить модули и какими они должны быть.

Полезные команды

# сколько памяти видит система
free -h
cat /proc/meminfo | head

# слоты и модули: производитель, модель, скорость, ранг
sudo dmidecode -t memory

# максимум памяти и число слотов
sudo dmidecode -t 16

# структура памяти процессора и кэши
lscpu
lsmem

Что дальше

  • SODIMM — модули оперативной памяти: как выбрать второй модуль, чем отличаются односторонние от двусторонних, и какая память стоит в моём ноутбуке.

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

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

Комментарии

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