2011-01-28 16 views
7

Considerando Linux y 32 bit x86 arch hay una división 3: 1 del espacio de direcciones accesible de 4GB. El espacio de usuario tiene asignado 0-3 Gb, mientras que 3-4 Gb están asignados al kernel. ¿Cómo se transforma una dirección virtual que es mayor que 3Gb y por lo tanto se encuentra en el espacio de direcciones del kernel en la dirección física? ¿Las tablas de páginas entrarán en la imagen?traducción de dirección virtual del kernel

Respuesta

5

Hay algo de información en el libro de Mel Gorman Understanding the Linux Virtual Memory Manager.

La respuesta corta: Sí, el kernel configura las tablas de páginas para traducir la dirección física 0 a la dirección virtual 3 GiB. (Sección 3.7.1). Esto incluye la ubicación física en la que se cargó el kernel (generalmente 1MB en x86).

+0

Gracias por la respuesta. Después de buscar en Google encontré que hay un #define PAGE_OFFSET que es de 3GB (configurable) y la dirección virtual del kernel tiene mapeo uno a uno a la dirección física obtenida simplemente restando PAGE_OFFSET de la dirección virtual del kernel y por lo tanto no usa tablas de páginas. Por favor, corríjame si estoy equivocado. – user593575

+1

Ese simple mapeo facilita la implementación de virt_to_phys(): como dijiste, solo resta PAGE_OFFSET. Pero la paginación está habilitada, esto permite la traducción de direcciones virtuales a físicas en hardware, a medida que se extraen las instrucciones y se accede a los datos. –

+0

Entiendo tu punto. Las tablas de páginas siempre se utilizan cuando la búsqueda está habilitada independientemente de que la dirección virtual pertenezca al kernel o al espacio de usuario. (¡Ay! No puedo votar porque requiere un mínimo de 15 puntos) – user593575

Cuestiones relacionadas