La memoria virtual es uno de los elementos más importantes de un PC contemporáneo, sin soporta para ella no podríamos ejecutar los complejos sistemas operativos multitarea en nuestros PCs. Os hacemos un repaso rápido sobre lo que es la memoria virtual y cual es su función en vuestros PCs
Toda CPU independientemente de cual sea su arquitectura, tiene por lo general dos tipos de pines para comunicarse con la memoria RAM del sistema
- Pines de Datos desde donde se trasmiten los datos desde y hacia la memoria.
- Pines de Direccionamiento donde se le indica a la memoria donde se encuentra el dato.
¿Pero que indica el direccionamiento? La memoria RAM físicamente se organiza en una tabla y cuando accedemos a un dato en concreto de forma directa, lo que hacemos es marcar en que fila y columna se encuentra, si por ejemplo nuestro direccionamiento es de 6 bits entonces la memoria podrá tener 64 elementos (26) de los cuales unos 3 bits me dirán la fila y otros 3 bits me dirán la columna de donde se encuentra el dato.
Utilidad y Definición de la Memoria Virtual
El direccionamiento virtual no funciona apuntando a direcciones de memoria de manera directa, sino que utiliza direcciones virtuales, las cuales se organizan por páginas de memoria.
Las primeras CPU de 8 y 16 bits que aparecieron en el mercado doméstico solo soportaban direccionamiento físico, no era un problema por aquel entonces porque esos sistemas solo ejecutaban una aplicación al mismo tiempo, pero con el tiempo y a medida que iban saliendo ordenadores personales más potentes se hizo necesario integrar formas de manejar el acceso a la memoria RAM más sofisticados con tal de que los entornos con varias aplicaciones ejecutándose al mismo tiempo no tuviesen problemas a la hora de funcionar y por tanto una aplicación no accediese al espacio de memoria de otra e incluso del sistema operativo.
Es por eso que el PC, a partir del 80286, Intel empezó a incluir una MMU en sus CPU que direccionaba la memoria por segmentos, pero apenas fue utilizada y no fue hasta la llegada del 80386 que la MMU mejoro para soportar segmentos y páginas para el direccionamiento que los Sistemas Operativos en PC dieron un avance importante en lo que a calidad se refiere.
Como nota histórica, cuando Microsoft lanzo Windows 3.1 a principios de los 90 hizo que solo funcionará con sistema 386 en adelante al hacer imprescindible para su uso una MMU con paginación de memoria. A partir del 80386 en adelante, todos los sistemas x86 incluyendo los de 64 bits utilizan direccionamiento lógico que es convertido en direccionamiento físico por la MMU para que el controlador integrado en la propia memoria RAM pueda entender que dato ha de ha de buscar.
No solo de RAM vive la CPU
La CPU para comunicarse con cualquier dispositivo de memoria utiliza el direccionamiento virtual, la MMU es la encargada no solo de gestionar la comunicación de la CPU con la RAM, para la comunicación de la CPU con otros periféricos de E/S como pueden ser discos sólidos y discos solidos conectados a diferentes interfaces la MMU se comunica con la IOMMU.
Páginas, tablas y directorios
El estándar a partir del 80386 era que cada página tiene un tamaño de 4 KB (22 bits del direccionamiento).
A partir del Pentium Pro (P6) en adelante Intel le añadió a sus CPU la capacidad de manejar páginas de 4?MB de tamaño, pero hay que tener en cuenta que tanto el núcleo NT de los Windows como el de Linux se crearon cuando esta opción no estaba disponible en los x86, por eso el tamaño estándar de las páginas esos sistemas operativos y de la mayoría es de 4 KB, ya que sus primeras versiones son Pre-Pentium Pro y por compatibilidad hacía atrás con las aplicaciones esto no ha cambiado y sus sistemas de archivo se siguen basando en páginas de 4KB que es lo que vamos a utilizar para entender el funcionamiento.
Para entender mejor la organización de la jerarquía imaginad la página de memoria como un documento escrito.
Dichos documentos/páginas se almacenan en la llamada Page Table, pensad en ello como una carpeta donde se guardan y organizan documentos.
Pero existe un nivel más y la Page Table/Carpeta de Documentos es almacenada en el Page Directory que es como un armario fichero al que llamamos Page Directory.
El sistema operativo y las aplicaciones hacen referencia a las direcciones de memoria de manera virtual, la dirección de memoria empieza primero con los bits que indican el Page Directory, luego la Page Table y luego donde se encuentra el dato dentro de la página.
Memoria virtual en las CPU x86 contemporáneas
Todas las CPU x86 que hay actualmente mercado son de 64 bits también son conocidas como x86-64 o x64, independientemente de su son Intel o AMD funcionan todas de la misma manera.
No obstante, aunque su direccionamiento es de 64 bits realmente solo direcciona hasta unos 48 bits, esto es debido a que los 16 primeros bits son bits especiales que indican como la MMU ha de tratar la página de memoria, la tabla o el directorio.
- NX (No eXecute): El bit NX cuando está activo nos indica que en esa página, tabla o directorio de la memoria virtual no hay código ejecutable y por tanto no interpretará ciertos bits como instrucciones para la CPU sino solamente como datos.
- Primer bit reservado para el sistema operativo.
- Segundo bit reservado para el sistema operativo.
- Tercer bit reservado para el sistema operativo.
- G (iGnored): Le dice a la CPU que ignore esa página, tabla o directorio de memoria y pase a la siguiente.
- S (Size): Marca el tamaño de la página de memoria (4KB o 4MB).
- El valor de este bit siempre es 0.
- A (Available): Marca si el dato está siendo accedido un proceso en ese momento, este bit es gestionado por el sistema operativo.
- D (Dirty): Es utilizado para marcar que la página de memoria no tiene que copiarse en la cache de la CPU.
- El valor del siguiente bit es siempre 0.
- W (Write): marca si la página se puede modificar (escritura).
- U (User): Marca si es página de la memoria es accesible por el Sistema Operativo (Supervisor) o por las aplicaciones (Usuario).
- R (Read): Marca si la página de memoria puede ser leída. marca si se pueden leer o no los datos de esta página.
- P (Present): Este bit es marcado cuando el sistema operativo mover la página de memoria a un nivel inferior de la jerarquía de memoria, por ejemplo, que se copie al disco duro o un disco sólido.
Estos bits le permiten a la MMU controlar el acceso de las diferentes aplicaciones y del sistema operativo a la memoria del sistema, se ha de tener en cuenta que la MMU solo actúa bajo las ordenes del sistema operativo del sistema y es este el que tiene la autoridad máxima en lo que a la gestión de la memoria virtual se refiere.
Memoria virtual y arquitecturas distintas a x86
Arquitecturas basadas en otros conjuntos de registros e instrucciones como ARM, PowerPC, MIPS, RISC-V también tienen soporte para memoria virtual pero bajo sus propias normas. Para simplificar, en este reportaje, hemos decidido dar como ejemplo el funcionamiento de las CPUs con la ISA x86-64.
Fuente: hardzone.es/reportajes/que-es/memoria-virtual-x86/