7.7 Tamaño de Página
[DEIT93] [SILB94] [TANE93]
Al diseñar una máquina hay que tomar una decisión sobre el mejor tamaño de página. Como podrá suponer, no hay un tamaño único que sea el mejor, pero existen varios factores que apoyan tamaños distintos. Los tamaños son invariablemente potencias de dos, que suelen ir de 512 (29) a 16384 (214) bytes.
¿Cómo seleccionamos el tamaño de página? Un factor es el tamaño de la tabla de páginas. Para un espacio de memoria virtual establecido, al reducir el tamaño aumenta el número de páginas y, por tanto, el tamaño de la tabla de páginas. Para una memoria virtual de 4 MB habría 4096 paginas de 1K bytes, pero sólo 512 páginas de 8192 bytes. Como cada proceso activo debe tener su propia tabla de páginas, sería deseable un tamaño de página grande.
Por otra parte, la memoria se utiliza mejor con páginas pequeñas. Una parte de la última página estará asignada pero no totalmente ocupada (fragmentación interna). Suponiendo que los tamaños de los procesos y de la página son independientes, podemos esperar que, en promedio, se desperdiciará la mitad de la última página de cada proceso. Esta pérdida representaría sólo 256 bytes en una página de 512 bytes, pero serían 4096 bytes en una página de 8192. Para minimizar la fragmentación interna necesitamos un tamaño de página pequeño.Otro problema es el tiempo necesario para leer o escribir una página. El tiempo de E/S está compuesto por tiempo de
El tiempo de transferencia es proporcional a la cantidad transferida (o sea, al tamaño de página), hecho que aparentemente apunta en favor de un tamaño de página pequeño. Sin embargo, los tiempos de búsqueda y de latencia son mucho mayores al tiempo de transferencia. A una velocidad de transferencia de 2MB por segundo, la transferencia de 512 bytes cuesta sólo 0.2 milisegundos. La latencia puede que sea de 8 milisegundos y el tiempo de búsqueda de 20 milisegundos. Del tiempo total de E/S (28.2 milisegundos), por tanto, el 1% puede atribuirse a la transferencia. Si duplicamos el tamaño de la página, el tiempo aumenta a sólo 28.4 milisegundos. Esto significa que se invertiría 28.4 milisegundos para leer una sola página de 1024 bytes, pero 56.4 milisegundos para leer la misma cantidad como dos páginas de 512 bytes cada una. Por lo anterior, el deseo de minimizar el tiempo de E/S implica elegir un tamaño de página grande.
Sin embargo, con un menor tamaño de página se puede reducir el número total de E/S, ya que la localidad mejoraría. Un tamaño de página menor permite que cada página se ajuste con mayor precisión a la localidad del programa. Por ejemplo, considere un proceso de 200K, de los que sólo la mitad (100K) se usan realmente durante su ejecución. Si tenemos una solo página de gran tamaño, debemos transferirla y ubicarla por completo en memoria. Con un tamaño de página menor obtenemos una mejor resolución, lo que nos permite realizar menos E/S y tener menos memoria asignada.
Por otra parte, con un tamaño de página de un byte se generaría un fallo de página por cada byte. Cada fallo de página genera una gran cantidad de procesamiento adicional para guardar
registros, reemplazar la página, esperar en la cola del dispositivo de paginación y actualizar tablas. Para minimizar el número de fallos de página necesitamos un tamaño de página mayor.La tendencia histórica va hacia mayores tamaños de página. El procesador Intel 80386 tiene un tamaño de página de 4K; el Motorola 68030 permite un tamaño que varía 256 bytes y 32K. Esta evolución hacia mayores tamaños es consecuencia de que el aumento de la velocidad de la CPU y de la capacidad de la memoria principal se ha producido con mayor rapidez que la velocidad de los discos. Existen otros factores que deben considerarse (como la relación entre el tamaño de página y el tamaño del sector del dispositivo de paginación). No hay solución que pueda considerarse la mejor. Algunos factores (fragmentación interna, localidad) apuntan a favor de un tamaño de página pequeño, mientras que otros (tamaño de página, tiempo de E/S) favorecen un tamaño de página grande.