Использование виртуальной памяти позволяет решить проблему

Обновлено: 05.07.2024

В этой статье содержатся основные сведения о реализации виртуальной памяти в 32-битных версиях Windows.

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

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

Процессы и пространства адресов

Всем процессам (например, исполняемым приложениям), работающим в 32-битных версиях Windows, назначены виртуальные адреса памяти (виртуальное пространство адресов), в диапазоне от 0 до 4 294 967 295 (2*32-1 = 4 ГБ), независимо от того, сколько оперативной памяти установлено на компьютере.

В конфигурации Windows по умолчанию для личного использования каждого процесса назначаются 2 гигабайта (ГБ) этого виртуального адресного пространства, а остальные 2 ГБ делятся между всеми процессами и операционной системой. Как правило, приложения (например, Блокнот, Word, Excel и Acrobat Reader) используют только часть 2 ГБ частного адресного пространства. Операционная система назначает кадры страниц оперативной памяти только тем виртуальным страницам памяти, которые используются.

Расширение физического адреса (PAE) — это функция 32-битной архитектуры Intel, которая расширяет адрес физической памяти (RAM) до 36 бит. PAE не меняет размер виртуального адресного пространства (которое остается на уровне 4 ГБ), а только объем фактической оперативной памяти, который может быть рассмотрен процессором.

Перевод между 32-битным виртуальным адресом памяти, используемым кодом, работающим в процессе, и 36-битным адресом оперативной памяти обрабатывается компьютерным оборудованием автоматически и прозрачно в соответствии с таблицами переводов, которые поддерживаются операционной системой. Любая виртуальная страница памяти (32-битный адрес) может быть связана с любой физической страницей оперативной памяти (36-битным адресом).

В следующем списке описывается количество оперативной памяти различных Windows версий и выпусков (по данным на май 2010 г.):

Версия Windows ОЗУ
Windows NT 4.0 4 ГБ
Windows 2000 Professional 4 ГБ
Windows 2000 Standard Server 4 ГБ
Windows 2000 Advanced Server 8 ГБ
Windows 2000 Datacenter Server 32 ГБ
Windows XP Professional 4 ГБ
Windows Веб-издание Server 2003 2 ГБ
Windows Сервер 2003 выпуск Standard 4 ГБ
Windows Сервер 2003 выпуск Enterprise 32 ГБ
Windows Выпуск центра обработки данных Server 2003 64 ГБ
Windows Vista 4 ГБ
Windows Server 2008 Standard 4 ГБ
Windows Server 2008 Enterprise 64 ГБ
Windows Server 2008 Datacenter 64 ГБ
Windows 7 4 ГБ

Файл подкачки

Оперативная память — это ограниченный ресурс, в то время как для большинства практических целей виртуальная память не ограничена. Может быть много процессов, и каждый процесс имеет свои собственные 2 ГБ частного виртуального адресного пространства. Если память, используемая всеми существующими процессами, превышает доступную оперативную память, операционная система перемещает страницы (4-КБ частей) одного или более виртуальных адресных пространств на жесткий диск компьютера. Это освободит раму оперативной памяти для других применений. В Windows системах указанные страницы хранятся в одном или Pagefile.sys файлах в корне раздела. В каждом разделе диска может быть один такой файл. Расположение и размер файла страницы настроены в System Properties (нажмите кнопку Advanced, щелкните Производительность и нажмите кнопку Параметры).

Пользователи часто задают вопрос о том, насколько большим должен быть этот pagefile? На этот вопрос нет единого ответа, так как он зависит от количества установленной оперативной памяти и от объема виртуальной памяти, требуемой рабочей нагрузкой. Если других сведений нет, то обычная рекомендация в 1,5 раза больше установленной оперативной памяти является хорошей отправной точкой. В серверных системах обычно необходимо иметь достаточно оперативной памяти, чтобы не было недостатка и чтобы не использовался pagefile. В этих системах это может не служить никакой полезной цели для поддержания большого pagefile. С другой стороны, если дискового пространства достаточно, сохранение большого pagefile (например, в 1,5 раза больше установленной оперативной памяти) не вызывает проблем, и это также устраняет необходимость беспокоиться о том, насколько большим он должен быть.

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

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

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

  • 2 ГБ общего виртуального адресного пространства для системы (ядра)
  • 2 ГБ частного виртуального адресного пространства за один процесс (режим пользователя)
  • 660 МБ системного хранилища PTE (Windows Server 2003 и ранее)
  • 470 МБ хранилища пула страниц (Windows Server 2003 и ранее)
  • 256 МБ неоплаченного хранилища пула (Windows Server 2003 и ранее)

Это относится к Windows Server 2003 в частности, но это может также применяться к Windows XP и Windows 2000. Однако Windows Vista, Windows Server 2008 и Windows 7 не разделяют эти архитектурные ограничения. Ограничения на память пользователя и ядра (цифры 1 и 2 здесь) одинаковы, но ресурсы ядра, такие как PTEs и различные пулы памяти, динамически. Эта новая функция позволяет использовать как страницу, так и неоплаченную память. Это также позволяет PTEs и пул сеансов расти за пределы, которые были рассмотрены ранее, до точки, где все ядро исчерпано.

Часто находятся и цитируются такие утверждения, как следующие:

С помощью терминалного сервера 2 ГБ общего адресного пространства будут полностью использоваться до использования 4 ГБ оперативной памяти.

В некоторых случаях это может быть верно. Однако необходимо следить за системой, чтобы узнать, применяются ли они к вашей конкретной системе или нет. В некоторых случаях эти утверждения являются выводами из определенных сред Windows NT 4.0 или Windows 2000 и не обязательно применимы к Windows Server 2003. В Windows Server 2003 были внесены значительные изменения, чтобы снизить вероятность того, что эти архитектурные ограничения будут фактически достигнуты на практике. Например, некоторые процессы, которые находились в ядре, были перенесены в неядерные процессы, чтобы уменьшить объем памяти, используемый в общем виртуальном пространстве адресов.

Мониторинг использования оперативной памяти и виртуальной памяти

Монитор производительности является принципиальным средством для мониторинга производительности системы и определения расположения узких мест. Чтобы запустить монитор производительности, нажмите кнопку Начните, нажмите панель управления, нажмите административные средства, а затем дважды щелкните Монитор производительности. Вот сводка некоторых важных счетчиков и то, что они вам говорят:

Memory, Committed Bytes: This counter is a measure of the demand for virtual memory.

Это показывает, сколько bytes было выделено процессами и к которым операционная система совершила раму страницы ram или слот страницы в pagefile (или возможно оба). По мере того, как количество совершенных bytes будет больше, чем доступная оперативная память, будет увеличиваться и размер используемой страницы также увеличится. В какой-то момент действие paging начинает существенно влиять на производительность.

Process, Working Set, _Total: Этот счетчик является показателем виртуальной памяти в активном использовании.

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

Paging File, %pagefile in use: This counter is a measure of how much of the pagefile is actually being used.

Используйте этот счетчик, чтобы определить, является ли pagefile подходящим размером. Если этот счетчик достигает 100, страница заполнена, и все перестает работать. В зависимости от волатильности рабочей нагрузки, возможно, необходимо, чтобы эта страница была достаточно большой, чтобы она использовалась не более чем на 50-075 процентов. Если большая часть страницы используется, наличие более одного на разных физических дисках может повысить производительность.

Memory, Pages/Sec. Этот счетчик является одним из наиболее непонимаемого.

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

Memory, Pages Output/Sec. На этом счетчике показано, сколько страниц виртуальной памяти было записано на страницу, чтобы освободить кадры страниц оперативной памяти для других целей каждую секунду.

Это лучший счетчик, чтобы отслеживать, если вы подозреваете, что paging является узким местом производительности. Даже если установленный объем оперативной памяти превышает установленный объем оперативной памяти, если выход страниц/сек в основном низкий или нулевой, существенной проблемы производительности из-за недостаточной оперативной памяти не возникает.

Память, кэш-bytes, memory, Pool Nonpaged Bytes, Memory, Pool Paged Bytes, Memory, System Code Total Bytes, Memory, System Driver Total Bytes:

Сумма этих счетчиков — это показатель того, сколько из 2 ГБ общей части виртуального адресного пространства с 4 ГБ фактически используется. Используйте эти данные, чтобы определить, достигает ли ваша система одного из обсуждающихся ранее архитектурных ограничений.

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

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

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

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

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

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

Виртуальная память (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.

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

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

Понятие виртуальной памяти

Разработчикам программного обеспечения часто приходится решать проблему размещения в памяти больших программ, размер которых превышает объем доступной оперативной памяти. Один из вариантов решения данной проблемы – организация структур с перекрытием – рассмотрен в предыдущей лекции. При этом предполагалось активное участие программиста в процессе формирования перекрывающихся частей программы. Развитие архитектуры компьютеров и расширение возможностей операционной системы по управлению памятью позволило переложить решение этой задачи на компьютер . Одним из главных достижений стало появление виртуальной памяти ( virtual memory ). Впервые она была реализована в 1959 г. на компьютере "Атлас", разработанном в Манчестерском университете.

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

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

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

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

Таким образом, возможность обеспечения (при поддержке операционной системы) для программы "видимости" практически неограниченной (характерный размер для 32-разрядных архитектур 2 32 = 4 Гбайт) адресуемой пользовательской памяти (логическое адресное пространство ) при наличии основной памяти существенно меньших размеров (физическое адресное пространство ) – очень важный аспект.

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

Например, 16-разрядный компьютер PDP-11/70 с 64 Кбайт логической памяти мог иметь до 2 Мбайт оперативной памяти. Операционная система этого компьютера тем не менее поддерживала виртуальную память , которая обеспечивала защиту и перераспределение основной памяти между пользовательскими процессами.

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

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

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

Любая из трех ранее рассмотренных схем управления памятью – страничной , сегментной и сегментно-страничной – пригодна для организации виртуальной памяти . Чаще всего используется cегментно- страничная модель , которая является синтезом страничной модели и идеи сегментации. Причем для тех архитектур, в которых сегменты не поддерживаются аппаратно, их реализация – задача архитектурно-независимого компонента менеджера памяти.

Любая программная система имеет логическую модель памяти. Самая простая из них — совпадающая с физической, когда все программы имеют прямой доступ ко всему адресному пространству. При таком подходе программы имеют доступ ко всему адресному пространству, не только могут “мешать” друг другу, но и способны привести к сбою работы всей системы — для этого достаточно, например, затереть кусок памяти, в котором располагается код ОС. Кроме того, иногда физической памяти может просто не хватить для того, чтобы все нужные процессы могли работать одновременно. Виртуальная память — один из механизмов, позволяющих решить эти проблемы. В данной статье рассматривается работа с этим механизмом со стороны операционной системы на примере ОС Embox. Все функции и типы данных, упомянутые в статье, вы можете найти в исходном коде нашего проекта. Будет приведён ряд листингов, и некоторые из них слишком громоздки для размещения в статье в оригинальном виде, поэтому по возможности они будут сокращены и адаптированы. Также в тексте будут возникать отсылки к функциям и структурам, не имеющим прямого отношения к тематике статьи. Для них будет дано краткое описание, а более полную информацию о реализации можно найти на вики проекта.

Содержание

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

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

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

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

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

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

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

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

Архитектурные средства поддержки виртуальной памяти

Уже давно существует проблема размещения в памяти программ, размер которых превышает размер доступной памяти. Один из вариантов ее решения организация структур с перекрытием рассмотрен в предыдущей главе (link is external). При этом предполагалось активное участие программиста в процессе сегментации и загрузки программы.

Было предложено переложить проблему на компьютер. Развитие архитектуры компьютеров привело к значительному усложнению организации памяти, соответственно, усложнились и расширились задачи операционной системы по управлению памятью. Одним из главных усовершенствований архитектуры стало появление виртуальной памяти (virtual memory). Она впервые была реализована в 1959 г. на компьютере Атлас, разработанном в Манчестерском университете, и стала популярной только спустя десятилетие.

При помощи виртуальной памяти обычно решают две задачи:

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

Возможность выполнения программы, находящейся в памяти лишь частично имеет ряд вполне очевидных преимуществ:

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

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

Объем ввода-вывода для выгрузки части программы на диск может быть меньше, чем в варианте классического свопинга, в итоге, каждая программа будет работать быстрее.

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

С целью защиты виртуальная память поддерживалась и на компьютерах с 16-разрядной адресацией, в которых объем основной памяти зачастую существенно превышал 64 Кбайта (размер виртуальной памяти). Например, 16-разрядный компьютер PDP-11/70 мог иметь до 2 Мбайт оперативной памяти. Операционная система этого компьютера, тем не менее, поддерживала виртуальную память, основным смыслом которой являлось обеспечение защиты и перераспределения основной памяти между пользовательскими процессами.

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

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

Традиционно считается, что существует три модели виртуальной памяти:

  • страничная,
  • сегментная
  • и их комбинация - сегментно-страничная модел

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

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

Одним из достижений современных ОС является грамотное и эффективное разделение средств управления виртуальной памятью на:

  • аппаратно-независимую
  • и аппаратно-зависимую части.

Коротко рассмотрим, что и каким образом входит в аппаратно-зависимую часть подсистемы управления виртуальной памятью. Компоненты аппаратно-независимой подсистемы рассмотрены в следующей главе (link is external).

Итак, мы имеем большое (для 32-разрядных архитектур это обычно 2^32 = 4 Гб) виртуальное адресное пространство и физическое пространство существенно меньшего размера.

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

Таким образом, важный компонент менеджера виртуальной памяти система или функция отображения (трансляции) адресов.

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

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

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

Управление виртуальной памятью

Процессам выделяется линейное логическое адресное пространство. Устройство управления памятью процессора переводит логические адреса в физические. Если поделить 4ГБ памяти на страницы размером 4кБ, то получится 1 миллион страниц. Процессор применяет двумерную структуру для обращения к этому миллиону страниц. Это можно представить себе как матрицу 1024х1024. Первая размерность называется каталогом страниц (Page Directory), а вторая таблицей страниц (Page Table). Располагая подобной структурой, можно создать каталог страниц, в котором 1024 записи, и каждая запись указывает на таблицу страниц. Каждая таблица страниц содержит в свою очередь 1024 записи, каждая из которых указывает на физический адрес 4кБ-ной страницы. Каждая запись в каталоге и таблице странице имеет 4 байта в длину, таким образом, чтобы разбить 4ГБ адресное пространство на 4кБ страницы, требуется структура размером 4х1024х1024 = 4МБ. Адреса памяти имеют 32 бита в длину, из которых 20 бит (10 бит на каталог страниц + 10 бит на таблицу страниц) являются физическим адресом страницы, а 12 бит - индексом внутри выбранной страницы.

Применение такой технологии позволяет процессу использовать 4ГБ адресного логического (виртуального) адресного пространства. Логические адресные пространства процессов не пересекаются, и логический адрес одного процесса не может указывать на физический адрес другого. Это называется виртуальным адресным пространством, поскольку хоть у процесса и есть 4ГБ виртуального адресного пространства, использовать он может лишь столько памяти, сколько ему выделено. Общий объём памяти, одновременно занимаемый всеми процессами, не может превысить сумму основной памяти и файла подкачки (Pagefile). Это называется пределом для выделения памяти (Commit Limit). Если процесс запрашивает больше памяти (Commit), то ОС проверяет, имеется в свободная память, и если есть, выделяет её процессу. Таким образом ОС гарантирует, что процессу реально выделена память, будь то в области физическая или массовой памяти. Объём всей виртуальной памяти, выделенной всем процессам, называется текущей выделенной памятью (Current Commit Charge). Для определения оптимального размера файла подкачки необходимо знать, сколько виртуальной памяти процессы реально занимают. Для этого нужно найти пик выделенной памяти (Peak Commit Charge), что чего можно, например, проследить за пиком выделенной памяти при одновременном запуске всех процессов, и из полученной величины вычесть объём физической памяти компьютера. Полученная разница и составит размер файла подкачки.

Менеджер виртуальной памяти

Менеджер виртуальной памяти (далее просто «менеджер памяти») — часть операционной системы, благодаря которой можно адресовать память большую, чем объем физической памяти (ОЗУ). Благодаря виртуальной памяти можно запускать множество ресурсоёмких приложений, требующих большого объёма ОЗУ. Максимальный объём виртуальной памяти, который можно получить, используя 24-битную адресацию — 16 мегабайт. С помощью 32-битной адресации можно адресовать до 4 ГБ виртуальной памяти. А 64-битная адресация позволяет работать уже с 18 эксабайтами памяти.

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

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