Перейти к содержимому

Виртуальная память: как работают страницы, TLB и файл подкачки

Опубликовано03.09.2026
Обновлено04.09.2026
Просмотры7
Время чтения11 мин.
Оглавление статьи
Разбираем виртуальную память без смешения с файлом подкачки. От виртуального адреса и TLB до диагностики pagefile, swap и давления памяти.
Виртуальная память: как работают страницы, TLB и файл подкачки

Короткий ответ

Виртуальная память — это механизм, который даёт каждому процессу собственное адресное пространство и отображает виртуальные адреса на физическую память. Процессор и MMU переводят адрес через таблицы страниц, а TLB кэширует недавние результаты перевода. ОС может выделять страницы по требованию, защищать их правами доступа, совместно отображать код и файлы, а при необходимости освобождать RAM.

Файл подкачки Windows и swap Linux — лишь часть этого механизма, а не синоним виртуальной памяти. Страница может отсутствовать в RAM потому, что ещё не выделена, отображена из файла, была вытеснена, нарушает права доступа или вообще не принадлежит процессу. Поэтому page fault не всегда означает чтение с диска и не всегда является ошибкой приложения.

Зачем нужна виртуальная память

Без дополнительного уровня программе пришлось бы работать с реальными адресами RAM и учитывать, где размещены другие процессы. Виртуальная адресация отделяет представление памяти в приложении от её физического размещения. Один и тот же виртуальный адрес в двух процессах может указывать на разные физические фреймы.

  • Изоляция. Процесс не получает произвольный доступ к памяти другого процесса.

  • Защита. Для страницы задаются разрешения на чтение, запись и исполнение.

  • Удобство программ. Код работает с непрерывными диапазонами виртуальных адресов, даже если физические фреймы разрознены.

  • Отложенное выделение. ОС может предоставить адресный диапазон, а физическую страницу назначить при первом обращении.

  • Совместное использование. Несколько процессов могут отображать одни и те же страницы библиотек или файла.

  • Работа с файлами. Memory mapping позволяет обращаться к содержимому файла через адресное пространство.

Фраза «программа видит больше памяти, чем установлено ОЗУ» передаёт только один эффект. Важнее то, что виртуальная память обеспечивает адресацию, защиту, совместное использование и управление жизненным циклом страниц.

Основные термины

ТерминЧто означаетНе путать с
Виртуальный адресАдрес, с которым работает инструкция процессаНомер байта в физической RAM
Адресное пространствоНабор виртуальных адресов и правил их отображения для процессаФактически занятой оперативной памятью
СтраницаЕдиница виртуальной адресации и управленияСтраницей документа или веб-сайта
ФреймОбласть физической памяти, на которую отображается страницаКадром видео
Таблица страницСтруктура с отображениями адресов, состоянием и правамиСписком всех байтов процесса
MMUАппаратный блок, участвующий в трансляции и проверке доступаПланировщиком процессов
TLBБыстрый кэш недавних трансляций адресовКэшем данных процессора
Page faultИсключение при обращении, которое нельзя завершить текущим отображениемОбязательным чтением swap или аварией
Working set / RSSСтраницы процесса, находящиеся в RAM по определению конкретной ОСПолным размером виртуального адресного пространства
Pagefile / swapДисковое пространство, которое ОС может использовать для части страницВсей виртуальной памятью

Как виртуальный адрес превращается в физический

  1. Инструкция процессора обращается к виртуальному адресу.

  2. Адрес разделяется на номер виртуальной страницы и смещение внутри неё.

  3. MMU ищет готовую трансляцию в TLB.

  4. При попадании TLB возвращает физический фрейм и проверяются права доступа.

  5. При промахе выполняется обход таблиц страниц или вызывается обработчик, в зависимости от архитектуры.

  6. Номер физического фрейма объединяется с тем же смещением внутри страницы.

  7. Если корректного отображения нет, процессор генерирует page fault, а ОС решает, можно ли продолжить выполнение.

Таблицы часто многоуровневые: хранить плоскую запись для каждой потенциальной страницы огромного адресного пространства было бы слишком дорого. Промежуточные уровни создаются только для используемых диапазонов. Конкретное число уровней, размер записи и поддерживаемые размеры страниц зависят от архитектуры и конфигурации ОС.

