Windows Memory Workings - таблицы страниц и данные

Я пытался понять следующее:

  • Я знаю, что таблицы страниц в какой-то момент создаются для перевода между виртуальной памятью и физической памятью диспетчером виртуальной памяти. Поскольку в системе работает много процессов, хотя одновременно активен только процесс, мне было интересно, перемещаются ли таблицы страниц для неактивного процесса в файл страницы в любой момент времени? Учитывая тот факт, что для окон зарезервированы 2 ГБ области, было бы разумно, чтобы окна сохраняли таблицы страниц для всех процессов в системе. Хотя было бы логично, что они перемещаются в файл подкачки, если текущий процесс переключается?

  • То же самое и с доступными для записи (данными) страницами. Будут ли окна сохранять в памяти все страницы данных для всего процесса или в какой-то момент перемещать их в файл подкачки. На моей машине диспетчер задач говорит, что используется 1,5 ГБ ОЗУ из 3 ГБ, а 1,5 - это системный кеш на вкладке производительности, поэтому я понимаю, что данные остаются в физической памяти для всех приложений. Но наступит ли время, когда его нужно будет переместить в файл подкачки?


person neel roy    schedule 07.09.2011    source источник


Ответы (2)


Мне было интересно, перемещаются ли таблицы страниц для неактивного процесса в файл страницы в любой момент времени?

Да, таблицы страниц доступны для страниц.

Будут ли окна сохранять в памяти все страницы данных для всего процесса или в какой-то момент перемещать их в файл подкачки.

Что касается политики разбиения на страницы Windows, существует два типа памяти: страничная и не страничная. На самом деле не имеет значения, какому процессу он принадлежит или даже если он принадлежит самой операционной системе, если он доступен для страницы, то он подлежит выгрузке. Итак, да, Windows при необходимости будет выгружать страницы данных процесса.

Я предлагаю прочитать главу об управлении памятью в книге Windows Internals, она должна охватывать все это.

-скотт

person snoone    schedule 07.09.2011

На самом деле вы задаете здесь два вопроса.

  1. Какая политика разбиения по страницам в отношении таблиц страниц.
  2. Какова политика разбиения на страницы для страниц с "записываемыми данными" (т.е. виртуальной памяти с разрешениями на чтение и запись).

Сначала я вас немного поправлю.

Учитывая тот факт, что нижние 2 ГБ области зарезервированы для окон, было бы разумно, чтобы окна сохраняли таблицы страниц для всех процессов в системе.

Если быть точным, это верхние 2 ГБ, которые зарезервированы для Windows, точнее - могут быть доступны в режиме ядра только ядру Windows и драйверам.

Это может вас удивить, но память ядра тоже может быть выгружаемой! Так что технически совершенно не важно, какая часть 32-битного адресного пространства видна в режиме пользователя / ядра. Это не связано с пейджингом.

Еще одно исправление: виртуальная память может находиться в физической памяти и сохраняться в файле подкачки. Распространено мнение, что ОС освобождает физическое хранилище, сохраняя страницы в файл подкачки по запросу. Неправильный.

Фактически Windows сохраняет страницы памяти в файл подкачки перед, когда их нужно освободить. Фактически, он выгружает все страницы памяти в файл подкачки (кроме тех, которые относятся к другим файлам, например, к отображаемым разделам) в фоновом режиме. На это есть две причины:

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

Итак, ответы на ваши вопросы таковы:

  1. Точно не знаю, но это зависит от деталей реализации ОС. Я не вижу причин, по которым таблица страниц для каждого процесса не может быть выгружена. Это необходимо при переключении контекста и изменении виртуальной памяти процесса. Обе ситуации не относятся к критическим по времени событиям.
  2. Определенно страницы памяти с «записываемыми данными» сохраняются в файл подкачки. Удаляются ли они из физической памяти? Только по требованию, во время загрузки системы, в порядке наиболее редкого использования.
person valdo    schedule 07.09.2011