Подкачка страниц¶
Подкачка страниц (англ. paging) — это механизм управления виртуальной памятью, реализуемый операционной системой, при котором виртуальное адресное пространство процесса делится на блоки фиксированного размера (страницы), а физическая память — на блоки того же размера (кадры или фреймы). Подкачка позволяет выполнять программы, размер которых превышает объём доступной физической оперативной памяти (ОЗУ), за счёт временного перемещения неиспользуемых страниц на вторичное хранилище (обычно жёсткий диск или твердотельный накопитель). Данный процесс является основой для реализации виртуальной памяти, обеспечивая изоляцию процессов и эффективное использование физической памяти.
¶История
Концепция виртуальной памяти и подкачки страниц была разработана в 1960-х годах в рамках проекта по созданию вычислительной машины Atlas в Манчестерском университете (Великобритания). Система Atlas, введённая в эксплуатацию в 1962 году, впервые применила механизм страничной организации памяти, который позволял автоматически управлять перемещением данных между оперативной памятью и магнитным барабаном. В 1970-х годах подкачка страниц стала стандартным компонентом операционных систем общего назначения, таких как MULTICS и UNIX. В операционной системе UNIX, разработанной в Bell Labs, механизм подкачки был реализован в версии V7 (1979 год). В 1980-х годах подкачка страниц была интегрирована в операционные системы для персональных компьютеров, включая Microsoft Windows (начиная с Windows 3.0, 1990 год) и Linux (с версии ядра 1.0, 1994 год). В современных системах подкачка страниц остаётся ключевым элементом управления памятью, хотя её роль изменилась с увеличением объёмов ОЗУ и скорости вторичных накопителей.
¶Принцип работы
Подкачка страниц основана на преобразовании виртуальных адресов, генерируемых процессором, в физические адреса с помощью таблицы страниц. Каждый процесс имеет собственное виртуальное адресное пространство, разбитое на страницы. Когда процесс обращается к виртуальному адресу, аппаратный блок управления памятью (MMU) проверяет, присутствует ли соответствующая страница в физической памяти. Если страница находится в ОЗУ, MMU преобразует виртуальный адрес в физический и выполняет доступ. Если страница отсутствует, возникает исключение, называемое страничным сбоем (page fault). Операционная система обрабатывает это исключение: загружает недостающую страницу с диска в свободный кадр физической памяти, обновляет таблицу страниц и возобновляет выполнение инструкции.
¶Алгоритмы замещения страниц
При отсутствии свободных кадров в физической памяти операционная система вытесняет одну из существующих страниц на диск. Выбор страницы для вытеснения осуществляется по определённому алгоритму. Наиболее распространённые алгоритмы:
- FIFO (First In, First Out) — вытесняется страница, находившаяся в памяти дольше всех.
- LRU (Least Recently Used) — вытесняется страница, к которой дольше всего не было обращений.
- Clock (или Second Chance) — модификация FIFO, при которой страницы, к которым недавно был доступ, получают «второй шанс».
- Алгоритм Нильса — вытесняется страница, которая не будет использоваться в ближайшем будущем (теоретически оптимальный, но практически нереализуемый из-за необходимости предсказания).
В современных операционных системах чаще всего используются приближения LRU, такие как алгоритм «рабочего набора» (working set) или алгоритм с использованием битов доступа и модификации.
¶Классификация
Подкачка страниц может быть классифицирована по нескольким признакам:
¶По способу выделения страниц
- Страничная организация с фиксированным размером — все страницы имеют одинаковый размер (например, 4 КБ в x86-архитектуре). Это стандартный подход.
- Страничная организация с переменным размером (сегментно-страничная) — комбинация сегментации и страничной организации, где сегменты делятся на страницы фиксированного размера.
¶По типу подкачки
- Подкачка по требованию (demand paging) — страницы загружаются в память только при обращении к ним. Это основной режим в современных ОС.
- Упреждающая подкачка (prepaging) — страницы, которые, по прогнозу, скоро понадобятся, загружаются заранее. Используется реже из-за сложности прогнозирования.
¶По месту хранения
- Дисковая подкачка — страницы хранятся на жёстком диске или SSD. Это наиболее распространённый вариант.
- Сетевая подкачка — страницы хранятся на удалённом сервере (используется в распределённых системах и облачных вычислениях).
¶Характеристики
¶Размер страницы
Размер страницы варьируется в зависимости от архитектуры процессора. В x86-архитектуре стандартный размер страницы составляет 4 КБ, но поддерживаются также большие страницы (2 МБ и 1 ГБ). В архитектуре ARM распространены размеры 4 КБ, 16 КБ и 64 КБ. Выбор размера страницы влияет на эффективность использования памяти: мелкие страницы уменьшают внутреннюю фрагментацию, но увеличивают размер таблиц страниц; крупные страницы снижают накладные расходы на управление, но могут приводить к неэффективному использованию памяти.
¶Производительность
Подкачка страниц может существенно влиять на производительность системы. Частые страничные сбои (thrashing) приводят к тому, что большая часть времени процессора тратится на обработку сбоев и обмен данными с диском, а не на выполнение приложений. Для снижения вероятности трешинга операционные системы используют механизмы рабочего набора (working set) — набора страниц, активно используемых процессом в данный момент. Если суммарный размер рабочих наборов всех процессов превышает объём физической памяти, система может принудительно приостанавливать или завершать процессы.
¶Применение
Подкачка страниц используется во всех современных операционных системах общего назначения, включая:
- Microsoft Windows — файл подкачки (pagefile.sys) расположен на системном диске. Размер управляется автоматически или задаётся администратором.
- Linux — раздел подкачки (swap partition) или файл подкачки (swap file). Размер обычно равен 1–2 объёма ОЗУ, но может варьироваться.
- macOS — динамический файл подкачки, управляемый ядром XNU.
- Android — использует механизм zRAM (сжатие страниц в оперативной памяти) для уменьшения обращения к диску.
Подкачка страниц также применяется в виртуализации (например, в гипервизорах VMware и KVM) для управления памятью гостевых систем.
¶Критика
Подкачка страниц подвергается критике по нескольким причинам:
- Замедление работы — при недостатке ОЗУ подкачка может приводить к значительному снижению производительности, особенно на механических жёстких дисках.
- Износ накопителей — частая запись на SSD сокращает срок службы устройства из-за ограниченного числа циклов перезаписи.
- Сложность управления — неправильная настройка размера файла подкачки может привести к нестабильной работе системы.
- Безопасность — данные, выгруженные на диск, могут оставаться в файле подкачки после завершения процесса, что создаёт риск утечки конфиденциальной информации. Для защиты используются шифрование файла подкачки (например, в Windows — BitLocker, в Linux — dm-crypt).
В современных системах с большими объёмами ОЗУ (16 ГБ и более) подкачка часто отключается или используется только для аварийных ситуаций, однако для серверов и систем с ограниченной памятью она остаётся необходимой.
¶Интересные факты
- В операционной системе Windows файл подкачки по умолчанию имеет размер, равный объёму ОЗУ. В Linux рекомендуется устанавливать размер swap равным 1–2 объёма ОЗУ, но для систем с более чем 8 ГБ памяти это правило часто игнорируется.
- В архитектуре x86-64 размер страницы по умолчанию составляет 4 КБ, но процессоры поддерживают большие страницы (2 МБ и 1 ГБ), которые используются для ускорения работы приложений, интенсивно использующих память (например, баз данных и виртуальных машин).
- В некоторых встраиваемых системах (например, на базе микроконтроллеров) подкачка страниц не применяется из-за отсутствия аппаратного MMU.
¶Источники
- Таненбаум Э., Бос Х. Современные операционные системы. — 4-е изд. — СПб.: Питер, 2015. — 1120 с.
- Сильбершатц А., Гэлвин П., Гэгн Г. Операционные системы: концепции и проектирование. — 9-е изд. — М.: Вильямс, 2013. — 1088 с.
- Документация Microsoft Windows: Управление памятью и файл подкачки.
- Документация Linux Kernel: Memory Management (mm).
- Patterson D., Hennessy J. Computer Organization and Design: The Hardware/Software Interface. — 5th ed. — Morgan Kaufmann, 2013. — 800 p.