Ответ: Нужна ли виртуалка при 4 gb оперативки и что показывает диспетчер задач?
Vadim_PDF сказал(а):
Как то все запутано... Вы хотите сказать, что 32 bit Windows без ключика /PAE способна выгрузить что-то в виртуалку свыше 4G (при оперативке 4G естественно)?
Чет я сомневаюсь. Сказано - 4 Гига прямая адресация - все остальные программы— свободны.
Ключик /3G используем. (Кстати — кто реально сталкивался с проблемами из-за него?) Но я сомневаюсь, что если я смогу загрузить 3 приложения и каждое сможет использовать хотя бы по 2G, пусть и храня их в swap, и подгружая при переключении.
На самом деле ничего не запутано, а очень даже просто: каждому процессу создается
отдельная изолированная виртуальная x86 машина, в которой процесс может адресовать 4G памяти по своему усмотрению используя 32-х разрядную адресацию (при переходе в защищенный режим 16-разрядные регистры процессора автоматически объединяются попарно в 32 разрядные).
Т.е. сам процесс видит, что работает
на отдельной машине с 4G ОЗУ, сколько бы ее ни было на самом деле. Все обращения процесса к памяти осуществляются через «висящий» над ним опять же аппаратный механизм управления памятью, который с помощью инициализируемых системой перед стартом процесса дескрипторов определяет права процесса на тот или иной участок виртуального адресного пространства (колонка
Access на приведенном выше
рисунке) — ошибки типа
FATAL: Memоry cannot be read (write) at <адрес:адрес> генерируются именно при нарушенни процессом прав, которые он имеет на тот или иной участок отведенной ему памяти. Процессор также аппаратно отслеживает, чтобы
виртуальная память, выделенная процессу, отображалась на реальную физическую. Если запрошенный процессом виртуальный адрес в данный момент не «подключен» к ОЗУ, то генерируется прерывание «Запрошенная страница отсутствует в памяти» — для ускорения работы все адресное пространство разбито блоки по 4K (или 4M) (см.
здесь,
здесь и
здесь), и система «ищет» соответствующую страницу в файле подкачки либо еще где-нибудь
Для приложения этот процесс прозрачен и оно всегда «прямо адресует 4G»; разумеется настолько прямо, насколько это позволяет сегментная модель памяти, принятая в x86 архитектуре.
Макс. размер файла подкачки ограничен только возможностями системы и заложенными туда ограничениями маркетингового плана — мы же можем писать на 32-разрядной системе файлы по 20G.
Если же вы хотите в идеале обойтись без подкачки, то
для каждого запущенного процесса будете должны поставить по 4G RAM (реально достаточно в несколько раз меньше) — но все равно, IMHO, этого многовато даже по нонешним меркам, зато куда бы приложение не обратилось — страничка-то вот она! в памяти сидит!
Однако и в этом случае, страницы, к которым долго не было обращения системой будут потихоньку удаляться в файл подкачки — так устроены
Windows.
Есть некие обходные пути, позволяющие обычному 32-разрядному приложению работать с памятью более 4G на 32-разрядной системе — это, например, используется в программах обработки спутниковых фотографий и оцифровки карт.
64-разрядная архитектура CPU для виртуальных машин, на которых выполняются приложения, использует (4G)^2 памяти, т.е. о-о-о-очень много (вспомним легенду об изобретении шахмат и награде изобретателю — как раз тот случай) и тут уж без подкачки никак
С ключиком /3G не далее как месяц назад у меня отказывались работать несколько инсталляторов.