Замещение адресного пространства

Стратегии распределения памяти.

Следует ли назначать каждому процессу одну непрерывную область физической памяти или можно выделять память «кусками»? Должны ли сегменты программы, загруженные в память, находиться на одном месте в течение всего периода выполнения процесса или можно ее время от времени сдвигать? Что делать, если сегменты программы не помещаются в имеющуюся память? Разные ОС по-разному отвечают на эти и другие базовые вопросы управления памятью. При распределении памяти ОС может руководствоваться различными стратегиями.

Простое непрерывное распределение – это самая простая схема, согласно которой вся память условно может быть разделена на три части:

- область, занимаемая ОС;

- область, в которой размещается исполняемая задача;

- незанятая ничем (свободная) область памяти.

Изначально являясь самой первой схемой, она продолжает и сегодня быть достаточно распространен-

ной. Эта схема предполагает, что ОС не поддерживает мультипрограммирование, поэтому не возни-

кает проблемы распределения памяти между несколькими задачами. Эта стратегия предполагает,

что все ресурсы вычислительной системы выделяются одному процессу или одному заданию.

Недостаток: крайне неэффективное использование ресурсов вычислительной системы. Очевид-

ны два вида потерь вычислительных ресурсов:

- потеря процессорного времени, потому что процессор простаивает, пока задача ожидает заверше-

ния операций ввода/вывода;

- потеря самой оперативной памяти, потому что не каждая программа использует всю память.

В каждый момент времени в оперативной памяти находится одно задание. Задание загружается в

оперативную память на момент времени q. В течение времени q все ресурсы вычислительной систе-

мы предоставляются заданию. По окончании времени q задание выгружается из памяти и записыва-

ется во внешнее запоминающее устройство. Замещение адресного пространства – это простейший

способ реализации мультипрограммного режима работы (иллюзия мультипрограммного процесса).

Чтобы для задач отвести как можно больший объем памяти, ОС строится таким

образом, что постоянно в ОП располагается только самая нужная ее часть. Эту часть ОС стали называть ядром. Остальные модули ОС могут быть обычными диск-резидентными (или транзитными), т.е. загружаться в ОП только по необходимости, и после своего выполнения вновь освобождать память.

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

Рисунок 3. Классификация методов распределения памяти

При простом непрерывном распределении памяти можно также применить метод с использованием внешней памяти.

Если есть необходимость создать программу, логическое (и виртуальное) адресное пространство которой должно быть больше, чем свободная область памяти, или даже больше, чем весь возможный объем оперативной памяти, то используется распределение с перекрытием (так называемые оверлейные структуры - от overlay — перекрытие, расположение поверх чего-то).Этот метод распределения предполагает, что вся программа может быть разбита на части — сегменты. Каждая оверлейная программа имеет одну главную часть (main) и несколько сегментов (segment), причем в памяти машины одновременно могут находиться только ее главная часть и один или несколько не перекры­вающихся сегментов.

Пока в оперативной памяти располагаются выполняющиеся сегменты, остальные находятся во внешней памяти. После того как текущий (выполняющийся) сегмент завершит свое выполнение, возможны два варианта. Либо он сам (если данный сегмент не нужно сохранить во внешней памяти в его текущем состоянии) обращается к ОС с указанием, какой сегмент должен быть загружен в память следующим. Либо он возвращает управление главному сегменту задачи (в модуль main), и уже тот обращается к ОС с указанием, какой сегмент сохранить (если это нужно), а какой сегмент загрузить в ОП, и вновь отдает управление одному из сегментов, располагающихся в памяти. Простейшие схемы

сегментирования предполагают, что в памяти в каждый конкретный момент времени может располагаться только один сегмент (вместе с модулем main). Более сложные схемы, используемые в больших вычислительных системах, позволяют располагать по несколько сегментов. В некоторых вычислитель­ных комплексах могли существовать отдельно сегменты кода и сегменты данных. Сегменты кода, как правило, не претерпевают изменений в процессе своего исполнения, поэтому при загрузке нового сегмента кода на место отработавшего последний можно не сохранять во внешней памяти, в отличие от сегментов данных, которые сохранять необходимо.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: