Действительно ли виртуальная память полезна все время? - PullRequest
5 голосов
/ 10 октября 2011

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

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

(Кроме того, приложения, работающие вместе, всегда помещаются в ОЗУ.)

Ответы [ 4 ]

9 голосов
/ 10 октября 2011

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

  • Изоляция привилегированной памяти (каждое приложение не может касаться ядра или устройств с отображенной памятью)
  • Межпроцессный процессизоляция памяти (одно приложение не может видеть память другого приложения)
  • Статические адреса памяти (например, каждое приложение имеет main() по адресу 0x0800 0000)
  • Ленивая память (например, страницы в стеке выделяются и устанавливаются в ноль при первом доступе)
  • Перенаправленная память (например, сопоставленные с памятью файлы )
  • Код совместно используемой программы (если запущено несколько экземпляров программы или библиотеки, их код необходимо сохранить в памяти только один раз)
5 голосов
/ 10 октября 2011

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

3 голосов
/ 12 октября 2011

Еще несколько моментов для рассмотрения:

  • Глючные приложения, которые не обрабатывают сбои в коде выделения памяти
  • Глючные приложения, которые дают утечку выделенной памяти

Виртуальная память уменьшает серьезность этих ошибок.

1 голос
/ 28 октября 2011

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

Сеймур Крей занял позицию, согласно которой «виртуальная память ведет к виртуальной производительность. "и большинство (все?) Cray векторных машин не хватало виртуальных объем памяти. Это обычно приводит к повышению производительности на уровне процесса (переводы не нужны, процессы в оперативной памяти непрерывны), но могут привести худшее использование ресурсов на системном уровне (ОС не может использовать ОЗУ полностью, поскольку оно фрагментируется на уровне процесса).

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

Когда вы испытываете серьезные проблемы с производительностью (и стабильностью) часто встречается на современных узлах кластера HPC на основе Unix, когда пользователи переподписать ОЗУ и система начнет листать на диск, есть определенное сочувствие к модели Cray, где процесс либо начинается и работает с максимальной производительностью, или не запускается вообще.

...