Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
конспект ОС.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
664.06 Кб
Скачать

Управление памятью в операционных системах. Методы разрывного распределения памяти

Содержание лекции:

- сегментный способ организации виртуальной памяти.

Цель лекции:

- ознакомиться с методами разрывного распределения памяти.

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

Первым среди разрывных методов распределения памяти был сегментный. Для этого метода программу необходимо разбивать на части и уже каждой такой части выделять физическую память. Естественным способом разбиения программы на части является разбиение ее на логические элементы – так называемые сегменты. В принципе, каждый программный модуль может быть принят как отдельный сегмент, а вся программа будет представлять собой множество сегментов. Каждый сегмент размещается в памяти как до определенной степени самостоятельная единица. Логически обращение к элементам программы в этом случае будет состоять из имени сегмента и смещения относительно начала этого сегмента. Физически имя сегмента (или порядковый номер) будет соответствовать некоторому адресу, с которого этот сегмент начинается при его размещении в памяти, и смещение должно прибавляться к этому базовому адресу.

Преобразование имени сегмента в его порядковый номер осуществит система программирования. Для каждого сегмента система указывает его объем. ОС будет размещать сегменты в памяти и для каждого сегмента она должна вести учет о местонахождении этого сегмента. Информация о текущем размещении сегментов задачи в памяти сводится в таблицу сегментов (таблицу дескрипторов сегментов задачи). Каждая задача имеет свою таблицу сегментов. Рисунок В1 иллюстрирует случай обращения к ячейке, виртуальный адрес которой равен сегменту с номером 11 со смещением от начала этого сегмента, равным 612. ОС разместила сегмент в памяти, начиная с ячейки с номером 19700. Виртуальный адрес для этого способа будет состоять из двух полей – номера сегмента и смещения относительно начала сегмента. Каждый сегмент, размещаемый в памяти, имеет соответствующую информационную структуру, называемую дескриптором сегмента. ОС строит для каждого исполняемого процесса соответствующую таблицу дескрипторов сегментов, и при размещении каждого из сегментов в оперативной или внешней памяти отмечает в дескрипторе текущее местоположение сегмента. Если сегмент задачи в данный момент находится в ОП, то об этом делается пометка в дескрипторе, для чего используется бит присутствия Р (present). В этом случае в поле адреса диспетчер памяти записывает адрес физической памяти, с которого сегмент начинается, а в поле длины сегмента (limit) указывается количество адресуемых ячеек памяти. Это поле используется не только для того, чтобы размещать сегменты без наложения друг на друга, но и чтобы контролировать, не обращается ли код исполняющейся задачи за пределы текущего сегмента. В случае превышения длины сегмента вследствие ошибок программирования говорят о нарушении адресации и с помощью введения специальных аппаратных средств генерируют сигналы прерывания, которые позволят фиксировать (обнаруживать) такого рода ошибки. Если бит присутствия в дескрипторе указывает, что сегмент находится не в оперативной, а во внешней памяти (например, на жестком диске), то названные поля адреса и длины используются для указания адреса сегмента в координатах внешней памяти. Помимо информации о местоположении сегмента, в дескрипторе сегмента содержатся данные о его типе, правах доступа к этому сегменту (можно или нельзя его модифицировать, предоставлять другой задаче), отметка об обращениях к данному сегменту.

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

Увеличение коэффициента мультипрограммирования позволяет увеличить загрузку системы и более эффективно использовать ресурсы вычислительной системы. Однако увеличивать количество задач можно только до определенного предела, ибо если в памяти не будет хватать места для часто используемых сегментов, то производительность системы резко упадет, т.к. сегмент, находящийся вне ОП, для участия в вычислениях должен быть перемещен в ОП. При этом если в памяти есть свободное пространство, то необходимо лишь найти нужный сегмент во внешней памяти и загрузить его в оперативную. А если свободного места нет, принять решение – на место какого из сегментов будет загружаться требуемый. Перемещение сегментов из ОП на жесткий диск и обратно называют свопингом сегментов. Для решения проблемы замещения (определения того сегмента, который должен быть либо перемещен во внешнюю память, либо просто замещен новым) используются следующие дисциплины:

1) правило FIFO (First In First Out – первый пришедший первым и выбывает) - для замещения выбирается сегмент, первым попавший в память. Каждый вновь размещаемый в очереди сегмент добавляется в конец. Алгоритм учитывает только время нахождения в памяти сегмента, а не фактическое использование. Если первые загруженные сегменты содержат переменные, используемые на протяжении всей работы, то возникает необходимость возвращения только что выгруженного сегмента.

2) правило LRU (Least Recently Used – дольше других неиспользуемый);

3) правило LFU (Least Frequently Used – реже других используемый);

- для реализации 2 и 3 необходимо, чтобы процессор имел дополнительные аппаратные средства. Диспетчер памяти время от времени просматривает таблицы дескрипторов исполняющихся задач и собирает для соответствующей обработки статистическую информацию об обращениях к сегментам. В результате составляется список, упорядоченный либо по длительности простоя (2), либо по частоте использования (3).

4) случайный (random) выбор сегмента.

Дисциплины 1 и 4 являются самыми простыми в реализации, но не учитывают насколько часто используется тот или иной сегмент, следовательно, диспетчер памяти может выгрузить или расформировать от сегмент, к которому в ближайшем будущем будет обращение. Хотя достоверной информации о том, какой из сегментов потребуется в ближайшем будущем, в общем случае нет, вероятность ошибки в 1 и 4 больше, чем во 2 и 3 дисциплинах.

Важнейшая проблема при организации мультипрограммного режима – защита памяти. Для этого код ОС должен выполняться в некотором привилегированном режиме, из которого можно осуществлять манипуляции дескрипторами сегментов, тогда как выход за пределы сегмента в обычной прикладной программе должен вызывать прерывание по защите памяти. Каждая прикладная программа должна иметь возможность обращаться только к собственным и к общим сегментам.

Достоинства, появляющиеся при сегментном способе организации виртуальной памяти: при загрузке программы на исполнение можно размещать ее в памяти не целиком, а «по мере необходимости»; некоторые модули могут быть разделяемыми (т.к. они являются сегментами, легко организовать доступ к этим общим сегментам с помощью указателей).

Недостатки метода: для доступа к искомой ячейке тратится много времени, для устранения используется кэширование – размещение в сверхоперативной памяти; несмотря на то, что наблюдается существенно меньшая фрагментация, чем при неразрывном распределении памяти, она все же есть; на размещение и обработку дескрипторных таблиц тратится много процессорного времени и памяти.

ЛЕКЦИЯ № 12