МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
____________________________
Кафедра ____________________________
РЕФЕРАТ
на тему: «Вытесняющие и невытесняющие стратегии управления памятью»
Выполнил(а): ____________________________
Группа: ____________________________
Проверил(а): ____________________________
2026
Содержание
- 3
- 5
- 7
- 9
1. Память как ресурс: контекст и классификация
Память в вычислительной системе, ресурс конечный, а потребность в ней у процессов практически безгранична. Операционная система выступает арбитром, который распределяет адресное пространство между конкурирующими программами. От того, как устроен механизм управления памятью, зависит, сможет ли система одновременно запустить десятки приложений, не дав им помешать друг другу. Без него один процесс мог бы перезаписать данные другого, и система мгновенно бы рухнула.
Суть управления сводится к решению двух задач. Первая, изоляция. Каждый процесс должен работать в собственном виртуальном адресном пространстве, не имея доступа к чужим областям. Вторая, эффективность: память следует использовать с минимальными потерями, а процессы должны получать её достаточно быстро. Изоляция достигается аппаратными механизмами, такими как страничная трансляция адресов. А вот политика распределения целиком остаётся зоной ответственности ОС.
Все стратегии распределения делятся на два класса по одному ключевому признаку: может ли система принудительно забрать память у процесса. Невытесняющие стратегии работают по принципу «взял, держи». Процесс, получивший блок памяти, владеет им до тех пор, пока сам не освободит его по завершении работы или явном запросе. Система в этот процесс не вмешивается. Вытесняющие стратегии, напротив, позволяют ОС в любой момент изъять ресурс у текущего владельца и передать его другому процессу.
Критерий на первый взгляд простой, но он порождает глубокие различия в поведении всей системы. Невытесняющий подход проще в реализации: не нужно хранить контекст прерванного процесса, не требуется сложный аппаратный механизм для сохранения состояния. Оборотная сторона, процесс, удерживающий память, может простаивать в ожидании ввода-вывода, и тогда ресурс простаивает вместе с ним. В
вытесняющей системе ОС способна оперативно перераспределить память и повысить общую утилизацию. Платить за это приходится накладными расходами на переключение контекста и сложностью алгоритмов.
Выбор конкретной стратегии, всегда компромисс. Системы реального времени, где предсказуемость отклика важнее пропускной способности, тяготеют к невытесняющим схемам: они дают гарантию, что процесс не будет прерван в критический момент. Универсальные ОС, ориентированные на максимальную загрузку оборудования, чаще применяют вытесняющие механизмы, мирясь с их сложностью ради эффективности. Разница становится заметна при анализе таких явлений, как фрагментация: в невытесняющих системах со временем накапливается множество мелких неиспользуемых участков, тогда как вытесняющие позволяют уплотнять память, перемещая страницы.
Понимание этой дихотомии нужно не только теоретикам. Практикующий разработчик, выбирая между простотой и производительностью, должен осознавать, какие последствия повлечёт его решение. Классификация на вытесняющие и невытесняющие стратегии, базовый инструмент анализа. Она помогает увидеть, где система жертвует справедливостью ради эффективности и наоборот. Без такого концептуального каркаса невозможно грамотно проектировать новые операционные системы или настраивать существующие под специфическую нагрузку.
2. Невытесняющие стратегии: принципы и примеры
Невытесняющие стратегии строятся на одном допущении: процесс, однажды получивший память, владеет ею до тех пор, пока сам не сочтёт нужным её освободить. Операционная система не вмешивается в этот процесс и не имеет механизмов для принудительного изъятия ресурса. Это похоже на библиотеку, где читатель берёт книгу и держит её у себя без напоминаний о сроке возврата. Пока он не вернёт том, другие посетители не смогут получить к нему доступ, даже если их запросы более срочные.
В классической теории управления памятью выделяют три базовые стратегии размещения процессов в свободных областях. Первая называется «первый подходящий» (first fit). Алгоритм просматривает список свободных блоков с начала и выделяет первый же фрагмент, размер которого достаточен для запроса. Логика проста: не нужно искать идеальный вариант, берётся то, что попалось первым. Вторая стратегия, «наиболее подходящий» (best fit), действует иначе. Система перебирает все свободные блоки и выбирает тот, чей размер минимально превышает запрошенный. Так сохраняются крупные куски памяти для будущих больших запросов. Третий подход, «наименее подходящий» (worst fit), работает по противоположному принципу: выбирается самый большой свободный блок. Идея в том, чтобы остаток после выделения был достаточно велик для обслуживания следующих процессов.
Главное преимущество всех трёх алгоритмов, простота их реализации. Не требуется ни аппаратной поддержки для сохранения контекста, ни сложных структур данных для отслеживания приоритетов. Диспетчер памяти лишь ведёт список свободных областей и обновляет его при освобождении. Накладные расходы на само выделение минимальны: это обычная операция сравнения размеров. Отсутствует и проблема «вытеснения», когда системе пришлось бы сохранять состояние процесса, освобождать его память и загружать туда другой процесс. В невытесняющей
модели процесс либо работает, либо ждёт, но его память никто не трогает.
Однако за эту простоту приходится платить. Первый и самый очевидный недостаток, возможные длительные ожидания. Если один процесс захватил большой объём памяти и работает с ним долго, остальные процессы могут ждать освобождения ресурса неопределённое время. Ситуация усугубляется тем, что система не может вмешаться и перераспределить память более справедливо. Второй серьёзный минус, фрагментация. При последовательном выделении и освобождении блоков разного размера в памяти образуются небольшие «дыры», суммарный объём которых может быть значительным, но каждый отдельный фрагмент слишком мал для размещения нового процесса. Стратегия «наиболее подходящий» особенно склонна к внутренней фрагментации, поскольку оставляет после себя крошечные остатки, которые вряд ли когда-либо будут использованы. Стратегия «первый подходящий», напротив, часто приводит к внешней фрагментации, когда свободные блоки разбросаны по всей памяти и не могут быть объединены без перемещения данных.
Практическое применение невытесняющих стратегий ограничено системами, где предсказуемость важнее эффективности. Например, в простых встроенных системах с фиксированным набором задач, где объём памяти известен заранее и процессы имеют схожие размеры, такие алгоритмы работают вполне приемлемо. В универсальных операционных системах, таких как Windows или Linux, они не используются в чистом виде из-за серьёзных ограничений по справедливости и утилизации ресурсов. Тем не менее понимание этих стратегий даёт фундаментальную базу: они показывают, как работает управление памятью без вмешательства операционной системы, и оттеняют ценность вытесняющих механизмов, которые рассматриваются далее.
3. Вытесняющие стратегии: механизмы и алгоритмы
Переход от невытесняющих схем очевиден: как только мы допускаем, что процесс может держать память бесконечно долго, система теряет контроль над собственным ресурсом. Вытесняющие стратегии решают эту проблему радикально. Операционная система получает право в любой момент изъять физические страницы у работающего процесса и передать их другому. Это не прихоть разработчика, а необходимость, продиктованная самой природой многозадачности.
Суть механизма проста: у системы есть конечный пул физической памяти, а запросы на неё поступают непрерывно. Когда свободные страницы заканчиваются, ОС выбирает жертву среди уже занятых. Критерий выбора определяет эффективность всей стратегии. Классический подход, FIFO (First In, First Out), где вытесняется самая старая страница, попавшая в память раньше остальных. Реализация тривиальна, нужен лишь циклический буфер, но цена такой простоты высока. Страница, загруженная давно, может активно использоваться прямо сейчас, и её выгрузка вызовет немедленный page fault при следующем обращении.
Гораздо умнее выглядит LRU (Least Recently Used). Логика здесь опирается на принцип локальности: если к странице обращались недавно, вероятно, обратятся снова. Значит, вытеснять нужно ту, к которой дольше всех не было обращений. Этот алгоритм даёт впечатляющие результаты на реальных нагрузках. Однако точная реализация LRU требует фиксации времени каждого доступа к каждой странице, что невозможно без аппаратной поддержки. Поэтому на практике используют приближения, например, алгоритм часов (clock). Он организует страницы в кольцевой список, а каждый элемент несёт бит обращения. Указатель движется по кругу: если бит установлен, он сбрасывается, если нет, страница выбирается для вытеснения. Просто и почти так же эффективно, как теоретический LRU.
Существует и LFU (Least Frequently Used), где учитывается частота обращений. Страница, к которой обращались редко, покидает память первой. Логика привлекательна для долгоживущих данных, но у LFU есть слабое место: страница, интенсивно использовавшаяся в прошлом, может навсегда остаться в памяти, даже если больше не нужна. Счётчики приходится периодически обнулять или масштабировать, что добавляет сложности.
Вытеснение, это не только выбор жертвы. Сам процесс принудительного освобождения памяти требует слаженной работы железа и ОС. Когда система решает выгрузить страницу, она должна сохранить её содержимое в области подкачки на диске, а также зафиксировать полное состояние процесса: значения регистров, счётчик команд, состояние стека. Без механизма сохранения контекста вернуть процесс к исполнению позже было бы невозможно. Аппаратная поддержка здесь критична: нужны биты обращения и модификации в таблицах страниц, чтобы ОС могла определить, менялась ли страница и нужно ли её вообще записывать на диск. Современные процессоры предоставляют эти биты встроенно, что делает вытеснение практичным.
Главный выигрыш от вытесняющих стратегий, предсказуемость. Система может гарантировать, что ни один процесс не монополизирует память, а значит, время отклика на запросы остаётся стабильным. Для интерактивных приложений и систем реального времени это принципиально. Эффективность использования памяти тоже растёт: страницы, которые давно не нужны, освобождаются, а не лежат мёртвым грузом. Разумеется, за это приходится платить накладными расходами на обработку прерываний и запись на диск. Но для большинства современных задач этот компромисс оправдан.
4. Сравнение и влияние на производительность
Переход от описания механизмов к их сопоставлению выглядит естественным шагом. Различия между двумя классами стратегий лежат не столько в том, как именно распределяется память, сколько в цене, которую система платит за контроль над этим процессом. Вытесняющие стратегии позволяют операционной системе в любой момент изъять ресурс у одного процесса и передать его другому. Они демонстрируют более высокую пропускную способность при интенсивных нагрузках. Причина проста: память не простаивает, ожидая, пока медленный или заблокированный процесс соизволит освободить страницы. Однако за эту оперативность приходится расплачиваться.
Накладные расходы вытеснения складываются из двух компонентов. Первый: сама операция принудительного изъятия требует сохранения контекста процесса, обработки прерывания и обновления таблиц страниц. Второй компонент менее очевиден. Алгоритмы вытеснения, будь то LRU или рабочий набор, должны непрерывно отслеживать историю обращений к памяти. Это означает дополнительные обращения к аппаратным счётчикам и периодический сбор статистики. В системах с высокой частотой переключений контекста издержки могут достигать заметной доли процессорного времени. Исследования (например, классическая работа Деннинга о рабочем наборе) показывают, что при чрезмерно агрессивном вытеснении система тратит больше ресурсов на само управление, чем на выполнение полезной работы.
Невытесняющие стратегии лишены этих проблем. Отсутствие механизма принудительного изъятия делает систему предсказуемой: процесс, получивший память, не будет прерван, и его время выполнения не зависит от действий конкурентов. Это упрощает и планировщик, и сам код управления памятью. Однако предсказуемость оборачивается неэффективностью. Процесс, удерживающий память, но использующий лишь малую её часть,
блокирует доступ к остальным страницам для других программ. В результате общий объём полезно используемой памяти падает, а фрагментация растёт.
Ключевой момент: ни одна из стратегий не является абсолютно лучшей. Влияние на производительность определяется рабочей нагрузкой. Для пакетных задач, где процессы выполняются последовательно и до конца, невытесняющий подход даёт почти нулевые накладные расходы и вполне приемлемую утилизацию памяти. В интерактивных системах с большим числом короткоживущих процессов вытеснение необходимо: без него один зависший процесс может «заморозить» значительную часть адресного пространства. Архитектура тоже вносит коррективы. На системах с аппаратной поддержкой виртуальной памяти и быстрыми таблицами страниц стоимость вытеснения снижается, что делает его более привлекательным. В микроконтроллерах без MMU, где каждая операция с памятью дорога, простота невытесняющей схемы часто перевешивает её недостатки.
Практический выбор сводится к приоритетам. Если система работает в реальном времени, где задержка ответа критична, невытесняющие стратегии опасны: никто не гарантирует, что процесс освободит память к нужному моменту. Вытеснение, напротив, позволяет жёстко контролировать сроки. Справедливость тоже играет роль. При невытесняющем распределении процесс, запросивший память первым, получает преимущество, которое может длиться бесконечно. Вытесняющий механизм хотя бы потенциально способен перераспределить ресурс в пользу ожидающих. Но если рабочая нагрузка однородна и все процессы примерно равны по потребностям, сложность вытесняющего управления становится неоправданной. Оптимальная стратегия, как это часто бывает в системном программном обеспечении, находится посередине: базовое невытесняющее распределение для типовых задач и механизм принудительного изъятия для критических ситуаций (например, при нехватке страниц). Такой гибридный подход используют большинство современных операционных систем, и именно он
позволяет балансировать между пропускной способностью и предсказуемостью.
Нужна такая же работа по своей теме? Соберём структуру, текст и источники в этом же оформлении.