Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

ОдкРчка страниц для реализациШ виртуальной памяти




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

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

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

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

Пусть выполняется некоторая машинная команда, в которой задается обращение к некоторому месту оперативной памяти с адресом XXXYYYZZZ, где буквы X условно обозначают старшие биты адреса, задающие строку каталога страниц, буквы Y – средние биты адреса, задающие строку таблицы страниц в том каталоге, который определяется старшей частью, а буквы Z – младшие биты, задающие номер байта внутри страницы. Аппаратура процессора находит строку с номером XXX в каталоге страниц для текущего процесса и анализирует его содержимое. Может оказаться, что весь диапазон виртуальных адресов, начинающихся битами со значением XXX, не выделен процессу, тогда возникает ошибка по доступу к памяти. Если же (в большинстве случаев) данный диапазон выделен процессу, то в этой строке содержится адрес соответствующей таблицы страниц. Аппаратура извлекает из этой таблицы строку с номером YYY и анализирует ее. Возможны два варианта.

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

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

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

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

С учетом изложенного встает вопрос, какие страницы виртуальной области адресов следует назначать непосредственно в физические страницы оперативной памяти при запуске программы? Если весь исполняемый файл большой программы переносить в оперативную память, то может оказаться, что часть этой работы выполнена напрасно: некоторые участки файла так и не будут использоваться. Кроме того, передача данных из внешней памяти в оперативную небольшими кусками (отдельными страницами) занимает больше времени, чем передача сразу большого последовательного участка файла. Поэтому Windows например, производит упреждающее чтение блоками размером до 64 Кбайт. Эти соображения с учетом некоторых других привели к следующим решениям.

В современных форматах исполняемых файлов (с обычными в Windows расширениями EXE и DLL) содержится доступная извне информация о частях (секциях) этих файлов. Так, в стандартном формате COFF (Common Object File Format) имеются секции с именами. Для каждой такой секции при разработке программы можно задать комбинацию атрибутов Read, Write, Execute и Shared. Если какая-нибудь секция такого исполняемого файла не имеет атрибута Write или Shared, то ее содержимое неизменяемо. Поэтому страницы виртуальной памяти процесса, использующие эту секцию, не нужно сохранять в области свопинга. Когда содержимое таких страниц потребуется процессу, их следует загрузить в страничный кадр оперативной памяти со своего исходного места в исполняемом файле. Такой подход дает возможность резко сократить реальную потребность в большом файле свопинга.

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

 




Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 295; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.