Раздел подкачки
Раздел подкачки (англ. swap space, от swap — обмен) — это область на запоминающем устройстве (жёстком диске или твердотельном накопителе), используемая операционной системой для временного хранения данных, которые не помещаются в оперативной памяти (RAM). Раздел подкачки служит расширением оперативной памяти, позволяя системе выполнять больше процессов или работать с данными, превышающими объём физической памяти. В отличие от файла подкачки, который представляет собой обычный файл в файловой системе, раздел подкачки — это отдельный, специально выделенный раздел на диске, не имеющий файловой системы и управляемый напрямую ядром операционной системы.
История
Идея использования дискового пространства для расширения оперативной памяти возникла в 1960-х годах в системах с виртуальной памятью. Одной из первых операционных систем, реализовавших подкачку, стала Atlas Supervisor (1962) в Манчестерском университете. В 1970-х годах механизм подкачки был внедрён в Unix, где он стал стандартным компонентом. В ранних версиях Unix подкачка использовалась для перемещения целых процессов между памятью и диском, что позволяло запускать большее количество задач на машинах с ограниченной RAM.
В 1980-х годах с развитием персональных компьютеров и операционных систем, таких как MS-DOS, подкачка не применялась из-за отсутствия поддержки виртуальной памяти. Однако с появлением Windows 3.0 (1990) и Windows 95 (1995) механизм подкачки стал частью графических операционных систем. В Linux раздел подкачки появился с самого начала разработки ядра (1991) и остаётся важным элементом управления памятью.
Принцип работы
Раздел подкачки работает на основе механизма виртуальной памяти. Когда операционная система обнаруживает, что оперативной памяти недостаточно для размещения всех активных процессов, она перемещает часть данных из RAM в раздел подкачки. Этот процесс называется «свопингом» (swapping) или «выгрузкой». Данные, которые реже всего используются (например, фоновые процессы или неактивные страницы памяти), перемещаются на диск, освобождая место в RAM для более приоритетных задач.
При необходимости доступа к выгруженным данным система выполняет обратную операцию — «подкачку» (swap-in), загружая данные с диска обратно в оперативную память. Поскольку скорость чтения и записи на диск (даже на SSD) значительно ниже, чем у RAM, интенсивное использование раздела подкачки приводит к замедлению работы системы. Это явление называется «трэшинг» (thrashing) — когда система тратит больше времени на обмен данными между RAM и диском, чем на выполнение полезных вычислений.
Классификация
Разделы подкачки можно классифицировать по типу носителя и способу организации.
По типу носителя
- На жёстком диске (HDD). Традиционный вариант. HDD имеют высокую задержку доступа (10–20 мс) и низкую скорость последовательной записи (100–200 МБ/с), что делает подкачку медленной. Используется в системах с большими объёмами данных, где цена хранения важна.
- На твердотельном накопителе (SSD). Современный стандарт. SSD обеспечивают задержку доступа 0,1–0,5 мс и скорость чтения/записи до 5000 МБ/с (NVMe). Подкачка на SSD значительно быстрее, но частые операции записи могут сокращать срок службы накопителя из-за ограниченного ресурса ячеек памяти (P/E cycles).
- На RAM-диске. Редкий вариант, когда раздел подкачки размещается в оперативной памяти (например, в tmpfs). Это даёт максимальную скорость, но снижает доступный объём RAM для приложений. Используется в специализированных системах (например, в некоторых дистрибутивах Linux для ускорения работы).
По способу организации
- Фиксированный раздел подкачки. Выделяется при установке операционной системы и имеет постоянный размер. Изменение размера требует переразметки диска или использования инструментов управления разделами (например, GParted). Преимущество — отсутствие фрагментации и предсказуемость.
- Файл подкачки. Не является разделом в классическом смысле, но выполняет ту же функцию. Файл подкачки может быть изменён в размере динамически (например, в Windows — pagefile.sys, в Linux — swapfile). Удобен для систем, где нет возможности создать отдельный раздел (например, на дисках с уже занятыми разделами). Недостаток — возможная фрагментация и небольшое снижение производительности из-за накладных расходов файловой системы.
Настройка в различных операционных системах
Linux
В Linux раздел подкачки создаётся с помощью утилиты fdisk или gparted. После создания раздела его необходимо отформатировать с помощью команды mkswap и активировать с помощью swapon. Размер раздела подкачки традиционно рекомендуется равным удвоенному объёму RAM (правило 2×), но для современных систем с большим объёмом памяти (16 ГБ и более) это правило часто считается устаревшим. Рекомендуемый размер — от 1 ГБ до 4 ГБ для настольных систем, либо равен объёму RAM для серверов с функцией гибернации (suspend-to-disk), так как образ памяти сохраняется именно в раздел подкачки.
В Linux также существует возможность использования нескольких разделов подкачки и их приоритетов (параметр pri в /etc/fstab). Ядро Linux поддерживает также сжатие данных в разделе подкачки (с помощью модуля zswap или zram), что может уменьшить объём записываемых данных и ускорить работу.
Windows
В Windows функция подкачки реализована через файл подкачки pagefile.sys, который может располагаться на любом разделе NTFS. Размер файла подкачки по умолчанию управляется автоматически (динамическое расширение), но может быть задан вручную через «Свойства системы» → «Дополнительно» → «Быстродействие» → «Параметры» → «Дополнительно» → «Виртуальная память». Рекомендуемый размер — от 1,5 до 3 объёмов RAM. Windows также использует отдельный файл swapfile.sys для приложений из Microsoft Store (UWP), который обычно имеет фиксированный размер около 256 МБ.
macOS
В macOS (ранее OS X) используется файл подкачки, расположенный в /private/var/vm/. Система автоматически управляет его размером, и пользователь не имеет прямого доступа к настройке. Для просмотра состояния подкачки используется команда vm_stat в терминале. В современных версиях macOS (начиная с 10.14 Mojave) активно используется сжатие памяти (memory compression), что снижает необходимость в подкачке.
Применение
Раздел подкачки применяется в следующих сценариях:
- Обеспечение работы при недостатке RAM. Позволяет запускать больше приложений, чем позволяет физическая память. Например, на системе с 4 ГБ RAM можно одновременно работать с браузером, текстовым редактором и несколькими виртуальными машинами, хотя часть данных будет выгружена на диск.
- Гибернация (suspend-to-disk). В Linux образ оперативной памяти сохраняется в раздел подкачки при переходе в режим гибернации. Для этого размер раздела должен быть не меньше объёма RAM.
- Обработка больших объёмов данных. В серверных системах и научных вычислениях подкачка позволяет обрабатывать наборы данных, превышающие объём RAM, за счёт частичного хранения на диске. Однако для высокопроизводительных вычислений подкачка обычно отключается, так как она значительно снижает скорость.
- Тестирование и отладка. Разработчики могут использовать подкачку для симуляции условий нехватки памяти при тестировании приложений.
Критика и ограничения
Раздел подкачки имеет ряд недостатков, которые ограничивают его применение в современных системах:
- Низкая скорость. Даже на быстрых SSD скорость подкачки в десятки раз ниже скорости RAM. Это делает систему неотзывчивой при активном использовании подкачки.
- Износ SSD. Частые операции записи в раздел подкачки могут сокращать срок службы твердотельных накопителей. Современные SSD имеют ресурс в несколько сотен терабайт записи (TBW), что обычно достаточно для типичного использования, но в серверных сценариях с интенсивной подкачкой это может стать проблемой.
- Фрагментация. На HDD раздел подкачки может фрагментироваться, что дополнительно снижает производительность. На SSD фрагментация не влияет на скорость доступа, но может увеличить износ.
- Замена сжатием памяти. Современные операционные системы (Windows 10/11, macOS, Linux с zram) всё чаще используют сжатие оперативной памяти вместо подкачки. Сжатие позволяет хранить больше данных в RAM без обращения к диску, что быстрее и эффективнее.
Интересные факты
- В ранних версиях Unix подкачка была единственным механизмом виртуальной памяти, и процессы полностью перемещались между RAM и диском. Современные системы используют страничную организацию (paging), где выгружаются отдельные страницы памяти размером 4 КБ.
- В Linux существует утилита
swapon --show, которая отображает текущие разделы подкачки и их использование. Командаfree -hпоказывает объём занятой и свободной подкачки. - В некоторых дистрибутивах Linux (например, Ubuntu) при установке предлагается создать раздел подкачки автоматически. В современных версиях (начиная с Ubuntu 17.04) по умолчанию используется файл подкачки, а не отдельный раздел.
- В операционной системе Android раздел подкачки не используется с версии 4.4 (KitKat) из-за проблем с производительностью на флеш-памяти. Вместо этого применяется механизм
zram(сжатие памяти в RAM).
Источники
- Таненбаум Э., Бос Х. «Современные операционные системы». 4-е издание. — СПб.: Питер, 2020.
- Бовет Д., Чезати М. «Ядро Linux. Описание процесса разработки». 3-е издание. — М.: Вильямс, 2011.
- Документация ядра Linux: «Memory Management» (kernel.org/doc/html/latest/admin-guide/mm/index.html).
- Документация Microsoft: «Виртуальная память в Windows» (learn.microsoft.com/ru-ru/windows/win32/memory/virtual-memory).
- Документация Apple: «About the virtual memory system» (developer.apple.com/library/archive/documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →