Известно, что приложения Windows обычно имеют 2 Гбит частного адресного пространства в 32-битной системе. Это пространство может быть расширено до 3Gb с помощью переключателя /3Gb.
Операционная система оставляет за собой оставшиеся 4Gb.
Мой вопрос: ПОЧЕМУ?
Код, работающий в режиме ядра (т.е. код драйвера устройства), имеет собственное адресное пространство. Почему, помимо эксклюзивного адресного пространства 4Gb, операционная система все еще хочет зарезервировать 2 Гбит каждого процесса в пользовательском режиме?
Я думал, что причиной является переход между вызовом режима пользователя и режима ядра. Например, для вызова NtWriteFile
потребуется адрес для процедуры диспетчеризации ядра (следовательно, система резервирует 2Gb в каждом приложении). Но, используя SYSENTER
, не является системным номером службы, достаточным для кода режима ядра, чтобы узнать, какая функция/служба вызывается?
Если бы вы могли пояснить мне, почему так важно, чтобы операционная система принимала 2Gb (или 1Gb) каждого процесса пользовательского режима.