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

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

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

Где, поскольку Википедия говорит:

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

и (Википедия также говорит),

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

Кто-либо может предложить какое-либо разъяснение, относительно которого корректно?

27
задан 18.11.2014, 17:03

4 ответа

Note that "virtual memory" is more than just "using disk space to extend physical memory size"

Виртуальная память является слоем абстракции, предоставленной каждому процессу. Компьютер имеет, скажем, 2 ГБ физической RAM, обращенной от 0 до 2G. Процесс мог бы видеть адресное пространство 4 ГБ, которых он имеет полностью к себе. Отображение от виртуальных адресов до физических адресов обрабатывается блоком управления памятью, которым управляет операционная система. Обычно это сделано в 4 КБ "страницы".

Это дает несколько функций:

  1. Процесс не видит памяти в других процессах (если ОС не хочет это к!)
  2. Память в данном виртуальном адресе не может быть расположена в том же физическом адресе
  3. Память в виртуальном адресе может быть "разбита на страницы" к диску, и затем "разбитая на страницы в", когда к этому получают доступ снова.

Ваш учебник определяет виртуальную память (неправильно) как просто № 3.

Даже без любого свопинга, особенно необходимо знать о виртуальной памяти, если Вы пишете драйвер устройства для устройства, которое делает DMA (прямой доступ к памяти). Ваш код драйвера работает на ЦП, что означает, что его доступы памяти через (виртуальный) MMU. Устройство, вероятно, не проходит MMU, таким образом, это видит необработанные физические адреса. Таким образом, как устройство записи драйвера необходимо удостовериться:

  1. Любые необработанные адреса памяти, которые Вы передаете аппаратным средствам, являются физическими, не виртуальными.
  2. Любой большой (много страница) блоки памяти, которую Вы отправляете, физически непрерывен. Массив 8K мог бы быть фактически непрерывным (через MMU), но две физически отдельных страницы. Если Вы скажете устройству писать 8K данных к физическому адресу, соответствующему запуску того массива, то это запишет первый 4K, где Вы ожидаете, но второй 4K повредит некоторую память где-нибудь.:-(
41
ответ дан 07.12.2019, 09:28

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

"Виртуальный", как определено на Dictionary.com: "временно моделируемый или расширенный программным обеспечением: виртуальный диск в RAM; виртуальная память на жестком диске".

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

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

-2
ответ дан 07.12.2019, 09:28

Я попытаюсь запуститься медленно, и затем поместить это все вместе для Вас. Это похоже на это:

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

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

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

Человеческое решение состоит в том, чтобы использовать блокнот. Мы записываем на страницах все вещи, которые мы не можем помнить сразу, но отослать к ним при выполнении сумм. Мы не смогли помнить огромный список объемов продаж в течение месяца, но мы можем посмотреть на страницы, получить информацию понемногу и обработать каждый бит. Это похоже на компьютер "подкачка страниц" его память - запись страниц, полных информации и помещения его в "виртуальную память" для дальнейшего использования и понимания, что этому нужны страница и загрузка той страницы назад от виртуальной памяти в реальную память. На Linux и Unix, место, где эти страницы хранятся, буквально называют "файлом подкачки", и страницы данных в памяти буквально называют "страницами". Различные системы имеют различные названия этих вещей, но общее понятие является почти таким же.

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

Теперь, где это становится более сложным, то, что, современное системное размещение в ОЗУ функции и защита памяти, которая все обычно обрабатывается той же аппаратной системой в компьютере: блок управления памятью или MMU.

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

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

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

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

4
ответ дан 07.12.2019, 09:28

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

Это становится хитрым, и иногда замедляйтесь, потому что Windows НЕ дефрагментирует эту часть Вашего жесткого диска.

Лучше всего 2 подсказки я могу предложить: 1) Virt Мадам, должен быть установлен и минута и макс. приблизительно в 1.5X Ваша физическая память.напр. 2 ГБ RAM = 3070 МБ Virt. 2) Когда дефрагментация, выключите свой страничный файл. Дефрагментация 2x, и сброс назад к исходному числу. Это дает чистую часть диска и увеличит скорость страничного файла.

-4
ответ дан 07.12.2019, 09:28
  • 1
    Это не абсолютно верно - современные диспетчеры памяти виртуализируют ВСЮ системную память. Это - то, что допускает разделение процесса - каждый процесс может только коснуться своей собственной памяти. Диспетчер памяти ответственен за отображение этих виртуальных страниц к основной памяти, и дополнительно к жесткому диску. – Anthony Giorgio 17.09.2009, 22:31
  • 2
    "Windows НЕ дефрагментирует эту часть Вашего жесткого диска". просто уничтожьте pagefile.sys, перезагрузку, дефрагментируйте диск и повторно включите подкачку страниц, voilá, новый и contigeous файл подкачки! однако, PageDefrag Sysinternals делает лучшее задание, поскольку он также поместит файл подкачки в начале диска/раздела для лучшей производительности. –  17.09.2009, 22:34

Теги

Похожие вопросы