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

Глава 4. Организация памяти в современных ос

§ 4.1. Общие принципы организации памяти

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

возможна работа на персональном компьютере. Поэтому изучение механизмов исполь-

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

аналогично изучению механизмов многопоточности, событий, прерываний и т.п. С по-

явлением первых поколений ЭВМ в них было введено понятие оперативной памяти,

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

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

можно обратиться, указав ее порядковый номер (адрес). Количество ячеек физической

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

данные и помещает в нее результаты вычислений. Одновременно с этим, с точки зрения

программиста, ОП - область, с которой можно работать с помощью некоторого набора

логических имен (переменных), которые могут быть символьными или числовыми. Сле-

дует отметить, что множество переменных неупорядочено, хотя отдельные элементы и

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

менных и входных точек программных модулей составляют пространство имен.

Операционная система должна связать каждое указанное пользователем имя с фи-

зической ячейкой памяти, то есть осуществить отображение пространства имен на физи-

ческую память компьютера. В общем случае это отображение осуществляется в два эта-

па, представленных на рис.4.1 [2]: сначала системой программирования, а затем

операционной системой, управляющей соответствующими аппаратными средствами. В

современных ОС переход с первого этапа на второй осуществляется через промежуточ-

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

допустимых значений виртуального адреса для некоторой программы определяет ее

виртуальное адресное пространство или виртуальную память. Виртуальное адрес-

ное пространство зависит прежде всего от архитектуры процессора и от системы про-

граммирования и практически не зависит от объема реальной физической памяти, уста-

новленной в персональном компьютере.

Любая система программирования осуществляет трансляцию и компоновку про-

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

программирования полученные виртуальные адреса могут иметь как двоичную форму,

так и символьно-двоичную, то есть некоторые программные модули и их переменные

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

не могут быть определены, имеют по-прежнему символьную форму и их окончательная

привязка к физическим ячейкам будет осуществлена на этапе загрузки программы в па-

мять перед ее непосредственным выполнением.

Одним из частных случаев отображения пространства имен на физическую память

[2] является тождественность виртуального адресного пространства физической

памяти. При этом нет необходимости осуществлять второе отображение. В данном

случае говорят, что система программирования генерирует абсолютную двоичную про-

грамму; в этой программе все двоичные адреса таковы, что программа может испол-

няться только в том случае, если ее виртуальные адреса будут точно соответствовать

физическим. Часть программных модулей любой операционной системы обязательно

должны быть абсолютными двоичными программами. Эти программы размещаются по

фиксированным адресам и с их помощью далее можно реализовывать размещение ос-

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

личных свободных физических адресах.

92

Рис.4.1. Связь переменной с физической памятью

Если рассматривать общую схему двухэтапного отображения адресов, то с пози-

ции соотношения объемов упомянутых адресных пространств можно отметить наличие

следующих трех ситуаций [2]:

• объем виртуального адресного пространства программы VVменьше объема физиче-

ской памяти Vp;

• V = Vp;

• V > Vp.

Первая ситуация, при которой VV < Vp, в настоящее время практически не встре-

чается, но тем не менее это реальное соотношение. Скажем, не так давно 16-разрядные

мини-ЭВМ имели систему команд, в которых пользователи-программисты могли адре-

совать до 216=64K адресов (обычно в качестве адресуемой единицы выступала ячейка

памяти размером 1 байт). А физически старшие модели этих мини-ЭВМ могли иметь

объем оперативной памяти в несколько мегабайт. Обращение к памяти столь большого

объема осуществлялось с помощью специальных регистров, содержимое которых скла-

дывалось с адресом операнда (или команды), извлекаемым и/или определяемым из поля

операнда (или из указателя команды). Соответствующие значения в эти специальные

регистры, выступающие как базовое смещение в памяти, заносила операционная систе-

ма. Для одной задачи в регистр заносилось одно значение, а для второй (третьей, четвер-

той и т. д.) задачи, размещаемой одновременно с первой, но в другой области памяти,

заносилось, соответственно, другое значение. Вся физическая память, таким образом,

разбивалась на разделы объемом по 64 Кбайт, и на каждый такой раздел осуществля-

лось отображение своего виртуального адресного пространства.

Ситуация, когда VV = Vp, еще совсем недавно (80-90-е годы XX века) встречалась

достаточно часто, особенно характерна она была для недорогих вычислительных ком-

93

плексов. Для этого случая имелось большое количество способов распределения опера-

тивной памяти.

Наконец, в настоящее время наиболее вероятной является ситуация VV > Vp. Реа-

лизовано несколько способов распределения памяти для этого случая, отличающихся

как сложностью, так и эффективностью. Все эти способы можно разделить на две боль-

шие группы - непрерывные и разрывные [2, 5]. В первом случае каждая задача размеща-

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

занных между собой областей. Рассмотрим наиболее известные способы распределения

памяти.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]