Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2136

.pdf
Скачиваний:
0
Добавлен:
15.11.2022
Размер:
1.19 Mб
Скачать

или сегмент. Стратегия первого подходящего, хотя могут быть и наиболее подходящего и наименее.

Стратегии замещения. Их цель – определить,

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

Стратегии замещения страниц. Рассмотрим следующие стратегии:

принцип оптимальности;

замещение случайной страницы;

замещение первой пришедшей страницы (принцип

FIFO);

замещение дольше всего не использовавшейся страницы (алгоритм вторая попытка - модификация принципа

FIFO);

замещение наименее часто использовавшейся страницы;

замещение не использовавшейся в последнее время страницы (алгоритм часов).

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

втечение наиболее длительного времени. Однако, реализовать её естественно нельзя, но будем наиболее близко подходить к принципу оптимальности применяя различные методы выталкивания страниц.

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

61

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

4.Стратегия вторая попытка предусматривает, что для выталкивания следует выбирать ту страницу, которая не использовалась дольше других. Эта стратегия требует, чтобы каждой странице присваивался бит обращения. Если страница самая старая и к ней не было обращений, то она замещается. Если обращения были, то время ее загрузки обновляется и страница переносится в конец очереди претендентов на замещение. Используется в Windows NT.

5.В случае замещения наименее часто использовавшейся страницы необходимо контролировать интенсивность использования каждой страницы. Выталкивается та, обращения к которой наименее часты. Однако такой подход тоже может быть нерациональным. Например, наименее интенсивно используемой может оказаться та страница, которую только что переписали в основную память и к которой успели обратиться только один раз, в то время как к другим уже могли обращаться большее число раз. Используется в Windows 9x.

6.Алгоритм часов (Unix). Каждые 250 мс просыпается страничный демон, чтобы сравнить количество свободных страниц с 1/4 объема оперативной памяти. Если оказывается что свободной памяти меньше 1/4 объема оперативной памяти, то страничный демон начинает сканировать в цикле страничные блоки так как если бы они были расположены на

62

циферблате часов. На первом проходе сбрасываются биты обращения страничных блоков. На втором проходе биты обращения проверяются и если обращений не было, то такой блок сбрасывается на диск.

Реализация этой стратегии допускает введение двух аппаратных битов-признаков на страницу. Это

а) бит-признак обращения = 0, если к странице не было обращений; = 1, если были обращения.

б) бит-признак модификации = 0, если страница не изменялась; = 1, если страница изменялась.

При этом возможно существование 4 групп страниц:

1)обращений не было, модификаций не было;

2)обращений не было, модификация была;

3)обращения были, модификаций не было;

4)обращения были, модификация была.

Страницы групп с меньшим номером следует выталкивать в первую очередь.

3.4. Организация виртуальной памяти операционной системы

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

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

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

63

будут смежными в реальной памяти, это свойство называют “искусственной смежностью”.

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

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

3.5. Классификация методов организации виртуальной памяти

3.5.1. Архитектурные средства поддержки виртуальной памяти

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

64

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

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

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

65

3.5.2. Страничная виртуальная память

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

После разбиения менеджером памяти виртуального адресного пространства на страницы виртуальный адрес преобразуется в упорядоченную пару (p,d), где p – номер страницы в виртуальной памяти, а d – смещение в рамках страницы p, внутри которой размещается адресуемый элемент. Процесс может выполняться, если его текущая страница находится в оперативной памяти. Если текущей страницы в главной памяти нет, она должна быть переписана (подкачана) из внешней памяти. Поступившую страницу можно поместить в любой свободный страничный кадр.

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

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

66

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

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

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

3.5.3. Сегментная организация виртуальной памяти

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

Кроме того, разбиение виртуального адресного пространства на «осмысленные» части делает принципиально возможным совместное использование фрагментов программ разными процессами. Пусть, например, двум процессам требуется одна и та же подпрограмма, которая к тому же

67

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

Итак, виртуальное адресное пространство процесса делится на части — сегменты, размер которых определяется с учетом смыслового значения содержащейся в них информации. Отдельный сегмент может представлять собой подпрограмму, массив данных и т. п. Деление виртуального адресного пространства па сегменты осуществляется компилятором на основе указаний программиста или но умолчанию, в соответствии с принятыми в системе соглашениями. Максимальный размер сегмента определяется разрядностью виртуального адреса, например, при 32разрядной организации процессора он равен 4 Гбайт. Сегменты не упорядочиваются друг относительно друга, так что общего для сегментов линейного виртуального адреса не существует, виртуальный адрес задается парой чисел: номером сегмента и линейным виртуальным адресом внутри сегмента.

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

68

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

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

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

3.5.4. Сегментно-страничная организации виртуальной памяти

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

69

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

На практике, однако, появления в системе большого количества таблиц страниц стараются избежать, организуя неперекрывающиеся сегменты в одном виртуальном пространстве, для описания которого хватает одной таблицы страниц. Таким образом, одна таблица страниц отводится для всего процесса. Например, в популярных ОС Linux и Windows 2000 все сегменты процесса, а также область памяти ядра ограничены виртуальным адресным пространством объемом 4 Гбайт. При этом ядро ОС располагается по фиксированным виртуальным адресам вне зависимости от выполняемого процесса.

3.6. Кэширование данных

Кэш-память, или просто кэш (cache), — это способ совместного функционирования двух типов запоминающих устройств, отличающихся временем доступа и стоимостью хранения данных, который за счет динамического копирования в «быстрое» ЗУ наиболее часто используемой информации из «медленного» ЗУ позволяет, с одной стороны, уменьшить среднее время доступа к данным, а с другой стороны, экономить более дорогую быстродействующую память.

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

70

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