Виртуальная память

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

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

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

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

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

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

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

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

Все устройства кэш-памяти, виртуальная память и буферы TLB основаны на общем наборе принципов и линий поведения. Эта общая среда будет рассмотрена в следующем разделе.

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

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





Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: