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

18079
Yacoby

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

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

Где, как говорит Википедия :

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

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

Обратите внимание, что «виртуальная память» - это больше, чем просто «использование дискового пространства для увеличения объема физической памяти».

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

25
Я полагаю, что записка из Википедии включает некоторые уточнения относительно того, что используется в терминах смежных вещей. JB King 14 лет назад 0
Этот вопрос, вероятно, получит лучший ответ на SO. Captain Segfault 14 лет назад 0
Не путайте виртуальную память с тем, как она используется. 1-е предложение Википедии определяет, что это такое. Ваша книга говорит о том, как она обычно используется. Когда люди говорят о «страницах», они говорят о конкретной реализации виртуальной памяти. Tony Lee 14 лет назад 2
Ваш учебник просто неправильно. Есть много машин с виртуальной памятью и вообще без вторичного хранилища. Точно так же когда-то было много машин, которые могли использовать вторичное хранилище как часть основной памяти, но не поддерживали виртуальную память. «Виртуальная память» - это не память, а доступ к ней, как к памяти. Ваш учебник определяет обмен или пейджинг. David Schwartz 12 лет назад 2
Посмотрите это видео. Здесь есть основы для потребности в слое VMM. Объясняет основную архитектуру. http://www.youtube.com/user/learnwithtechies#p/u/10/Fx_I6-dL__0 13 лет назад 0
Учебник определяет его совершенно неправильно, вторичное хранилище не является частью определения. И даже утверждение Википедии о «больше, чем дисковом пространстве» вводит в заблуждение, потому что оно может вообще не включать диск - это утверждение звучит так, будто оно «расширяет память на диск» плюс что-то еще. Kelvin 11 лет назад 1
FWIW, Википедия сейчас перешла в противоположную крайность. Если бы пропустить эту фразу в конце второго абзаца «* возможность концептуально использовать больше памяти, чем физически доступно, используя технику подкачки. *», Вы бы даже не знали, что виртуальная память полезна для запуска большего количества программного обеспечения. чем вписывается в физическую память! ToolmakerSteve 6 лет назад 0

6 ответов на вопрос

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

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

Это дает несколько возможностей:

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

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

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

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

Я постараюсь начать медленно, а затем соберу все это для вас. Это вот так:

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

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

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

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

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

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

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

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

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

Теперь, если недостаточно места для загрузки этой страницы в память, у вас проблема. В этом случае некоторую ДРУГУЮ страницу, которая уже находится в памяти, необходимо «переставить» на диск, чтобы можно было загрузить страницу первой программы. Или это могут быть страницы из одной и той же программы. Иногда вы видите это в графических программах, например, в сильно загруженных системах, когда часть изображения загружается медленно и рисуется быстро, затем следующая часть загружается одинаково медленно и рисуется быстро, и когда вы возвращаетесь к работе с первым часть, она медленная СНОВА. Это потому, что они загружаются для дальнейшей работы, а затем снова выгружаются, так что можно заняться чем-то другим. Очевидно, что это очень медленный способ работы, и что вам действительно нужно, так это больше РЕАЛЬНОЙ памяти.

