Каковы факторы, которыми ограничена виртуальная память? - PullRequest
4 голосов
/ 12 апреля 2011

Что я знаю, так это то, что размер виртуальной памяти ограничен только количеством адресных строк.Но в Внутренние и операционные принципы операционной системы Уильяма Сталлингса я читал, что виртуальная память также ограничена размером вторичной памяти.
1.How?
2. Обмен (между основной памятью ивторичная память) необходимое условие для виртуальной памяти?Я имею в виду, если обмен не разрешен, тогда мы все еще можем назвать это виртуальной памятью, хотя преимущества будут ограничены?
Тогда у меня есть несколько последующих вопросов на основе ответа.

Редактировать:


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

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

Isесть здесь какая-то игра слов в «виртуальной памяти» и «размере виртуальной памяти»?

Ответы [ 2 ]

3 голосов
/ 13 апреля 2011

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

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

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

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

Возвращаясь к вашим конкретным вопросам:

1. [Виртуальная память также ограничена размером вторичной памяти] Как?

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

2. Является ли перестановка (между основной и вторичной памятью) необходимым условием для виртуальной памяти?

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

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

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

2 голосов
/ 13 апреля 2011

Что касается отрывка из книги, я вижу источник вашего замешательства. Я должен был прочитать это пару раз, чтобы увидеть, что он говорит. Более ясное объяснение может быть следующим: Виртуальная память - это абстракция, которая позволяет программе распределять память, не беспокоясь о физических ограничениях системы, в которой она работает. Программы обращаются к виртуальной памяти наивно; абстракция (виртуальная память) различает места виртуальной памяти, которые отображаются непосредственно на физические места, и места, которые сопоставляются с вторичными ячейками памяти. Или же это может быть абсолютно ни к чему, и у вас есть ошибка в руках.

Номер 2 определенно не соответствует действительности. Виртуальная память там «доступна» для использования программами, независимо от того, имеет она физическую поддержку или нет. Когда он говорит ограничен ... количеством доступной дополнительной памяти Я не совсем понимаю эту часть. Можно, конечно, спроектировать слой виртуальной памяти, который имеет 100 гигашизлов адресного пространства, и это было бы просто замечательно.

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

-tjw

...