Почему виртуальная память больше физической

Обновлено: 04.07.2024

Я понимаю, что виртуальная память дурачит программу, отображая больше памяти, чем на самом деле доступно.

но в конечном счете он должен сопоставить логический адрес в физический адрес на самом деле. Теперь, как это увеличивает память?

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

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

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

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

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

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

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

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

неспециалиста объяснение

система должна будет сопоставить каждый виртуальный адрес с физическим адресом при использовании этой памяти, но не вся память используется одновременно. Например, предположим, что в вашем браузере 20 вкладок, каждая из которых занимает 1 ГБ памяти. В ОС без поддержки виртуальной памяти для этого потребуется 20 ГБ оперативной памяти. Хитрость заключается в том, что вы не просматриваете все 20 вкладок одновременно, поэтому ОС с виртуальной памятью позволит вам использовать ваш браузер например, с парой ГБ оперативной памяти, заменяя неактивные вкладки на диск.

более сложные аспекты

Виртуальная память не используется исключительно для перекачки. Это основная цель на самом деле, чтобы избежать фрагментации оперативной памяти, которая является большой проблемой на системах без управления виртуальной памятью: вы можете хорошо иметь 1 ГБ оперативной памяти бесплатно, но если он приходит в куски 10 МБ, приложение, запрашивающее 100 МБ не сможет работать.

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

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

Я понимаю, что виртуальная память дурачит программу, отображая больше памяти, чем на самом деле доступно.

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

но в конечном счете он должен сопоставить логический адрес в физический адрес на самом деле. Теперь, как это увеличивает память?

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

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

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

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

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

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

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

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

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

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

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

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

Виртуальная память - что это?

Виртуальная память является подкачкой (дополнением) оперативной памяти. Она присутствует практически во всех операционных системах.

При запуске ресурсоемких программ у нас постоянно возникает потребность в виртуальной памяти. По этому сегодня мы рассмотрим подробный обзор «что это такое?» и как мы можем ее изменить в лучшую сторону.

Что такое виртуальная память?

Виртуальная память (Virtual Memory, ВП) — это метод управления памятью компьютера, использующий для работы файл подкачки (swap file). При недостатке существующего объема ОЗУ, позволяет запускать на ПК более ресурсозатратные программы. В таком случае данные приложения автоматически перемещаются между основной памятью и вторичным хранилищем.

Виртуальная память так же обладает рядом достоинств:

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

За счет ее использования компьютер способен изолировать запущенные процессы друг от друга и рационально распределять RAM.

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

Как узнать объем файла подкачки (swap file)

Файл подкачки хранится на винчестере компьютера. Если для работы устройства используется несколько жестких дисков, то он будет расположен на самом быстром из них. Определить объем ВП можно с использованием стандартных средств Windows или специального софта.

Системный монитор

Размер свапа подкачки можно узнать через штатную утилиту «Системный монитор».

Для этого:

  • Откройте меню «Пуск» и начните вводить название приложения для мониторинга.
  • Появится новое окно. Здесь вы найдете основную информации о свапе, пиковые значения подсчета обмена страниц, процент использования системой и размер.

При определении размера ВП система исходит не из объема ОЗУ, а из задач, которые выполняются на устройстве. Поэтому для определения размера необходимо запустить приложения и компоненты, которые обычно используются компьютером и посмотреть пиковое значение свапинга в течение этого сеанса. Он и будет определять величину файла подкачки.

Узнать объем ВП и другие параметры системы можно используя специальную утилиту Vmmap.exe. Она доступна для бесплатной загрузки на официальном сайте Microsoft и не требует установки. Поставляется в виде исполняемого файла, полностью на английском языке.

Dump File и его типы

Swap используется не только для расширения физической памяти, но и для создания аварийных дампов при возникновении «внештатных» аварийных ситуаций.

Как это работает:

  • Во время первоначального запуска системы, Windows создает и сохраняет на жестком диске специальную карту секторов, которые занимает на HDD свап.
  • Если происходит сбой, то операционная система изучает созданную карту на наличие неисправностей. В идеале она должна быть целостной. Если это так, то данные переписываются на винчестер и в свап по созданной карте секторов.
  • При следующем перезапуске компьютера SMSS анализирует ВП и проверяет его на наличие дампов, если он есть, то данные копируются из файла подкачки в специальный dump file. Дополнительно обновляется системный журнал. Поэтому открыв его можно узнать, была ли проведена эта операция.

Таким образом при автоматическом выборе размера свапа, Windows руководствуется настройками для создания аварийного дампа.

Загрузка и восстановление

Загрузка и восстановление

Дампы можно разделить на 4 типа:

В него записывается все содержимое RAM на момент незапланированного завершения работы. С учетом этой информации файл подкачки должен иметь размер равный физической памяти компьютера +1 МБ (используется для создания записи в системном журнале).

Выбирается системой автоматически только в том случае, если общий объем физической памяти 4 ГБ и менее.

В него записывается только информация и память, выделенная для ядра операционной системы. Он занимает сравнительно меньше места и его объема достаточно, чтобы Windows могла определить причины аварийного завершения работы.

Выбирается по умолчанию, если размер RAM превышает 4 ГБ. При выборе дампа памяти ядра важно следить, чтобы минимальный размер для файла подкачки составлял хотя бы ⅓ от общего объема физической.

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

Необходимый размер файла подкачки для него —не менее 2 Мб.

Доступен только для операционных систем семейства Windows начиная от восьмерки и выше, либо Server 2012. Представляет собой аналог дампа ядра, но с тем отличием, что система может постоянно менять размер файла подкачки, позволяя ей выбирать оптимальный для работы вариант.

Размер свапа будет напрямую зависит от объема RAM и выбранного типа дампа. Дополнительно стоит учитывать и версию операционной системы. Это касается серверных и обычных сборок.

Как изменить Dump File

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

  • Правой кнопкой мыши кликните по значку «Мой компьютер» и выберите меню «Свойства» . Найдите пункт «Дополнительные параметры» . Откроются свойства системы.

Система

  • Попасть в них можно и другим способом. Откройте диалоговое меню: «Выполнить» и в нем наберите:
  • На вкладке «Дополнительно» найдите категорию, которая посвящена загрузке и восстановлению системы. После чего нажмите на кнопку «Параметры» .
  • В блоке «Отказ системы» найдите графу запись отладочной информации и выберите подходящий тип дампа. Для Windows 10 по умолчанию используется Автоматический.

Загрузка и восстановление

Загрузка и восстановление

  • По желанию дамп можно отключить. Для этого в выпадающем списке выберите «Нет» . После этого система не будет делать резервные копии.
Учтите, что это может привести к безвозвратной потери важных данных.

Нажмите «Ок» , как только внесете все необходимые изменения, чтобы они вступили в силу. Как только тип дампа будет выбран, можно приступать к изменению объема виртуальной памяти.

Как изменить объем виртуальной памяти через быстродействие

Запустите системную утилиту «Выполнить» одновременным нажатием клавиш Windows+R или откройте ее через Пуск. После этого:

и нажмите «Ок» .

  • Перейдите на вкладку «Дополнительно» и найдите здесь категорию «Быстродействие» .

Свойства системы

  • Кликните по серой кнопке «Параметры» . Откроется новое окно. Здесь перейдите на вкладку «Дополнительно» .
  • В нижней части экрана будет указан объем виртуальной памяти. Нажмите «Изменить» , чтобы ввести другой параметр и увеличить, либо уменьшить размер файла подкачки.

Параметры быстродействия

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

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

Как добавить виртуальную память на Windows

Как правило, среднестатистическому пользователю достаточно того объема ВП, которая выделяется устройством автоматически. Если на ПК мало физической RAM, то увеличить ее объем можно за счет свапа.

Для этого:

  • Правой кнопкой мыши кликните по значку «Мой компьютер» и в выпадающем списке выберите графу «Свойства» .
  • Откроется окно для работы с параметрами. В левой части экрана найдите надпись «Дополнительный параметры системы» .
Для этого необходимы права администратора. При появлении запроса на ввод пароля, укажите его, после чего продолжите изменение параметров.
  • Здесь найдите «Быстродействие» и через меню «Параметры» откройте дополнительные свойства. На отразившейся вкладке выберите «Изменить» напротив «Виртуальная память» .
  • Уберите галочку напротив графы «Автоматически выбирать объем файла подкачки» . После этого станут доступны остальные пункты.

Параметры быстродействия

  • Выберите диск, на котором много свободного места и чьи ресурсы будут использоваться для создания файла подкачки.
  • Отметьте пункт «Указать размер» , после чего добавьте значение в пустое поле. При этом число в поле «Максимальный» должно быть в 1,5 раза, чем в поле «Исходный» .

