Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Системное программное обеспечение. Учебник
.pdf
81
Глава 3. Управление памятью
кэш-памятью. Содержимое кэш-памяти представляет собой
совокупность записей обо всех загруженных в нее элементах
данных. Каждая запись об элементе данных включает адрес,
который этот элемент данных имеет в оперативной памяти,
и управляющую информацию: признак модификации и признак обращения к данным за некоторый последний период времени [4, 6].
Для идентификации переменных и команд используются
символьные имена (метки), виртуальные адреса и физические
адреса.
Символьные имена присваивает пользователь при написании программы на алгоритмическом языке или ассемблере.
Виртуальные адреса вырабатывает транслятор, переводящий программу на машинный язык. Так как во время трансляции в общем случае неизвестно, в какое место оперативной
памяти будет загружена программа, то транслятор присваивает переменным и командам виртуальные (условные) адреса, обычно считая по умолчанию, что программа будет размещена начиная с нулевого адреса. Совокупность виртуальных
адресов процесса называется виртуальным адресным про-
странством. Каждый процесс имеет собственное виртуальное
адресное пространство. Максимальный размер виртуального
адресного пространства ограничивается разрядностью адреса, присущей данной архитектуре компьютера, и, как правило, не совпадает с объемом физической памяти, имеющимся
в компьютере.
Физические адреса соответствуют номерам ячеек оперативной памяти, где в действительности расположены или будут
расположены переменные и команды. Переход от виртуальных
адресов к физическим может осуществляться двумя способами.
Первый способ состоит в том, что замену виртуальных адресов
на физические делает специальная системная программа – перемещающий загрузчик. Перемещающий загрузчик на основании имеющихся у него исходных данных о начальном адресе
физической памяти, в которую предстоит загружать программу, и информации, предоставленной транслятором об адресно-зависимых константах программы, выполняет загрузку
программы, совмещая ее с заменой виртуальных адресов фи-

СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
82
зическими. Второй способ заключается в том, что программа загружается в память в неизмененном виде в виртуальных
адресах, при этом операционная система фиксирует смещение
действительного расположения программного кода относительно виртуального адресного пространства. Во время выполнения программы при каждом обращении к оперативной
памяти выполняется преобразование виртуального адреса в физический. Второй способ является более гибким, он допускает
перемещение программы во время ее выполнения, в то время
как перемещающий загрузчик жестко привязывает программу
к первоначально выделенному ей участку памяти. Вместе с тем
использование перемещающего загрузчика уменьшает накладные расходы, так как преобразование каждого виртуального
адреса происходит только один раз во время загрузки, а во втором случае – каждый раз при обращении по данному адресу [1,
4, 6].
3.3. Организация памяти
Под организацией памяти мы понимаем то, каким образом
представляется и используется память. Одну или несколько
программ помещать в память? Одинаковое количество ячеек
выделять каждой из нескольких программ или разбивать память на части? Разбивать основную память жестким образом
на длительное время либо предусмотреть более динамичное
разбиение, позволяющее вычислительной машине реагировать на изменения программ (их потребности в ресурсах)? Будем ли делить память на блоки, размещаемые в любых свободных участках (дырах) основной памяти? Существуют схемы
систем, построенных по каждому из указанных выше принципов [1, 2, 5]. Какая же стратегия должна быть применена для
достижения оптимальных характеристик?
Стратегии управления памятью определяют, каким образом будет изменена ситуация при различных подходах к решению следующих вопросов [1, 3, 5]: когда помещать новую
программу в память; помещать ее, когда система запросит,
или предупреждать вопросы; будем ли мы размещать программы более плотно или более быстро, чтобы свести к минимуму

83
Глава 3. Управление памятью
потери машинного времени; если нужно поместить в память
новую программу, то какую программу выводить из памяти;
замещать программы, которые дольше всех находятся в памяти, или те, которые дольше всего не использовались?
Стратегии управления памятью определяют, каким образом будет изменена ситуация при различных подходах к решению следующих вопросов [1, 3, 5]: когда помещать новую
программу в память? Помещать ее, когда система запросит,
или предупреждать вопросы? Будем ли мы размещать программы более плотно или более быстро, чтобы свести к минимуму потери машинного времени? Если нужно поместить
в память новую программу, то какую программу выводить
из памяти? Замещать ли программы, которые дольше всех находятся в памяти, или те, которые дольше всего не использовались?
Для эффективного использования ресурсов необходимо
правильно управлять памятью. Стратегии управления памятью направлены на то, чтобы обеспечить наилучшее использование ресурсов основной памяти. Стратегии делятся на следующие категории:
1) стратегии выборки:
а) стратегии выборки по запросу (требованию);
б) стратегии упреждающей выборки;
2) стратегии размещения;
3) стратегии замещения.
Рассмотрим стратегии выборки. Выборка по запросу работающей программы долго считалась наиболее целесообразной,
то есть блок программы или данных загружается в основную
память, когда его запрашивает работающая программа. Позднее стали считать, что упреждающая (с прогнозированием
дальнейшего хода программы) выборка может обеспечить повышение быстродействия системы.
Стратегия размещения ставит целью определить, в какое
место основной памяти следует помещать поступающую программу.
Стратегии замещения определяют, какой блок программы
или данных следует вывести из основной программы («вытолкнуть»).

СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
84
3.4. Связное и несвязное распределение
памяти
При связном распределении памяти каждая программа
должна занимать один сплошной блок ячеек памяти (в первых
вычислительных машинах). С появлением мультипрограммирования с разделами переменного размера стало ясно, что более эффективным может быть несвязное распределение памяти. При несвязном распределении программа разбивается
на ряд блоков или сегментов, которые могут быть размещены
в основной памяти в участках, не обязательно соседствующих
друг с другом. Операционной системе сложнее обеспечивать
несвязное распределение памяти, но преимущество в том, что
если есть ряд небольших свободных участков вместо одного
большого, то операционная система может загрузить и выполнить программу, которой в противном случае пришлось бы
ждать [1, 3, 6].
В мультипрограммных системах несколько пользователей
одновременно «состязаются» за обладание машинными ресурсами. При этом задание, ожидающее в текущий момент завершения операций ввода-вывода, будет уступать центральный
процессор другому заданию, готовому для выполнения вычислений. То есть одновременно выполняются операции и ввода-вывода, и вычисления. Это повышает коэффициент использования
центрального процессора и производительность системы. Но потенциальные возможности мультипрограммирования можно
использовать только в том случае, если в основной памяти компьютера размещается сразу несколько заданий.
В основном все методы управления памятью могут быть
разделены на два класса: методы, которые используют перемещение процессов между оперативной памятью и диском, и методы, которые не делают этого.
Наиболее простым способом управления оперативной памятью является ее деление на несколько разделов фиксиро-
ванной величины. При очевидном преимуществе – простоте
реализации, данный метод имеет существенный недостаток –
жесткость. Так как в каждом разделе может выполняться
только одна программа, то уровень мультипрограммирования

85
заранее ограничен числом разделов, независимо от того, какой размер имеют программы. Даже если программа имеет небольшой объем, она будет занимать весь раздел, что приводит
к неэффективному использованию памяти. С другой стороны,
даже если объем оперативной памяти машины позволяет выполнить некоторую программу, разбиение памяти на разделы
не позволяет сделать этого.
Глава 3. Управление памятью
3.5. Распределение памяти разделами
переменной величины
При распределении памяти разделами переменной величины память машины не делится заранее на разделы. Сначала
вся память свободна. Каждой вновь поступающей задаче выделяется необходимая ей память. Если достаточный объем памяти отсутствует, то задача не принимается на выполнение и стоит в очереди. После завершения задачи память освобождается,
и на это место может быть загружена другая задача. Таким образом, в произвольный момент времени оперативная память
представляет собой случайную последовательность занятых
и свободных участков (разделов) произвольного размера.
По сравнению с методом распределения памяти фиксированными разделами данный метод обладает гораздо большей
гибкостью, но ему присущ очень серьезный недостаток – фраг-
ментация памяти.
Фрагментация – это наличие большого числа несмежных
участков свободной памяти очень маленького размера (фрагментов). Настолько маленького, что ни одна из вновь поступающих программ не может поместиться ни в одном из участков, хотя суммарный объем фрагментов может составить
значительную величину, намного превышающую требуемый
объем памяти.
Одним из методов борьбы с фрагментацией является перемещение всех занятых участков в сторону старших либо
в сторону младших адресов, с тем чтобы вся свободная память образовывала единую свободную область. В дополнение
к функциям, которые выполняет ОС при распределении памяти переменными разделами, в данном случае она должна

СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
86
еще время от времени копировать содержимое разделов из одного места памяти в другое, корректируя таблицы свободных
и занятых областей. Эта процедура называется сжатием. Сжатие может выполняться либо при каждом завершении задачи,
либо только тогда, когда для вновь поступившей задачи нет
свободного раздела достаточного размера. В первом случае требуется меньше вычислительной работы при корректировке таблиц, а во втором – реже выполняется процедура сжатия. Так
как программы перемещаются по оперативной памяти в ходе
своего выполнения, то преобразование адресов из виртуальной
формы в физическую должно выполняться динамическим способом.
В первых мультипрограммных системах основная память разбивалась на ряд разделов фиксированного размера.
В каждом разделе могло размещаться одно задание. Трансляция и загрузка модулей производилась в абсолютных адресах с расчетом на выполнение только в конкретном разделе.
Реализация операционной системы была простой, но неэффективно использовались ресурсы [1, 3, 5]. Использовалось
мультипрограммирование с фиксированными разделами, но
трансляция и загрузка осуществлялась с перемещаемыми модулями, которые могут работать в любом свободном разделе
(раньше приходилось готовому заданию ждать, если раздел
был занят). Это было сложнее, но эффективнее.
При мультипрограммировании с переменными разделами
заданиям выделяется такой объем памяти, какой они требуют,
но в том случае, если механизмы планирования операционной
системы решают, что их необходимо выполнить. В основной памяти здесь также остаются «дыры», то есть свободные участки.
Существует метод уплотнения памяти, состоящий в перемещении всех занятых участков к одному или другому краю
основной памяти. Однако это отнимает ресурсы системы, которые можно было бы использовать более продуктивно.
3.6. Мультипрограммирование со свопингом
Все рассмотренные выше системы мультипрограммирования предполагают, что программы пользователя остаются
в основной памяти до момента завершения. Существует схема,

87
Глава 3. Управление памятью
называемая свопингом, которая не накладывает подобного
требования. Здесь в каждый момент времени в основной памяти размещается только одна программа и работает она до тех
пор, пока не произойдет одно из следующих событий [1, 2, 3]:
• выдан запрос ввода-вывода;
• появился сигнал таймера;
• программа завершилась.
Область свопинга для этой программы копируется во внешнюю память. Образ оперативной памяти для следующей программы загружается в область свопинга, и эта программа работает до тех пор, пока не уступит место следующей программе,
и т.д.
При реализации систем с разделением времени, особенно
первых, применялся свопинг. На основе систем со свопингом,
существовавших в начале 1960-х годов, были созданы системы
со страничной организацией памяти. Затем были разработаны
более сложные системы со свопингом, которые позволяли размещать в основной памяти прикладные программы сразу нескольких пользователей.
3.7. Организация виртуальной памяти
Итак, термин «виртуальная память» связан с возможностью адресовать пространство памяти, превышающее емкость
реальной физической памяти. Существуют два способа реализации виртуальной памяти: страничная и сегментная. Иногда
применяется комбинация этих способов. В целом считается,
что наиболее распространенными способами реализации виртуальной памяти являются страничное, сегментное и странично-сегментное распределения памяти, а также свопинг [6].
Суть концепции виртуальной памяти заключается в том,
что адреса, к которым обращается выполняющийся процесс,
отделяются от адресов, реально существующих в первичной
памяти. Те адреса, на которые делает ссылки выполняющийся процесс, называются виртуальными адресами, а те адреса,
которые существуют в первичной памяти, называются реаль-
ными (или физическими) адресами. Диапазон виртуальных
адресов, к которым может обращаться выполняющийся процесс, называется пространством виртуальных адресов V этого

СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
88
процесса. Диапазон реальных адресов, существующих в конкретной вычислительной машине, называется пространством
реальных адресов R этого компьютера.
Во время выполнения процесса виртуальный адрес необходимо преобразовать в реальный адрес. Причем это нужно
делать быстро, ибо в противном случае производительность
вычислительной машины будет снижаться до неприемлемого
уровня. Для установления соответствия между виртуальными и реальными адресами разработаны разные способы. Распространен способ с применением механизма динамического
преобразования адресов (ДАТ). В этом случае преобразование
виртуальных адресов в физические происходит во время выполнения процесса. Смежные адреса виртуального адресного
пространства процесса при этом не обязательно будут смежными в реальной памяти.
Широкое применение находит многоуровневая организация
виртуальной памяти. В мультипрограммном режиме с совместным использованием (разделением) ресурсов реальной памяти
многими пользователями необходимо обеспечить средства хранения программ и данных в большой вспомогательной памяти.
Обычно реализуется двухуровневая схема построения памяти.
Первый уровень – это реальная память, в которой находятся выполняемые процессы и в которой должны размещаться
данные, чтобы процесс во время работы мог к ним обращаться.
Второй уровень – это внешняя память большой емкости,
способная хранить программы и данные, которые не могут
сразу уместиться в реальной памяти ограниченной емкости.
Механизм динамического преобразования адресов должен
вести таблицы, показывающие, какие ячейки виртуальной памяти в текущий момент времени находятся в реальной памяти
и где именно. Если бы такое отображение осуществлялось пословно или побайтно, то информация об отображении занимала бы много места. Поэтому используется поблочное отображе-
ние. Элементы информации группируются в блоки, и система
следит за тем, в каких местах реальной памяти размещаются
различные блоки виртуальной памяти. Чем больше размер блока, тем меньшую долю емкости реальной памяти приходится
затрачивать на хранение информации отображения.

89
Номер блока b Смещение d
Глава 3. Управление памятью
Формат виртуального адреса в системе табличного отображения имеет следующий вид:
Виртуальный адрес: V = (b, d).
Если блоки имеют одинаковый размер, то они называются
страницами, а организация виртуальной памяти называется
страничной. Если блоки могут быть разных размеров, они на-
зываются сегментами, а организация виртуальной памяти соответственно сегментной. В некоторых системах оба этих подхода
комбинируются, то есть сегменты реализуются как объекты переменных размеров, формируемые из страниц фиксированного
размера. Адреса в системе поблочного отображения являются
двухкомпонентными («двумерными»). Чтобы обратиться к конкретному элементу данных, программа указывает блок, в котором этот элемент располагается, и смещение этого элемента относительно начала блока. Преобразование адреса виртуальной
памяти V = (b, d) в адрес реальной памяти r осуществляется таким образом, как это показано на рис. 3.2.
Регистр начального
адреса таблицы блоков
+
Рис. 3.2. Преобразование виртуального адреса
Адрес блока в
реальной памяти
I
Длина
bʹ
Номер блока b
Смещение d
+
Виртуальный
адрес
V
= (b, d)
r

СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
Номер страницы p Смещение d
90
Каждый процесс имеет собственную таблицу отображения
блоков, которые система ведет в реальной памяти. Реальный
адрес a этой таблицы загружается в специальный регистр центрального процессора, называемый регистром начального
адреса таблицы блоков. Таблица отображения блоков содержит по одной строке для каждого блока процесса, причем эти
строки идут в последовательном порядке: блок 0, блок 1 и т.д.
Номер блока b суммируется с базовым адресом a таблицы, образуя реальный адрес строки таблицы для блока b. Эта строка
содержит реальный адрес b′ блока b в реальной памяти. К этому начальному адресу b′ прибавляется смещение d, и образуется нужный реальный адрес: r = b′ + d.
При страничной организации формат виртуального адреса
следующий:
Виртуальный адрес: V = f(p, d).
Реальная память разделяется на страничные кадры, которые нумеруются. Динамическое преобразование адресов в системе со страничной организацией осуществляется следующим
образом: механизм отображения страниц ищет номер страницы p в таблице отображения страниц и определяет, что эта страница p находится в страничном кадре с номером p′. Адрес реальной памяти формируется затем путем конкатенации p′ и d. Есть
и более сложные способы преобразования адресов страниц.
Коллективное использование программ и данных в системе со страничной организацией осуществляется в мультипро-
граммных вычислительных машинах, чаще всего в системах
с разделением времени, когда многие пользователи выполняют
одни и те же программы. Эти программы обычно состоят из отдельных частей, области данных и области процедур. Бывают
изменяемые и неизменяемые процедуры и данные. Изменяе-
мые данные коллективно использовать нельзя, а неизменяемые
данные (таблицы) можно. Решение проблемы коллективного
использования программ и данных состоит в том, чтобы коллективно (совместно) использовать (разделять) те страницы, которые можно разделять [1, 4, 5].
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