Я на 100% не согласен с этим ответом. Если «виртуальная память» относится к подкачке страниц, то система, которая не выполняет пейджинг (скажем, система, в которой нет подкачки или файлов подкачки), не может поддерживать виртуальную память. Но это явно безумие. David Schwartz 12 лет назад 0
@DavidSchwartz - у меня изначально была реакция, подобная вашей, но читая ответ более подробно, я не думаю, что это так плохо. Например, в [Wikipedia / virtual memory / Paged] (https://en.wikipedia.org/wiki/Virtual_memory#Paged) сказано: «Почти все реализации виртуальной памяти разделяют виртуальное адресное пространство на страницы, блоки смежных адресов виртуальной памяти». То есть «пейджинг» в широком смысле не * требует * файла страницы *, но относится к отображению виртуальных адресов в физические адреса. ToolmakerSteve 6 лет назад 0
Хм, с другой стороны, Ли говорит: «Все страницы информации не помещаются в памяти, поэтому некоторые страницы помещаются на диск и загружаются снова позже», поэтому Дэвид прав: в этом ответе пропущен тот существенный факт, что * paging * - это не только пейджинг на диск **. С другой стороны, Ли продолжает упоминать и другие преимущества виртуальной памяти (изоляция памяти). Если бы этот ответ был перефразирован, чтобы не путать «отображение страниц виртуальной памяти» с «подкачкой на диск», это было бы более полезно. ToolmakerSteve 6 лет назад 1
@ToolmakerSteve Проблема в том, что это очень распространенное заблуждение, и все, что усиливает это заблуждение, является, IMO, плохой вещью. Особенно плохо здесь, когда этот ответ пытается объяснить самые базовые понятия в очень простом вопросе - там самое главное не закладывать основы, основанные на распространенном заблуждении! David Schwartz 6 лет назад 0
@DavidSchwartz - согласен. Вы правы, он ** не ** определяет "виртуальную память", он определяет "как работает файл подкачки". Сначала я думал, что проблема была просто в том, что Ли не смог различить «пейджинг = отображение страниц памяти от виртуальной к физической» и «файл страницы = отображение страниц на диск», но после перечитывания он действительно говорил * * только ** о отображении на диск. (Как мы видим, из цитаты из учебника, из всех других ответов, кроме «Капитана», и из поиска в Google, это смешение двух понятий очень широко распространено. Я уверен, что я виновен в этом.) ToolmakerSteve 6 лет назад 0
0
sivaramaraju

I know it’s too late....but thought still it useful.

  • All are correct based on different viewpoints.
  • Virtual memory is a memory management technique whereas swap memory was area on the disk drive. Swap memory is generally called as swap space. Swap space refers to the portion of the virtual memory which is reserved as a temporary storage location. Swap space is utilized when available RAM is not able to meet the requirement of the system’s memory
  • You can refer to the below link for more details
-2
Racter

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

«Виртуальный», как определено на Dictionary.com: «временно смоделирован или расширен компьютерным программным обеспечением: виртуальный диск в ОЗУ; виртуальная память на жестком диске».

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

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

-2
Eric Buenaventura

Virtual memory is a feature of an operating system (OS) that allows a computer to compensate for shortages of physical memory by temporarily transferring pages of data from random access memory (RAM) to disk storage.

Meaning it is like a mirror or a sample memory that is used in virtual machine or virtual box to try Operating systems without formatting the computer.

Нет, это пейджинг. David Schwartz 8 лет назад 0
-4
Anarkie

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

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

Лучшие 2 совета, которые я могу предложить: 1) Виртуальная память должна быть установлена ​​как минимальная, так и максимальная примерно в 1,5 раза больше вашей физической памяти. ех. 2 ГБ ОЗУ = 3070 МБ Вирт. 2) При дефрагментации отключите файл подкачки. Дефрагментируйте 2 раза и вернитесь к исходному номеру. Это дает чистый кусок диска и увеличит скорость файла подкачки.

Это не совсем так - современные менеджеры памяти виртуализируют ВСЕ системную память. Это то, что позволяет разделять процессы - каждый процесс может касаться только своей собственной памяти. Диспетчер памяти отвечает за сопоставление этих виртуальных страниц с реальным хранилищем и, возможно, с фиксированным диском. Anthony Giorgio 14 лет назад 1
«Windows НЕ дефрагментирует эту часть вашего жесткого диска». просто обнулите файл pagefile.sys, перезагрузите компьютер, дефрагментируйте диск и снова включите подкачку, вуаля, свежий и непрерывный файл подкачки! однако PageDefrag от Sysinternals работает лучше, так как он также помещает файл подкачки в начало диска / раздела для лучшей производительности. 14 лет назад 1
Если этот ответ был правильным, то система Windows без настроенных файлов подкачки не могла бы обеспечить поддержку виртуальной памяти. Но это, очевидно, неправильно. Такая система может, например, по-прежнему отображать файлы в адресное пространство процесса, превышающее физическую ОЗУ, что является примером виртуальной памяти. David Schwartz 12 лет назад 1

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