Pregunta

Considere un sistema de memoria virtual con una dirección de byte virtual de 38 bits, 1 KB páginas 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 de protección,, sucios y uso válido toman un total de 4 bits, y que todas las páginas virtuales están en uso? (Asumir que el disco direcciones no se almacenan en la tabla de páginas.)

¿Fue útil?

Solución

Bueno, si la pregunta es, simplemente, "¿cuál es el tamaño de la tabla de páginas?" con independencia de que se ajuste 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. Añadir que a los 4 bits de información contable y se obtiene 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 28 entradas de la tabla de páginas.

Por lo tanto 2 28 entradas de tabla de página en 23 bits cada uno es 6,174,015,488 bits o 736m.

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

Ahora, evidentemente, eso no va a funcionar si sólo tiene 512 MB de memoria RAM física por lo que tiene un par de opciones.

  1. Se puede reducir el número de páginas físicas. Por ejemplo, sólo permiten la mitad de la memoria a ser objeto de paginación, manteniendo la otra mitad residente en todo momento. Esto ahorrará un bit por entrada, en realidad no lo suficiente como para hacer una diferencia.

  2. Aumentar el tamaño de 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 gruesos. Por ejemplo, creo que el '386, con su espacio de direcciones de 32 bits, utiliza páginas de 4 KB. Eso se traduciría en un millón de entradas de la tabla de páginas, mucho menos que los 260 millones que se necesitan aquí.

  3. Ir multi-nivel. Un poco más avanzado, pero básicamente significa que las tablas de páginas mismos son objeto de paginación. Usted tiene que mantener el primer nivel de página de tablas residente en la memoria física, pero el segundo nivel puede entrar y salir cuando sea necesario. Esto reducirá en gran medida los requisitos físicos, pero a costa de la velocidad, desde dos niveles de fallos de página pueden ocurrir para llegar a una página de proceso real (una para las tablas de paginación secundarias entonces una para la página de proceso).


Vamos a mirar un poco más cerca a la opción 3.

Si permitimos 32M para la tabla de paginación primario y damos a cada entrada de 4 bytes (32 bits: sólo el 23 son necesarios pero podemos redondear al alza para la eficiencia aquí)., Esto permitirá 8,388,608 páginas de la tabla de páginas secundarias

Dado que cada una de esas páginas de la tabla de páginas secundarias es 1K largo (lo que nos permite almacenar 256 entradas de tabla de páginas secundarias a las 4 bytes cada uno), podemos hacer frente a un total de 2,147,483,648 páginas virtuales.

Esto permitiría 8192 totalmente cargado (es decir, el uso de la totalidad de su espacio de direcciones de 28 bits) procesos para correr al lado del otro, suponiendo que tiene un buen trozo de espacio en disco para almacenar las páginas no residentes.

Ahora, evidentemente, la tabla principal de paginación (y el subsistema VM, y probablemente una feria trozo del resto del sistema operativo) tiene que permanecer residentes en todo momento. No se puede permitir que la página fuera una de las páginas primarias, ya que así puede necesitar esa página con el fin de traer de vuelta en: -)

Pero eso es un costo residente solamente del 32M 512M para la tabla de paginación primario, mucho mejor que el (como mínimo, por un proceso totalmente cargado) de 736m.

Otros consejos

Tamaño de la tabla de páginas = nº total de entradas de la tabla de páginas * tamaño de la entrada de tabla de página

PASO 1: Encontrar el 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

así que hay 2 ^ 28 entradas en la tabla de páginas

Paso 2: NO DE MARCOS EN FISICA DE MEMORIA:

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

por lo que necesitamos 19 bits y 4 bits adicional para la validez, la protección, sucio y los bits de uso totalmente 23 bits = 2.875 bytes

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

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

virtual incluye dos partes: marco de página + offset => marco de página + poco sucio = 38 - 19 = 29 bits. 29 bits incluye sucia 4 bits (arriba) => 25 bits para marco de página real, cada marco de página tiene 10 bits de largo.

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

La esperanza esta correcta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top