Как только закончите работу, подтвердите действия нажатием кнопки «Ок» . Все изменения автоматически вступят в силу.

В некоторых случаях увеличение Virtual Memory помогает повысить скорость работы ПК, увеличить общее быстродействие.

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

VMMAP - Sysinternals

Если вы не знаете, какой оптимальный объем для свапа выбрать и на что это будет влиять, то далее мы предлагаем ознакомиться вам с небольшими советами, которые помогут увеличить быстродействие ПК.

Итак, рассмотрим ряд советов:

  • Если на устройстве используется несколько HDD или SSD, то для свапа указывайте тот диск, который не являетсясистемным. Здесь не должна быть установлена операционная система. В итоге это значительно повысит общую скорость работы.
  • Создавать можно несколько файлов подкачки. Если вы используете дамп, то хотя бы один свап должен находиться на системном диске. Для всех остальных случаев делать это не обязательно.
  • Если у вас несколько винчестеров с разными физическими параметрами, то выбирать следует тот, который отличается лучшими показателями скорости работы. Узнать это можно из технических характеристик HDD.
  • Если жесткий диск разбит на несколько разделов, то для файла подкачки следует выбирать тот, который является основным (первым). К этому участку есть мгновенный доступ, что серьезно влияет на скорость работы.
  • Не бойтесь указать слишком большой размер для файла подкачки. Если физический размер HDD позволяет это сделать, то выделите ВП от 4 объемов от существующей RAM. Слишком низкий показатель может привести к появлению ошибок, критическому завершению работы некоторых приложений (с потерей данных).
  • Старайтесь ограничивать минимальный объем swap файла. Это позволит избежать его постоянной фрагментации. Если вы используете компьютер для работы с ресурсозатратным ПО или он работает в качестве сервера для хранения баз данных, то размер файла подкачки должен составлять 2-3 полных объема ОЗУ. Во всех остальных случаях он должен быть равен RAM или быть больше в 1,5 раза.

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

Так же подробно про ВП можно посмотреть в видеоролике ниже:

Виртуальная память или файл подкачки

В видео рассматривается оптимальный размер файла подкачки

Сегодня мы ответили на вопрос «Виртуальная память, что это? И для чего она нужна?». Она помогает значительно повысить быстродействие системы и используется для хранения информации при сбоях. По умолчанию объем файла подкачки регулируется Windows полностью в автоматическом режиме.

Если пользователь хочет указать его самостоятельно, то для этого необходимо учесть выбранный тип дампа (либо отключить его). Объем виртуальной памяти зависит от дампа и общего объема RAM.

Понравилась статья? Подпишитесь на канал, чтобы быть в курсе самых интересных материалов

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

Виртуальная и физическая память Windows

Для каждого нового процесса, в операционной системе Windows, выделяется некоторый объём оперативной памяти. Процесс не обязательно должен использовать весь выделенный объем памяти, он может занять всего лишь часть. Этот объем памяти называется виртуальным адресным пространством.

Выделенная память для процесса

Физическая память

Виртуальную память так назвали, потому что процесс думает что он в операционной системе один. Процесс видит только выделенный ему объём памяти (своё виртуальное адресное пространство) и не знает сколько в системе реально физической памяти.

Соотношение виртуальной памяти с физической

В общем работу виртуальной и физической памяти можно представить, таким образом:

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

Размер виртуального адресного пространства теоретически ограничивается архитектурой компьютера. Но операционная система накладывает дополнительные ограничения.

Архитектура Теоретический пределРеальный предел для
системных компонентов Windows
Реальный предел для виртуального
адресного пространства процесса
32-разрядная4 ГБ2 ГБ2 ГБ
64-разрядная16 ЭБ =
= 17600000000 ГБ
128 ТБ =
= 128000 ГБ
128 ТБ =
= 128000 ГБ

Вы можете спросить, куда девается остальная память на 64-разрядной Windows? Она просто игнорируется, так как пока сложно себе представить такой объём оперативной памяти.

У физической памяти тоже есть лимит и он намного меньше чем лимиты для виртуальной памяти и составляет 24 ТБ.

Надеюсь вам стало понятнее зачем нужна виртуальная и физическая память Windows.


