Область подкачки
Область подкачки (также файл подкачки, своп-файл, своп-раздел, от англ. swap) — это область на запоминающем устройстве (жёстком диске, твердотельном накопителе), используемая операционной системой для временного хранения данных, которые не помещаются в оперативную память (ОЗУ). Область подкачки является частью механизма виртуальной памяти, позволяющего выполнять программы, требующие большего объёма памяти, чем физически доступно в системе.
История
Концепция виртуальной памяти и подкачки (свопинга) возникла в 1960-х годах в рамках развития многозадачных операционных систем. Одной из первых систем, реализовавших подкачку, была Atlas (Великобритания, 1962), где использовалась страничная организация памяти. В 1970-х годах механизм подкачки стал стандартным элементом Unix-подобных систем, включая BSD и System V. В операционной системе Linux область подкачки появилась в ранних версиях ядра (1991–1992) и первоначально реализовывалась как отдельный раздел диска. В Windows 3.0 (1990) был впервые введён файл подкачки (386spart.par), который в Windows 95 стал называться win386.swp, а в Windows NT/2000/XP — pagefile.sys. В современных версиях Windows (начиная с Vista) используется файл pagefile.sys, а также дополнительный файл swapfile.sys для приложений из Магазина Windows.
Принцип работы
Область подкачки используется операционной системой для вытеснения (свопинга) страниц памяти из ОЗУ на диск, когда физическая память заполнена. Процесс включает следующие этапы:
- Мониторинг использования памяти: ядро ОС отслеживает, какие страницы памяти активно используются процессами, а какие — редко или не используются.
- Вытеснение: при нехватке ОЗУ ядро выбирает страницы, которые не использовались дольше всего (алгоритм LRU — Least Recently Used), и копирует их в область подкачки. Сама страница в ОЗУ помечается как «выгруженная».
- Освобождение ОЗУ: физическая память, занятая выгруженной страницей, освобождается и может быть выделена другим процессам.
- Подкачка обратно: когда процесс обращается к странице, которая была выгружена, возникает страничное прерывание (page fault). Ядро считывает страницу из области подкачки обратно в ОЗУ, возможно, вытесняя другую страницу.
Область подкачки не является расширением ОЗУ в прямом смысле, так как скорость доступа к диску (особенно к HDD) на несколько порядков ниже скорости доступа к ОЗУ. Активное использование подкачки (т.н. «трэшинг» — thrashing) приводит к резкому замедлению работы системы.
Виды областей подкачки
Раздел подкачки (swap partition)
Отдельный раздел на диске, выделенный исключительно для подкачки. Используется в Unix-подобных системах (Linux, macOS, BSD). Преимущества: отсутствие фрагментации файловой системы, гарантированный размер, возможность использования в качестве области для гибернации. Недостатки: сложность изменения размера (требуется переразметка диска).
Файл подкачки (swap file)
Файл в существующей файловой системе, используемый для подкачки. Используется в Windows (pagefile.sys, swapfile.sys), а также может применяться в Linux (начиная с ядра 2.6). Преимущества: гибкость изменения размера, возможность создания на любом разделе, отсутствие необходимости в переразметке диска. Недостатки: потенциальная фрагментация, накладные расходы на работу с файловой системой.
Сжатая память (zRAM, zSwap)
Технология, при которой часть ОЗУ сжимается (алгоритмами LZ4, LZO, ZSTD) и используется как область подкачки. Фактически данные не выгружаются на диск, а хранятся в сжатом виде в оперативной памяти. Используется в Linux (zRAM, zSwap) и в macOS (Memory Compression). Позволяет увеличить эффективный объём памяти без снижения скорости доступа, но требует дополнительных вычислительных ресурсов на сжатие/распаковку.
Настройка в популярных операционных системах
Linux
В Linux область подкачки может быть как разделом, так и файлом. Для управления используются утилиты swapon, swapoff, mkswap. Размер подкачки традиционно рекомендуется равным объёму ОЗУ (для гибернации) или 1–2 ГБ для систем с большим объёмом памяти. В современных дистрибутивах (например, Ubuntu) часто используется файл подкачки /swapfile. Параметр vm.swappiness (от 0 до 100) регулирует склонность ядра к использованию подкачки: значение 0 минимизирует подкачку, 100 — максимизирует.
Windows
В Windows используется файл подкачки pagefile.sys, расположенный в корне системного диска (обычно C:). Размер по умолчанию управляется автоматически (динамический), но может быть задан вручную в настройках производительности (Панель управления → Система → Дополнительные параметры системы → Быстродействие → Параметры → Дополнительно → Виртуальная память). Рекомендуемый размер — от 1 до 1,5 объёма ОЗУ. Также существует файл swapfile.sys (для приложений UWP), который обычно имеет фиксированный размер.
macOS
В macOS используется раздел подкачки (в ранних версиях) или файл /private/var/vm/swapfile* (в современных версиях). Управление автоматическое, пользователь не может напрямую изменять размер подкачки. Начиная с macOS Mavericks (2013), используется сжатие памяти (Memory Compression), что снижает потребность в подкачке.
Влияние на производительность
Использование области подкачки может как улучшить, так и ухудшить производительность системы:
- Положительное влияние: позволяет запускать программы, требующие больше памяти, чем доступно физически; даёт возможность системе продолжать работу при временных пиках нагрузки на память; позволяет использовать гибернацию (сохранение содержимого ОЗУ на диск).
- Отрицательное влияние: при активной подкачке (трэшинге) производительность резко падает из-за медленного доступа к диску; на SSD-накопителях частая запись в область подкачки может сокращать срок службы накопителя; подкачка занимает дисковое пространство.
Для систем с SSD-накопителями и большим объёмом ОЗУ (16 ГБ и более) часто рекомендуется уменьшить размер подкачки или отключить её полностью, если это не требуется для гибернации или специфических приложений.
Безопасность
Область подкачки может содержать конфиденциальные данные (пароли, ключи шифрования, содержимое документов), так как в неё выгружаются страницы памяти процессов. Для защиты рекомендуется:
- Шифрование области подкачки: в Linux — с помощью LUKS или
cryptswap; в Windows — шифрование файла подкачки через BitLocker или настройки реестра (ClearPageFileAtShutdown). - Очистка подкачки при завершении работы: в Windows — параметр «Очистка файла подкачки при завершении работы»; в Linux — опция
swapoff -aперед выключением. - Отключение подкачки для систем с высокими требованиями к безопасности (например, для серверов с шифрованием в оперативной памяти).
Интересные факты
- В ранних версиях Linux (до ядра 2.6) файл подкачки не поддерживался, использовались только разделы.
- В Windows 95/98/Me файл подкачки назывался
win386.swpи мог быть расположен в любом месте. - В некоторых встраиваемых системах (например, на базе OpenWrt) область подкачки может располагаться на USB-накопителе или в сжатой памяти (zRAM).
- В суперкомпьютерах и высокопроизводительных кластерах подкачка обычно отключена, так как задержки доступа к диску неприемлемы.
Источники
- Таненбаум Э., Бос Х. «Современные операционные системы» (4-е издание). — СПб.: Питер, 2015.
- Бовет Д., Чезати М. «Ядро Linux. Описание процесса разработки» (3-е издание). — М.: Вильямс, 2007.
- Документация Microsoft: «Виртуальная память в Windows» (Windows Server, Windows 10/11).
- Документация Apple: «About the virtual memory system» (macOS Developer Library).
- Документация Linux Kernel: «Memory Management» (kernel.org/doc).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →