Пора поговорить про физические страницы памяти. Рассмотрим как они сопоставляются с виртуальными страницами и какие свойства имеют.
Физические страницы памяти и их состояния
В Windows есть такая база данных — PFN (Page Frame Nubber). Она содержит все страницы физической памяти и их состояния. Состояния у станиц могут быть следующие:
- Active (valid) — на эту страницу есть корректная PTE запись. Это означает что если поток захочет прочитать данную страницу, то сразу прочитает её а не получит ошибку памяти.
- Transition — временное состояние страницы, означает что со страницей осуществляется операция ввода / вывода. При этом страницы пока еще нет ни в рабочем наборе ни в файле подкачки.
- Standby — страница была в рабочем наборе, но была удалена из него, при этом страница не изменялась с момента последний записи на диск.
- Modified — как standby, но страница была изменена, и еще не успела записаться на диск.
- Modified no-write — как modified, но помечена, чтобы не быть записанной на диск. Возможно такая страница чего-то ждет, может завершения транзакции, прежде чем будет возможность записать её на диск.
- Free — свободная страница. Но она содержит некие данные, оставленные предыдущим потоком. Такие страницы вначале проходят процедуру обнуления, прежде чем будут выданы новому потоку.
- Zeroed — обнуленные страницы. Это свободные страницы прошедшие процедуру обнуления. Эти страницы готовы для работы с новыми потоками.
- Room — такая страница может использоваться только для чтения.
- Bad — страница в отношении которой была получена ошибка, например ошибка четности. Поэтому страница не может быть использована.
Изучение страниц с помощью утилиты RamMap
Посмотреть на состояния страниц можно с помощью утилиты RamMap:
Столбцы в этой утилите показывают состояния страниц. А строки — чем эти страницы используются. Состояния страниц мы уже разобрали выше. Теперь пробежимся по строкам:
- Process Private — такие страницы используются процессами в системе;
- Mapped File — а эти страницы выделены для замапленных файлов;
- Shareable — общие страницы памяти, используемые разными процессами;
- Page Table — страницы в которых хранятся таблицы страниц;
- Paged Pool — выгружаемый пул;
- Nonpages Pool — невыгружаемый пул;
- System PTE — пул системных страниц. Таких как пространство ввода-вывода, стеки ядра и списки дескрипторов памяти, также тут могут находиться страницы виртуальных машин;
- Session Private — память, которая является частной для определенного сеанса, вошедшего в систему. Она будет выше на серверах RDS;
- Metafile — часть системного кеша который содержит метаданные NTFS;
- AWE (Address Windowing Extensions) — позволяет приложению отображать различные представления физической памяти в свое адресное пространство, обычно это используется SQL или другими приложениями баз данных;
- Driver Locked — страницы, заблокированные драйверами. Это может быть сделано для временных целей например ввод-вывод, или для постоянных например для RAM диска;
- Kernel Stack — страницы, используемые стеками потоков ядра;
- Unused — неиспользуемые страницы;
- Large Page — большие страницы (> 2 MB).
Обратите внимание — все обнуленные страницы у нас не используются (Unused). Некоторые приватные страницы процессов и страницы невыгружаемого пула находятся в переходном состоянии (transition). Страницы в состоянии modified no-write это метафайлы файловой системы (ожидают окончания транзакций).
Перемещение страниц
Страничные блоки перемещаются следующими способами:
- когда диспетчеру памяти нужна обнуленная страница, он ищет их в списке обнуленных страниц;
- если список обнуленных страниц пуст, то страница берется из списка свободных страниц и обнуляется;
- а если и список свободных страниц пуст, то происходит поиск среди ожидающих страниц (standby и modified).
Когда страница выходит из рабочего набора она может быть в двух состояниях:
- modified — еще не записались изменения на диск. Такие страницы проходят подсистему записи измененных страниц и становятся standby.
- standby — уже записались изменения на диск. Такие страницы могут стать свободными (free), а после прохода через поток обнуления — обнуленными (zeroed).
Когда процесс завершается, то все его страницы из рабочего набора переходят сразу в список свободных страниц, затем такие страницы могут стать обнуленными.
Подсистема записи измененных страниц записывает страницы либо в обычные файлы (которые есть на файловой системе), либо в файл подкачки если реального файла для этой страницы нет.
Поток обнуления страницы заполняет страницу нулями, чтобы следующий поток не получил доступ к данным предыдущего потока.
Наблюдение за свободными и обнуленными страницами
Давайте понаблюдаем за свободными и обнуленными страницами в Process Explorer. Для этого перейдите по пунктам меню «View / System Information«:
Для примера можете запустить Testlimit64.exe -d 1 -c 1500 и в системе появится процесс, который займет 1500 МБ памяти. А в момент завершения процесса (нажатия ctrl+c) в системе образуется много свободных страниц, которые затем перейдут в список обнуленных страниц.
Приоритеты страниц памяти
Каждая страница в системе имеет свой приоритет, это видно в утилите Process Explorer, если перейти по меню «View / System Information«:
Страницы в списке ожидания (standby) с наименьшим приоритетом используются раньше, чем процессы с наивысшим приоритетом.
За приоритет отвечает рассматриваемая ранее система супервыборки. То есть самые активные данные получают наивысший приоритет и остаются в оперативной памяти дольше, а редко используемые данные сбрасываются на диск чаще и их страницы обнуляются.
Лимиты физической памяти
Ну и раз мы говорим про физическую память, оставлю здесь таблицу с лимитами физической памяти для Windows.
На ограничение физической памяти влияет:
- разрядность системы (32 / 64)
- версия системы (Windows 7, Windows 8, Windows 10)
- версия лицензии (Home, Professional)
Версия / Редакция ОС | 32-разрядная | 64-разрядная |
---|---|---|
Windows 7 Home Basic | 4 GB | 8 GB |
Windows 7 Home Premium | 4 GB | 16 GB |
Windows 7 Professional | 4 GB | 192 GB |
Windows 10 Home | 4 GB | 128 GB |
Windows 10 Professional | 4 GB | 2 TB |
Windows 10 Enterprise | 4 GB | 6 TB |
Windows Server 2012 R2 Essentials | 64 GB | |
Windows Server 2012 R2 Standart и Datacentr | 4 TB | |
Windows Server 2019 Essentials | 64GB | |
Windows Server 2019 Standard и Datacentr | 24 TB |