tablas tabla sistemas simple segmentacion para paginas paginada paginacion pagina operativos memorias memoria fisica fallo extensas direccion operating-system x86 virtual-memory computer-architecture

operating system - sistemas - ¿Cómo funcionan las tablas de páginas x86?



tabla de paginas (1)

Estoy familiarizado con la arquitectura MIPS, que tiene un TLB administrado por software. Entonces, ¿cómo y dónde (el sistema operativo) quiere almacenar las tablas de páginas y las entradas de la tabla de páginas depende completamente de usted? Por ejemplo, hice un proyecto con una sola tabla de páginas invertida; Vi a otros usando tablas de páginas de 2 niveles por proceso.

Pero ¿cuál es la historia con x86? Por lo que sé, el TLB es administrado por hardware. ¿El x86 le dice básicamente a usted, "Oye, aquí es donde las entradas de la tabla de páginas que está utilizando actualmente necesitan ir [rango de direcciones físicas]"? Pero espera, siempre he pensado que x86 utiliza tablas de páginas de varios niveles, ¿te diría dónde poner el primer nivel o algo así ...? Estoy confundido.

Gracias por cualquier ayuda.


Al ingresar al modo protegido, el registro CR3 apunta a un "directorio de páginas" (puede ubicarlo en cualquier lugar que desee antes de ingresar al modo protegido), que es una página de memoria (recuerde, una página "pequeña" es de 4 KiB y una La página "grande" es de 4 MiB) con 1024 entradas de directorio de páginas (PDE) que apuntan a "tablas de páginas". Cada entrada es la parte superior de los 10 bits de un puntero (la dirección de la tabla de la página), más un grupo de banderas que forman la parte inferior del puntero (presente, permiso, sucio, etc.).

(El 1024 solo viene del hecho de que una página tiene 4096 bytes y un puntero es de 4 bytes).

Cada "tabla de páginas" es en sí misma 1024 "entradas de tabla de páginas" (PTE), que, de nuevo, contiene 1024 entradas que apuntan a páginas físicas en la memoria, junto con un grupo de (casi las mismas) marcas.

Entonces, para traducir una dirección virtual de 32 bits, toma los 10 bits principales del puntero como un índice en la tabla en CR3 (ya que hay 2 10 entradas), y - si esa PDE se subdivide aún más (lo que significa que no está) No es una página "grande", que puede descubrir a partir de las banderas): toma los 20 bits principales del PDE, busca la tabla de páginas en esa dirección e indexa con los siguientes 10 puntos de la dirección virtual. pedacitos Luego, los 20 bits superiores se refieren a la página física, asumiendo que los 12 bits inferiores indican que la página física está realmente presente.

Si está utilizando la Extensión de Dirección Física (PAE), entonces obtiene otro nivel en la jerarquía en la parte superior .

Nota: para su propia cordura (y quizás la CPU), probablemente querrá asignar el directorio de la página y la tabla de la página a ellos mismos , de lo contrario, las cosas se confunden rápidamente. :)

El TLB está administrado por hardware, por lo que el almacenamiento en caché de las tablas de páginas es transparente, pero hay una instrucción, InvlPG, que invalida un PTE en el TLB para usted. (No sé exactamente cuándo debería usarlo y cuándo no debería).

Fuente: http://wiki.osdev.org/Paging