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
Respuesta
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.
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.
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í.
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.
¡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 ... –
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
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 .. –
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
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.
- 1. Determinar el tamaño de la memoria asignada dinámicamente en C
- 2. ¿Cómo encontrar el tamaño de la memoria virtual y el tamaño de la memoria caché de un sistema Linux?
- 3. ¿Debo gestionar páginas o simplemente apoyarme en la memoria virtual?
- 4. ¿Admite Android la memoria virtual
- 5. ¿Cómo determinar un proceso de "tamaño virtual" (WinXP)?
- 6. Linux: identificación de páginas en la memoria
- 7. Cómo determinar el tamaño total de la caché ASP.Net?
- 8. ¿La memoria virtual es infinita?
- 9. ¿Es posible cambiar el tamaño de página de la memoria virtual?
- 10. uso práctico de la memoria virtual
- 11. ASP.NET Páginas no eliminadas de la memoria
- 12. ¿El tamaño de la tabla afecta el rendimiento de INSERTAR?
- 13. ¿Cómo calculo el tamaño de la tabla de página?
- 14. Oracle: determinar el tamaño máximo admitido para la expresión regular
- 15. ¿Memoria virtual?
- 16. Memoria virtual
- 17. Cómo determinar el tamaño óptimo de la pila de hilos?
- 18. Imprimir el encabezado de la tabla en las páginas siguientes
- 19. ¿Es importante el orden de la tabla virtual?
- 20. Memoria virtual y sbrk
- 21. Celdas de tabla de igual tamaño para llenar todo el ancho de la tabla de espera
- 22. Cómo determinar el tamaño de la cadena y comprimirla
- 23. Permitido el tamaño de la memoria de 268435456 bytes agotado
- 24. ¿Qué es "Tamaño virtual" en el Explorador de procesos sysinternals
- 25. Alto uso de la memoria virtual de Node.js
- 26. columna de la tabla no tomará el tamaño completo de la vista de tabla en javaFX
- 27. Determinar el número de páginas en cada tabla SQL sin usar DBCC
- 28. Dónde determinar el tamaño de UIView
- 29. Tamaño de la tabla SQL Azure
- 30. Obtener el tamaño de la memoria del sistema operativo Java
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. –
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
¿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. –