Qwertiy писал(а):Зачем такие крайности-то?
Почему крайности. Заранее понятно, что ребёнок, спрашивающий про цвет неба, не знает сути механизма рэлеевского рассеяния. Тем не менее, считаю важным сказать именно про него, нежели вешать на уши лапшу. Пусть ребёнок дальше либо сам сам идёт разбирается, либо спрашивает «а что такое рэлеевское рассеяние и как оно работает». С радостью расскажу.
Вот так и тут. Я по вопросу вижу сразу, что человек абсолютно не разбирается в устройстве виртуальной памяти. Тем не менее, я пишу правдивые вещи. Дальше либо пусть сам разбирается, либо задаёт встречные вопросы. С радостью отвечу.
Qwertiy писал(а):Это странно... Какой тогда смысл от файла подкачки, если он меньше объёма физической памяти?
Странно, что ты не понимаешь, какой смысл. Смысл такой же, как и обычно: чтобы из физпамяти выгружать туда страницы, которые исключаются из воркинг-сетов процессов.
Qwertiy писал(а):Кстати, если на все страницы на диске и так есть место (либо в файле подкачки, либо в файлах образов), то зачем для гибирнации нужен отдельный файл объёмом с оперативную память?
О, это хороший вопрос.
Ключевой момент здесь в том, что подчёркнутое утверждение — абсолютно ложное.
Если идти снизу вверх:
Страницы физпамяти, в которых располагаются PDE→PTE-деревья, необходимые для преобразования линейных адресов в физические — не выгружаются в файл подкачки.
Страницы физпамяти, в которых располагаются структуры, описывающие файлы подкачки — не выгружаются в своп.
Страницы памяти, в которых живёт код, который подгружает недостающие страницы из файла подкачки — никогда не выгружается в своп.
Загруженные образы драйверов, вовлечённых в работу своппинга, такие как шинные драйверы, драйверы дисков, драйверы томов, драйверы файловых систем (они образуют цепочку обработки IRP для IO-операций, так необходимых для подкачки) — никогда не выгружаются в своп.
В ядро может быть загружено много драйверов, драйверы могут обладать невыгружаемыми секциями (кода, данных — не важно), в процессе работы они могут выделять память себе память с помощью
ExAllocatePool (non-paged pool), или выделять себе
MDL.
Что касается обычных пользовательских процессах, то в них страницы, полученные процессом через механизм AWE, — тоже никогда не выгружаются в своп и им не соответствует место в файлах подкачки.
В общем, ошибочно считать, что каждой странице физической памяти соответствует фрейм или файл подкачки, или обычный файл.
Кроме того, чтобы гибернация была быстрой и гарантированной, она должна действовать по модели: сняли цельный образ всей памяти при засыпании — накатали обратно цельный образ всей памяти при просыпании.
Почему, к примеру, Alcohol 120% снимает образ диска одним файлом, а не просто копирует все файлы с диска?