P7 - Sobre el rol de la memoria física

P7 - Sobre el rol de la memoria física

de Juan Manuel Rivara De Leon -
Número de respuestas: 1

Buenas tardes.

Hay un detalle sobre el diseño del modelo de hipervisor que no me termina de cerrar.


Lo que yo hubiera esperado es que hubiera dos niveles de virtualización anidados, esto es:

1. El hipervisor le muestra al SO una versión virtualizada de la memoria real (memoria máquina), esta sería la memoria física. Luego el hipervisor se encarga de mapear los accesos a la memoria de la máquina cuando el SO intenta acceder a su memoria física.

2. El SO le muestra a la aplicación una versión virtualizada de la memoria del SO (memoria física), esta sería la memoria virtual. Luego el SO se encarga de mapear los accesos a la memoria del SO cuando la aplicación intenta acceder a su memoria virtual. Esta a su vez sería mapeada por el hipervisor a la memoria máquina.


Sin embargo, el mapeo de memoria virtual parece ser directo a memoria máquina. En este caso no termino de entender el rol de la memoria física del SO (llegado al caso, tampoco hubiera esperado que el SO tuviera conocimiento directo de la memoria máquina).


Agradezco cualquier comentario que me ayude a esclarecer el razonamiento del modelo.


Saludos.

En respuesta a Juan Manuel Rivara De Leon

Re: P7 - Sobre el rol de la memoria física

de Carlos Luna -

Hola,

El modelo de memoria de la plataforma consta de tres tipos de direccionamiento y dos mappings. Van algunos datos que pueden ayudar a entender mejor el modelo. 

  • Memoria virtual: memoria direccionada por aplicaciones de un SO. Se mapea a una memoria de máquina a través de la PT actual del SO activo. Parte de esta memoria está reservada por el hypervisor, para no cambiar de mapeo (PT) durante hypercalls (el hypervisor atiende la llamada de un guest con el mismo mapping del guest).
  • Memoria física: es la memoria que ve el kernel de los SOs guest. Permite que los SOs vean la memoria que tienen disponible en la máquina virtual como un conjunto de direcciones contiguas. Estas direcciones sólo son usadas por el SO guest al realizar hypercalls, el hypervisor aplica el mapping para obtener direcciones de máquina antes de usarlas.
  • Memoria de máquina: es la memoria real de la máquina física en la que ejecuta la plataforma. Se divide en páginas de dos tipos: RW (lectura/escritura, con datos arbitrarios) y PT (page table) con los mappings entre va (virtual address) y ma (machine address). Cada página tiene, además, un propietario que puede ser un SO particular, el hypervisor o ninguno.

En cuanto a los mappings, cada sistema operativo tendrá un conjunto de Page Tables (en principio una por cada aplicación que ejecute en él), que mapea direcciones virtuales a direcciones de máquina. Las aplicaciones al ejecutar utilizan direcciones de memoria virtual. Cuando ocurre un cambio de contexto de aplicaciones dentro de un SO (acción lswitch), se cambia la PT actual de ese SO, indicando que ahora pasa a ejecutar otra aplicación dentro de él. Cabe destacar que ni las aplicaciones ni el SO guest tienen acceso de lectura o mod ificación sobre las PTs: para leerlas o escribirlas, se requiere que el procesador esté en modo supervisor. Esto está implícitamente modelado, y requiere que el hardware de la máquina física se comporte de esta manera. Las arquitecturas comunes funcionan así. 

El mapping entre direcciones físicas y de máquina lo mantiene el hypervisor para cada SO, y es modificado por las acciones page pin (agregando una correspondencia al mapping) y page unpin (eliminando una correspondencia). Asimismo, estas acciones modifican el propietario de la página de memoria y sólo pueden ser ejecutadas en modo supervisor (por el hypervisor).

Saludos, Carlos