разделение режима ядра пользователя на процесс Windows - PullRequest
0 голосов
/ 05 сентября 2010

Как адресное пространство процесса (4 ГБ) распределяется между пользовательским режимом и модулями режима ядра в Windows

, когда я проверял explorer.exe в проводнике процессов, нижние 2 ГБ заняты библиотеками пользовательского режима, а верхние 3-4 ГБдиапазон адресов системного процесса загружается драйверами (* .sys файлы)

Так что мой вопрос: будут ли разделены все эти диапазоны адресов 3-4 ГБ каждого процесса или они дублируются для каждого процесса?

Ответы [ 3 ]

0 голосов
/ 05 сентября 2010

Чтобы дать краткий ответ:
(Виртуальная) структура памяти зависит от вашей ОС.Конечно, существуют различия между 32-битной и 64-битной версиями Windows, но также и между различными версиями.

См. здесь (MSDN) и здесь (MS blogger) .

Надеюсь, это поможет.

0 голосов
/ 07 сентября 2010

По умолчанию ядром использовалось до XP 2 ГБ, а остальные 2 ГБ были доступны для всех программ. При запуске XP с командной строкой / 3 ГБ программы, связанные с флагом / LARGEADDRESSAWARE, могут использовать до 3 ГБ виртуального адресного пространства .

Это означает, что каждое приложение может управлять до 3 ГБ. 32-битные окна могут поменять память на файл подкачки, и это может стать больше, чем 4 ГБ. Таким образом, возможно, что 2 приложения вместе могут выделить гораздо больше, чем 3 ГБ.

Я только что проверил это на 4 ГБ 32-битной машине XP. Я запустил 3 приложения, каждое из которых выделило 2 ГБ, используя VirtualAlloc, и заполнило его, используя memset. Диспетчер задач показывает, что общий объем выделенной виртуальной памяти составляет 7 ГБ. Это, конечно, не очень практично. Если два из этих приложений попытаются использовать всю свою память одновременно, машина замедлится до восприятия как зависание системы

0 голосов
/ 05 сентября 2010

В верхнем гигабайте находится ядро ​​ОС, а также все драйверы и дополнительные модули, а также буферы ввода-вывода и другая память данных только для ядра.Это общие для всех процессов, и ядро ​​должно работать вообще.Таблицы страниц находятся в области, называемой гиперпространством, которая находится на границе 3 ГБ и является единственным разделом памяти размером более 2 ГБ, который не распределяется между процессами.3-й гигабайт используется ядром по умолчанию, но если вы соберете свои программы, чтобы иметь 3 ГБ памяти пользовательского режима, то эта область будет принадлежать процессу.можете поправить меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...