2010-10-27 14 views
18

Considere un sistema de memoria virtual con una dirección de bytes virtuales de 38 bits, páginas de 1KB y 512 MB de memoria física. ¿Cuál es el tamaño total de la tabla de páginas para cada proceso en esta máquina, suponiendo que los bits válidos, de protección, sucios y de uso toman un total de 4 bits y que todas las páginas virtuales están en uso? (suponga que las direcciones de disco no están almacenadas en la tabla de páginas.)Determinar el tamaño de la tabla de páginas para la memoria virtual

+0

2^28 entradas debido al tamaño de espacio virtual/tamaño de página. 4 bytes por entrada (28 bits para direccionar números vp, + 4 bits = 32 bits) 2^28 * 4 = 1024 MB, que es más grande que la memoria física. No tiene sentido, falto en la escuela. Esta es mi suposición, no la respuesta real. Gracias de antemano. –

+0

No veo un requisito para que toda la tabla de páginas esté en la memoria física en ninguna parte de la pregunta. – paxdiablo

+0

¿Por qué debería administrarse la memoria física y luego indicar que no hay direcciones de disco almacenadas en la tabla? Esto implicaría que solo necesita abordar los 512 MB de memoria física ... a menos que me equivoque. Gracias de nuevo. –

Respuesta

29

Bueno, si la pregunta es simplemente "¿cuál es el tamaño de la tabla de páginas?" Independientemente de si cabe en la memoria física, la respuesta se puede calcular así:

Primera memoria física. Hay 512K páginas de memoria física (512M/1K). Esto requiere 19 bits para representar cada página. Agregue eso a los 4 bits de información contable y obtendrá 23 bits.

Ahora la memoria virtual. Con un espacio de direcciones de 38 bits y un tamaño de página de 10 bits (1K), necesita 2 entradas en su tabla de páginas.

Por lo tanto, 2 las entradas de la tabla de página a 23 bits cada una son 6,174,015,488 bits o 736M.

Ese es el tamaño máximo necesario para un subsistema VM de un nivel para cada proceso.

Ahora, obviamente, eso no va a funcionar si solo tienes 512M de RAM física, por lo que tienes un par de opciones.

  1. Puede reducir el número de páginas físicas. Por ejemplo, solo permita que la mitad de la memoria esté sujeta a paginación, manteniendo la otra mitad residente en todo momento. Esto ahorrará un bit por entrada, no lo suficiente como para hacer una diferencia.

  2. Aumente el tamaño de la página, si es posible. Una página de 1K en un espacio de direcciones de 38 bits es la razón de las tablas de páginas muy gruesas. Por ejemplo, creo que el '386, con su espacio de direcciones de 32 bits, usa páginas 4K. Eso daría como resultado un millón de entradas de tabla de páginas, mucho menos que los 260 millones requeridos aquí.

  3. Ir a varios niveles. Un poco más avanzado, pero básicamente significa que las tablas de páginas en sí están sujetas a paginación. Debe mantener el primer nivel de tablas de páginas residente en la memoria física, pero el segundo nivel puede entrar y salir según sea necesario. Esto reducirá en gran medida los requisitos físicos pero a costa de la velocidad, ya que pueden ocurrir dos niveles de fallas de página para acceder a una página de proceso real (una para las tablas de paginación secundarias y otra para la página de proceso).


Veamos un poco más de cerca a la opción 3.

Si permitimos 32M para la tabla de paginación primario y dar a cada entrada de 4 bytes (32 bits: sólo el 23 son necesarios, pero podemos ronda para la eficiencia aquí), esto permitirá 8,388,608 páginas para la tabla de la página secundaria.

Dado que cada una de esas páginas de tabla de páginas secundarias tiene 1K de longitud (lo que nos permite almacenar 256 entradas de tabla de páginas secundarias a 4 bytes cada una), podemos direccionar un total de 2.147.483.648 páginas virtuales.

Esto permitiría que 8,192 totalmente cargados (es decir, utilizando todos sus espacios de direcciones de 28 bits) procesen para funcionar uno al lado del otro, suponiendo que tiene bastante espacio en disco para almacenar las páginas no residentes.

Ahora, obviamente, la tabla de paginación principal (y el subsistema VM, y probablemente una buena porción del resto del sistema operativo) tiene que permanecer residente en todo momento. No se le permite salir de una de las páginas principales, ya que puede necesitar esa página para traerla de vuelta a :-)

Pero ese es un costo residente de solo 32M de los 512M para la tabla de paginación principal, mucho mejor que el (como mínimo, para un proceso completamente cargado) de 736M.

+0

¡Gracias por la excelente respuesta! Una cosa, a menos que esté escribiendo mal mis cálculos, ¿no deberían 2^28 * 32 = 6,174,015,488 bits = 771,751,936 bytes = 738 MB? Y sí, estoy bastante seguro mínimamente que se vería un tamaño de página de 4 KB en práctica, tal vez incluso 8 o 16 ... –

+1

Sí, su cálculo es correcto, pero eso es porque usted está utilizando una entrada de página de 32 bits mientras que el mío fue de 23 bits. En un sistema real, sin duda aumentaría hasta al menos 24 bits, y probablemente 32 como lo ha hecho, pero es por eso que las cifras son diferentes. Si usted usa 23 o 32 bits depende de usted, ya que la pregunta solo especificaba que se requerían al menos 4 bits. Si estuviera haciendo la tarea, presentaría múltiples opciones con los motivos de cada una. Pero entonces probablemente me marcarían por ser un inteligente-a *** :-) – paxdiablo

+0

Vaya, eso fue un error tipográfico de mi parte. Eso es en realidad el cálculo de 2^28 * 23 bits = 6174015488 o 736 MB .. –

8

tamaño de la tabla de páginas = Número total de entradas de la tabla de páginas * tamaño de la entrada de tabla de página

PASO 1: Búsqueda de la NO de entradas en la tabla de páginas:

no of page table entries=virtual address space/page size 

=2^38/2^10=2^28 

por lo que hay 2^28 entradas en la tabla de páginas

Paso 2: NO dE MARCOS en la memoria física:

no of frames in the physical memory=(512*1024*1024)/(1*1024)=524288=2^19

por lo que necesitamos 19 bits y adicionales 4 bits para la válida, protección, sucio y utilice brocas totalmente 23 bits = 2.875 bytes

size of the page table=(2^28)*2.875=771751936B=736MB 
-2

1 KB páginas = 2^10, 512 = 2^29 => Offset = 29 - 10 = 19 bit.

virtual incluye dos partes: marco de página + desplazamiento => marco de página + bit sucio = 38 - 19 = 29 bits. 29 bit incluye 4 bit dirty (arriba) => 25 bit para el cuadro de página real, cada cuadro de página tiene 10 bit de longitud.

Por lo tanto, el tamaño de la tabla de página es: 2^25 * 10 = 320M.

Espero que esto sea correcto.

Cuestiones relacionadas