que se disponga a entrar para conocer el número de páginas que ocupa y buscará en su lista de frames libres
un número igual de ellos. Si existen, cargará en ellos las páginas del programa y construirá la correspondiente
tabla de páginas actualizando la lista de frames libres. Cada trabajo en memoria tendrá su propia tabla de
páginas apuntadas por el pcb. Así se logra evitar la fragmentación externa ya que cualquier frame libre es
asignable a un trabajo que lo necesite. Seguirá existiendo fragmentación interna porque generalmente los
trabajos no ocupan el total de la página. Esta fragmentación se reduce si la página tiene un tamaño pequeño,
pero se necesita una tabla de páginas mayor.
Rendimiento. Memoria Caché. Registros asociativos.
Para agilizar la conversión de direcciones el sistema mantiene en memoria la tabla de páginas de los trabajos
activos y usa un registro especial llamado registro base, para indicar la dirección de la tabla de páginas del
proceso en ejecución. Así cuando se conmute de un trabajo a otro se restaura la dirección de la tabla de
páginas correspondiente.
Para transformar cada dirección lógica (p,d) generada por el cpu en su dirección real, el sistema accede en
primer lugar a la tabla de página correspondiente (registro base + p) y después a la dirección real (frame + d).
Así cada dirección provoca dos accesos a memoria y se duplican los tiempos de ejecución. Se mejora el uso
de la memoria pero los procesos son más largos.
Para resolver esto se recurre a memorias pequeñas de muy alta velocidad (muy caras) donde se puedan
mantener las entradas a las tablas de páginas más usadas. Esta memoria (caché) es similar a la principal pero
con menor tiempo de acceso y con eso se reduce el retraso producido por la paginación.
Páginas compartidas.
La paginación permite que varios procesos compartan páginas en memoria. Esto es bueno para los sistemas de
tiempo compartido. Imaginemos un sistema con 20 usuarios que usan un editor de textos, en el sistema se
cargará una sola vez el programa correspondiente y éste será usado por todos ellos aunque los datos sean
propios de cada uno. Cada usuario contendrá en su tabla de páginas las entradas correspondientes al editor,
apuntando todas ellas a los mismos frames y a distintos para los datos.
Es común usar páginas compartidas, su contenido debe permanecer inalterado y tener código reentrante
(durante la ejecución no se altera ningún valor interno).
Si el contenido de las páginas compartidas no debe modificarse, deben protegerse contra todo intento de
escritura. Se necesita un sistema de protección de páginas en memoria que controle las direcciones a las que
se puede acceder y el modo en que se hace dicho acceso. Para ello se añaden a las entradas de la tabla de
páginas una serie de bits de protección (dirección de la pagina), el esquema de protección se complementa
con otro bit por entrada de la tabla de páginas llamado bit de validez (modo r o w).
Segmentación.
La segmentación es una técnica distinta de gestión de memoria que pretende acercarse más al punto de vista
del usuario.
Los programas se desarrollan, generalmente, en torno a un programa principal desde el que se bifurca a otras
partes (rutinas) o se accede a zonas de datos (tablas, pilas, etc.).
Desde este punto de vista, un programa es un conjunto de componentes lógicos de tamaño variable o un
conjunto de segmentos, es decir, el espacio lógico de direcciones se considera como un conjunto de
segmentos, cada uno definido por su tamaño y un número.
La segmentación de un programa la realiza el compilador y en ella cada dirección lógica se expresará
mediante dos valores: número de segmento (s) y desplazamiento dentro del segmento (d).
Hardware de segmentación.
Puesto que la memoria física se direcciona linealmente, será necesario transformar cada dirección lógica (s,d)
en una dirección real (r). Esta conversión la realiza un dispositivo especial de hardware consultando la tabla
de segmentos correspondiente.
Rendimiento.
Reduce la fragmentación interna de la memoria provocada por la paginación, ya que asigna a cada programa
la cantidad de memoria que requiere.
La carga de un programa en memoria exige la búsqueda de los huecos adecuados a sus segmentos y puesto
que éstos son de tamaño variable, se ajustarán lo más posible a las necesidades, produciéndose huecos
pequeños. En este caso se produce fragmentación externa.
La eficacia de la segmentación requiere, de igual forma que la paginación, el uso de memorias caché para
lograr unos tiempos de acceso adecuados.
De igual forma que en la paginación, se pueden compartir segmentos entre varios procesos.
No hay comentarios.:
Publicar un comentario