Адресное пространство 32-битного процесса в 64-битной Linux - PullRequest
5 голосов
/ 17 декабря 2011

В этот ответ автора утверждает: With the 64-bit x86_64 kernel, a 32-bit process can use the entire 4GB address space, except for a couple pages (8KB) at the end of the 4GB address space which are managed by the kernel.

Какова цель этой управляемой ядром памяти?Разве это не должно быть в пространстве ядра, чтобы предотвратить случайное повреждение пользователем?

Ответы [ 2 ]

6 голосов
/ 17 декабря 2011

Ссылаясь на источник в ядре: « Указатели ядра содержат избыточную информацию, поэтому мы можем использовать схему, в которой мы можем возвращать либо код ошибки, либо указатель [...] с тем же возвращаемым значением. »

Значения -1 ..- 4095 (отображение 0xfffff000–0xffffffff в 32-битном режиме) зарезервированы для значений errno уровня ядра. Остальные 4 КБ из 0xffffe000–0xffffefff остаются свободными для магической страницы vsyscall vdso, но поскольку страница vdso перемещаема, так как многие луны, эта область остается потенциально незаселенной, то есть запись [stack] в /proc/*/maps заканчивается в 0xffffdfff всегда независимо от того, отображается ли [vdso] в 0xffffe000 или где-либо еще.

2 голосов
/ 17 декабря 2011

Некоторая память ядра может находиться в адресном пространстве пользовательского пространства приложения и иметь вид mmap -ed с PROT_NONE.Затем будет использовано некоторое адресное пространство, но оно не будет доступно для программы (поэтому повреждение невозможно).

...