На самом деле вы задаете здесь два вопроса.
- Какая политика разбиения по страницам в отношении таблиц страниц.
- Какова политика разбиения на страницы для страниц с "записываемыми данными" (т.е. виртуальной памяти с разрешениями на чтение и запись).
Сначала я вас немного поправлю.
Учитывая тот факт, что нижние 2 ГБ области зарезервированы для окон, было бы разумно, чтобы окна сохраняли таблицы страниц для всех процессов в системе.
Если быть точным, это верхние 2 ГБ, которые зарезервированы для Windows, точнее - могут быть доступны в режиме ядра только ядру Windows и драйверам.
Это может вас удивить, но память ядра тоже может быть выгружаемой! Так что технически совершенно не важно, какая часть 32-битного адресного пространства видна в режиме пользователя / ядра. Это не связано с пейджингом.
Еще одно исправление: виртуальная память может находиться в физической памяти и сохраняться в файле подкачки. Распространено мнение, что ОС освобождает физическое хранилище, сохраняя страницы в файл подкачки по запросу. Неправильный.
Фактически Windows сохраняет страницы памяти в файл подкачки перед, когда их нужно освободить. Фактически, он выгружает все страницы памяти в файл подкачки (кроме тех, которые относятся к другим файлам, например, к отображаемым разделам) в фоновом режиме. На это есть две причины:
- При высокой нагрузке ОС быстрее освобождает страницы памяти (так как они уже сохранены).
- В режиме ядра подкачка не всегда возможна. Драйверы, работающие на высоком уровне IRQL (т. Е. Обслуживающие наиболее критичные ко времени события), могут не иметь доступа к драйверам физического хранилища, поэтому разбиение на страницы невозможно.
Итак, ответы на ваши вопросы таковы:
- Точно не знаю, но это зависит от деталей реализации ОС. Я не вижу причин, по которым таблица страниц для каждого процесса не может быть выгружена. Это необходимо при переключении контекста и изменении виртуальной памяти процесса. Обе ситуации не относятся к критическим по времени событиям.
- Определенно страницы памяти с «записываемыми данными» сохраняются в файл подкачки. Удаляются ли они из физической памяти? Только по требованию, во время загрузки системы, в порядке наиболее редкого использования.
person
valdo
schedule
07.09.2011