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

редактировать
Виртуальная память объединяет активную RAM и неактивную память на DASD для формирования большого диапазона непрерывных адресов.

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

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

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

Содержание
  • 1 Свойства
  • 2 Использование
  • 3 История
  • 4 Выгружаемая виртуальная память
    • 4.1 Таблицы страниц
    • 4.2 Супервизор пейджинга
    • 4.3 Закрепленные страницы
      • 4.3.1 Виртуально-реальная операция
    • 4.4 Обращение к памяти
  • 5 Сегментированная виртуальная память
  • 6 Подкачка адресного пространства
  • 7 См. Также
  • 8 Дополнительная литература
  • 9 Примечания
  • 10 Ссылки
  • 11 Внешние ссылки
Свойства

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

виртуализацию памяти можно рассматривать как Обобщение концепции виртуальной памяти.

Использование

Виртуальная память является неотъемлемой частью современной компьютерной архитектуры ; реализации обычно требуют аппаратной поддержки, обычно в форме блока управления памятью, встроенного в CPU. Хотя это и не обязательно, эмуляторы и виртуальных машин могут использовать аппаратную поддержку для повышения производительности своих реализаций виртуальной памяти. Следовательно, более старые операционные системы, например, для мэйнфреймов 1960-х годов и для персональных компьютеров с начала до середины 1980-х годов (например, DOS ), как правило, не имеют виртуальных функциональность памяти, хотя заметными исключениями для мэйнфреймов 1960-х годов являются:

и операционная система для Apple Lisa являются примером операционной системы для персонального компьютера 1980-х годов, которая имеет виртуальную память.

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

Большинство современных операционных систем, поддерживающих виртуальную память, также запускают каждый процесс в своем собственном выделенном адресном пространстве. Таким образом, кажется, что каждая программа имеет единственный доступ к виртуальной памяти. Однако некоторые старые операционные системы (такие как OS / VS1 и OS / VS2 SVS ) и даже современные (например, IBM i ) являются Операционные системы с единым адресным пространством, которые запускают все процессы в едином адресном пространстве, состоящем из виртуализированной памяти.

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

История

В 1940-х и 1950-х годах все более крупные программы должны были содержать логику для управления первичной и вторичной памятью, такую ​​как наложение. Поэтому виртуальная память была введена не только для расширения первичной памяти, но и для того, чтобы сделать такое расширение максимально простым для использования программистами. Чтобы обеспечить возможность мультипрограммирования и многозадачности, многие ранние системы разделяли память между несколькими программами без виртуальной памяти, например ранние модели PDP-10 через регистры.

Утверждение, что концепция виртуальной памяти была впервые разработана немецким физиком в Техническом университете Берлина в 1956 году в его докторской диссертации «Логический дизайн цифрового компьютера с несколькими Асинхронные вращающиеся барабаны и автоматическая высокоскоростная работа с памятью не подлежат тщательной проверке. Компьютер, предложенный Гюнчем (но так и не построенный), имел адресное пространство из 10 слов, которые точно отображались на 10 слов барабанов, то есть адреса были реальными адресами, и не было формы косвенного отображения, ключевой особенности виртуальной памяти.. Гюнч действительно изобрел форму кэш-памяти, поскольку его высокоскоростная память была предназначена для хранения копий некоторых блоков кода или данных, взятых с барабанов. Более того, он написал (как указано в переводе): «Программисту не обязательно уважать существование первичной памяти (ему даже не нужно знать, что она существует), поскольку существует только один вид адресов (sic), по которым можно программировать как если бы было только одно хранилище ». Именно так обстоит дело в компьютерах с кэш-памятью, одним из первых коммерческих примеров которых была IBM System / 360 Model 85. В Model 85 все адреса были реальными адресами, относящимися к основному хранилищу ядра. Хранилище полупроводникового кэша, невидимое для пользователя, содержало содержимое частей основного хранилища, используемых текущей выполняющейся программой. Это в точности аналогично системе Güntsch, разработанной как средство повышения производительности, а не для решения проблем, связанных с мультипрограммированием.

Первая настоящая система виртуальной памяти была реализована в Манчестерском университете для создания одноуровневой системы хранения в составе компьютера Atlas. Он использовал механизм пейджинга для сопоставления виртуальных адресов, доступных программисту, с реальной памятью, которая состояла из 16 384 слов первичной основной памяти с дополнительными 98 304 словами вторичной барабанная память. Первый Атлас был введен в эксплуатацию в 1962 году, но к 1959 году были разработаны рабочие прототипы системы разбиения на страницы. В 1961 году Burroughs Corporation независимо выпустила первый коммерческий компьютер с виртуальной памятью, B5000, с сегментация, а не разбиение на страницы.

Прежде чем виртуальная память могла быть реализована в основных операционных системах, необходимо было решить множество проблем. Для динамической трансляции адресов требовалось дорогостоящее и сложное в сборке специализированное оборудование; начальные реализации немного замедляли доступ к памяти. Были опасения, что новые общесистемные алгоритмы, использующие вторичное хранилище, будут менее эффективными, чем ранее использовавшиеся алгоритмы для конкретных приложений. К 1969 году споры о виртуальной памяти для коммерческих компьютеров закончились; исследовательская группа IBM под руководством Дэвида Сейра показала, что их система наложения виртуальной памяти стабильно работает лучше, чем лучшие системы с ручным управлением. На протяжении 1970-х годов серии IBM 370, работающие с их операционными системами на основе виртуальных хранилищ, предоставляли бизнес-пользователям средства для миграции нескольких старых систем на более мощные мэйнфреймы с меньшим количеством операций, которые имели улучшенное соотношение цена / производительность. Первым миникомпьютером, который представил виртуальную память, был норвежский NORD-1 ; в течение 1970-х годов другие миникомпьютеры реализовали виртуальную память, особенно модели VAX, работающие под управлением VMS.

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

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

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

Таблицы страниц

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

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

Некоторые более ранние системы с меньшим объемом реальной памяти, такие как SDS 940, использовали регистры страниц вместо таблиц страниц в памяти для преобразования адресов.

Супервизор пейджинга

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

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

Закрепленные страницы

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

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

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

В операционных системах IBM для System / 370 и последующих системах термин "фиксированный", и такие страницы могут быть фиксированными на длительный срок, или могут быть фиксированными на короткий срок, или могут быть нефиксированными (т. Е. Перелистываемыми). Структуры управления системой часто являются фиксированными на длительный срок (измеряются во времени настенных часов, т. Е. Время измеряется в секундах, а не в долях одной секунды), тогда как буферы ввода / вывода обычно фиксируются на короткий срок (обычно измеряются в значительных долях секунды). меньше времени настенных часов, возможно, на десятки миллисекунд). Действительно, ОС имеет специальное средство для «быстрого исправления» этих краткосрочных фиксированных буферов данных (исправление, которое выполняется, не прибегая к трудоемкой инструкции вызова супервизора ).

Multics использовала термин «проводной». OpenVMS и Windows относятся к страницам, временно сделанным без страницы (как для буферов ввода-вывода), как к «заблокированным», и просто «без страницы» для тех, которые никогда не доступны для страницы. Единая спецификация UNIX также использует термин «заблокирован» в спецификации для mlock (), как и mlock()страницы руководства во многих Unix-подобных системах.

Виртуально-реальная операция

В OS / VS1 и аналогичных операционных системах некоторые части системной памяти управляются в «виртуально-реальном» режиме, называемом «V = R ". В этом режиме каждому виртуальному адресу соответствует один и тот же реальный адрес. Этот режим используется для механизмов прерываний, для супервизора подкачки и таблиц страниц в старых системах, а также для прикладных программ, использующих нестандартное управление вводом-выводом. Например, IBM z / OS имеет 3 режима (виртуально-виртуальный, виртуально-реальный и виртуальный-фиксированный).

Thrashing

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

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

Некоторые системы, такие как Burroughs B5500, используют сегментацию вместо разбиения по страницам, разделяя виртуальные адресные пространства на участки переменной длины. сегменты. Виртуальный адрес здесь состоит из номера сегмента и смещения внутри сегмента. Intel 80286 поддерживает аналогичную схему сегментации в качестве опции, но используется редко. Сегментацию и разбиение на страницы можно использовать вместе, разделив каждый сегмент на страницы; системы с такой структурой памяти, такие как Multics и IBM System / 38, обычно имеют преобладание подкачки, сегментация обеспечивает защиту памяти.

В Intel Для процессоров 80386 и более поздних версий IA-32 сегменты находятся в 32-битном линейном адресном пространстве с разбивкой на страницы. Сегменты можно перемещать в это пространство и из него; страницы могут «постранично» входить и выходить из основной памяти, обеспечивая два уровня виртуальной памяти; лишь немногие операционные системы, если таковые имеются, используют только разбиение на страницы. Ранние решения виртуализации x86 без аппаратной поддержки сочетали разбиение на страницы и сегментацию, поскольку разбиение на страницы x86 предлагает только два домена защиты, тогда как стеку VMM / гостевой ОС / гостевых приложений требуется три. Разница между системами подкачки и сегментации не только в разделении памяти; сегментация видна пользовательским процессам как часть семантики модели памяти. Следовательно, вместо памяти, которая выглядит как одно большое пространство, она разбита на несколько пространств.

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

Это не такие же, как механизмы, предоставляемые такими вызовами, как mmap и Win32 MapViewOfFile, потому что межфайловые указатели не работают при отображении файлов в полупроизвольные места. В Multics файл (или сегмент из многосегментного файла) отображается в сегмент в адресном пространстве, поэтому файлы всегда отображаются на границе сегмента. Раздел связывания файла может содержать указатели, для которых попытка загрузить указатель в регистр или сделать косвенную ссылку через него вызывает ловушку. Неразрешенный указатель содержит указание имени сегмента, на который ссылается указатель, и смещения внутри сегмента; обработчик прерывания отображает сегмент в адресное пространство, помещает номер сегмента в указатель, изменяет поле тега в указателе так, чтобы оно больше не приводило к прерыванию, и возвращается к коду, в котором возникла прерывание, повторно выполняя инструкция, вызвавшая ловушку. Это полностью исключает необходимость в линкере и работает, когда разные процессы отображают один и тот же файл в разные места в своих частных адресных пространствах.

Обмен адресного пространства

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

IBM MVS, от OS / VS2 Release 2 до z / OS, позволяет пометить адресное пространство как не подлежащее замене; при этом никакие страницы не закрепляются в адресном пространстве. Это можно сделать во время выполнения задания, введя имя подходящей основной программы в Таблице свойств программы с флагом отмены замены. Кроме того, привилегированный код может временно сделать адресное пространство недоступным для замены с помощью инструкции SYSEVENT Supervisor Call (SVC); некоторые изменения в свойствах адресного пространства требуют, чтобы ОС заменила его, а затем вернула обратно, используя SYSEVENT TRANSWAP.

См. также
Wikisource содержит исходный текст, относящийся к этой статье: Игра подкачки
Дополнительная литература
  • Hennessy, Джон Л.; и Паттерсон, Дэвид А.; Архитектура компьютера, количественный подход (ISBN 1-55860-724-2 )
Примечания
Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-18 03:36:49
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте