2012-03-22 15 views
18

Según tengo entendido, las tablas de páginas ocultas eliminan la necesidad de emular la memoria física dentro de la máquina virtual.¿Qué es exactamente lo tablas de páginas sombra (por VMM) hacen?

es decir.

en lugar de: sistema operativo huésped -> vmm + memoria física virtual -> sistema operativo anfitrión -> hardware del host

es simplemente: os invitados -> VMM -> sistema operativo anfitrión -> hardware del host

Las tablas de la página oculta solo permiten que el proceso acceda a la memoria del hardware del host de forma adecuada. Tampoco entiendo cómo funcionarían las fallas de página (o dado que el host maneja toda la memoria física, el host se ocupa de las fallas de página, el intercambio, etc.).

(por tarea me refiero a que estoy estudiando para una prueba y tenemos que entender este concepto).

Respuesta

51

El hipervisor utiliza tablas de páginas de sombreado para realizar un seguimiento del estado en el que el huésped "cree" que deberían estar sus tablas de páginas. El invitado no puede tener acceso a las tablas de la página de hardware porque, básicamente, tendría el control de la máquina. Por lo tanto, el hipervisor mantiene las asignaciones "reales" (huésped virtual -> host físico) en el hardware cuando el invitado relevante se está ejecutando, y mantiene una representación de las tablas de página que el invitado piensa que está usando "en las sombras" o en al menos así es como me gusta pensar en eso.

Observe que esto evita el paso de traducción GVA-> GPA.

En cuanto a los errores de página ir, nada cambia desde el punto la de hardware de vista (recuerde, el hipervisor hace tan las tablas de páginas utilizadas por el hardware contiene GVA-> asignaciones HPA), un error de página simplemente generará una excepción y redirigir al controlador de excepción apropiado. Sin embargo, cuando se produce un error de página mientras se está ejecutando una máquina virtual, esta excepción se puede "reenviar" al hipervisor, que luego puede manejarlo adecuadamente.

El hipervisor debe compilar estas tablas de página oculta a medida que ve los errores de página generados por el invitado. Cuando el invitado escribe una asignación en una de sus tablas de páginas, el hipervisor no lo sabrá de inmediato, por lo que las tablas de la página oculta no estarán instantáneamente "sincronizadas" con lo que pretende el huésped. Por lo que el hipervisor se acumulará las tablas de páginas sombra en, por ejemplo, de la siguiente manera: escribe

  • visitantes una asignación para VA 0xdeadbeef en ella de las tablas de páginas (una ubicación en la memoria), pero recuerda, esta asignación no es siendo utilizado por el hardware. accede a
  • de visitantes 0xdeadbeef, lo que provoca un error de página ya que las tablas de página real no se han actualizado para agregar la asignación
  • culpa página se envía al hipervisor
  • hipervisor se ve en las tablas de páginas de huéspedes y avisos son diferentes de las tablas de la página de la sombra, dice "hey, no he creado una asignación real para 0xdeadbeef todavía"
  • Por lo tanto, actualiza sus tablas de páginas de la sombra y crea una correspondiente 0xdeadbeef -> asignación de HPA para el hardware.

El caso anterior se llama una página culpa sombra, ya que es causada únicamente por la introducción de la virtualización de la memoria. Por lo tanto, el manejo del error de página se detendrá en el hipervisor y el sistema operativo invitado no tendrá idea de que se haya producido.Tenga en cuenta que el invitado también puede generar fallas de página genuinas debido a asignaciones que aún no ha intentado crear, y el hipervisor las reenviará al invitado. También tenga en cuenta que todo este proceso implica que cada error de página que se produce mientras el invitado se está ejecutando debe provocar una salida al VMM para que las tablas de la página oculta puedan mantenerse frescas. Esto es costoso y una de las razones por las que se introdujo el soporte de hardware para la virtualización de memoria. (here es una introducción rápida a anidada o tablas de páginas extendidas)

Una buena referencia para esto es this book

+2

que no se dieron cuenta hasta ahora mismo que '0xdeadbeef' es algo más allá de mi clase de sistema operativo. – DIMMSum

2

Cuando el cliente escribe un mapeo en una de sus tablas de páginas, el hipervisor no sabrá de inmediato, para que las tablas de la página oculta no estén instantáneamente "sincronizadas" con lo que el huésped desea.

No exactamente. Las tablas de la página de invitados son de solo lectura. Siempre que haya una actualización (por ejemplo, una nueva asignación agregada) en la tabla de la página invitada, se interceptará al hipervisor y el hipervisor actualizará la tabla de la página oculta para estar "sincronizado" con el invitado.

Referencias: