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

Учебное пособие 800330

.pdf
Скачиваний:
3
Добавлен:
01.05.2022
Размер:
1.64 Mб
Скачать

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

некоторое число

элементов,

не менее

и не более

элементов, где

и

заранее

определенные

пороговые значения. Если в какой то момент времени

число элементов в очереди окажется>

меньше , то в конец

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

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

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

Добавление блока данных в конец очереди можно трактовать как гипотезу о том, что данный блок данных не будет востребован в ближайшее время (гипотезу о «ненужности» блока данных). За время продвижения этого блока данных из конца очереди к ее началу выполняется проверка гипотезы. Если в это время произошло

21

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

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

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

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

22

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

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

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

Рассмотрим следующую формальную модель многоуровневой памяти. Пусть память представлена +1 уровнем, пронумерованными от 0 до . Пусть нулевой уровень – это верхний, наиболее быстрый уровень памяти, -ый уровень – нижний, наиболее медленный. Пусть при обращении к некоторому -му уровню памяти

требуемые данные будут получены с вероятностью

 

.

Вероятность

 

 

 

 

 

Пусть

называется вероятностью промаха.1 −

 

– среднее время доступа к памяти на -ом уровне.

 

 

Оценим среднее время доступа к данным

для

многоуровневой

памяти

в предположении, что память

всегда содержит требуемые данные хотя бы на

самом

̃

 

нижнем уровне (т.е.

).

 

 

 

 

 

Процессор обращается за данными к верхнему

уровню, при этом с вероятностью= 0

 

данные будут

получены

за время ,

и с

вероятностью

за

время

 

1 −

 

 

 

,

где

 

среднее

время

доступа

для

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

меньше+ ̃, а

штрафное̃

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

управления памятью на обнаружение того, что нулевой

23

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

̃= ∙ (1 − ) +( + ̃)∙

=.

= ∙ (1 − ) + ∙ + ̃∙

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

̃= ∙(1 − )+ ∙ +

+( ∙ (1 − )+ ( +

̃)∙ ) ∙ =

= ∙(1 − )+ ∙ +

∙(1 − )∙ +

Учитывая,

 

что

 

, можно

записать

окончательный+вид

выражения∙ + ̃для∙ ∙среднего=

времени

доступа к данным

иерархической памяти.

 

 

 

= 0

 

+

̃= ∙ (1 − ) +

∙(1 − ) ∙

+.

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

24

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

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

Среднее время доступа к ОЗУ положим равным 20 нс. Вероятность промаха при обращении к ОЗУ можно грубо оценить на основании вероятности промаха кэша, сопоставив их объемы. Положим, что объем ОЗУ в 1000 раз больше объема кэша, тогда вероятность промаха ОЗУ~0.001∙ кэш. Штрафное время для ОЗУ положим равным 1 нс, т.к. современным процессорам не требуется выполнять полный цикл доступа к памяти для выявления промаха – необходимые структуры данных, описывающие размещение данных в ОЗУ, доступны внутри процессора.

Для жесткого диска среднюю скорость доступа примем равной 10 мс. Тогда среднее время доступа к памяти составит примерно 3 нс, что существенно меньше, чем среднее время доступа к ОЗУ и близко к характеристикам кэша.

25

3. ВИРТУАЛЬНАЯ ПАМЯТЬ

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

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

Преобразование (или трансляция) адресов в системе виртуальной памяти поясняется на рис. 5.

26

ВАП1

ВАП2

ВАП3

A

B

C

 

 

 

 

 

 

 

 

 

 

 

B

A

 

 

 

C

 

B

B

 

 

 

 

 

 

 

 

 

 

 

Система трансляции адресов

D

E

 

 

 

E

 

F

 

 

 

 

 

 

 

D

E

F

Таблицы системы управления виртуальной памятью

ОЗУ

Диск

Рис. 5. Преобразование адресов в системе виртуальной памяти

27

Рассмотрим рис. 5. Пусть три программы, исполняющиеся в трех разных процессах, для которых созданы виртуальные адресные пространства ВАП1, ВАП2 и ВАП3 соответственно, выполнили обращение к данным в памяти с использованием одинакового виртуального

адреса

. При этом система трансляции

адресов

в

контексте

ВАП1 преобразовала виртуальный

адрес

в

физический адрес , а в контексте ВАП2 тот же самый

виртуальный адрес

преобразовала в физический адрес

. Таким образом, программы первого и второго

 

процессов фактически обратились к разным данным в оперативной памяти (ОЗУ) компьютера. В контексте же

ВАП3 для виртуального адреса

не определено никакого

физического адреса,

поскольку

данные, адресуемые

виртуальным адресом

в контексте ВАП3 в данное время

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

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

Рассмотрим теперь обращение программы первого

процесса по виртуальному адресу

и программы второго

процесса по виртуальному адресу

в своих ВАП. Система

трансляции адресов в контексте ВАП1 преобразовала виртуальный адрес в физический адрес . При этом в контексте ВАП2 виртуальный адрес преобразуется в тот же самый физический адрес . Следовательно, программы первого и второго процессов фактически обратились к одним и тем же данным в ОЗУ, несмотря на использование различных виртуальных адресов в своих ВАП.

28

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

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

Рассмотрим теперь более внимательно случай обращения программы к памяти по виртуальному адресу в контексте ВАП3, когда соответствующие данные отсутствуют в ОЗУ (выгружены во вторичную память). В этом случае система трансляции адресов не сможет выполнить преобразование виртуального адреса в физический адрес и вызовет исключение, которое будет обработано операционной системой. Операционная система заблокирует третий процесс (снимет его с выполнения и переведет в состояние блокировки до момента, когда требуемые данные станут доступны в ОЗУ). Затем операционная система найдет в адресном пространстве ОЗУ свободный участок для размещения новых данных (если надо, выгрузит на диск другие данные для освобождения памяти), загрузит в ОЗУ из вторичной памяти данные, необходимые программе в контексте ВАП3, внесет изменения в таблицы трансляции адресов, чтобы система трансляции адресов смогла выполнить преобразование виртуального адреса в контексте ВАП3 в соответствующий физический адрес и переведет третий процесс в состояние готовности к выполнению. Когда третий процесс будет выбран планировщиком на исполнение и его программа снова обратится по виртуальному адресу , система трансляции адресов

29

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

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

Возможности функции загрузки данных в ОЗУ из вторичной памяти можно легко расширить, чтобы реализовать доступ к файлам на диске с использованием механизмов виртуальной памяти. Такой способ доступа к файлам называется отображение файла на виртуальное адресное пространство процесса (file mapping) и

поддерживается всеми современными операционными системами.

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

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

30