Виртуальная память

Зачем?

  • Изолировать процессы в памяти
  • Упростить жизнь программисту
  • "Иметь в наличии" больше оперативной памяти, чем есть на самом деле

Изолируем процессы в памяти

  • Каждый процесс думает, что он один в памяти
  • Каждый процесс считает, что вся память его личная
  • Каждый процесс имеет доступ лишь к своей памяти (но если хочется, то можно шарить)

Упрощяем жизнь программисту

  • Память выглядит как один большой непрерывный кусок

Как?

  • Реализуется в MMU

32 битные виртуальные адреса на 32-битных системах, 64 битные на 64-битных системах (логично)

Проблемы?

  • Типичный размер страницы - 4КБ
  • Offset - 12 бит, 20 бит на выбор директории
  • Если каждый Directory Entry по 4 байта, то вся таблица весит 4МБ
  • У каждого процесса своя таблица страниц
  • ???
  • Page table'ы займут всю память

Многоуровневые таблицы страниц

  • Сейчас обычно 4 уровня
  • Адрес Level 4 Directory хранится в специальном регистре (CR3)
  • Если какой-либо directory entry пустой, то можно не хранить директории более низкого уровня
  • Получаем разреженное дерево

Оптимизируем доступ к таблице страниц

  • Можно хранить в L1 кэше
  • В худшем случае нужно 4 раза обратиться к кэшу, а это долго
  • TLB (Transaction Look-aside Buffer)
  • Еще один маленький кэш
  • Храним по тегу адрес физической страницы
  • Если не попали в TLB то спускаемся по дереву за долго
  • Ничего не напоминает?

Проблемы?

  • TLB один для всего процессора (общий для всех ядер)
  • У каждого процесса свой page table (но не у потоков внутри процесса), даже у ядра
  • ???
  • Очищать TLB при смене процесса
  • Расширить тэг чтобы однозначно определять page table к которому они относятся

Перерыв на байку

Meltdown и Spectre

Page Address Extension (PAE)

  • Расширяем размер адресуемой памяти до 64ГБ на 32-битной машине
  • Page entry расширен до 64 бит (зато их стало в 2 раза меньше)
  • Добавлен еще один уровень

Жизнеутверждающие картинки

"Увеличиваем" размер оперативной памяти

  • Page entry может ссылаться не только на данные в оперативной памяти, но и в данные на диске
  • Оперативная (физическая) память является кэшом для виртуальной

Жизнеутверждающая картинка

Тулинг для хаскеля:

Recap про память

Made with Slides.com