paginacion memoria ejercicios kernel virtual-memory memory-management mmu

kernel - ejercicios - memoria virtual



¿Cómo sabe Kernel qué páginas del espacio de direcciones virtuales corresponden a un marco de página físico intercambiado? (1)

Linux:

Cuando se usa el archivo de intercambio, la Entrada de la tabla de la página se actualiza con una marcada como no válida y contiene información sobre dónde se guarda en el archivo de intercambio. Es decir: un índice para el conjunto swap_info y un desplazamiento dentro del swap_map .

Ejemplo de (un poco viejo) Tipo de Entrada de la Tabla de Página ( pte_t ) en un x86. Algunos de los bits son utilizados como indicadores por el hardware:

Bit Function _PAGE_PRESENT Page is resident in memory and not swapped out _PAGE_PROTNONE Page is resident but not accessable _PAGE_RW Set if the page may be written to _PAGE_USER Set if the page is accessible from user space _PAGE_DIRTY Set if the page is written to _PAGE_ACCESSED Set if the page is accessed

Tabla 3.1: Bits de estado y protección de entrada de tabla de página

Vea también otra respuesta SO con un diagrama del formato de tabla de página x86-64. Cuando el bit bajo = 0, el hardware ignora todos los otros bits, por lo que el kernel puede usarlos para cualquier cosa. Incluso en una entrada "presente", hay algunos bits ignorados garantizados que no están reservados para el uso futuro del hardware, por lo que el kernel puede usarlos para sus propios fines.

Es de suponer que otras arquitecturas son similares.

En términos simples: un proceso apunta a una página, la página se actualiza. Por lo tanto, los procesos son, en efecto, también actualizados. Cuando se solicita la página física, se intercambia y, por lo tanto, también todos los procesos. El punto es que la entrada de la tabla de páginas no se elimina cuando se intercambia la memoria.

Puede encontrar algo de esto útil:

La documentación del kernel incluye el libro de Mel Gorman (2007):

Considere la siguiente situación: el kernel ha agotado la RAM física y necesita cambiar una página. Selecciona el marco de página usado menos recientemente y quiere intercambiar su contenido en el disco y asignar ese marco a otro proceso.

Lo que me molesta es que este marco de página ya estaba mapeado, en términos generales, varias páginas (idénticas) de varios procesos. El núcleo tiene que encontrar de alguna manera todos esos procesos y marcar la página como intercambiada. ¿Cómo lo lleva a cabo?

Gracias.

EDITAR: Ilustraciones a la pregunta:

Antes de que los procesos de intercambio 1 y 2 tuvieran una Página compartida, que residía en el marco de la memoria física 1:

Ahora, la memoria en el sistema se agota y kernel asigna memoria para el proceso 3 intercambiando la Página 1 del cuadro 1 y reemplazándolo con la Página 2. Para hacer eso, tiene que

1) encuentre todos los procesos, refiriéndose a la página 1 (proceso 1 y proceso 2 en nuestro caso)

2) modifique sus entradas de la tabla de la página, estableciendo el bit "Presente" en 0 y estableciendo la ubicación de la página 1 en el intercambio

Entonces, no entiendo, cómo se lleva a cabo el paso 1. Kernel no podía estar mirando iterativamente las Tablas de Página de cada proceso para encontrar la Entrada de la Tabla de Página, apuntando al cuadro 1. Debería haber algún tipo de mapeo inverso desde los marcos de página a las Entradas de la Tabla de Página.

LA RESPUESTA ES:

"El cambio más significativo e importante para la gestión de la tabla de páginas es la introducción de Mapeo Inverso (rmap). Referirse a él como" rmap "es deliberado ya que es el uso común del" acrónimo "y no debe confundirse con el -rmap árbol desarrollado por Rik van Riel que tiene muchas más alteraciones en la VM de valores que solo el mapeo inverso.

En una sola oración, rmap otorga la capacidad de ubicar todas las PTE que mapean una página en particular dada solo la página struct. En 2.4, la única forma de encontrar todas las PTE que mapean una página compartida, como una biblioteca compartida correlacionada de memoria, es buscar linealmente todas las tablas de páginas que pertenecen a todos los procesos. Esto es demasiado caro y Linux intenta evitar el problema utilizando la caché de intercambio (ver la Sección 11.4). Esto significa que con muchas páginas compartidas, Linux puede tener que cambiar procesos completos independientemente de la edad de la página y los patrones de uso. 2.6 en su lugar tiene una cadena de PTE asociada con cada página de estructura que puede atravesar para eliminar una página de todas las tablas de página que hacen referencia a ella. De esta forma, las páginas de la LRU pueden intercambiarse de manera inteligente sin recurrir al intercambio de procesos completos ".

de Understanding the Linux Memory Management , "novedades en Linux2.6"