Memoria Virtual - stefano-sosac/arquitectura-de-computadoras GitHub Wiki
El propósito de la memoria virtual es la de usar el disco duro como una extensión de la RAM. Esto significa que se puede aumentar el espacio de direcciones disponible para que un proceso se pueda usar. Por lo general, no hay suficiente memoria para almacenar varias aplicaciones al mismo tiempo, como una aplicación de procesamiento de textos, un programa de correo electrónico y un programa de gráficos, además del sistema operativo en sí. La forma más fácil de pensar en la memoria virtual es conceptualizarla como una ubicación de memoria imaginaria en la que el sistema operativo maneja todos los problemas de direccionamiento.
Usando la memoria virtual, su computadora se dirige a más memoria principal de la que realmente tiene, y usa el disco duro para contener el exceso. Esta área en el disco duro se llama archivo de página (page file), porque contiene fragmentos de la memoria principal en el disco duro. La forma más común de implementar la memoria virtual es mediante el uso de paginación, un método en el que la memoria principal se divide en bloques de tamaño fijo y los programas se dividen en bloques del mismo tamaño.
Términos importantes:
-
Dirección virtual: dirección lógica o de programa que utiliza el proceso. Cada vez que la CPU genera una dirección, siempre es en términos de espacio de direcciones virtuales.
-
Dirección física: dirección real en memoria.
-
Mapeo: el mecanismo mediante el cual las direcciones virtuales se traducen en físicas (muy similar al mapeo de la MC).
-
Page frames: bloques en los cuales se divide la memoria principal.
-
Páginas: bloques en los cuales se divide la memoria virtual (mismo tamaño que page frames).
-
Paginación: proceso de copiar una página virtual del disco a un page frame en la memoria principal.
-
Fragmentación: memoria que no se utiliza.
-
Fallo de página (page fault): evento que ocurre cuando una página solicitada no está en la memoria principal y debe copiarse en la memoria del disco.
En concreto: la paginación consiste en asignar una memoria física a los procesos en fragmentos de tamaño fijo (page frames) y realizar un seguimiento de dónde residen las distintas páginas del proceso al registrar información en una tabla de páginas.
La tabla de páginas tiene N filas, donde N es el número de páginas virtuales en el proceso. Si hay páginas del proceso que actualmente no están en la memoria principal, la tabla de páginas lo indica al establecer un bit de validación en 0; si la página está en la memoria principal, el bit de validación se establece en 1. Las páginas de memoria virtual tienen el mismo tamaño que los frames de página de memoria física.
La dirección virtual se divide en 2 campos:
-
Campo de página: para representar la página a la que hace referencia.
-
Campo de desplazamiento: para representar el desplazamiento dentro de esa página donde se encuentran los datos solicitados.
Así msmo, la dirección física también se divide en 2 campos:
-
Campo de frame: para representar el frame al que se hace referencia.
-
Campo de desplazamiento: para representar el desplazamiento dentro del frame donde se encuentran los datos solicitados. El tamaño es el mismo que de la dirección virtual.
Este proceso de traducción de direcciones es similar al que usamos cuando dividimos las direcciones de la memoria principal en campos para los algoritmos de mapeo de caché y similar a los bloques de caché. Los tamaños de página suelen ser potencias de 2, lo cual simplifica la extracción de números de página y las compensaciones de las direcciones virtuales.
Ejemplo 1
Se tiene una memoria virtual con un tamaño de 256 bytes y una memoria física de 4 page frames. Considerar que las páginas tienen un tamaño de 32 bytes y la tabla de páginas es la siguiente:
Página | Frame | Bit de validación |
---|---|---|
0 | 2 | 1 |
1 | - | 0 |
2 | - | 0 |
3 | 0 | 1 |
4 | 1 | 1 |
5 | - | 0 |
6 | - | 0 |
7 | 3 | 1 |
Además, se le pide hallar el formato de MV a MP y hallar a qué dirección física ingresa en las siguientes direcciones:
- 0x0D
- 0x40
- 0xE2
Solución:
El primer paso es hallar los bits necesarios para hallar el campo de página y el campo de desplazamiento. En nuestro caso, se observa que existen 8 páginas; por tanto, solo se necesitan 3 bits en el campo de página. Así mismo, la cantidad de bits del campo de desplazamiento se calcula con el tamaño de página. En este caso, la página tiene un tamaño de 32 bytes, por lo que, el campo de desplazamiento debe contener 5 bits para hacer referencia a todos los bytes dentro de la página.
Por otro lado, para hallar los bits asignados al campo de frame basta con observar la cantidad de page frames. En este caso, son 4 page frames; por lo tanto, se necesitarán 2 bits para representar cualquiera de los page frames asignaddos. El campo de desplazamiento tiene el mismo tamaño que el de memoria virtual
Ahora que ya se tiene el formato se pasará a descomponer la dirección virtual
Dirección Virtual (DV) | DV(binario) | campo de página (3 bits) | campo de desplazamiento (5 bits) |
---|---|---|---|
0x0D | 00001101 | 000 | 01101 |
El campo de página muestra que se hace referencia a la página 0. Al revisar la tabla de página vemos que la página 0 hace referencia al frame 2; por tanto, la traducción a la dirección física es la siguiente:
Campo de frame (2 bits) | campo de desplazamiento (5 bits) | Dirección Física (7 bits) |
---|---|---|
10 | 01101 | 1001101 |
Ejemplo 2
Un espacio virtual de 8KiB tiene una memoria física de 4KiB y un tamaño de página de 1KiB. Hallar el formato de MV y MF. • Además, se tiene la siguiente tabla de páginas:
Página | Frame | Bit de validación |
---|---|---|
0 | - | 0 |
1 | 3 | 1 |
2 | 0 | 1 |
3 | - | 0 |
4 | - | 0 |
5 | 1 | 1 |
6 | 2 | 1 |
7 | - | 0 |
Se pide hallar las direcciones físicas de las siguientes direcciones:
- 0x1553
- 0x553
Tiempo de acceso usando paginación
En un sistema, el acceso a memoria principal requiere 200 ns y el fallo de página es de 1%, asumiendo que el costo temporal de acceder a una página que no está en memoria es de 10 ms, calcular el tiempo de acceso promedio. Considerar que los 10 ms incluyen el tiempo necesario de transferir una página en la memoria, actualizar la tabla de página y acceder a la data.
Translation look-aside buffer (TLB)
Es básicamente la caché para la tabla de páginas. Cada entrada de TLB consta de un número de página virtual y su número de cuadro correspondiente. Utiliza mapeo asociativo. A menudo, las computadoras actuales tienen dos TLB separados: uno para instrucciones y otro para datos.