Мы в 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 ГБ памяти, но нет жесткого диска. После нескольких операций распределения памяти система оказалась в ситуации, когда все пространство памяти свободно, кроме одного байта в самой середине. В этом случае, если вам потребуется разместить большой трехгигабайтный блок, вы не сможете этого сделать (несмотря на то, что свободной памяти достаточно).

Из этой ситуации есть два выхода:

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

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

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

Копирование при записи (Copy-On-Write)

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

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

Эксперимент со страницами

Элдер провел эксперимент на своем компьютере с операционной системой Ubuntu 14.04. Он объявил несколько переменных подряд, чтобы посмотреть, будут ли их указатели также располагаться рядом друг с другом.


Вот, что он получил на выходе:


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

Вызов функции с помощью констант

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


На выходе имеем:


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

Идея написать статью о "виртуальной" памяти и её отличии от "оперативной" родилась после чтения многочисленных постов в интернете. Сложно поверить, но живут люди до сих пор уверенные что ОЗУ это и есть виртуальная. Тут тока можно "хлопнуть себя по лбу" и начать рассказывать что делает каждая память, чем отличается, какая быстрее и как расширить место под виртуальную память.

Поверьте на слово: уж какой,какой, а оперативной памяти много не бывает. При "тугом кошельке" люди устанавливают по 32 гигабайта, 64 гигабайта ОЗУ. Но этого мало. Потребуется временное хранилище куда будет записываться избыток информации которая не поместилась в "оперативную". То есть например на компьютере установленно 4 Гб "оперативки". Запускаем игру поглощающую 8Гб ОЗУ. Тогда 4 Гб. Возьмет на себя оперативная память и 4 Гб. Уйдёт на виртуальную память(Замечали наверное как резко пропадает свободное место при запуске тяжёлой программы). Таким образом получается файл подкачки который не поместился в планки памяти. Сам файл скрытый поэтому разглядеть его получится только после манипуляции со скрытыми файлами. Виртуальная память медлительная. Но избежать появления виртуальной памяти не получится, даже при объёме в 128 Гигабайт ОЗУ, при запуске блокнота, пасьянса паука и музыки на машине в 16 Гб появится файл подкачки. Объяснить по чему так довольно сложно и честно говоря если знаете как это объяснить проще то напишите в комментариях. Совсем дотошным рекомендую разобраться с процессами на компьютере и их адресными пространствами.

Итак, мы остановились на файле подкачки созданном из излишка оперативной памяти. Каждому процессу выделено определенное количество памяти. Всё остальное не укладывающееся в рамки оперативки превращается в файл "Pagefile.sys". Размер этого файла выбирается автоматически, но можно установить и в ручную. Теперь минутка истории, в 1950 году столкнулись с проблемой: программы выходили за объём ОЗУ. И не удивляйтесь да в 1950 году был компьютер(кому интересно читайте статью на канале: ", как появился компьютер"). Так вот уже тогда озадачились тем как увеличить оперативную память да так что бы это было легко и понятно. Разделение памяти на блоки и потом поэтапное взаимодействие с каждым в отдельности легло в основу виртуальной памяти. Появившееся в 1956 году.

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

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

Давайте в конце определимся с размером("оптимальным") для файла виртуальной памяти. Некоторые "специалисты" рекомендуют вообще отключать этот файл. Тут сложно поспорить так как эта память медленная и большой объем может существенно замедлять систему. Но все же отключать её не стоит. Каждый "специалист" имеет свою точку зрения на этот счет и если кто-то знает точную формулу вычисления то напишите в комментариях. Тут лишь обозначим что на первом месте рекомендуется оставить автоматическое значение, а на втором придерживаться такой прогрессии: 4Гб. ОЗУ. = 3Гб. Подкачки. 8Гб. ОЗУ. = 2Гб. Подкачки. И тд. Повторюсь что отключать не рекомендую. Не то возможно выпадение синего экрана или некоторые программы перестанут запускаться.

Мы поговорили о видах памяти и узнали что быстрее. Даже вычислили сколько надо выставить что бы стало оптимально. Теперь узнаем как увеличить файл подкачки. Открываем свойства компьютера и переходим в дополнительно. Там находим Быстродействие и жмём параметры.Теперь дополнительно.Изменить. Значения верхние и нижние делаем одинаковые. Окей и перезагрузка.

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

Читайте также: