2011-12-17 19 views
5

En los estados de autor this respuesta: 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.espacio de proceso de 32 bits de direcciones en Linux de 64 bits

¿Cuál es el propósito de esta memoria del núcleo gestionados? ¿No debería estar en el espacio del kernel para evitar daños accidentales por parte del usuario?

Respuesta

6

Citando la fuente del kernel: “punteros Kernel tienen información redundante, por lo que podemos utilizar un esquema en el que podemos volver ya sea un código de error o una [...] puntero con el mismo valor de retorno. "

Los valores -1 ..- 4095 (asignación a 0xfffff000-0xffffffff en el modo de 32 bits) están reservados para los valores de errno a nivel del núcleo. Los otros 4KB de 0xffffe000-0xffffefff se mantienen libres para la página vyssoll vdso magic, pero como la página vdso es reubicable desde muchas lunas, esta área permanece potencialmente despoblada, es decir, la entrada [stack] en /proc/*/maps termina en 0xffffdfff siempre independientemente de si [vdso] está mapeado en 0xffffe000 o en otro lugar.

+1

'-4095 .. -1' es' 0xfffff001 .. 0xffffffff'. '0xfffff000' es' -4096', no '-4095', por lo que es un valor de retorno válido sin errores de mmap. ([mmaping esa página no funciona en realidad] (https://stackoverflow.com/questions/47712502/why-cant-i-mapmapmap-fixed-the-highest-virtual-page-in-a-32-bit- linux-process-o), pero no estoy seguro de que ese sea el motivo, a menos que haya un VMA oculto que reserve la página superior para que el kernel no tenga que preocuparse de que el espacio de usuario los pase como 'leer' o algo así. .) –

2

Parte de la memoria del kernel puede estar dentro del espacio de direcciones del espacio de usuario de la aplicación, y puede ser tipo mmap -ed con PROT_NONE. Entonces se usaría cierto espacio de direcciones, pero sin que el programa pueda acceder (por lo tanto, no es posible la corrupción).

+0

¿por qué kernel asignar memoria en el espacio de usuario? ¿Puedes señalar algún recurso sobre eso? – pbp

+0

Está asignando espacio de direcciones, no realmente memoria ... La respuesta de Jorgensen http://stackoverflow.com/a/8547556/841108 explica por qué ... –

Cuestiones relacionadas