Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Свопинг и виртуальная память



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

Если все задачи мультипрограммной смеси являются вычислительными (мало операций ввода-вывода), для хорошей загрузки процессора может оказаться достаточным всего 3-5 задач.

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


 

 
 

 


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

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

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

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

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

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

Ясно, что работа виртуальной оперативной памяти происходит медленнее, чем реальной.

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

· размещение данных в запоминающих устройствах различного типа;

· выбор образов процессов или их частей для перемещения из оперативной па­мяти на диск и обратно;

· перемещение по мере необходимости данных между памятью и диском;

· преобразование виртуальных адресов в физические.

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

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

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

· свопинг образы процессов выгружаются на диск и возвращаются в оперативную память целиком;

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

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

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

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

В современных ОС свопинг применения не находит.

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

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

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

· Сегментная виртуальная память перемещение осуществляется сегментами — частями виртуального адресного пространства произвольного размера.

· Сегментно-страничная виртуальная память . Здесь используется двухуровневое деление: виртуальное адресное пространство делится на сегменты, а затем сегменты делятся на страницы. Единицей перемещения здесь является страница.

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

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

Размер страничного файла в современных ОС является настраиваемым параметром.


Страничное распределение

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

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

Вся оперативная память машины также делится на части такого же размера, называемые физическими страницами.

Размер страницы выбирается равным степени двойки: 512, 1024, 4096 байт и т. д, Это позволяет упростить механизм преобразования адресов.

 

 


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

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

· номер физической страницы, в которую загружена данная виртуальная страница;

· признак присутствия, устанавливается в единицу, если виртуальная страница находится в оперативной памяти;

· признак модификациистраницы, который устанавливается в единицу всякий раз, когда производится запись по адресу, относящемуся к данной странице;

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

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

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

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

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

Виртуальный адрес при страничном распределении может быть представлен в виде пары (р, sv), где p — порядковый номер виртуальной страницы процесса (нумерация страниц начинается с 0), a sv — смещение в пределах виртуальной страницы.

Физический адрес также может быть представлен в виде пары (n, Sf), где n — номер физической страницы, a Sf — смещение в пределах физической страницы. Задача подсистемы виртуальной памяти состоит в преобразовании пары (р, sv) в (n, Sf).

Рассмотрим два базисных свойства страничной организации.

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

Например:

Размер страницы 1 Кбайт (210). Двоичной адрес 101 000 111 0012. Он принадлежит странице 102 и смещен относительно ее начала на 1 000 111 0012 байт.

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

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

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

 

Если происходит обращение к памяти по некоторому виртуальному адресу. Аппаратными схемами процессора выполняются следующие действия:

· Из специального регистра процессора извлекается адрес AT таблицы страниц активного процесса. На основании начального адреса таблицы страниц, номе­ра виртуальной страницы p (старшие разряды виртуального адреса) и длины отдельной записи в таблице страниц L (системная константа) определяется адрес нужного дескриптора в таблице страниц: а =АТ+(рхL).

· Из этого дескриптора извлекается номер соответствующей физической страницы — n.

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

 
 

 

 


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

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

При выборе страницы на выгрузку смысл критерия сводится к одному: на диск выталкивается страница, к которой дольше всего не будет обращений

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

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

 

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

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

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

Важнейшая задача – выбор оптимального размера страницы.

Если страница велика, то велики потери из фиктивных областей (в среднем половина последней страницы). Выбор размера страницы – сложная оптимизационная задача. На практике размер страницы выбирают в несколько килобайт. Например, в процессорах Pentiumи ОС на них, поддерживают страницы размером 4096 байт (4 Кбайт).

Размер страницы также влияет на количество записей в таблицах страниц процессов. Так в современных процессорах максимальный объем виртуального адресного пространства процесса, не меньше 4 Гбайт (232), то при размере страницы 4 Кбайт (212) и длине записи 4 байта для хранения таблицы страниц требуется 4 Мбайт памяти!

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

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

Все страницы имеют одинаковый размер, а разделы содержат одинаковое количество страниц.

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

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

Например, в процессоре Pentium при размере страницы 4 Кбайт длина дескриптора составляет 4 байта и количество записей в таблице страниц, помещающейся на страницу, равно 1024. Каждая таблица страниц описывается дескриптором, структура которого полностью совпадает со структурой дескриптора обычной страницы. Эти дескрипторы сведены в таблицу разделов, называемую также каталогом страниц. Физический адрес таблицы разделов активного процесса содержится в специальном регистре процессора и поэтому всегда известен ОС. Страница, содержащая таблицу разделов, никогда не выгружается из памяти.

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

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

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

1. Путем отбрасывания k+n младших разрядов в виртуальном адресе определяется номер раздела, к которому принадлежит данный виртуальный адрес.

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

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

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

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

Сегментное распределение

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

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

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

Виртуальное адресное пространство процесса делится на части — сегменты.

Их размер которых определяется с учетом смыслового значения содержащейся в них информации. Отдельный сегмент может представлять собой подпрограмму, массив данных и т. и. Деление виртуального адресного пространства па сегменты осуществляется компилятором на основе указаний программиста или по умолчанию, на основе принятых в системе соглашений. Максимальный размер сегмента определяется разрядностью виртуального адреса, например при 32-разрядной организации процессора он равен 4 Гбайт. При этом максимально возможное виртуальное адресное пространство процесса представляет собой набор из N виртуальных сегментов, каждый размером по 4 Гбайт. В каж­дом сегменте виртуальные адреса находятся в диапазоне от 0000000016 до FFFFFFFF16.

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

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

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

· базовый физический адрес сегмента в оперативной памяти;

· размер сегмента;

· правила доступа к сегменту;

· признаки модификации, присутствия и обращения к данному сегменту, а также некоторая другая информация

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

 

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

Виртуальный адрес при сегментной организации можно представлен парой ( g, s ), где g - номер сегмента, as- смещение.

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

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

Использование операции сложения замедляет процедуру преобразования виртуального адреса в физический по сравнению со страничной организацией (там просто объединение старших и младших разрядов).

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

Но главный недостаток — это фрагментация, который возникает из-за непредсказуемости размеров сегментов.

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

Например, сегмент данных исходной информации может иметь права доступа «только чтение», а сегмент результатов, — «чтение и запись». Это свойство определяет преимущество сперед страничной.


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-07-13; Просмотров: 1081; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.042 с.)
Главная | Случайная страница | Обратная связь