Campo de dirección de la tabla de páginas para una página sin caché

Campo de dirección de la tabla de páginas para una página sin caché

Según el modelo (algo abstracto) de Bryant y O'Hallaron de la tabla de páginas en sistemas tipo Linux, cada entrada de la tabla de páginas (PTE) tiene un campo de dirección que contiene uno de tres tipos de valores: (1) la dirección física (en realidad , el número de página) al que está asignada la página virtual; (2) un identificador de ubicación equivalente para un dispositivo de almacenamiento a largo plazo, donde se puede encontrar la página; o (3) 0, para una página no asignada. Supongamos que se ha cambiado una página del almacenamiento a largo plazo a la memoria principal. En esta cuenta, el kernel reemplaza la dirección de almacenamiento a largo plazo (2) con la dirección física (1). Ahora supongamos que es necesario desalojar esa misma página en la memoria física para dejar espacio para que se intercambie otra página. ¿Cómo se restaura la dirección de almacenamiento a largo plazo original en el PTE, si se ha sobrescrito con la dirección física? Gracias.

Respuesta1

Los PTE representanvirtualpáginas. Como usted dice, cuando una página virtual está presente en la memoria principal, el campo de dirección del PTE contendrá el número de marco de página físico (PFN).

CadafísicoLa página tiene su correspondiente struct page. Esto tiene:

Lo siguiente flagses:

struct address_space *mapping;

Para las páginas que están en la caché de páginas (una gran parte de las páginas en la mayoría de los sistemas), mappingapunta a la información necesaria para acceder al archivo que realiza la copia de seguridad de la página. Sin embargo, si la página es anónima (memoria de espacio de usuario respaldada por swap), entonces mappingapuntará a una anon_vmaestructura [...]

--Abarrotar más la página de estructura, LWN.net

Luego, el page→indexcampo se utiliza para almacenar la swp_entry_testructura de páginas anónimas. (Para las páginas en el caché de páginas, esto contiene un desplazamiento de archivo).

swp_entry_tcontiene el índice del dispositivo de intercambio y la ubicación dentro de ese dispositivo de intercambio.

Los detalles específicos de cómo funcionó esto en... 2004... se pueden encontrar enComprensión del Administrador de memoria virtual de Linux: gestión de intercambio, escrito por Mel Gorman.

Respuesta2

A partir de su pregunta no me queda del todo claro si está preguntando sobre mmap()archivos ped, intercambio o archivos mapeados pasivamente en el caché de la página, por lo que responderé por todos.

En el caso de no mmap, el desalojo es el desalojo: una vez que la página se limpia, simplemente se puede descartar. Cuando una página que no está respaldada por un archivo se expulsa de la memoria principal, generalmente no es necesario restaurar ninguna dirección porque simplemente buscarán el error en una nueva entrada de caché la próxima vez que se acceda al archivo. Algo similar sucede en el caso de intercambio: si fallamos en una página de intercambio y luego tenemos que desalojar la misma página, probablemente simplemente proporcionemos una nueva dirección de intercambio la próxima vez y la configuremos en el PTE (o usemos el caché de intercambio si la página está presente allí y está limpia).*

En el caso de mmap, el ciclo de vida está controlado por la mmap()llamada al sistema. El rango se asigna explícitamente a una porción contigua de la memoria virtual en mmap(), y los metadatos para esta asignación (como el FD de respaldo del que tenemos un recuento de referencia, el desplazamiento, el tamaño, etc.) se almacenan en el área de memoria virtual relevante ( VMA). Incluso cuando se desalojan las páginas, el VMA retiene la información de mapeo, lo que permite al kernel saber dónde fallar la próxima vez que se acceda.

* En realidad, ni el intercambio ni la actividad de paginación general ocurren típicamente a nivel de página, sino que a menudo ocurren con una granularidad más baja, como un clúster de intercambio o un lote de lectura anticipada.

información relacionada