Размер виртуального хранилища ограничен схемой адресации компьютерной системы и объемом доступной вторичной памяти, а не фактическим количеством основных хранилищ.
В книге, похоже, предполагается (неправильно), что вы не будете выделять виртуальную память, которую не планируете использовать. Таким образом, он предупреждает, что физическая память и жесткий диск, используемые для подкачки, ограничивают виртуальную память пригодную для использования (конечно, с точки зрения вашего процесса, так же как и другие требования к этому пулу ресурсов - ОС и другие процессы).
На практике часто бывает полезно выделить больше виртуальной памяти, чем вы могли бы фактически использовать, потому что вы можете захотеть, например:
- использовать виртуальную память для разреженного массива, где вы напрямую индексируете несколько разрозненных адресов,
- позволяет сбойу страницы при сбое системных ресурсов, а не усложняет ваш код некоторой попыткой отследить доступную память (помните, что это динамично с другими процессами и т. Д.) Или пессимистическим ограничением, которое означает, что вы не можете агрессивно использовать возможности вашей системы
- пусть каждая программа пользуется преимуществами, полагая, что она была загружена по адресу, для которого она была скомпилирована, поэтому она может использовать абсолютный адрес для инструкций перехода и т. Д., А не относительную
Возвращаясь к вашим конкретным вопросам:
1. [Виртуальная память также ограничена размером вторичной памяти] Как?
Опять же, оно ограничено в том смысле, что попытки использовать больше не удастся, когда память - физическая и подкачка - исчерпана.
2. Является ли перестановка (между основной и вторичной памятью) необходимым условием для виртуальной памяти?
Это немного расплывчато ... виртуальная память может только увеличить общий объем памяти, который процессы могут прозрачно использовать, выгружая содержимое физической памяти, чтобы освободить место для новых потребностей в памяти и перезагрузить выгруженный контент из вторичной памяти. Но, даже если нет места на диске подкачки (и, следовательно, нет подкачки), или у вас недостаточно потребности в памяти, чтобы выполнить подкачку, процессы все равно могут извлечь выгоду из виртуальной адресации в соответствии с разреженными массивами, огромными областями стека / кучи. с возможностью роста по требованию и т. д.
Я имею в виду, если обмен не разрешен, тогда все же мы можем назвать это виртуальной памятью, хотя преимущества будут ограничены?
Может быть. Вы все еще можете извлечь выгоду из виртуальной адресации, но это зависит от того, какую терминологию вы принимаете, классифицирует ли это как виртуальную память: есть разумный аргумент, что «виртуальная память» означает, что вы притворяетесь, что имеете больше физической ОЗУ, поэтому без обмена вы не сможете не подходит, даже если вы используете компонент виртуальной адресации, поддерживающий виртуальную память.