Оперативная память остаётся самым быстрым, но и самым ограниченным ресурсом любого компьютера, а программы давно привыкли требовать больше памяти, чем физически установлено в системе. Разрыв между аппетитами приложений и реальным объёмом чипов ОЗУ Windows закрывает с помощью виртуальной памяти, и главный видимый след этого механизма лежит прямо в корне системного диска в виде скрытого файла pagefile.sys. Понимание того, как он работает, помогает не только разобраться с загадочным файлом весом в несколько гигабайт, но и осознанно настраивать производительность системы вместо слепого следования советам из интернета.

Зачем процессору и оперативной памяти вообще нужен посредник

Каждая программа обращается к памяти через виртуальные адреса, а не через реальные физические ячейки чипов ОЗУ, и превращает одно в другое специальный аппаратный блок процессора под названием MMU, то есть модуль управления памятью. Такая косвенность решает сразу две задачи. Во первых, каждый процесс получает иллюзию собственного изолированного адресного пространства и не может случайно или намеренно залезть в память соседнего приложения. Во вторых, операционная система получает свободу временно вытеснять редко используемые данные за пределы физической памяти, оставляя процессору лишь ссылку на то, где эти данные искать в случае необходимости. Именно эта свобода и превращает скромный объём установленной оперативной памяти в куда более просторное виртуальное адресное пространство, доступное каждой запущенной программе. На платформе x64 теоретический предел виртуального адресного пространства одного процесса составляет сто двадцать восемь терабайт, что многократно превышает объём физической памяти любого реального компьютера, и именно виртуализация позволяет разработчикам писать код так, будто у них есть доступ к почти неограниченному объёму адресов, не заботясь о том, как именно операционная система распорядится реальными чипами ОЗУ за кулисами. На тридцатидвухбитных системах, ещё встречающихся на старых компьютерах, это же адресное пространство куда скромнее и ограничено четырьмя гигабайтами на процесс, что в своё время и подтолкнуло индустрию к массовому переходу на шестидесятичетырёхбитную архитектуру, где подобных искусственных потолков для повседневных задач практически не остаётся, хотя реальный доступный объём всё равно определяется физически установленной памятью и размером файла подкачки, а не голыми цифрами адресной шины процессора.

Как появился файл подкачки в Windows и что было до него в старых версиях

Файл подкачки не является изобретением современной Windows: подобный механизм существовал ещё в Windows 3.1 при работе процессора в расширенном режиме 386, где система создавала постоянный или временный файл подкачки с расширением swp прямо на жёстком диске. Полноценная реализация виртуальной памяти в её нынешнем понимании пришла вместе с Windows NT в 1993 году, архитектура которой изначально проектировалась с оглядкой на защищённый режим процессоров и многозадачность корпоративного уровня. С тех пор файл подкачки под именем pagefile.sys присутствует во всех линейках Windows на базе NT, включая XP, Vista, 7, 10 и 11, и по умолчанию создаётся в корне того раздела, где установлена сама операционная система. Первые версии Windows на базе NT позволяли администратору лишь грубо указать минимальный и максимальный размер файла в мегабайтах, тогда как современная система способна анализировать паттерны использования памяти конкретным компьютером и подстраивать размер файла куда более гибко, опираясь на статистику, накопленную за предыдущие сеансы работы.

Что происходит при нехватке оперативной памяти и как работает подкачка страниц

Вся физическая и виртуальная память в Windows делится на одинаковые блоки фиксированного размера, называемые страницами, и стандартный размер такой страницы на платформе x86 и x64 составляет четыре килобайта. Когда суммарный объём данных, запрошенных всеми запущенными программами, превышает физически доступную оперативную память, диспетчер памяти операционной системы начинает искать страницы, которые дольше всего не использовались, и переносит их содержимое из ОЗУ в файл pagefile.sys на диске. Этот процесс называется свопингом или подкачкой страниц, и он происходит абсолютно прозрачно для самой программы: она продолжает считать, что нужные ей данные лежат по прежнему виртуальному адресу, а если реально обратится к вытесненной странице, процессор сгенерирует исключение отказа страницы, по которому операционная система молниеносно найдёт нужный блок в файле на диске и вернёт его обратно в оперативную память, вытеснив взамен какую нибудь другую редко используемую страницу по алгоритму, похожему на очередь наименее востребованных данных. Именно скорость диска в этот момент определяет, насколько заметно пользователь ощутит подобное обращение: на быстром твердотельном накопителе задержка почти незаметна, а на медленном механическом жёстком диске система может ощутимо подвисать. Разработчики Windows называют этот эффект thrashing, то есть состояние, при котором система тратит больше времени на постоянное перемещение страниц между диском и памятью, чем на выполнение полезной работы приложений, и именно нехватка физической памяти в сочетании с медленным накопителем чаще всего становится причиной резкого падения отзывчивости компьютера под нагрузкой, а вовсе не слабый процессор, на который обычно грешат пользователи, замечая лишь внешние симптомы без понимания их реальной причины.

Из чего состоит адрес виртуальной памяти и как устроен перевод в физический

Технически каждый виртуальный адрес, с которым работает процессор, раскладывается на несколько компонентов, включая индекс в каталоге страниц, индекс в самой таблице страниц и смещение внутри найденной страницы. Соответствие между виртуальными и физическими адресами хранится в структурах, которые на платформе Windows называются PTE, то есть записи таблицы страниц, а обратный учёт занятых физических блоков ведёт база данных PFN. Каждая запись PTE хранит не только физический адрес страницы, но и служебные биты, среди которых флаг присутствия страницы в оперативной памяти прямо сейчас. Если этот бит сброшен, значит страница временно выгружена в pagefile.sys, и следующее обращение к ней вызовет уже упомянутое исключение отказа страницы. Проверить текущие параметры файла подкачки можно, например, через классическую команду в PowerShell:

Get-CimInstance Win32_PageFileUsage | Select-Object Name, AllocatedBaseSize, CurrentUsage

Похожие данные показывает и диспетчер задач на вкладке быстродействия в разделе память, где строка выделено отражает суммарный объём виртуальной памяти, зарезервированной под текущие процессы, включая как физическую оперативную память, так и место, отведённое под pagefile.sys на диске. Разница между этим показателем и реальным объёмом установленной ОЗУ как раз и подсказывает опытному пользователю, насколько активно система в данный момент прибегает к подкачке страниц на диск.

Чем pagefile.sys отличается от swapfile.sys и hiberfil.sys на одном диске

Рядом с классическим файлом подкачки в корне системного диска современных версий Windows нередко можно заметить ещё два скрытых системных файла со схожим назначением, и путаница между ними встречается постоянно. Файл hiberfil.sys появляется, если в системе включён режим гибернации, и хранит полный слепок содержимого оперативной памяти на момент выключения компьютера, поэтому его размер примерно соответствует объёму установленной физической ОЗУ. Файл swapfile.sys, введённый начиная с Windows 8, служит куда более узкой цели: он хранит данные для быстрого восстановления состояния свёрнутых приложений из магазина Windows и обычно занимает всего несколько сотен мегабайт, поскольку сохраняет не всё содержимое процесса целиком, а лишь минимально необходимый набор данных для его последующего пробуждения. Такое разделение обязанностей между тремя файлами позволило Microsoft оптимизировать каждый сценарий по отдельности: гибернация требует максимальной надёжности восстановления при полном отключении питания, поэтому hiberfil.sys дублирует буквально всё содержимое ОЗУ, тогда как быстрое переключение между приложениями на сенсорных устройствах не может позволить себе такую же расточительность и довольствуется куда более компактным swapfile.sys. Различия между тремя этими файлами удобно свести к их основному предназначению:

  1. pagefile.sys отвечает за классическую подкачку страниц памяти любых обычных процессов при нехватке оперативной памяти;
  2. hiberfil.sys хранит полный образ памяти для восстановления работы системы после выхода из гибернации;
  3. swapfile.sys предназначен для быстрого возобновления современных приложений из магазина Windows после их фонового приостановления.

Как Windows выбирает размер файла подкачки и почему старые советы устарели

Классическая рекомендация назначать файл подкачки в полтора или два раза больше объёма оперативной памяти родилась в эпоху, когда типичный компьютер располагал от силы одним или двумя гигабайтами ОЗУ, и подкачка страниц использовалась активно и регулярно. При современных объёмах памяти в шестнадцать, тридцать два и более гигабайт следовать этому же правилу буквально уже не имеет практического смысла: файл подкачки размером в сорок восемь гигабайт почти никогда не заполнится целиком, зато займёт солидный кусок пространства на диске без реальной пользы для производительности. Именно поэтому современные версии Windows по умолчанию используют режим динамического управления размером, известный как system managed size, при котором операционная система сама увеличивает и уменьшает файл в зависимости от текущей нагрузки, ориентируясь на внутреннюю статистику использования памяти конкретным компьютером, а не на фиксированную формулу из старых руководств.

Как самостоятельно настроить или перенести файл подкачки на другой диск

Параметры файла подкачки хранятся в системном реестре по пути HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management, в значении PagingFiles, и именно эту ветку читает операционная система при каждой загрузке, прежде чем создать или расширить pagefile.sys на диске. Через графический интерфейс те же параметры находятся в дополнительных параметрах системы на вкладке быстродействия, где пользователь может отключить автоматическое управление и задать конкретный минимальный и максимальный размер вручную или вовсе перенести файл на другой физический накопитель. Перенос файла подкачки на отдельный быстрый диск иногда практикуют для разгрузки основного системного накопителя, но полностью отключать виртуальную память не рекомендуется даже на компьютерах с большим объёмом оперативной памяти, поскольку некоторые программы и системные компоненты по прежнему рассчитывают на существование этого файла и способны аварийно завершаться при его полном отсутствии, даже если физической памяти формально хватает с большим запасом. Некоторые игры и профессиональные приложения для обработки видео или трёхмерной графики прямо указывают в системных требованиях минимальный размер файла подкачки, поскольку используют его не только как аварийный резерв на случай нехватки ОЗУ, но и как штатный механизм временного хранения промежуточных данных при рендеринге, и отключение виртуальной памяти в таком случае приводит не к ускорению, а к сбоям и вылетам программы прямо посреди работы, что регулярно подтверждают форумы технической поддержки подобных программ.