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

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

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

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

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

Характеристики

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

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

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

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

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

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

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

История

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

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

Первая настоящая система виртуальной памяти была реализована в Манчестерском университете для создания одноуровневой системы хранения как части компьютера Атлас . Он использовал механизм подкачки для отображения виртуальных адресов, доступных программисту, на реальную память, которая состояла из 16 384 слов первичной памяти ядра с дополнительными 98 304 словами вторичной памяти барабана . Первый Атлас был введен в эксплуатацию в 1962 году, но к 1959 году были разработаны рабочие прототипы разбиения на страницы. В 1961 году корпорация Burroughs самостоятельно выпустила первый коммерческий компьютер с виртуальной памятью, 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 относятся к страницам, которые временно не могут быть выгружены на страницу (как для буферов ввода-вывода), как «заблокированные», и просто «непстраничные» для тех, которые не могут быть выгружены на страницу. В спецификации Single UNIX также используется термин «заблокирован» в спецификации , как и в справочных страницах многих Unix-подобных систем. mlock()mlock()

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

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

Взбучка

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

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

Некоторые системы, такие как 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.

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

Смотрите также

Примечания

использованная литература

дальнейшее чтение

  • Хеннесси, Джон Л .; и Паттерсон, Дэвид А .; Компьютерная архитектура, количественный подход ( ISBN  1-55860-724-2 )

внешние ссылки