25

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

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

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

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

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

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

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

6 ответов6

39
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 КБ повредят где-то память. :-(
4

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

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

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

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

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

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

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

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

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

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

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

0

Я знаю, что уже слишком поздно ... но все же подумал, что это полезно.

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

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

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

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

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

-2

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

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

-4

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .