Para
poder ejecutar instrucciones, si no sabemos en qué parte de la memoria estarán
cargadas, debemos tener un mecanismo de traducción de direcciones virtuales a
reales. Para ello, se necesitan dos cosas. Primero, el compilador manejará una
dirección base más un desplazamiento al referirse a las instrucciones. Segundo,
el sistema operativo asignará como dirección base el número de página, al
paginar al proceso. De esta manera, puede buscarse el inicio de una página en
memoria, sumarle el desplazamiento y así obtener la dirección real de una
instrucción.
Nótese
que en el diagrama se tiene una tabla de proceso y ahí mismo se maneja la dirección
inicial de la tabla de páginas. En algunos sistemas operativos, estas dos
tablas se manejan por separado.
La traducción de direcciones
virtuales para segmentos se maneja de manera similar.
Existe un esquema adicional,
paginación/segmentación, que es la combinación de ambos. La memoria se divide
en marcos de página, idealmente más pequeños que el tamaño del marco de página
en un sistema de paginación tradicional. Cada segmento está compuesto por
cierto número de páginas. Es decir, el tamaño del segmento es un múltiplo del
tamaño de página. Este esquema pretende sacar ventaja de los beneficios de los
otros dos. Este mismo mecanismo de traducción de direcciones virtuales puede
aplicarse en paginación/segmentación.
Recordemos que este mapeo debe
efectuarse siempre, instrucción por instrucción ejecutada. Por ello, entre más
rápido sea el mecanismo, mejor. Existe una manera de mejorar dicho mecanismo
mediante hardware.
Una memoria asociativa es muy
cara, pero permite buscar en toda la memoria en un mismo pulso de reloj.
Implementando memoria asociativa, podemos traducir direcciones para páginas o
segmentos.
Sin embargo, el utilizar memoria
asociativa implica que el número de marcos de página y/o el número de
segmentos, se ve limitado por el tamaño de la memoria asociativa. Es decir, no
puede haber más marcos de página que número de celdas en la memoria asociativa.
Por ello, hay sistemas operativos que manejan una combinación de ambos. Se
cargan a memoria las páginas/segmentos más utilizados, y la traducción se
utiliza de manera normal. Solamente en aquellos casos en los que no encontrara
la página/segmento en la memoria asociativa, efectuaría la traducción directa.
Para esa instrucción, haría un doble mapeo. Sin embargo, el principio de
localidad nos asegura que esto no sucederá con frecuencia.
No hay comentarios:
Publicar un comentario