Виртуальная память
Зачем?
- Изолировать процессы в памяти
- Упростить жизнь программисту
- "Иметь в наличии" больше оперативной памяти, чем есть на самом деле
Изолируем процессы в памяти
- Каждый процесс думает, что он один в памяти
- Каждый процесс считает, что вся память его личная
- Каждый процесс имеет доступ лишь к своей памяти (но если хочется, то можно шарить)
Упрощяем жизнь программисту
- Память выглядит как один большой непрерывный кусок
Как?
- Реализуется в 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 про память
Виртуальная память
By Roman Melnikov
Виртуальная память
- 1,024