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

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

2.1. Память и отображения, виртуальное адресное пространство

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

  • выполняющаяся задача должна быть способна обратиться по любому адресу адресного пространства программы, владеющей задачей;

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

Для неразделяемых ресурсов создаются виртуальные двойники. Например, одному принтеру может соответствовать множество виртуальных принтеров, принимающих от задач данные с тем, чтобы впоследствии вывести их на реально существующий принтер. А для виртуальных ресурсов, также требуется память.

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

Рис. 2.1. Память и отображения

Система программирования создаёт виртуальное адресное пространство и преобразует логическое имя в виртуальный адрес. И, наконец, при загрузке программы загрузчиком, входящим в операционную систему, виртуальные адреса пересчитываются в физический адрес реальной ячейки памяти.

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

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

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

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

Рассматривая соотношение объёмов виртуальной памяти VV и физической памяти VР, можно выявить три очевидных случая:

  • VV < VР – ныне практически не встречается, характерно для 16-разрядных машин и предусматривает:

    • деление оперативной памяти на разделы размером по 64 К;

    • загрузку программы в один из разделов

    • применение третьего или четвёртого варианта отображения адресов, причём для разных программ указывается свой базовый адрес, являющийся адресом раздела, в который загружается программа;

  • VV = VР – часто встречающийся случай, характерный для недорогих вычислительных комплексов

  • VV > VР – наиболее часто встречающийся случай, характерный даже для персональных компьютеров и, тем более, для более сложных вычислительных систем.