Одна из функций диспетчера памяти — это сжатие страниц памяти. Основными кандидатами на сжатие являются используемые страницы процессов UWP-приложений.

Алгоритм сжатия страниц

В MicroSoft разработали специальный алгоритм для сжатия страниц памяти — «Microsoft Xpress«. Этот алгоритм сжимает страницы приблизительно до 30-50%.

Чтобы этот механизм освобождал память а не нагружал её еще сильнее, придумали следующие требования.

  1. В системе не может быть не сжатой страницы и такой-же сжатой. Если система успешно создала сжатый дубликат страницы, то оригинальную страницу нужно освободить.
  2. Если страница не может быть сжата достаточно эффективно, то она и не будет сжиматься.
  3. Сжатые страницы должны отображаться как свободные, хотя на сомом деле это страницы рабочего набора одного из системных процессов (об этом ниже).

В клиентских версиях ОС сжатие памяти включено по умолчанию. Серверные версии пока не поддерживают сжатие памяти вплоть до Windows Server 2019.

Пример сжатия

Допустим у нас есть:

  • 8 свободных страниц, которые могут быть использованы работающими процессами в системе;
  • 2 страницы которые сейчас находятся в работе;
  • 6 страниц которые уже не являются частью рабочего набора процессов, но содержат не сохраненные данные.
Алгоритм работы сжатия страниц памяти - шаг 1

Дальше диспетчер памяти хочет провести усечение списка измененных страниц. Информация на страницах 11, 12, 13 сжимается и помещается в одну страницу — 1 из свободных. А страницы 11, 12, 13 освобождаются.

Алгоритм работы сжатия страниц памяти - шаг 2

Допустим ситуация повторилась, и теперь три страницы (14, 15, 16) сжались в две из свободных (2, 3):

Алгоритм работы сжатия страниц памяти - шаг 3

Допустим теперь диспетчер памяти решил произвести усечение рабочего набора процесса сжатия памяти. Для этого он страницы 1 и 2 перемещает в измененные. Такие страницы все еще содержат данные, но уже не являются частью рабочего набора процесса:

Алгоритм работы сжатия страниц памяти - шаг 4

Всё это сжатие позволило освободить оперативную память не обращаясь к диску. Используя только процесс сжатия памяти, а значит процессорное время. А если произойдет нехватка памяти, то измененные страницы просто запишутся на диск, а так как это сжатые страницы то и записывать на диск придется меньше.

Вот так сжатие памяти немного нагружая процессор заставляет систему меньше обращаться к дисковой подсистеме.

Процесс «Memory Compression»

Сжатая память хранится в рабочем наборе процесса «Memory Compression«. Кстати, объем рабочего набора этого процесса должен совпадать в диспетчере задач со сжатой памятью:

Сжатая память (Process Explorer и Диспетчер задач)

Этот процесс просто предоставляет адресное пространство для работы. В нем ничего не выполняется, то есть сжимает данные не он, а диспетчер памяти.


Вернуться к оглавлению

Сводка
Сжатие памяти в Windows
Имя статьи
Сжатие памяти в Windows
Описание
Одна из функций диспетчера памяти — это сжатие страниц памяти. Основными кандидатами на сжатие являются используемые страницы процессов UWP-приложений

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *