Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы построения операционных систем.doc
Скачиваний:
50
Добавлен:
07.11.2018
Размер:
5.07 Mб
Скачать

3.1. Простое непрерывное распределение

Одной из возможных стратегий управления памятью является минимизация затрат на ее собственную реализацию. Это легко достигается последовательным предоставлением памяти пользователям, когда в каждый конкретный момент времени допускается существование только одной пользовательской программы.

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

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

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

Простое непрерывное распределение памяти вызывает два основных вида потерь. Во-первых, невозможно использовать процессор, когда пользователь ждет, например, конца чтения входных данных. В связи с этим теряется время, так как ни одна из задач пользователя не выбирается из пакета работ. Во-вторых, не используется часть оперативной памяти, которая не занята ядром и текущей программой пользователя, как показано на рис. 3.1.

Рис. 3.1. Простое непрерывное распределение

Размер программ в обычном случае ограничивается емкостью имеющейся основной памяти, однако существует возможность выполнения программ, превышающих по размеру основную память, благодаря использованию так называемых оверлейных структур. Этот подход иллюстрируется рис.3.2.

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

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