Что это такое виртуальная память
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
Виртуальная память (Операционные Системы)
Содержание
Преимущества виртуальной памяти
К основным преимуществам виртуальной памяти относят:
Свойства виртуальной памяти
Виртуальная память делает программирование приложений проще:
Виртуализация памяти может рассматриваться как обобщение понятия виртуальной памяти.
Почти все реализации виртуальной памяти делят виртуальное адресное пространство на страницы, блоки смежных адресов виртуальной памяти.
При работе машины с виртуальной памятью, используются методы страничной и сегментной организации памяти.
Страничная организация памяти
При страничной организации все ресурсы памяти, как оперативной, так и внешней представляются для пользователя единым целым. Пользователь работает с общим адресным пространством и не задумывается какая память при этом используется: оперативная или внешняя, а эта общая память носит название виртуальной (моделируемой). Виртуальная память разбивается на страницы, которые содержат определённое фиксированное количество ячеек памяти. При этом одна страница математической памяти не может быть больше или меньше других, все страницы должны быть одинаковы по количеству ячеек. Типичные размеры страниц 256, 512, 1024, 2048 Байт и более (числа кратные 256).
Преимущества виртуальной памяти со страничной организацией
Недостатки виртуальной памяти со страничной организацией
Сегментно-страничная организация виртуальной памяти
Данный метод организации виртуальной памяти направлен на сочетание достоинств страничного и сегментного методов управления памятью. В такой комбинированной системе адресное пространство пользователя разбивается на ряд сегментов по усмотрению программиста. Каждый сегмент в свою очередь разбивается на страницы фиксированного размера, равные странице физической памяти. С точки зрения программиста, логический адрес в этом случае состоит из номера сегмента и смещения в нем. Каждый сегмент представляет собой последовательность адресов от нуля до определённого максимального значения. Отличие сегмента от страницы состоит в том, что длинна сегмента может изменяться в процессе работы. Сегменты, как и любая структура виртуальной памяти, могут размещаться как в оперативной памяти, так и во внешней памяти (магнитных носителях). Виртуальная память с сегментно-страничной организацией функционирует подобно виртуальной памяти со страничной организацией: если требующийся на данный момент сегмент отсутствует в оперативной памяти, то при надобности работы с ним, он предварительно перемещается в ОП. Сегментно-страничная организация памяти требует более сложной аппаратурно-программной организации.
Таблицы страниц
Менеджер виртуальной памяти
Эта часть операционной системы создает и управляет таблицами страниц. Если оборудование выдает ошибку, Менеджер виртуальной памяти получает доступ к вторичному хранилищу, возвращает страницу, которая имеет виртуальный адрес, который привел к неисправности страницы, обновляет таблицы страниц, чтобы отразить физическое местоположение виртуального адреса и указывает механизм перевода для перезапуска запрос.
Когда вся физическая память уже используется, Менеджер виртуальной памяти должен освободить страницы в основном хранилище для хранения выгруженной страницы. Используется один из множества алгоритмов замещения наименее используемых страниц, чтобы освободить их.
Закрепленные страницы
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
Виртуальная память
Виртуальная память представляет собой совмещение оперативной памяти и временного хранилища файлов на жестком диске. В случае если памяти ОЗУ не достаточно, данные перемещаются во временное хранилище, называемое файлом подкачки. Для выполняющейся программы данный метод полностью прозрачен и не требует дополнительных усилий со стороны, однако реализация этого метода требует как аппаратной поддержки, так и поддержки со стороны операционной системы.
В системе с виртуальной памятью используемые программами адреса, называемые виртуальными адресами, транслируются в физические адреса в памяти компьютера. Трансляцию виртуальных адресов в физические выполняет аппаратное обеспечение, называемое блоком управления памятью (см. рисунок 1).
Содержание
История появления
Перед тем как виртуальная память могла быть реализована в основным популярных операционных системах, много проблем должны были быть решены. Динамическая трансляция адресов требовала дорогого и трудно реализуемого специализированного оборудования (первые реализации несколько замедляли доступ к памяти). Так же существовало беспокойство, что новые общесистемные алгоритмы будут не так эффективно использовать вторичную память, как ранее используемые специальные алгоритмы реализуемые каждым приложением в отдельности. В 1969-ом году дебаты касающиеся использования виртуальной памяти в коммерческих компьютерах закончились, исследовательская команда IBM, возглавляемая David Sayre показала, что их система виртуальной памяти работает лучше, чем любая управляемая вручную система. Первый миникомпьютер использующий виртуальную память был Норвежский NORD-1, в течении 1970-ых годов, появились другие компьютеры реализующие виртуальную память (например компьютер VAX с системой VMS).
Виртуальная память была реализована в архитектуре x86 вместе с |защищённым режимом в процессоре Intel 80286, но его способ подкачки сегментов плохо масштабировался для сегментов большего размера. В процессор Intel 80386 была реализована подкачка страниц под существующем слоем сегментации, позволяя исключение подкачки страниц связывать с другими исключениями не вызывая двойного сбоя. Однако, загрузка дескриптора сегмента была дорогостоящей операции, в результате чего, разработчики операционных систем полагались только на подкачку страниц, а не на комбинацию сегментации и подкачки страниц. [Источник 4]
Преимущества виртуальной памяти
Способы организации памяти
Страничный способ
Страничная память — способ организации памяти, при котором единицей отображения виртуальных адресов на физические является регион постоянного размера (т. н. страница). Типичный размер страницы — 4096 байт, для некоторых архитектур — до 128 КБ.
Основным достоинством страничного способа распределения памяти является минимально возможная фрагментация. Поскольку на каждую задачу может приходиться по одной незаполненной странице, то становится очевидно, что память можно использовать достаточно эффективно; этот метод организации виртуальной памяти был бы одним из самых лучших, если бы не два обстоятельства:
Решаемые задачи
Сегментный способ
Сегментная адресация памяти — схема логической адресации памяти компьютера в архитектуре x86. Линейный адрес конкретной ячейки памяти, который в некоторых режимах работы процессора будет совпадать с физическим адресом, делится на две части: сегмент и смещение. Сегментом называется условно выделенная область адресного пространства определённого размера, а смещением — адрес ячейки памяти относительно начала сегмента. Базой сегмента называется линейный адрес (адрес относительно всего объёма памяти), который указывает на начало сегмента в адресном пространстве. В результате получается сегментный (логический) адрес, который соответствует линейному адресу база сегмента+смещение и который выставляется процессором на шину адреса.
Достоинства сегментного способа
Недостатки сегментного способа
Подкачка страниц
Практические все реализации виртуальной памяти делят виртуальное адресное пространство на страницы: блоки непрерывных виртуальных адресов. Размер страницы на современной системе обычно не меньше 4 килобайт, системы с большим диапазоном виртуальных адресов или количеством реальной оперативной памяти обычно используют более большие размеры страниц.
Таблица страниц
Таблица страниц используется для чтобы транслировать адреса используемые приложением в физические адреса используемые устройствами. Оборудование, обеспечивающие такую трансляцию чаще всего называют устройством управления памятью. Каждая запись в таблицы страниц содержит флаг, указывающий находится ли соответствующая страница в реальной памяти или нет. Если страница в реальной памяти, в записи будет также хранится адрес реальной памяти, где эта страница записана. Если запись в таблице указывает, что на данный момент страница отсутствует в реальной оперативной памяти, аппаратная часть генерирует исключение ошибки страницы и вызывается страничный супервизор операционной системы.
В операционной системе может быть одна таблица страниц, по таблице страниц на каждое приложение или сегмент, дерево таблиц страниц для больших сегментов или комбинация перечисленного.
Супервизор страниц
Это часть операционной системы, которая создаёт и управляет таблицами страниц. Если аппаратная часть генерирует исключение ошибки страницы, тогда супервизор страниц обращается к вторичному устройству памяти, извлекает необходимую страницу, обновляет таблицу страниц, чтобы отобразить новый физический адрес соответствующий виртуальному и запрашивает механизм трансляции повторить запрос.
Когда вся реальная оперативная память уже использована, супервизор страниц должен выгрузить какую-либо страницу во вторичную память, чтобы загрузить нужную. Супервизор использует алгоритм замещения страниц (например LRU), чтобы определить какую именно страницу можно выгрузить.
Закреплённые страницы
Операционные системы часто имеют области фиксированные области оперативной памяти, то есть область, никогда не выгружаемая во вторичную память. Это делается для улучшения производительности и упрощения реализации. Например, механизм прерываний полагается на массив указателей к свои обработчикам. Если страница, содержащая этот массив будет выгружена, или будет выгружен код, который должен быть вызван в случае исключения, то обработка исключения затянется во времени или станет невозможной.
Некоторые страницы требуется закрепить на короткое время, другие должны быть закреплены всегда:
V=R режим
В OS/VS1 и похожих операционных системах, некоторые части системной памяти работают в режиме «Virtual-Real», часто сокращаемый до «V=R». В этом режиме каждый виртуальный адрес соответствует такому же реальному адресу. Этот режим используется для механизма прерываний, для супервизора страниц и таблицы страниц в старых операционных системах, и для приложений использующих не стандартное управление вводом/выводом.
Пробуксовка
Эта проблема возникает когда суммарный размер необходимых для работы приложений страниц превышает количество доступной реальной оперативной памяти, что вынуждает операционную систему постоянно выгружать и загружать страницы, затрачивая на это большое количество времени.
Что на самом деле может виртуальная память
Мы в 1cloud стараемся рассказывать о различных технологиях — например, контейнерах, SSL или флеш-памяти.
Сегодня мы продолжим тему памяти. Разработчик Роберт Элдер (Robert Elder) в своем блоге опубликовал материал с описанием возможностей виртуальной памяти, которые известны не всем инженерам. Мы представляем вашему вниманию основные мысли этой заметки.
Примечание: Исходный материал содержит большое количество сложных терминов и технологических описаний, поэтому если вы обнаружили какую-то ошибку или неточность — напишите нам личным сообщением, чтобы мы могли внести правки и сделать материал лучше.
Занявшись обновлением собственного компилятора C и написанием спецификации CPU Элдер понял, что с виртуальной памятью связано очень много вопросов, которые до конца не понятны начинающим разработчикам. По этой причине он решил написать свое интерактивное пособие.
Прежде чем переходить к статье Элдера, можете посмотреть видео, на котором Джейсон Питт (Jason Pitt) рассказывает о том, что такое виртуальная память.
Как это работает
Элдер создал на своем сайте таблицу с физическим и виртуальным представлениями 256-байтного адресного пространства. Ниже представлен скриншот этой таблицы. Интерактивная версия доступна в блоге инженера по этой ссылке.
Обозначения, встречающиеся в интерактивной таблице Элдера:
0x0 | Это указатель на страничную структуру верхнего уровня. На машинах Intel это значение хранится в регистре CR3. С ARM все немного сложнее. |
Первая страничная структура. При двухуровневой организации таблиц часто называется «директорией» страниц. В нашем случае каждая запись в директории занимает 8 бит (1 байт) и содержит информацию о месторасположении таблицы страниц. | |
Вторая страничная структура – это так называемая таблица страниц (page table). Каждая запись содержит информацию о расположении физической страницы. | |
Физическая страница, с которой в настоящий момент ведется работа. | |
Активная запись директории страниц или таблицы страниц. | |
Выбранное расположение в памяти. | |
Память, доступная для чтения (Readable Memory). В данном примере разрешения не анализируются, однако в реальной системе будет осуществляться проверка бита на соответствие требуемому методу доступа. | |
Память, доступная для записи (Writeable Memory). | |
Память, для которой разрешено выполнение (Executable Memory). | |
Недоступная виртуальная память (Inaccessible Virtual Memory). | |
Неинициализированная физическая память (Unitialised Physical Memory). К ней нельзя обратиться через адресное пространство виртуальной памяти – это вызовет страничное нарушение. | |
Недоступная физическая память (Inaccessible Physical Memory). Участки памяти, к которым нельзя получить доступ. |
Отображение адресов «один в один» (Identity Mapping)
Это один из самых простых способов отображения виртуальной памяти: каждый физический адрес отображается на такой же виртуальный адрес. Этот вариант не слишком подходит для работы многофункциональной ОС, но может быть весьма полезен для быстрой разработки некоторых систем (вот пример микроядра, над которым ведет работу Элдер).
Рекурсивное отображение (Recursive Mapping)
Чтобы управлять памятью, нужно знать, где в физической памяти располагаются страничные структуры. Когда блок управления памятью (MMU) начинает работу, вы можете взаимодействовать напрямую только с адресами виртуальной памяти. По этой причине отслеживать физические адреса бывает очень трудно.
Одним из решений этой проблемы могут служить рекурсивные таблицы страниц. Если добавить к страничной структуре верхнего уровня рекурсивную запись, то вы сможете с легкостью сказать, какой виртуальный адрес позволит получить доступ к любому физическому адресу в пределах этой структуры. Вам нужно лишь решить, какой виртуальный адрес сгенерировать, чтобы «попасть» на рекурсивную запись.
Как только вы сгенерируете виртуальные адреса, соответствующие записям в директории страниц (соединенные через рекурсивную запись), записи директории страниц можно будет считать записями таблицы страниц. Если структура записей таблицы страниц соответствует структуре записей директории страниц, то их можно считать равнозначными при трансляции адресов.
В итоге это дает возможность ссылаться на любую страничную структуру через виртуальную память. Недостатком рекурсивного отображения можно считать необходимость выделения дополнительного адресного пространства.
Отображение на одну страницу (Everything Mapped to the Same Page)
Важная особенность виртуальной памяти состоит в том, что она позволяет отображать физические страницы на множество виртуальных адресов в памяти. Это дает возможность отображать страницы, принадлежащие участку разделяемой памяти с атрибутом «только для чтения», на несколько процессов.
Страничные нарушения (Page Faults Everywhere)
Страничные нарушения возникают тогда, когда мы обращаемся к области, для которой не установлен инициализирующий бит. Еще страничное нарушение проявляется в тот момент, когда мы пытаемся провести некое действие, идущее вразрез с правами доступа (хотя в представленном примере разрешения не проверяются, в реальной системе подобное возможно).
Переключение контекста между двумя процессами (Context Switching Between 2 Processes)
Изменяя указатель на страничную структуру верхнего уровня, мы переходим в другую страничную директорию. При этом доступные адреса остаются теми же, но их содержимое меняется. Это объясняет, почему в ОС с виртуальной памятью множество процессов могут использовать один и тот же виртуальный указатель.
Решение проблемы внешней фрагментации (Solving External Fragmentation)
Внешняя фрагментация – это весьма неприятная вещь. Рассмотрим такую ситуацию: у вашего компьютера 4 ГБ памяти, но нет жесткого диска. После нескольких операций распределения памяти система оказалась в ситуации, когда все пространство памяти свободно, кроме одного байта в самой середине. В этом случае, если вам потребуется разместить большой трехгигабайтный блок, вы не сможете этого сделать (несмотря на то, что свободной памяти достаточно).
Из этой ситуации есть два выхода:
Второй вариант так же не сработает, потому что процесс ждет, что выделенный ему участок памяти будет непрерывным. Если он перестанет быть таковым, то придется создавать совершенно новый набор инструкций и сохранять информацию о том, как получить корректный адрес второй половины.
Виртуальная память помогает достаточно эффективно разрешить эту проблему. Можно с легкостью переназначить пространство виртуальных адресов, чтобы несвязанные между собой части физической памяти выглядели единым целым. В этом случае не происходит никакого перемещения данных – мы просто обновляем записи таблицы страниц.
Копирование при записи (Copy-On-Write)
Виртуальная память крайне полезна для повышения производительности при выполнении команды fork. Если делать полные копии каждой страницы памяти, которую использует процесс, то это приведет к пустой трате циклов CPU и RAM. Идея копирования при записи состоит в том, что мы просто отображаем образ памяти родительского процесса в адресное пространство дочернего процесса.
После этого ОС запрещает обоим процессам писать в эту память. Действительная копия будет создана только в исключительных ситуациях. На практике выходит так, что после создания процесса-копии большинство страниц никогда не модифицируется, а это только повышает эффективность метода, делая его менее ресурсоемким.
Эксперимент со страницами
Элдер провел эксперимент на своем компьютере с операционной системой Ubuntu 14.04. Он объявил несколько переменных подряд, чтобы посмотреть, будут ли их указатели также располагаться рядом друг с другом.
Вот, что он получил на выходе:
Видно, что указатели следуют не в заданном порядке. Элдер пошел дальше и провел еще один эксперимент, в котором показал, что константы, символы и функции хранятся в той последовательности, в которой их объявил программист. Код и объяснение вы можете найти здесь.
Вызов функции с помощью констант
В следующей программе задаются несколько произвольных констант (которые позже будут заменены) и функция, которая принимает на входе целое число и увеличивает его на 8. В данном примере функция main следует сразу за функцией func1. После запуска программа выводит информацию, необходимую для выполнения функции func1.
Можно просто скопировать эти значения в целочисленные константы, которые будут расположены в памяти одна за другой (пример может не сработать, если ваша система отличается от системы Элдера). Теперь, поскольку они находятся на одной странице, можно обратиться к ним как к исполняемым данным и использовать вместо указателя на функцию указатель на «a».
На выходе по-прежнему имеем число 37.
Виртуальная память: Что это и как ее увеличить?
Виртуальная память — что это?
Виртуальная память является подкачкой (дополнением) оперативной памяти. Она присутствует практически во всех операционных системах.
При запуске ресурсоемких программ у нас постоянно возникает потребность в виртуальной памяти. По этому сегодня мы рассмотрим подробный обзор «что это такое?» и как мы можем ее изменить в лучшую сторону.
Что такое виртуальная память?
Виртуальная память (Virtual Memory, ВП) — это метод управления памятью компьютера, использующий для работы файл подкачки (swap file). При недостатке существующего объема ОЗУ, позволяет запускать на ПК более ресурсозатратные программы. В таком случае данные приложения автоматически перемещаются между основной памятью и вторичным хранилищем.
Виртуальная память так же обладает рядом достоинств:
За счет ее использования компьютер способен изолировать запущенные процессы друг от друга и рационально распределять RAM.
Как узнать объем файла подкачки (swap file)
Файл подкачки хранится на винчестере компьютера. Если для работы устройства используется несколько жестких дисков, то он будет расположен на самом быстром из них. Определить объем ВП можно с использованием стандартных средств Windows или специального софта.
Размер свапа подкачки можно узнать через штатную утилиту «Системный монитор».
Для этого:
При определении размера ВП система исходит не из объема ОЗУ, а из задач, которые выполняются на устройстве. Поэтому для определения размера необходимо запустить приложения и компоненты, которые обычно используются компьютером и посмотреть пиковое значение свапинга в течение этого сеанса. Он и будет определять величину файла подкачки.
Dump File и его типы
Swap используется не только для расширения физической памяти, но и для создания аварийных дампов при возникновении «внештатных» аварийных ситуаций.
Как это работает:
Таким образом при автоматическом выборе размера свапа, Windows руководствуется настройками для создания аварийного дампа.
Загрузка и восстановление
Дампы можно разделить на 4 типа:
В него записывается все содержимое RAM на момент незапланированного завершения работы. С учетом этой информации файл подкачки должен иметь размер равный физической памяти компьютера +1 МБ (используется для создания записи в системном журнале).
В него записывается только информация и память, выделенная для ядра операционной системы. Он занимает сравнительно меньше места и его объема достаточно, чтобы Windows могла определить причины аварийного завершения работы.
Записывает только самую необходимую информацию для выявления причин аварийного сбоя. Здесь находится стоп-код и описание самой ошибки, дополнительно указываются загруженные на устройство драйвера и перечень запущенных процессов.
Доступен только для операционных систем семейства Windows начиная от восьмерки и выше, либо Server 2012. Представляет собой аналог дампа ядра, но с тем отличием, что система может постоянно менять размер файла подкачки, позволяя ей выбирать оптимальный для работы вариант.
Как изменить Dump File
Перед тем, как менять размер виртуальной памяти, необходимо правильно определить и выбрать тип дампа. Сделать это можно используя штатные инструменты Windows. Для этого выполните следующие действия:
Загрузка и восстановление
Как изменить объем виртуальной памяти через быстродействие
Запустите системную утилиту «Выполнить» одновременным нажатием клавиш Windows+R или откройте ее через Пуск. После этого:
По умолчанию система определяет размер полностью в автоматическом режиме. Это наиболее оптимальная опция для Windows. При изменении объема свапа вручную важно, чтобы новый размер виртуальной памяти был не менее существующего, в противном случае возможны сбои в работе ПК.
Как добавить виртуальную память на Windows
Как правило, среднестатистическому пользователю достаточно того объема ВП, которая выделяется устройством автоматически. Если на ПК мало физической RAM, то увеличить ее объем можно за счет свапа.
Для этого:
Рекомендации по использованию виртуальной памяти
Если вы не знаете, какой оптимальный объем для свапа выбрать и на что это будет влиять, то далее мы предлагаем ознакомиться вам с небольшими советами, которые помогут увеличить быстродействие ПК.
Итак, рассмотрим ряд советов:
После манипуляций с настройками компьютера и изменением размера ВП лучше перезагрузить компьютер (хотя это не всегда обязательно) и запустить специальную утилиту для дефрагментации. Это поможет переместить его ближе к началу раздела, чтобы система получала к нему моментальный доступ.
Так же подробно про ВП можно посмотреть в видеоролике ниже:
Виртуальная память или файл подкачки
В видео рассматривается оптимальный размер файла подкачки
Сегодня мы ответили на вопрос «Виртуальная память, что это? И для чего она нужна?». Она помогает значительно повысить быстродействие системы и используется для хранения информации при сбоях. По умолчанию объем файла подкачки регулируется Windows полностью в автоматическом режиме.
Если пользователь хочет указать его самостоятельно, то для этого необходимо учесть выбранный тип дампа (либо отключить его). Объем виртуальной памяти зависит от дампа и общего объема RAM.
Понравилась статья? Подпишитесь на канал, чтобы быть в курсе самых интересных материалов