Почему нужен TLB

Если для каждого чтения сначала обращаться к таблице страниц в памяти, трансляция заметно увеличит стоимость доступа. TLB хранит небольшой набор недавних соответствий «виртуальная страница → физический фрейм». При попадании перевод выполняется быстро; при промахе требуется page walk и затем запись может попасть в TLB.

Промах TLB и page fault — разные события. При TLB miss нужная страница может уже находиться в RAM, но её трансляции нет в этом кэше. Page fault возникает, когда текущая запись не позволяет завершить обращение: например, страница ещё не выделена, отсутствует в RAM или нарушены права.

Что происходит при page fault

Обработчик ОС получает адрес и причину исключения. Дальнейший путь зависит от состояния страницы:

  • для допустимого, но ещё не выделенного диапазона может быть назначен новый нулевой фрейм;

  • страница отображённого файла может быть прочитана из этого файла;

  • ранее вытесненная изменённая страница может быть возвращена из pagefile или swap;

  • механизм copy-on-write может создать частную копию при первой записи;

  • при нарушении прав или недопустимом адресе ОС передаст процессу исключение, которое может завершить программу.

Различают minor и major faults. В общем случае minor fault обслуживается без чтения требуемой страницы с накопителя, а major требует ввода-вывода. Точные счётчики и трактовка зависят от ОС. Само наличие faults нормально; проблему оценивают по задержкам, частоте major faults, памяти рабочего набора и характеру нагрузки.

Demand paging и вытеснение

При demand paging данные загружаются по мере обращения, а не целиком при запуске программы. Это ускоряет старт и позволяет не держать в RAM неиспользуемые части кода и файлов. Когда свободных фреймов мало, ОС освобождает память: чистую страницу отображённого файла можно отбросить и позднее прочитать снова, изменённую анонимную страницу при наличии политики подкачки нужно сохранить в backing store.

Реальные ядра не обязаны реализовывать буквальный учебный FIFO или точный LRU. Они используют приближённые и адаптивные политики, учитывают активность страниц, классы памяти, NUMA, фоновые операции и давление памяти. Поэтому список учебных алгоритмов полезен для понимания компромиссов, но не описывает полностью современную реализацию.

Виртуальная память, RAM, cache и swap: в чём разница

ПоказательЧто измеряетКак интерпретировать
Virtual sizeДиапазоны адресного пространства процессаМожет быть намного больше реально занятой RAM
Resident memoryСтраницы процесса, находящиеся в физической памятиНе вся резидентная память обязательно уникальна для процесса
Working setНабор страниц процесса в RAM по правилам WindowsПодходит для поиска активных потребителей RAM
File cacheСвободная RAM, используемая для ускорения файловых операцийМожет быть быстро перераспределена; это не обязательно «утечка»
Committed memoryПамять, для которой система обещала backingВ Windows лимит связан с RAM и файлами подкачки
Swap usedОбъём страниц, размещённых в области подкачкиСам факт ненулевого значения не доказывает проблему
Memory pressureСводная оценка способности системы удовлетворять запросы памятиЧасто полезнее одного числа «свободно»

Файл подкачки в Windows

pagefile.sys — скрытый системный файл, который поддерживает часть committed memory и может использоваться для дампов при сбоях. В актуальном описании Microsoft сказано, что pagefile позволяет убрать редко используемые изменённые страницы из RAM, расширяет commit limit и нужен для некоторых сценариев crash dump.

Универсальная формула «размер файла подкачки равен 1,5 объёма ОЗУ» не учитывает пиковый commit, дампы, свободное место и требования приложений. Для обычного компьютера безопасная отправная точка — системное управление. Фиксировать размер, переносить или отключать pagefile стоит только по измеренной причине и с пониманием последствий.

Большой pagefile не делает накопитель эквивалентом RAM: задержка диска существенно выше, а интенсивная подкачка замедляет работу. Но полное отключение не ускоряет компьютер автоматически и может снизить commit limit или лишить систему нужного типа дампа.

Swap в Linux

Linux поддерживает swap-разделы и swap-файлы. Ядро использует виртуальную память не только для swap: в подсистему входят demand paging, отображение файлов, защита, совместные страницы, anonymous memory, page cache и другие механизмы. Это подчёркивает официальная документация Linux Kernel.

Параметр vm.swappiness влияет на баланс reclaim, но не является процентом RAM, после которого «включается swap». Его эффект зависит от версии ядра, типа нагрузки, доступности zswap/zram, скорости накопителя и других настроек. Менять значение только потому, что в интернете указан «лучший» номер, не стоит. Сначала наблюдайте memory pressure, major faults, I/O, latency и OOM-события на своей нагрузке.

Ненулевой swap может оставаться после краткого пика: ядру не всегда выгодно немедленно возвращать давно неиспользуемые страницы в RAM. Проблема начинается, когда рабочий набор не помещается, система постоянно перемещает страницы и полезная работа уступает место I/O.

Как виртуальная память выглядит в macOS

macOS использует виртуальную память, компрессию и swap. В Activity Monitor доступны Physical Memory, Memory Used, Cached Files, Compressed, Swap Used и график Memory Pressure. Apple рекомендует смотреть на давление памяти, которое учитывает несколько факторов, а не только объём свободной RAM.

Зелёный график при некотором объёме swap сам по себе не требует ручной «очистки». Жёлтый или красный уровень вместе с задержками и растущим swap указывает, что системе трудно обслуживать текущую нагрузку. Закройте ненужные тяжёлые процессы, уменьшите рабочие наборы приложений и проверьте вкладки, виртуальные машины и проекты разработки.

Сравнение Windows, Linux и macOS

СистемаДисковый механизмГде наблюдатьКонсервативная настройка
WindowsОдин или несколько pagefileTask Manager: Memory, Committed; Performance MonitorОставить System managed без измеренной причины менять
LinuxSwap-раздел, swap-файл; возможны zswap/zramfree, vmstat, sar, PSI, /procСначала измерить workload и только затем менять swap/swappiness
macOSУправляемые системой swap-файлы и компрессияActivity Monitor: Memory Pressure, Compressed, Swap UsedОценивать давление памяти и процессы, не пытаться вручную задавать swap

Как понять, что памяти действительно не хватает

  1. Зафиксируйте симптом. Замедление, закрытие приложения, OOM, длительный I/O или только большое число в интерфейсе — разные случаи.

  2. Измерьте в момент нагрузки. Среднее значение за день может скрыть короткий пик.

  3. Смотрите на несколько метрик. RAM, working set/RSS, commit, memory pressure, major faults, swap I/O и latency.

  4. Найдите процесс и рабочий набор. Большой virtual size сам по себе не доказывает нехватку.

  5. Проверьте повторяемость. Утечка обычно растёт со временем при одинаковом сценарии.

  6. Сопоставьте с диском. Thrashing сопровождается активной подкачкой и заметной задержкой, а не просто занятым swap.

Нормальная ОС старается использовать свободную RAM для кэша. Поэтому цель «всегда иметь как можно больше свободной памяти» ошибочна. Важно, может ли система быстро освободить кэш и обслужить запросы приложений без постоянной подкачки.

Можно ли отключить файл подкачки или swap

Технически в некоторых системах это возможно, но решение зависит от нагрузки. Без pagefile Windows получает более низкий commit limit и может не создать нужный дамп. Без swap Linux при резком пике раньше столкнётся с отказом выделения и OOM killer, хотя для специализированного сервера такая политика иногда выбрана осознанно.

Аргумент «у меня много RAM» недостаточен. Нужны измеренные peak commit/working set, требования программ, политика дампов, резерв свободного места и проверка поведения при отказе. Для домашнего Windows-компьютера системно управляемый pagefile обычно безопаснее ручной настройки.

Частые мифы

  • «Виртуальная память — это файл на диске». Нет, адресация и отображение страниц работают и без вытеснения в swap.

  • «Page fault означает ошибку». Допустимый fault может быть нормальной частью ленивого выделения или загрузки страницы.

  • «Virtual size показывает расход RAM». Это размер адресных диапазонов, а не обязательно резидентная память.

  • «Любой swap замедляет компьютер». Ненулевой объём не равен активной тяжёлой подкачке.

  • «SSD превращает swap в RAM». Накопитель быстрее HDD, но его задержки и пропускная способность не равны RAM.

  • «Размер страницы всегда 4 КБ». Размер и поддержка huge pages зависят от архитектуры и ОС.

  • «Нужно вручную очистить RAM». Кэш освобождается по требованию; принудительная очистка часто лишь ухудшает следующий доступ.

Ошибки при настройке

  • менять pagefile или swappiness по универсальной формуле без замеров;

  • считать всю занятую RAM проблемой и игнорировать reclaimable cache;

  • оценивать приложение только по virtual size;

  • путать TLB miss с page fault, а minor fault — с чтением swap;

  • отключать подкачку перед диагностикой нестабильности;

  • увеличивать swap вместо устранения утечки памяти;

  • сравнивать метрики Windows, Linux и macOS как полностью одинаковые;

  • делать вывод по одному снимку без наблюдения во времени.

Чек-лист диагностики

  • понятно, какой симптом проверяется и когда он возникает;

  • сняты показатели во время реальной нагрузки;

  • различаются virtual size, resident/working set, commit и swap;

  • проверены major faults и ввод-вывод, а не только общий счётчик faults;

  • найден процесс с растущим рабочим набором;

  • учтены кэш и сжатая память;

  • проверено свободное место для pagefile/swap;

  • до настройки сохранены исходные значения;

  • изменение проверено одинаковым воспроизводимым сценарием;

  • есть план возврата к системным настройкам.

Вывод

Виртуальная память — это прежде всего слой адресации и защиты между процессом и физической RAM. Страницы, таблицы, MMU и TLB делают трансляцию прозрачной, а page faults позволяют ОС лениво выделять память, читать отображённые файлы, возвращать вытесненные страницы и останавливать недопустимый доступ.

Pagefile и swap помогают переживать пики и освобождать RAM, но не заменяют оперативную память и не требуют настройки «на всякий случай». Для практической диагностики важны рабочий набор, commit, memory pressure, major faults и swap I/O в момент реальной нагрузки. Менять параметры стоит только после измерений.

Часто задаваемые вопросы

Что такое виртуальная память простыми словами?

Это механизм, который даёт процессу собственные виртуальные адреса и отображает их на физическую память. Он обеспечивает изоляцию, права доступа, ленивое выделение и совместное использование страниц.

Виртуальная память и файл подкачки — одно и то же?

Нет. Виртуальная память включает адресные пространства, таблицы страниц, защиту и отображение файлов. Pagefile или swap — лишь возможное дисковое хранилище для части страниц.

Что такое page fault?

Это исключение при обращении к странице, которое нельзя завершить текущим отображением. ОС может выделить страницу, прочитать её из файла или swap, выполнить copy-on-write либо завершить процесс при недопустимом доступе.

Каждый page fault замедляет компьютер?

Нет. Minor fault обычно обслуживается без чтения требуемой страницы с накопителя. Major fault требует ввода-вывода и заметно дороже; важны частота и влияние на реальную нагрузку.

Что такое TLB?

TLB — небольшой быстрый кэш трансляций виртуальных страниц в физические фреймы. Он уменьшает число обходов таблиц страниц. Промах TLB не равен page fault.

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

Универсальной формулы нет. Для обычного компьютера разумная отправная точка — System managed. Ручной размер выбирают по пиковому commit, требованиям дампа, приложений и свободному месту.

Нужно ли отключать swap, если много оперативной памяти?

Не обязательно. Отключение меняет поведение при пиках и отказах. Решение принимают по измерениям рабочей нагрузки, политике OOM и требованиям системы, а не только по объёму RAM.

Как понять, что система уходит в подкачку?

Смотрите не только на занятый swap, но и на swap I/O, major faults, memory pressure, задержки и размер рабочих наборов. Постоянное перемещение страниц с падением отзывчивости похоже на thrashing.

Редакционная проверкаРедакция ИзмерьВебМатериал сверен редакцией: проверяем факты, актуальность условий и пользу для читателя.

Комментарии 0

Обсудите материал, задайте вопрос или дополните его своим опытом.

Присоединитесь к обсуждению

Комментарии доступны зарегистрированным пользователям. Почту нужно подтвердить один раз.

Пока нет комментариев

Начните обсуждение: задайте вопрос автору или поделитесь практическим опытом.