Vous êtes sur la page 1sur 41

SISTEMAS OPERATIVOS 7 - Administracin de memoria

7-1
7. Administracin de memoria
En el capitulo 6 mostramos cmo un conjunto de procesos puede compartir la UCP.
Como resultado de la planificacin de la UCP podemos mejorar tanto su utilizacin como su
velocidad de respuesta a los usuarios.
Sin embargo, para lograr este incremento en el rendimiento, es necesario conservar varios
procesos en memoria; es decir debemos compartir la memoria.
En este capitulo analizaremos varias maneras de administrar la memoria.
Los algoritmos de administracin de memoria varan desde una estrategia primitiva de los
elementos bsicos de la mquina hasta estrategias de paginacin y segmentacin, y cada una de estas
estrategias tiene sus propias ventajas y desventajas.
La seleccin de un esquema de administracin de memoria depende de muchos factores,
especialmente del diseo del hardware del sistema.
Cada algoritmo requiere su propio apoyo del hardware.
Los algoritmos de administracin de memoria que presentaremos tienen un requisito bsico:
todo el programa del proceso debe encontrarse en la memoria fsica antes de que pueda ejecutarse.
Esta restriccin limita el tamao mximo del proceso al tamao de la memoria fsica.
7.1 Antecedentes
Como ya vimos, la memoria es parte capital del funcionamiento de un sistema de computacin
moderno.
La memoria es un gran arreglo de palabras o bytes, cada uno con su propia direccin.
La interaccin se logra por medio de una secuencia de lecturas o escrituras a direcciones
especificas de memoria.
La UCP busca informacin de la memoria o la almacena en ella.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-2
Por ejemplo, un ciclo tpico para la ejecucin de una instruccin:
- Primero buscar una instruccin de la memoria.
- Luego la instruccin se descodifica y puede provocar que se busquen operandos de la memoria
- Despus de aplicar la instruccin a los operandos, los resultados pueden guardarse en memoria.
Observe que la unidad de memoria solo ve un flujo de direcciones de memoria; no sabe como se
generan (el contador de instrucciones, ndices, indireccin, direcciones literales, etc.) o para qu son
(instrucciones o datos).
Por lo anterior, podemos ignorar como un programa genera una direccin de memoria.
Slo nos interesa la secuencia de direcciones de memoria generadas por el programa en
ejecucin.
7.1.1 Enlace de direcciones
Para ejecutar un proceso, ste debe cargarse en memoria.
Generalmente el proceso reside en disco como archivo binario ejecutable.
El conjunto de procesos en disco que esperan entrar en la memoria para ejecutarse integran la
cola de entrada.
El procedimiento normal consiste en seleccionar uno de los procesos de la cola de entrada y
cargarlo en memoria.
Esta tcnica en ocasiones provoca la relocalizacin de direcciones o el enlace de referencias
externas a puntos de entrada, segn sea necesario.
Mientras se ejecuta un programa, accede a las instrucciones y datos en memoria.
Finalmente, el programa termina y su espacio en memoria se declara disponible.
Un proceso de usuario puede residir en cualquier parte de la memoria fsica.
Por esto, aunque el espacio de direcciones del computador comience en 00000, no es necesario
que la primera direccin del proceso de usuario sea 00000.
Esta disposicin afecta a las direcciones que puede usar un programa de usuario.
En la mayora de los casos, un programa de usuario pasar por varias etapas (algunas pueden ser
optativas) antes de ejecutarse (Fig. 7.1).
En estas etapas las direcciones pueden representarse de distintas maneras.
En un programa fuente las direcciones son generalmente simblicas (como D).
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-3
Programa
fuente
mdulo
objeto
mdulo
de
carga
otros
mdulos
objeto
biblioteca
del
sistema
bibilioteca del
sistema enlazado
dinmicamente
compilador o
ensamblador
editor de enlaces
cargador
contenido de la
memoria en binario
compilacin
carga
ejecucin
Figura 7.1 Procesamiento en varias etapas de un programas de usuario.
Un compilador normalmente enlazar estas direcciones simblicas con direcciones
relocalizables (como 14 bytes a partir del inicio de este mdulo).
A su vez, el editor de enlaces o el cargador enlazara estas direcciones relocalizables con
direcciones absolutas (como 74.014).
Cada enlace es una correspondencia entre un espacio de direcciones y otro.
El enlace de las instrucciones y datos con las direcciones de memoria casi siempre puede
efectuarse en cualquier etapa del camino:
Compilacin:
Si en el momento de la compilacin se sabe dnde residir el programa en memoria puede
generarse cdigo absoluto. Por ejemplo, si desde un principio se sabe que un proceso de usuario residir
iniciando en la posicin R, entonces el cdigo generado por el compilador comenzar en esa posicin y
se extender a partir de all.
Si mas tarde cambia la posicin de inicio, ser necesario volver a compilar el cdigo.
Los programas de MS-DOS con formato .COM se enlazan de manera absoluta durante la
compilacin.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-4
Carga:
Si en el momento de la compilacin no se conoce donde residir el programa en la memoria,
entonces el compilador deber generar cdigo relocalizable. En este caso se posterga el enlace final
hasta el momento de la carga.
Si cambia la direccin de inicio, slo tenemos que cargar de nuevo el cdigo del usuario para
incorporar el valor modificado.
Ejecucin:
Si durante la ejecucin el proceso puede moverse de un segmento de memoria a otro, entonces
el enlace final se debe postergar hasta el momento de la ejecucin.
Se debe tener hardware especial para que este esquema funcione (como veremos mas adelante).
Gran parte de este capitulo se dedica a mostrar como pueden implantarse efectivamente los
enlaces en un sistema de computacin.
7.1.2 Carga dinmica
Para obtener una mejor utilizacin del espacio de memoria podemos utilizar la carga dinmica,
con la cual una rutina no se carga hasta que se le llama.
Todas las rutinas se almacenan en disco en formato de carga relocalizable.
- El programa principal se carga en memoria y se ejecuta.
- Cuando una rutina tiene que llamar a otra, la rutina llamadora primero comprueba si se ha
cargado la otra.
- Si no es as, se llama al cargador de enlace relocalizable para que cargue en memoria la rutina
deseada y actualice las tablas para reflejar este cambio.
- Luego el control se transfiere a la rutina recin cargada.
La ventaja de la carga dinmica es que nunca se carga una rutina que no se usa.
Este esquema es particularmente til cuando se requieren grandes cantidades de cdigo para
manejar situaciones que ocurren con poca frecuencia, como las distintas rutinas de error.
En este caso, aunque el tamao total del programa puede ser grande, la porcin que realmente se
usa (y por tanto, la que se carga) puede ser mucho menor.
La carga dinmica no requiere apoyo especial del SO.
Es responsabilidad de los usuarios disear sus programas para aprovechar este esquema.
7.1.3 Enlace dinmico
Observe que la figura 7.1 tambin muestra bibliotecas enlazadas dinmicamente.
La mayora de los SOs slo permiten el enlace esttico, donde las bibliotecas de lenguaje del
sistema son tratadas como cualquier otro mdulo objeto y el cargador las combina con el contenido del
programa binario.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-5
El concepto de enlace dinmico es semejante al de carga dinmica.
En vez de postergar la carga hasta la ejecucin, se posterga el enlace.
Esta caracterstica se emplea generalmente con las bibliotecas del sistema, como las bibliotecas
de subrutinas de lenguaje.
Sin este recurso, todos los programas de un sistema necesitan incluir en su contenido ejecutable
una copia de la biblioteca de su lenguaje (o por lo menos las rutinas a las que hacen referencia).
Este requisito desperdicia espacio en disco y en memoria principal.
Con el enlace dinmico, en el contenido binario se incluye un fragmento (stub) para cada
referencia a una rutina de la biblioteca. Este fragmento es un pequeo trozo de cdigo que indica cmo
localizar la rutina de biblioteca residente en memoria. Al ejecutar este fragmento se reemplaza a s
mismo con la direccin de la rutina y la ejecuta.
De esta manera, la siguiente vez que se llega a ese segmento de cdigo, la rutina de biblioteca se
ejecuta directamente, sin que el enlace dinmico suponga costos adicionales.
En este esquema, todos los procesos que utilizan una biblioteca de lenguaje ejecutan slo una
copia del cdigo de la biblioteca.
Esta caracterstica puede extenderse para incluir actualizaciones a bibliotecas (como correccin
de errores).
Una nueva versin puede sustituir a una biblioteca y todos los programas que hacen referencia a
la biblioteca usarn automticamente la nueva versin.
Sin el enlace dinmico, todos estos programas se tendran que enlazar una vez ms para tener
acceso a la nueva biblioteca.
Para que los programas no ejecuten accidentalmente versiones nuevas e incompatibles de las
bibliotecas, tanto en el programa como en la biblioteca se incluye informacin de la versin.
Se puede cargar en la memoria varias versiones de una biblioteca y cada programa utiliza esta
informacin sobre la versin para decidir qu copia utilizar.
Los cambios menores conservan el mismo nmero de versin, mientras que los cambios de
mayor magnitud incrementan el nmero de versin.
De esta manera, slo los programas compilados con la nueva versin de la biblioteca se vern
afectados por los cambios incompatibles que se les haya incorporado.
Los dems programas, enlazados antes de instalar la nueva biblioteca, seguirn usando la
biblioteca anterior.
A este sistema tambin se le conoce como bibliotecas compartidas.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-6
7.1.4 Superposiciones
Puesto que todo el espacio lgico de direcciones de un proceso debe encontrarse en la memoria
fsica antes de ejecutar el proceso, la dimensin de un proceso est limitada por el tamao de la
memoria fsica.
Para que un proceso pueda ser mayor que la cantidad de memoria que se le asigna, en ocasiones
se utiliza una tcnica llamada superposiciones.
La idea es conservar en memoria slo aquellas instrucciones y datos que se requieren en un
momento determinado.
Cuando se necesitan otras instrucciones, se cargan en el espacio que antes ocupaban las que ya
no se requieren (esto es la superposicin).
Como ejemplo, considere un ensamblador de dos pasos.
Durante el primer paso construye una tabla de smbolos; luego, durante el segundo paso, genera
el cdigo del lenguaje de mquina.
Podemos dividir este ensamblador en:
- cdigo del primer paso
- cdigo del segundo paso
- tabla de smbolos
- rutinas comunes de apoyo utilizadas por ambos pasos.
Suponga que los tamaos de estos componentes en K = 1 kilobyte o 1.024 bytes):
Primer Paso 70 K
Segundo Paso 80 K
Tabla de smbolos 20 K
Rutinas comunes 30 K
200 K
Para cargar todo a la vez necesitaramos 200 K de memoria; si slo hay 150 K disponibles, no
podemos ejecutar nuestro proceso.
Sin embargo, observe que el paso 1 y el paso 2 no necesitan estar en memoria al mismo tiempo,
de modo que definimos dos superposiciones:
Superposicin A - la Tabla de smbolos, las Rutinas comunes y el Primer Paso,
Superposicin B - la Tabla de smbolos, las Rutinas comunes y el Segundo Paso.
Agregamos un manejador de la superposicin (de 10 K) y comenzamos con la Superposicin A
en memoria.
Cuando terminamos el Primer Paso, pasamos al manejador de la superposicin, que lee la
superposicin B en memoria (sobreescribiendo la A), y luego transferimos el control al Segundo Paso
La superposicin A slo necesita 120 K, mientras que la superposicin B necesita 130 K (Fig.
7.2).
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-7
20 K
30 K
10 K
70 K 80 K
tabla de smbolos
rutinas comunes
manejador de las
superposiciones
paso 1 paso 2
Figura 7.2 Superposiciones para un ensamblador de dos pasos.
Ahora podemos ejecutar nuestro ensamblador en los 150 K de memoria disponible, pero se
ejecutar ms despacio por la E/S adicional requerida para leer el cdigo de la superposicin B sobre el
de la superposicin A.
Los cdigos de las superposiciones A y B se conservan en disco como imgenes de memoria
absoluta, y el manejador de la superposicin los lee segn se requiera.
Para construir las superposiciones se necesitan algoritmos especiales de relocalizacin y
enlace.
Al igual que en la carga dinmica, las superposiciones no requieren apoyo especial del SO.
El usuario puede implantarlas en su totalidad utilizando sencillas estructuras de archivo, leyendo
de los archivos a memoria y saltando a esa memoria para ejecutar las instrucciones recin ledas.
Lo nico que nota el SO es que hay ms E/S que de costumbre.
El programador, por otra parte, debe disear y programar adecuadamente la estructura de las
superposiciones.
sta puede ser una tarea de gran magnitud que requiere un conocimiento total de la estructura
del programa, su cdigo y sus estructuras de datos.
Ya que, por definicin, el programa es grande (los pequeos no necesitan superposiciones),
puede ser difcil comprenderlo suficientemente. Por estas razones, en la actualidad el uso de
superposiciones est limitado a los microcomputadores y otros sistemas con cantidades limitadas de
memoria fsica y que carecen del apoyo del hardware para tcnicas ms avanzadas.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-8
Definitivamente son preferibles las tcnicas automticas para ejecutar programas de gran
tamao en cantidades limitadas de memoria fsica.
7.2 Intercambios
Un proceso necesita estar en memoria para ejecutarse.
Sin embargo, un proceso puede intercambiarse temporalmente, saliendo de la memoria a un
almacenamiento secundario, y regresando luego a la memoria para continuar su ejecucin.
Por ejemplo, suponga un entorno de multiprogramacin con un algoritmo de planificacin
circular RR (Round-Robin) de la UCP.
Cuando un cuanto expira, el administrador de la memoria comenzar a intercambiar el
proceso que acaba de terminar, para incorporar otro proceso al espacio de memoria que acaba de
liberarse, mientras tanto, el planificador de la UCP asignar una porcin de tiempo a otro proceso en
memoria. (Fig. 7-3).
MemoriaPrincipal
DISCO RIGIDO
Figura 7.3 Intercambio de dos procesos utilizando el disco como almacenamiento auxiliar
Cada vez que un proceso termina su cuanto, se intercambia con otro.
Idealmente, el administrador de la memoria puede intercambiar procesos con la velocidad
suficiente para que siempre haya procesos en memoria listos para ejecutarse, cada vez que el
planificador de la UCP quiere volver a planificarla.
El cuanto debe tener el tamao suficiente para que se efecte una cantidad de clculos razonable
entre intercambios.
Para los algoritmos basados en prioridades se emplea una variante de esta poltica de
intercambio.
Si llega un proceso de mayor prioridad y desea ejecutarse, el administrador de memoria puede
intercambiarlo con un proceso de menor prioridad para as cargar y ejecutar el de mayor prioridad.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-9
Cuando ste termina puede devolver el proceso de menor prioridad y continuar su ejecucin.
Esta variante de intercambios en ocasiones se denomina salida y entrada por intercambio (roll-
out, roll-in).
Normalmente un proceso que sale de un intercambio regresar al mismo espacio de memoria
que antes ocupaba.
Esta restriccin la determina el mtodo de enlace de direcciones.
- Si el enlace se emplea durante el ensamble o la carga, el proceso no puede moverse a otras
localidades.
- Si el enlace se emplea durante la ejecucin, entonces es posible intercambiar un proceso
colocndolo en un espacio de memoria distinto.
Los intercambios requieren almacenamiento auxiliar generalmente es un disco rpido.
Debe tener el tamao suficiente para contener copias de la imagen de memoria de todos los
usuarios y ofrecer acceso directo a esta imagen.
El sistema mantiene una cola de procesos listos que consiste en todos los procesos cuya imagen
de memoria se encuentra en el almacenamiento auxiliar o en memoria y estn listos para ejecutarse.
Cuando el planificador de la UCP decide ejecutar un proceso, llama al despachador, el cual
comprueba si el siguiente proceso de la cola esta en memoria.
Si no esta, y no se cuenta con una regin de memoria libre, el despachador intercambia un
proceso en memoria con el proceso deseado.
Luego vuelve a cargar los registros como siempre y transfiere el control al proceso seleccionado.
Obviamente el tiempo de cambio de contexto en un sistema de intercambios de este tipo es
bastante alto.
Para tener una idea del tiempo de cambio de contexto, suponga que el proceso de usuario tiene
un tamao de 100 K y el almacenamiento auxiliar es un disco de cabeza estndar con una velocidad de
transferencia de 1 Megabytes x segundo. La transferencia del proceso de 100 K de la memoria o hacia
ella dura
100K / 1000K por segundo = 1 / 10 segundo = 0,1 segundos = 100 milisegundos
Suponiendo un tiempo de latencia promedio de 8 milisegundos, el tiempo de intercambio es de
108 milisegundos. Como el intercambio debe ser de salida y de entrada, entonces el tiempo total de
intercambio es de unos 216 milisegundos.
Para obtener una utilizacin eficiente de la UCP queremos que nuestro tiempo de ejecucin para
cada proceso sea extenso en relacin con el tiempo de intercambio.
As, por ejemplo, en un algoritmo de planificacin circular de la UCP, el cuanto de tiempo
debera ser mucho mayor que 0.216 segundos.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-10
Observe que la mayor parte del tiempo de intercambio se invierte en la transferencia.
El tiempo de transferencia total es directamente proporcional a la cantidad de memoria que se
intercambia.
Si tenemos un sistema de computacin con 1 Megabytes de memoria principal y el SO residente
ocupa 100 K, el tamao mximo para un proceso de usuario es 900 K. Sin embargo, muchos procesos
de usuario pueden ser ms pequeos, digamos 100 K.
Un proceso de 100 K podra intercambiarse en 108 milisegundos, comparado con 908
milisegundos para los 900 K.
Por esto, seria importante saber con precisin cunta memoria est usando un proceso de
usuario, no cunto podra usar.
De esta manera podramos intercambiar slo lo que se utiliza, reduciendo el tiempo de
intercambio.
Para que este esquema sea efectivo, el usuario debe informar al SO de cualquier cambio en los
requisitos de memoria, de modo que un proceso con requisitos de memoria dinmica necesitar emitir
llamadas al sistema (solicitar memoria y liberar memoria) para informar al SO de los cambios en sus
necesidades de memoria.
Existen otras restricciones para los intercambios.
Si queremos intercambiar un proceso, debemos estar seguros de que est completamente
inactivo.
Cualquier solicitud de E/S que est pendiente tiene una importancia especial.
Si un proceso espera una operacin de E/S, puede ser que deseemos intercambiar ese proceso
para liberar su memoria.
Sin embargo, si la E/S tiene acceso asncrono a la memoria del usuario para usar sus buffers
de E/S, entonces el proceso no se puede intercambiar.
Suponga que la operacin de E/S est en una cola, porque el dispositivo estaba ocupado,
entonces, si intercambiamos el proceso P1 que est en memoria con el proceso P2, la operacin de E/S
podra intentar usar la memoria que ahora pertenece al proceso P2.
Las dos soluciones principales para este problema son:
1 - nunca intercambiar un proceso con E/S pendiente
2 - ejecutar las operaciones de E/S slo en los buffers del SO.
As, hay transferencia entre la memoria del SO y la del proceso slo cuando un proceso entra
por intercambio.
En una de las primeras versiones de UNIX se aplic una modificacin de los intercambios.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-11
Normalmente, los intercambios estaban desactivados, pero podan iniciarse si se ejecutaban
muchos procesos y utilizaban una cantidad de memoria superior a cierto umbral.
Los intercambios se detendran una vez ms si la carga del sistema se redujera.
Muy pocos sistemas actuales usan los intercambios sin modificaciones.
7.3 Asignacin de una sola particin
Definitivamente el esquema de administracin de memoria mas sencillo es no tener ninguno.
Al usuario se le proporciona la mquina bsica y tiene absoluto control sobre todo el espacio de
memoria.
Esta estrategia tiene varias ventajas:
- Ofrece al usuario la mxima flexibilidad, pues le permite controlar como desee el uso de la
memoria; es muy sencillo y su costo es mnimo.
- Adems, esta estrategia no requiere hardware especial para administrar la memoria ni software
del SO.
El sistema tambin tiene sus limitaciones:
- No ofrece servicios.
- El usuario tiene control absoluto sobre el computador, pero el SO no lo tiene sobre las
interrupciones, ni tampoco posee un mecanismo para procesar llamadas al sistema, o errores, ni
espacio para ofrecer la multiprogramacin.
Generalmente este enfoque slo se utiliza en sistemas dedicados donde los usuarios requieren
flexibilidad y sencillez y estn dispuestos a programar sus propias rutinas de apoyo.
El siguiente esquema ms sencillo consiste en dividir la memoria en dos particiones, una para el
usuario y otra para el SO residente.
Es posible colocar el SO en la memoria baja o en la memoria alta.
Por lo general, el principal factor que afecta esta decisin es la ubicacin del vector de
interrupciones.
Como muchas veces este vector se encuentra en la memoria baja, es ms frecuente colocar
tambin all el SO. Por esto, slo analizaremos el caso donde el SO reside en memoria baja (Fig. 7.4).
El desarrollo de la otra situacin es similar.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-12
512 K
sistema operativo
0 K
usuario
Figura 7.4 Sistema monousuario
Si el SO reside en memoria baja y un proceso de usuario se ejecuta en memoria alta, debemos
proteger el cdigo y los datos del SO frente a cambios (accidentales o deliberados) provocados por el
proceso de usuario.
Esta proteccin debe ser proporcionada por el hardware y puede implantarse usando un
esquema de registros base y limite. Observe que, como slo tenemos un usuario en memoria, en este
caso no es obligatorio usar el registro lmite.
Otro problema que hay que tener en cuenta es la carga de los procesos de usuario.
Aunque el espacio de direcciones del computador comienza en 00000, la primera direccin del
programa de usuario no es 00000, sino la que sigue al valor del registro base.
Si durante la compilacin se conoce la direccin base, puede generarse cdigo absoluto.
Este cdigo comenzar en la direccin base y se extender a partir de all.
Sin embargo, si despus cambia la direccin base, ser necesario recompilar el cdigo.
Como alterativa, el compilador puede generar cdigo relocalizable.
En este caso, el enlace se posterga hasta el momento de la carga.
Si la direccin base cambia, slo hay que cargar de nuevo el cdigo de usuario para incorporar
el valor modificado.
Un problema con este esquema es que el valor base debe permanecer esttico durante la
ejecucin del programa.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-13
Por supuesto, si las direcciones de usuario estn enlazadas a las direcciones fsicas por medio de
la base, entonces estas direcciones no sern vlidas si la base cambia.
Por esto, la direccin base slo se puede cambiar cuando no se ejecuta ningn programa de
usuario.
Existen casos, no obstante, donde es deseable cambiar el tamao del SO (y por consiguiente la
posicin base) durante la ejecucin del programa.
Por ejemplo, el SO contiene cdigo y espacio de almacenamiento temporal para los
manejadores de dispositivos.
Si un manejador de dispositivo (o cualquier otro servicio del SO) no se utiliza habitualmente,
no es deseable conservar en memoria sus datos y cdigo, pues podramos emplear ese espacio para otros
fines. A este cdigo en ocasiones se le llama cdigo temporal del SO; viene y va segn se requiera, de
esta manera, al usar este cdigo el tamao del SO varia durante la ejecucin del programa
.
Hay dos maneras de modificar el esquema bsico que hemos presentado para permitir que
cambie dinmicamente el tamao del SO.
- Un mtodo consiste en cargar el proceso de usuario en la memoria alta, descendiendo hacia
el valor del registro base, en vez de hacerlo desde la base hacia la memoria alta (Fig. 7.5).
512 K
sistema operativo
0 K
usuario
Figura 7.5 Carga del programa de usuario en memoria alta.
Aqu la ventaja es que todo el espacio no utilizado se encuentra en la parte media, por lo que, de
ser necesario, el proceso de usuario o el SO pueden extenderse a la memoria no utilizada.
- Otro mtodo ms general es postergar el enlace de direcciones hasta la ejecucin.

Este esquema requiere un apoyo de hardware ligeramente distinto, como se presenta en la figura
7.6.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-14
UCP
14000
memoria
registro base
direccin
lgica
direccin
fsica
346 14346
+
Figura 7.6 Relocalizacin dinmica utilizando un registro de relocalizacin.
Al registro base ahora se le llama registro de relocalizacin.
El valor del registro base se suma a cada direccin generada por un proceso de usuario en el
momento de enviarla a memoria.
Por ejemplo, si la base esta en 14.000 y el usuario intenta dirigirse a la localidad 0, se relocaliza
dinmicamente a la localidad 14.000; un acceso a la posicin 346 se relocaliza a la posicin 14.346.
Observe que un programa de usuario nunca ve las direcciones fsicas reales.
El programa puede crear un apuntador a la localidad 346, almacenarla en memoria, manipularla
y compararla con otras direcciones, todo como el nmero 346.
Slo cuando se usa como una direccin de memoria (quiz en una carga o almacenamiento
indirectos) se relocaliza en relacin con el registro base.
El programa de usuario trata con direcciones lgicas.
El hardware de correspondencia de memoria convierte las direcciones lgicas en direcciones
fsicas.
En la seccin 7.1.1 se analiz esta forma de enlace durante la ejecucin. La localidad final de la
direccin de memoria no se determina hasta que se efecta la referencia.
Para este hardware, un cambio en la localidad de inicio slo requiere un cambio en el registro
base y la transferencia de toda la memoria del usuario a las localidades correctas respecto al nuevo
valor base.
Este esquema puede requerir que se copie una gran cantidad de memoria, pero permite cambiar
la base en cualquier momento.
Observe tambin que ahora tenemos dos tipos distintos de direcciones:
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-15
- direcciones lgicas - (en el intervalo 0 a mdx)
- direcciones fsicas - (en el intervalo R + 0 a R + mdx siendo R el valor).
El usuario genera nicamente las direcciones lgicas y piensa que el proceso se ejecuta en la
localidad 0 a mdx.
El SO sabe cul es la verdadera situacin y puede tener acceso directo a la memoria fsica en
modo monitor.
Toda la informacin que el proceso de usuario pasa al SO (como las direcciones de buffers en
llamadas al sistema) debe ser relocalizada explcitamente por el software del SO antes de usarse.
Este requisito tiene especial importancia en el caso de las direcciones que se proporcionan a los
dispositivos de E/S. El programa de usuario proporciona direcciones lgicas que deben transformarse en
direcciones fsicas antes de usarlas.
El concepto de un espacio de direcciones lgicas enlazado con un espacio de direcciones fsicas
separado es parte esencial de una administracin de memoria adecuada.
7.4 Asignacin de particiones mltiples
En un sistema de multiprogramacin, varios procesos residen en memoria y la CPU conmuta
rpidamente entre ellos.
El problema de la administracin de memoria consiste en asignar memoria a los distintos
procesos que esperan en la cola de entrada para ser transferidos a memoria.
Uno de los esquemas ms sencillos para la asignacin de memoria consiste en dividirla en
varias particiones de tamao fijo.
Cada particin puede contener exactamente un proceso.
De esta forma, el nivel de multiprogramacin est limitado por el nmero de particiones.
Cuando una particin esta libre, se selecciona un proceso de la cola de entrada y se carga en la
particin libre; cuando el proceso termina la particin esta disponible para otro.
Este esquema se emple originalmente en el SO (llamado MFT) del IBM OS/360, pero ya no se
utiliza. El esquema que aqu se describe es una generalizacin del esquema de particiones fijas y se usa
sobre todo en entornos de procesamiento por lotes.
7.4.1 Esquema bsico
El SO conserva una tabla que indica cules partes de la memoria estn disponibles y cules
estn ocupadas.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-16
Inicialmente toda la memoria est disponible para los procesos de usuario, y se considera como
un gran bloque de memoria disponible, o un hueco.
Cuando llega un proceso y necesita memoria, se busca un hueco de tamao suficiente para ese
proceso. Si lo encontramos, slo asignamos la cantidad de memoria necesaria, quedando disponible el
resto para satisfacer solicitudes posteriores.
Por ejemplo, suponga que tenemos 2.560 K de memoria disponible y un SO residente de 400 K.
Esta situacin deja 2.160 K para los procesos de usuario como se muestra en la figura 7.7.
Cola de trabajos
Proceso
P1
P2
P3
P4
P5
Memoria
600 K
1000 K
300 K
700 K
500 K
Tiempo de UCP
10
5
20
8
15
sistema operativo
0 K
400 K
2560 K
2160 K
Figura 7.7 Ejemplo de planificacin.
A partir de la cola de entrada que se presenta en la figura, as como una planificacin de
trabajos FCFS, podemos asignar memoria de inmediato a los procesos P1, P2 y P3, creando el mapa de
memoria de la figura 7.8(a).
Tenemos un hueco de 260 K que no puede usar ninguno de los procesos restantes de la cola de
entrada.
Utilizando un algoritmo de planificacin circular de la CPU, con un cuanto de 1 unidad de
tiempo, el proceso P2 terminar en el instante 14, liberando su asignacin de memoria, figura 7.8(b).
Entonces volvemos a la cola de trabajos e iniciamos el siguiente proceso, P4, obteniendo el
mapa de memoria de la figura 7.8(c).
El proceso P1 terminar en el instante 28 y producir la situacin que se presenta en la figura
7.8(d).
Luego se inicia el proceso P5, que da como resultado la figura 7.8(e).
Este ejemplo ilustra varios puntos. En general, en cualquier momento hay un conjunto de
huecos de distintos tamaos y disperses por toda la memoria.
Cuando llega un proceso y necesita memoria, buscamos en este conjunto un hueco con el tamao
suficiente para el proceso.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-17
Si el hueco es demasiado grande, se divide en dos: una parte se asigna al proceso que llega y la
otra se devuelve al conjunto de huecos.
Cuando termina un proceso, libera su bloque de memoria, el cual se coloca de nuevo en el
conjunto de huecos.
Si el nuevo hueco es adyacente a otros, los fusionamos formando uno mayor.
Al llegar a este punto, necesitaramos comprobar si hay procesos esperando memoria y si esta
nueva memoria liberada y recombinada puede satisfacer las solicitudes de algunos de estos procesos.
(a) (b) (c) (d) (e)
sistema
operativo
P
P
P
sistema
operativo
sistema
operativo
sistema
operativo
sistema
operativo
P P
P P P
P P P
P
1 1 1
2
3 3 3 3
4 4 4
5
P
3
0 K
400 K
1000 K
2000 K
2300 K
2560 K
1700 K
0 K
400 K
1000 K
2000 K
2300 K
2560 K
0 K
400 K
1000 K
2000 K
2300 K
2560 K
0 K
400 K
1000 K
2000 K
2300 K
2560 K
0 K
400 K
1000 K
2000 K
2300 K
2560 K
1700 K 1700 K
900 K
P
termina
P
termina
colocar
P
colocar
P
2 1
4 5
Figura 7.8 Asignacin de memoria y planificacin a largo plazo.
Se trata de una aplicacin especifica del problema general de asignacin dinmica de
almacenamiento, es decir cmo satisfacer una solicitud de tamao n a partir de una lista de huecos
libres.
Existen muchas soluciones para este problema. Se busca en el conjunto de huecos para
determinar cul es el mejor hueco para la asignacin.
Las estrategias de primer ajuste, mejor ajuste y peor ajuste son las ms comunes para
seleccionar un hueco libre de un conjunto de huecos disponibles.
Primer ajuste. Asignar el primer hueco que tenga el tamao suficiente. La bsqueda puede
comenzar en el inicio del conjunto de huecos o a partir de donde termin la bsqueda del primer hueco
anterior. Podemos dejar de buscar en el momento en que encontremos un hueco libre de tamao
suficiente.
Mejor ajuste. Asignar el hueco ms pequeo que tenga el tamao suficiente. Debemos recorrer
toda la lista, a menos que sta se mantenga ordenada por tamao. Esta estrategia produce el hueco
sobrante ms pequeo.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-18
Peor ajuste. Asignar el hueco ms grande. Una vez ms, debemos buscar en toda la lista, a
menos que est ordenada por tamao. Esta estrategia produce el hueco sobrante ms grande, el cual
puede ser ms til que el hueco sobrante ms pequeo producido por la estrategia del mejor ajuste.
Las simulaciones han mostrado que tanto el primer ajuste como el mejor ajuste son mejores que
el peor ajuste en cuanto a la reduccin del tiempo y de utilizacin del almacenamiento.
Ni el primer ajuste ni el mejor ajuste son definitivamente superiores uno respecto al otro en
relacin con la utilizacin del almacenamiento, pero por lo general el primer ajuste es ms rpido.
Estos algoritmos padecen fragmentacin externa: conforme los procesos se cargan y extraen de
la memoria el espacio de memoria libre se divide en pequeos pedazos. La fragmentacin externa se
presenta cuando el espacio de memoria es suficiente para atender una solicitud pero no es contiguo; el
almacenamiento esta fragmentado en varios huecos pequeos.
Dependiendo de la cantidad total de memoria y del tamao promedio de los procesos, la
fragmentacin externa puede ser un problema mayor o menor.
Por ejemplo, el anlisis estadstico del primer ajuste revela que, incluso con cierto
perfeccionamiento, dados N bloques asignados, se perdern otros 0.5 N bloques debido a la
fragmentacin (a esto se le conoce como regla del 50 por ciento).
Una vez que al proceso se le ha asignado un bloque de memoria, el proceso puede cargarse en ese
espacio y ejecutarse.
Como varios procesos pueden residir en memoria al mismo tiempo, sta se debe proteger.
Podemos proporcionar esta proteccin utilizando registros base y limite, semejantes a los que se
analizaron en la seccin 2.4.
Los registros base y limite permiten la relocalizacin dinmica durante la ejecucin.
El registro base contiene el valor de la menor direccin fsica; el registro limite contiene el
intervalo de direcciones lgicas
Por ejemplo, base = 100.040 y limite = 74 600
Cada una de las direcciones lgicas debe ser menor que el registro limite; relocalizamos
dinmicamente la direccin lgica sumando el valor del registro base y esta direccin relocalizada se
enva a memoria (Fig. 7.9).
Cuando el planificador de la CPU selecciona este proceso, el despachador carga los valores
correctos en los registros base y limite. Como cada direccin generada por la CPU se compara con estos
registros, podemos proteger a los dems programas y datos de usuario contra modificaciones por la
ejecucin de este proceso.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-19
s
no
trampa; error de direccionamiento
direccin
lgica
UCP
<
+
lmite base
memoria
Figura 7.9 Apoyo de hardware para los registros base y lmite.
En la figura 7.10 se ilustra otro problema que surge con este esquema.
sistema
operativo
P
P
hueco de 18464 bytes
la siguiente solicitud
es de 18462 bytes
7
43
Figura 7.10 Asignacin de memoria efectuada en algn mltiplo de bytes.
Consideremos un hueco de 18.464 bytes y supongamos que el siguiente proceso solicita 18.462
bytes. Si asignamos el bloque requerido queda un hueco de 2 bytes.
El procesamiento adicional para administrar el hueco sera bastante mayor que el propio hueco.
La estrategia general consiste en asignar huecos muy pequeos como parte de una solicitud
mayor, de modo que la memoria asignada puede ser un poco mayor que la memoria solicitada.
La diferencia entre estas dos cifras es la fragmentacin interna, es decir memoria que pertenece
a una particin pero que no se usa.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-20
7.4.2 Planificacin a largo plazo
A medida que entran procesos en el sistema, se van colocando en una cola de entrada. El
planificador a largo plazo tiene en cuenta los requisitos de memoria de cada proceso y la cantidad de
memoria disponible para determinar a qu procesos se les asigna. Cuando a un programa se le asigna
espacio, se carga en memoria (y se relocaliza de ser necesario). Entonces puede competir por la CPU.
Cuando termina un proceso, libera su memoria, y el planificador de la CPU puede llenarla con otro
proceso de la cola de entrada.
En cualquier momento tenemos una lista de tamaos de bloques disponibles y la cola de entrada.
El planificador a largo plazo puede ordenar la cola de entrada de acuerdo con algn algoritmo
de planificacin. La memoria se asigna a los procesos hasta que finalmente no puedan satisfacerse los
requisitos de memoria del siguiente proceso; no hay ningn bloque de memoria (hueco) de tamao
suficiente para contener el proceso. Entonces el planificador a largo plazo puede esperar hasta que est
disponible un bloque de tamao suficiente o recorrer la cola de entrada para ver si pueden satisfacerse las
solicitudes de menor cantidad de memoria de algn proceso de menor prioridad.
Con este esquema casi no hay fragmentacin interna (o no la hay), ya que las particiones se
crean con el tamao solicitado por el proceso; sin embargo, podemos tener fragmentacin externa.
Volviendo a la figura 7.8, podemos ver dos situaciones de este tipo.
En la figura 7.8(a) se presenta una fragmentacin externa total de 260 K, un espacio demasiado
pequeo para satisfacer los requisitos de alguno de los dos procesos restantes, P4 y P5.
En la figura 7.8(c), sin embargo, tenemos una fragmentacin externa total de 560 K = (300 K +
260 K). Este espacio seria suficiente para ejecutar el proceso P5 (que requiere 500 K), pero esta
memoria libre no es contigua. El espacio de memoria libre est fragmentado en dos pedazos, ninguno de
los cuates tiene el tamao suficiente para satisfacer la solicitud de memoria del proceso P5.
Este problema de fragmentacin puede ser grave. En el peor de los casos, podemos tener un
bloque de memoria libre (desperdiciado) entre cada dos procesos.
Si toda esta memoria estuviera en un gran bloque libre, podramos ejecutar varios procesos ms.
La seleccin entre el primer ajuste y el mejor ajuste puede afectar la cantidad de fragmentacin.
(El primer ajuste es ms conveniente para algunos sistemas y el mejor ajuste lo es para otros.)
Otro factor es de cul extremo del bloque libre se toma la memoria por asignar (cul ser la
porcin restante: la de la parte superior o la de la inferior?). Sin importar cules algoritmos se utilicen, la
fragmentacin externa ser un problema.
7.4.3 Compactacin
Una solucin para el problema de la fragmentacin externa es la compactacin.
El objetivo consiste en desplazar el contenido de la memoria para colocar junta toda la memoria
libre en un solo bloque de gran tamao.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-21
Por ejemplo, el mapa de la memoria de la figura 7.8(e) puede compactarse como se muestra en la
figura 7.11. Los tres huecos de 100 K, 300 K y 260 K pueden compactarse en un solo hueco de 660 K.
sistema
operativo
P
P
4
5
P
3
260 K
300 K
0 K
400 K
1000 K
2000 K
2300 K
2560 K
1700 K
900 K
100 K
compactar
sistema
operativo
P
P
4
5
P
3
660 K
0 K
400 K
1900 K
2560 K
1600 K
900 K
Figura 7.11 Compactacin.
La compactacin no siempre es posible. Observe que, hemos movido los procesos P4 y P3.
Para que estos procesos puedan ejecutarse en sus nuevas posiciones, hay que relocalizar todas
las direcciones internas.
Si la relocalizacin es esttica y se efecta durante el ensamblado o la carga, la compactacin
no puede realizarse.
La compactacin slo es posible si la relocalizacin es dinmica y se efecta en el momento de
la ejecucin.
Si las direcciones se relocalizan dinmicamente, esta relocalizacin slo requiere mover el
programa y los datos, y luego cambiar el registro base para reflejar la nueva direccin base.
Cuando la compactacin es posible, debemos determinar su costo. El algoritmo de
compactacin ms sencillo consiste en mover todos los procesos hacia un extremo de la memoria; todos
los huecos se mueven en la direccin contraria produciendo un gran hueco de memoria disponible.
Este esquema puede ser bastante costoso.
Considere la asignacin de memoria que se muestra en la figura 7.12.
Si utilizamos este sencillo algoritmo, debemos mover los procesos P3 y P4, un total de 600 K.
En esta situacin bastara mover el proceso P4 por encima del proceso P3, moviendo slo 400 K,
o mover el proceso P3 debajo de P4, moviendo slo 200 K.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-22
Observe que, en este ltimo caso, nuestro gran hueco de memoria disponible no est en un
extremo de la memoria, sino en medio.
asignacin
original
movidos
600 K
movidos
400 K
movidos
200 K
sistema
operativo
P1
sistema
operativo
sistema
operativo
sistema
operativo
P2
P3
P4
400 K
300 K
200 K
P1
P2
P3
P4
900 K
P1
P2
P3
P4
900 K
P1
P2
900 K
P3
P4
2100 K
0 K
300 K
500 K
600 K
1000 K
1500 K
1900 K
1200 K
2100 K
0 K
300 K
500 K
600 K
800 K
1200 K
2100 K
0 K
300 K
500 K
600 K
1000 K
1200 K
2100 K
0 K
300 K
500 K
600 K
1500 K
1900 K
Figura 7.12 Comparacin de distintas maneras de compactar la memoria.
Observe tambin que, si la cola contuviera slo un proceso que solicitara 450 K, podramos
satisfacer esa solicitud en particular moviendo el proceso P2 a otro lugar (por ejemplo, debajo del
proceso P4). Aunque esta solucin no crea un solo hueco de gran tamao, si crea uno de tamao
suficiente para atender la solicitud inmediata.
Es bastante difcil seleccionar una estrategia de compactacin ptima.
Tambin se puede combinar el intercambio con la compactacin.
Un proceso puede descargarse de la memoria principal por intercambio al almacenamiento
auxiliar y reincorporarse ms tarde.
Cuando el proceso se descarga, se libera su memoria y quiz se reutilice para algn otro proceso.
Cuando el proceso tiene que reincorporarse por intercambio, pueden aparecer varios problemas.
Si se utiliza la relocalizacin esttica, el proceso debe reincorporarse exactamente a las mismas
posiciones de memoria que antes ocupaba. Esta restriccin puede requerir que todos los dems
procesos se descarguen para liberar esa memoria.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-23
Si se emplea la relocalizacin dinmica (usando, por ejemplo, registros base y limite), entonces
el proceso se puede reincorporar a una localidad diferente. En este caso encontramos un bloque libre,
compactando si es necesario, y reincorporamos el proceso.
Una estrategia para la compactacin consiste en descargar los procesos que hay que mover, y
reincorporarlos a localidades de memoria diferentes.
Si los intercambios o la tcnica de descargar y reincorporar los procesos ya forma parte del
sistema, el cdigo adicional para la compactacin puede ser mnimo.
7.5 Registros base mltiples
El problema principal con el esquema de particiones de tamao variable es la fragmentacin
externa.
Una forma de reducir la cantidad de fragmentacin externa es dividir en varias partes la
memoria que necesita un proceso.
Cada parte es menor al todo y, por tanto, ms fcil de acomodar en la memoria. Para esta
estrategia hay que proporcionar mltiples registros base con un mecanismo para traducir las direcciones
lgicas a fsicas.
Una forma de lograr esto es dividir la memoria en dos partes disjuntas.
El sistema tiene dos pares de registros base y limite. La memoria se divide por la mitad usando
el bit de direccin de orden superior. La memoria baja se relocaliza y limita usando el par 0 de
registros base y limite; la memoria alta se relocaliza y limita con el par 1 de registros base y lmite.
Por convencin, los compiladores y ensambladores colocan valores de slo lectura (como
constantes e instrucciones) en la memoria alta y las variables en la memoria baja.
Se asocian bits de proteccin a cada par de registros y pueden asegurar que la memoria alta sea
slo de lectura. Esta disposicin permite compartir programas (almacenados como de slo lectura en la
memoria alta) entre varios procesos de usuario, cada uno con su propio segmento en memoria baja.
Otra manera de lograr esto es separar un programa en dos partes: cdigo y datos.
La CPU sabe si quiere una instruccin (bsqueda de instruccin) o datos (bsqueda o
almacenamiento de datos). Por tanto, se proporcionan dos pares de registros base y limite: uno para las
instrucciones y otro para los datos.
El par de registros base y lmite para las instrucciones es, automticamente, de slo lectura, de
manera que los programas se puedan compartir entre distintos usuarios.
Con estos esquemas, al separar programas y datos, y relocalizarlos por separado, podemos
compartir programas entre varios usuarios; as utilizamos mejor la memoria, reduciendo tanto la
fragmentacin como las copias mltiples del mismo cdigo, en especial cdigo de uso comn como el
de compiladores, editores, etc.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-24
7.6 Paginacin
El esquema de la particin de tamao variable adolece de fragmentacin externa. Esta
situacin generalmente aparece cuando la memoria disponible no es contigua, sino que est
fragmentada en varios bloques dispersos.
Como la memoria asignada a un proceso concreto debe ser contigua, no puede utilizarse esta
memoria dispersa. Este problema tiene dos soluciones generales:
- La compactacin cambia la disposicin de memoria para que el espacio libre sea contiguo y por
tanto, til.
- La paginacin permite que la memoria de un proceso no sea contigua, y que a un proceso se le
asigne memoria fsica donde quiera que sta est disponible.
La paginacin evita el gran problema de acomodar trozos de memoria de tamao variable en el
almacenamiento auxiliar, algo de lo que adolecan la mayora de los esquemas anteriores para la
administracin de memoria.
Cuando es necesario intercambiar fragmentos de cdigo o datos que residen en la memoria
principal, hay que encontrarles espacio en el almacenamiento auxiliar.
Los problemas de fragmentacin que se mencionaron respecto a la memoria principal son
tambin frecuentes con el almacenamiento auxiliar, excepto que el acceso es mucho ms lento, por lo
que la compactacin es imposible.
Por sus ventajas sobre los mtodos anteriores, la paginacin, en sus diversas formas, es de uso
comn en muchos SOs.
7.6.1 Hardware
La memoria fsica se divide en bloques de tamao fijo llamados marcos.
La memoria lgica tambin se divide en bloques del mismo tamao llamados pginas.
Cuando un proceso se va a ejecutar, sus pginas se cargan desde el almacenamiento auxiliar en
cualesquiera de los marcos disponibles. El almacenamiento auxiliar se divide en bloques de tamao fijo
del mismo tamao que los marcos de memoria.
En la figura 7.13 se presenta el apoyo del hardware para la paginacin. Cada direccin
generada por la CPU se divide en dos partes:
- un nmero de pgina (p)
- un desplazamiento en la pgina (d)
El nmero de pgina se utiliza como ndice en una tabla de pginas, que contiene la direccin
base para cada pgina de la memoria fsica.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-25
La direccin base se combina con el desplazamiento en la pgina para definir la direccin de
memoria fsica que se enva a la unidad de memoria.
tabla de
pginas
UCP p d
memoria
fsica
m
m d
direccin lgica direccin fsica
p
Figura 7.13 Hardware de paginacin.
El modelo de paginacin de la memoria se presenta en la figura 7.14.
El tamao de la pgina, al igual que el tamao del marco, est definido por el hardware. El
tamao de una pgina generalmente es una potencia de 2 que vara entre 512 y 2048 palabras x pgina,
dependiendo de la arquitectura del computador. La seleccin de una potencia de 2
n
como tamao de
pgina facilita la traduccin de una direccin lgica a un nmero y un desplazamiento en la pgina. Si el
tamao de pgina es 2
n
unidades de direccionamiento (bytes o palabras), entonces los n bits de orden
inferior de la direccin lgica representan el desplazamiento en la pgina y los bits restantes, de orden
superior, indican el nmero de pgina.
0
1
2
3
memoria
lgica
memoria
fsica
pgina 0
pgina 1
pgina 2
pgina 3
1
4
3
7
0
1
2
3
4
5
6
7
tabla de
pginas
nmero
de marco
Figura 7.14 Modelo de paginacin de memoria lgica y fsica.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-26
memoria
fsica
tabla de
pginas
memoria
lgica
a
b
c
d
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
e
f
g
h
i
j
k
l
m
n
o
p
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
4
8
12
16
20
24
28
0
1
2
3
5
6
1
2
Figura 7.15 Ejemplo de paginacin para memoria de 32 palabras con pginas de 4 palabras.
Como ejemplo concreto, aunque minsculo, considere la memoria representada en la figura 7.15.
Usando un tamao de pgina de 4 palabras y una memoria fsica de 32 palabras (8 pginas) mostramos
un ejemplo de cmo puede efectuarse la correspondencia entre la memoria desde el punto de vista del
usuario y la memoria fsica.
La direccin lgica 0 es la pgina 0, desplazamiento 0. Al usar el ndice de la tabla de pginas,
encontramos que la pgina 0 est en el marco 5. As, la direccin lgica 0 corresponde a la direccin
fsica 20 = ((5 x 4) + 0). La direccin lgica 3 (pgina 0, desplazamiento 3) corresponde a la direccin
fsica 23 = ((5 x 4) + 3). La direccin lgica 4 (pgina 1, desplazamiento 0) de acuerdo con la tabla de
pginas, la pgina corresponde al marco 6. Luego, la direccin lgica 4 corresponde a la direccin fsica
24 (= (6 x 4) + 0). La direccin lgica 13 corresponde a la direccin fsica 9.
Observe que, en s, la paginacin es una forma de relocalizacin dinmica.
Cada direccin lgica est enlazada a la direccin fsica mediante el hardware de paginacin.
Se nota que la paginacin es semejante al uso de una tabla de registros base, uno para cada
marco de memoria.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-27
7.6.2 Planificacin a largo plazo
El esquema de administracin de memoria afecta al planificador a largo plazo.
Cuando un proceso llega para ejecutarse, el planificador a largo plazo examina su tamao, el
cual est expresado en pginas.
Luego, el planificador comprueba la memoria disponible, que se representa como una lista de
marcos no asignados.
Cada pgina de usuario necesita un marco; por tanto, si el proceso requiere n pginas, debe haber
n marcos disponibles en memoria; si los hay, el planificador a largo plazo los asigna al proceso.
La primera pgina del proceso se carga en uno de los marcos asignados y el nmero del marco
se registra en la tabla de pginas para este proceso; la siguiente pgina se carga en otro marco, y su
nmero de marco se coloca en la tabla de pginas, etc. (Fig. 7.16).
nuevo
proceso
pgina 0
pgina 1
pgina 2
pgina 3
lista de
marcos libres
14
13
18
20
15
13
14
15
16
17
18
19
20
21
0
1
2
3
14
13
18
20
tabla de pginas
del nuevo proceso
nuevo
proceso
pgina 0
pgina 1
pgina 2
pgina 3
lista de
marcos libres
15
13
14
15
16
17
18
19
20
21
(a) (b)
Figura 7.16 Marcos libres (a) antes y (b) despus de la asignacin.
Cuando usamos un esquema de paginacin no tenemos fragmentacin externa: cualquier
marco libre se puede asignar a un proceso que lo necesite. Sin embargo, podemos tener cierta
fragmentacin interna. Observe que los marcos se asignan como unidades. Si los requisitos de memoria
de un proceso no coinciden con los lmites de las pginas, el ltimo marco asignado puede estar
parcialmente vaco. Por ejemplo, si las pginas son de 2.048 bytes, un proceso de 72.766 bytes
necesitara 35 pginas ms l.086 bytes. Se le asignaran 36 marcos, dando como resultado una
fragmentacin interna de 2.048 - 1.086 = 962 bytes. En el peor de los casos, un proceso necesitara n
pginas ms 1 palabra. Se le asignaran n + 1 marcos, produciendo una fragmentacin interna de casi 1
marco completo.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-28
Si el tamao del proceso es independiente del tamao de pgina, esperamos una fragmentacin
interna de media pgina por proceso.
Esta consideracin sugiere que son deseables los tamaos de pgina pequeos, pero cada
entrada de tabla de pginas implica bastante gasto adicional, que disminuye al aumentar el tamao de la
pgina.
Cada SO tiene sus propios mtodos para almacenar tablas de pginas.
La mayora asigna una tabla de pginas para cada proceso.
En el bloque de control del proceso (PCB) se almacena un apuntador a la tabla de pginas junto
con los valores de registros (como el contador de instrucciones).
Cuando al despachador se le indica que inicie un proceso, debe volver a cargar los registros del
usuario y definir los valores correctos de hardware para la tabla de pginas usando la tabla de pginas
de usuario almacenada.
7.6.3 Implantacin de la tabla de pginas
La implantacin mediante hardware de la tabla de pginas puede lograrse de varias maneras.
En el caso ms sencillo, se implanta como un conjunto de registros dedicados.
Estos registros deben construirse usando lgica de muy alta velocidad para que la traduccin de
direcciones de pginas sea muy eficiente. Como cada acceso a memoria debe pasar por el mapa de
paginacin, la eficiencia es un elemento principal.
El despachador de la CPU vuelve a cargar estos registros de la misma manera que carga los
dems. Por supuesto, las instrucciones para cargar o modificar los registros de la tabla de pginas son
privilegiadas, por lo que slo el SO puede cambiar el mapa de memoria.
La utilizacin de registros para la tabla de pginas es satisfactoria si sta es razonablemente
pequea (por ejemplo, 246 entradas). Sin embargo, la mayora de los computadores actuales permiten
que la tabla de pginas sea muy grande (por ejemplo, 1.000.000 de entradas). En estas mquinas no es
factible el uso de registros de alta velocidad para implantar la tabla de pginas.
En vez de esto, la tabla de pginas se conserva en la memoria principal y un registro base de
tabla de pginas (PTBR, page-table base register) apunta a la tabla de pginas. Para cambiar entre
tablas de pginas slo hay que modificar este registro, lo que reduce en gran medida el tiempo de cambio
de contexto.
El problema con este planteamiento es el tiempo que se requiere para acceder a una localidad de
memoria del usuario. Si queremos llegar a la localidad i, primero debemos utilizar el ndice de la tabla
de pginas, usando el valor de desplazamiento del PTBR para el nmero de pgina i.
Esta tarea requiere acceso a memoria. Nos proporciona el nmero de marco, el cual se combina
con el desplazamiento en la pgina para producir la direccin real. Luego podemos acceder al lugar
deseado de la memoria.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-29
En este esquema se necesitan dos accesos a memoria para tener acceso a una palabra (uno para
la entrada de la tabla de pginas, otro para la palabra). De esta manera, el acceso a memoria se vuelve
ms lento por un factor de 2, demora que puede ser intolerable en la mayora de las circunstancias.
La solucin comn para este problema consiste en utilizar una memoria especial, de tamao
pequeo, llamada registros asociativos o buffers de traduccin con bsqueda anticipada (TLB,
Translation Look-aside Buffers).
Un conjunto de registros asociativos se construye con memoria de muy alta velocidad; cada
registro consta de dos partes (una clave y un valor), y cuando se presenta un elemento a los registros
asociativos, se compara simultneamente con todas las claves. Si el elemento se encuentra, se devuelve
el campo de valor correspondiente. La bsqueda es muy rpida, pero el hardware es muy costoso.
Los registros asociativos se utilizan con las tablas de pginas de la manera siguiente: los
registros asociativos contienen slo algunas de las entradas de la tabla de pginas. Cuando la CPU
genera una direccin lgica, su nmero de pgina se presenta a un conjunto de registros asociativos
que contienen nmeros de pgina y sus nmeros de marco correspondientes. Si el nmero de pgina
se encuentra en los registros asociativos, su nmero de marco est inmediatamente disponible y se
utiliza para acceder a la memoria. La tarea puede consumir menos del 10% de lo que toma una
referencia directa a memoria.
Si el nmero de pgina no se encuentra en los registros asociativos, hay que efectuar una
referencia de memoria a la tabla de pginas. Cuando se obtiene el nmero de marco, podemos usarlo
para tener el acceso deseado a la memoria, adems, aadimos los nmeros de pgina y marco a los
registros asociativos, para que puedan localizarse con rapidez en la siguiente referencia.
El porcentaje de ocasiones que se encuentra un nmero de pgina en los registros asociativos se
denomina tasa de aciertos.
Una tasa de aciertos del 80% significa que en los registros asociativos hemos encontrado el
nmero de pgina deseado en un 80% de las ocasiones.
Si para buscar en los registros asociativos se emplean 20 nanosegundos y l00 nanosegundos
para el acceso a memoria, entonces un acceso a memoria con correspondencia requiere 120
nanosegundos cuando el nmero de pgina se encuentra en los registros asociativos.
Si no hallamos el nmero de pgina en los registros asociativos (20 nanosegundos), entonces
primero debemos acudir a la memoria para obtener la tabla de pginas y el nmero de marco (l00
nanosegundos) y luego obtener la palabra deseada de la memoria (l00 nanosegundos), sumando un total
de 220 nanosegundos. Para determinar el tiempo de acceso efectiva a memoria debemos ponderar cada
caso por su probabilidad:
tiempo de acceso efectivo = 0.80 x 120 + 0.20 x 220 = 140 nanosegundos.
En este ejemplo, el tiempo de acceso a memoria es 29% ms lento (de l00 a 140 nanosegundos).
Para una tasa de aciertos del 90% tenemos:
tiempo de acceso efectivo = 0.90 x 120 + 0.10 x 220 = 130 nanosegundos.
Esta tasa de aciertos mayor produce slo un aumento del 23% en el tiempo de acceso en memoria.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-30
La tasa de aciertos est evidentemente relacionada con el nmero de registros asociativos. Con
16 a 512 registros asociativos puede obtenerse una tasa de aciertos del 80 al 98%. El procesador
Motorola 68030 tiene un TLB de 22 entradas. La UCP Intel 80486 tiene 32 registros y anuncia una tasa
de aciertos del 98%.
7.6.4 Pginas compartidas
Otra ventaja de la paginacin es la posibilidad de compartir cdigo comn.
Este aspecto tiene especial importancia en un entorno de tiempo compartido.
Considere un sistema que brinda servicio a 40 usuarios, cada uno de los cuales ejecuta un editor
de textos. Si el editor de textos consta de 150 K de cdigo y 50 K de espacio de datos, necesitaramos
8.000 K para apoyar a los 40 usuarios. Sin embargo, si el cdigo es reentrante puede compartirse,
como se muestra en la figura 7.17.
tabla de pginas
para P1
proceso P
1
proceso P
tabla de pginas
para P
3
3
proceso P
tabla de pginas
para P
2
2
ed 1
ed 2
ed 3
datos 1
3
4
6
1
ed 1
ed 2
ed 3
datos 3
3
4
6
2
ed 1
ed 2
ed 3
datos 2
3
4
6
7
datos 1
datos 3
ed 1
ed 2
ed 3
datos 2
0
1
2
3
4
5
6
7
8
9
10
Figura 7.17 Compartimiento de cdigo en un entorno de paginacin.
Aqu vemos un editor que ocupa 2 pginas (cada pgina es de 50 K; el gran tamao de la pgina
se usa para simplificar la figura) y que se comparte entre 3 procesos (cada proceso tiene su propia pgina
de datos).
El cdigo reentrante (tambin llamado cdigo puro) es un cdigo que no se modifica a s
mismo. Si el cdigo es reentrante, nunca cambia durante la ejecucin, de manera que dos o ms
procesos pueden ejecutar el mismo cdigo al mismo tiempo.
Cada proceso tiene su propia copia de los registros y su almacenamiento para contener los datos
durante la ejecucin. Por supuesto, los datos variarn para cada proceso.
Slo es necesario conservar una copia del editor en la memoria fsica.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-31
Cada tabla de pginas de los usuarios corresponde a la misma copia fsica del editor, pero las
pginas de datos corresponden a marcos diferentes.
De esta manera, para apoyar a 40 usuarios, nicamente requerimos una copia del editor (150 K)
ms 40 copias del espacio de datos de 50 K para cada usuario. Ahora, el espacio total requerido es
2.150K en vez de 8.000K, lo que significa un ahorro considerable.
Tambin se pueden compartir otros programas de uso frecuente: compiladores, sistemas de
ventanas, sistemas de bases de datos, etc, para que pueda compartirse, el cdigo debe ser reentrante.
La naturaleza de slo lectura del cdigo compartido no debe limitarse a la correccin del cdigo;
el SO deber asegurar esta propiedad.
7.6.5 Proteccin
La proteccin de memoria en un entorno paginado se logra por medio de bits de proteccin
asociados a cada marco. Normalmente, estos bits se conservan en la tabla de pginas.
Un bit puede definir si una pgina es de slo lectura o de lectura y escritura. Cada referencia a
la memoria pasa por la tabla de pginas para encontrar el nmero de marco correcto. Al mismo tiempo
que se calcula la direccin fsica, pueden consultarse los bits de proteccin para verificar que no se
efecten escrituras en una pgina de slo lectura.
Un intento de escribir en una pgina de slo lectura ocasiona una trampa de hardware para el
SO (violacin de la proteccin de memoria).
Esta estrategia de proteccin puede ampliarse fcilmente para ofrecer un nivel de
proteccin ms fino. Podemos crear hardware para brindar proteccin de slo lectura, lectura y
escritura o de slo ejecucin o proporcionando bits de proteccin separados para cada tipo de acceso,
puede permitirse cualquier combinacin de estos accesos, y se dirigir una trampa al SO si se presenta
un intento ilegal.
Es poco comn que un proceso utilice todo su intervalo de direcciones; en realidad, muchos
procesos slo usan una pequea fraccin del espacio de direcciones del que disponen. En estos casos
sera un derroche crear una tabla de pginas con registros para cada pgina del intervalo de
direcciones. La mayor parte de esta tabla no se utilizara, pero ocupara un valioso espacio en memoria.
Algunos sistemas ofrecen hardware que indica el tamao de la tabla de pginas, a travs de un
registro de longitud de tabla de pginas (PTLR, page-table length register). Este valor se compara con
cada direccin lgica para asegurar que la direccin se encuentre en el intervalo vlido para el proceso.
Si no supera esta prueba se genera una trampa para el SO).
7.6.6 Dos perspectivas de la memoria
Un aspecto importante de la paginacin es la clara separacin entre la perspectiva del usuario de
la memoria y la memoria fsica real.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-32
El programa de usuario cree que la memoria es un espacio contiguo que contiene un solo
programa.
En realidad, el programa de usuario est disperso por la memoria fsica, la cual tambin
contiene otros programas.
La diferencia entre la perspectiva que el usuario tiene de la memoria y la memoria fsica real se
concilia a travs del hardware de traduccin de direcciones. Las direcciones lgicas se traducen a
direcciones fsicas. Esta correspondencia se oculta al usuario y es controlada por el SO.
Un resultado de la separacin entre las direcciones lgicas y fsicas es que pueden ser diferentes.
Esta separacin fue particularmente til para los fabricantes de minicomputadores. Muchos
minicomputadores se construyeron en los aos 60, cuando la memoria era costosa y los programas tenan
que ser pequeos. Por esto, la mayora de las direcciones estaban limitadas a 15 o 16 bits. Cuando se
dispuso de memoria de semiconductores ms barata, fue factible aadir ms memoria fsica a estos
minicomputadores, pero al aumentar el tamao de la direccin para permitir las direcciones de 17 o 18
bits que necesitaba la memoria fsica ampliada, se requiri redisear el conjunto de instrucciones o
ampliar el tamao de la palabra para aceptar los bits adicionales.
Ambas soluciones representaban un cambio de gran magnitud, invalidando todos los programas y
documentacin existentes. La solucin que adoptaron la mayora de los fabricantes fue la
correspondencia de memoria. Las direcciones lgicas (15 o 16 bits) corresponden a direcciones fsicas
mayores (17 o 18 bits).
Con la multiprogramacin, el sistema puede utilizar toda la memoria; sin embargo, los usuarios
no pueden usar ms memoria que antes, ya que el espacio de direcciones lgicas no ha aumentado.
El SO controla esta correspondencia y puede activarla para el usuario o desactivarla para el SO.
Puesto que ste administra la memoria fsica, debe estar al tanto de los detalles de la asignacin de
memoria fsica: qu marcos estn asignados, qu marcos estn libres, cuntos hay en total, etc. Esta
informacin casi siempre se conserva en una estructura de datos llamada tabla de marcos, la cual tiene
una entrada por cada marco fsico de pgina, que indica si el marco est libre o asignado y, de estar
asignado, a qu pgina de qu proceso.
Adems, el SO debe estar enterado de que los procesos de usuario trabajan en espacio de usuario,
y hay que efectuar una transformacin para todas las direcciones lgicas y producir direcciones fsicas.
Si un usuario realiza una llamada al sistema (por ejemplo, para efectuar E/S) y proporciona una
direccin como parmetro (por ejemplo, un buffer), esa direccin debe transformarse para producir la
direccin fsica correcta.
El SO mantiene una copia de la tabla de pginas para cada usuario, al igual que mantiene una
copia del contador de instrucciones y del contenido de los registros. Esta copia se emplea para traducir
las direcciones lgicas a direcciones fsicas cada vez que el SO debe transformar una direccin lgica en
una fsica.
Tambin la utiliza el despachador de la CPU para definir la tabla de pginas del hardware
cuando se asigna un proceso a la CPU.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-33
7.7 Segmentacin
Un aspecto importante de la administracin de memoria (que desapareci con la paginacin) es
la separacin de la perspectiva del usuario y la memoria fsica real.
La perspectiva de memoria del usuario no equivale a la memoria fsica real. Hay una
correspondencia entre la perspectiva del usuario y la memoria fsica, y esta correspondencia permite la
diferencia entre la memoria lgica y la memoria fsica.
7.7.1 Perspectiva de memoria del usuario
Cul es la perspectiva que el usuario tiene de la memoria real?
El usuario piensa en la memoria como un arreglo lineal de palabras, algunas con
instrucciones y otras con datos, o se prefiere alguna otra perspectiva para la memoria?
Existe un consenso general de que el programador o usuario de un sistema no considera la
memoria como un arreglo lineal de palabras; ms bien prefiere pensar en ella como un conjunto de
segmentos de tamao variable, sin ningn orden en especial (Fig. 7.18).
subrutina
Sqrt
programa
principal
pila
tabla de
smbolos
espacio de direcciones lgicas
Figura 7.18 Perspectiva de un programa para un usuario.
Considere cmo piensa en un programa mientras lo escribe. Piense en l como un programa
principal con un conjunto de subrutinas, procedimientos, funciones o mdulos. Puede haber tambin
varias estructuras de datos: tablas, arreglos, pilas, variables, etc. A cada uno de estos mdulos o
elementos de datos se les llama por un nombre. Se habla de la tabla de smbolos", la funcin Sqrt", el
"programa principal", sin preocuparse por qu direcciones ocupan estos elementos en memoria.
No importa si la tabla de smbolos est almacenada antes o despus de la funcin Sqrt. Cada uno
de estos segmentos tiene una longitud variable, y la longitud est definida intrnsecamente por el
propsito del segmento en el programa.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-34
Los elementos dentro de un segmento se identifican por su desplazamiento a partir del inicio
del segmento:
- el primer enunciado del programa,
- la decimosptima entrada de la tabla de smbolos,
- la quinta instruccin de la funcin Sqrt, etctera.
La segmentacin es un esquema de administracin de memoria que apoya la perspectiva que el
usuario tiene de la memoria.
Un espacio de direcciones lgicas se compone de un conjunto de segmentos, cada uno de los
cuales tiene un nombre y una longitud.
Las direcciones especifican el nombre del segmento y el desplazamiento dentro de l, de manera
que el usuario especifica cada direccin con dos cantidades: el nombre del segmento y un
desplazamiento (compare este esquema con la paginacin, donde el usuario especifica una sola
direccin que el hardware separa para producir un nmero de pgina y un desplazamiento, todo invisible
para el programador.)
Para hacer ms sencilla la implantacin, los segmentos se numeran y se hace referencia a ellos
mediante un nmero de segmento, en vez de por un nombre. Normalmente el programa de usuario se
ensambla (o compila) y el ensamblador (o compilador) construye automticamente segmentos que
reflejan el programa de entrada.
Un compilador de Pascal puede crear segmentos separados para:
1. las variables globales
2. la pila de llamadas a procedimientos, para almacenar parmetros y direcciones de retorno
3. la porcin de cdigo de cada procedimiento y funcin
4. las variables locales de cada procedimiento y funcin.
Un compilador de FORTRAN podra crear un segmento distinto para cada bloque comn. A
los arreglos se les podra asignar segmentos separados. El cargador tomara todos estos segmentos y les
asignara nmeros.
El procesador Intel 8086 permite la segmentacin como su nico esquema de administracin de
memoria. Los programas en este entorno se separan comnmente en segmentos cdigo, datos y pila.
7.7.2 Hardware
Aunque ahora el usuario se puede referir a los objetos de un programa utilizando direcciones
bidimensionales, la memoria fsica real sigue siendo, por supuesto, una secuencia unidimensional de
palabras.
Por esto, debemos definir una forma de implantar la correspondencia entre direcciones
bidimensionales definidas por el usuario y direcciones fsicas unidimensionales.
Esta correspondencia se logra por medio de una tabla de segmentos.
En la figura 7.19 se ilustra el uso de una tabla de segmentos.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-35
Una direccin lgica consiste en dos partes (s,d):
- un nmero de segmentos, s
- un desplazamiento dentro del segmento, d.
El nmero de segmento se utiliza como ndice en la tabla de segmentos. Cada entrada de la tabla
de segmentos tiene una base y un lmite para el segmento. El desplazamiento d de la direccin lgica
debe estar entre 0 y el lmite del segmento. Si no lo est, generamos una trampa para el SO (por
direccionamiento lgico tras el fin de segmento).
( s , d )
tabla de
segmentos
UCP
lmite base
s
no
< +
memoria
fsica trampa; error de direccionamiento
s
Figura 7.19 Hardware de segmentacin.
Si el desplazamiento es vlido, se suma a la base del segmento para producir la direccin en
memoria fsica de la palabra deseada. La tabla de segmentos es, en esencia, un arreglo de pares de
registros base y lmite.
Como ejemplo, considere la situacin que se presenta en la figura 7.20. Tenemos 5 segmentos
numerados del 0 al 4, que se almacenan en memoria fsica tal como se muestra.
La tabla de segmentos tiene una entrada separada para cada segmento, proporcionando la
direccin de inicio del segmento en la memoria fsica (la base) y la longitud del segmento (el lmite).
Por ejemplo, el segmento 2 tiene 400 bytes de longitud y comienza en la localidad 4.300 de
modo que una referencia al byte 53 del segmento 2 corresponde a la localidad 4.300 + 53 = 4.353.
Una referencia al segmento 3, byte 852, corresponde a 3.200 (la base del segmento 3) + 852 =
4.052.
Una referencia al byte 1.222 del segmento 0 generara una trampa al SO, ya que este segmento
slo tiene 1.000 bytes de longitud.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-36
1400
2400
3200
4300
4700
5700
6300
6700
memoria
fsica
0
1
2
3
4
tabla de
segmentos
segmento 0
segmento 3
segmento 4
segmento 2 segmento 1
subrutina
Sqrt
programa
principal
pila
tabla de
smbolos
espacio de direcciones lgicas
1000
400
400
1100
1000
1400
6300
4300
3200
4700
lmite base
segmento 0
segmento 3
segmento 2
segmento 4
segmento 1
Figura 7.20 Ejemplo de segmentacin.
7.7.3 Implantacin de las tablas de segmentos
La segmentacin est estrechamente relacionada con los modelos de administracin de
memoria por particiones que presentamos antes, con la principal diferencia de que un programa puede
consistir en varios segmentos.
Sin embargo, la segmentacin es un concepto ms complejo, por lo cual la describimos despus
de analizar la paginacin.
Al igual que una tabla de pginas, una tabla de segmentos puede ubicarse en registros rpidos o
en memoria, se pueden efectuar referencias rpidas a una tabla de segmentos almacenada en registros,
para ahorrar tiempo, la suma a la base y la comparacin con el lmite pueden efectuarse
simultneamente.
En el caso donde un programa puede consistir en un gran nmero de segmentos, no es factible
conservar la tabla de segmentos en registros, por lo que debemos mantenerla en memoria.
Un registro base de la tabla de segmentos (STBR, segment table base register) apunta a la tabla
de segmentos. As mismo, ya que el nmero de segmentos que utiliza un programa puede variar
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-37
considerablemente, se usa un registro de longitud de la tabla de segmentos (STBR, segment table
length register).
Para una direccin lgica (s,d):

- primero comprobamos si el nmero de segmento s es legal (es decir, s < STBR).
- luego sumamos el nmero de segmento al STBR, lo que da como resultado la direccin (STBR + s)
en memoria de la entrada de la tabla de segmentos.
- se lee esta entrada de la memoria
- comparamos el desplazamiento con la longitud del segmento y calculamos la direccin fsica de la
palabra deseada como la suma de la base del segmento ms el desplazamiento.
Al igual que ocurre con la paginacin, esta transformacin requiere dos referencias a memoria
por cada direccin lgica, lo que reduce en un factor de 2 el rendimiento del sistema de computacin, a
menos que se haga algo al respecto.
La solucin normal consiste en emplear un conjunto de registros asociativos para que
contengan las entradas (de la tabla de segmentos) usadas ms recientemente.
Una vez ms, un conjunto relativamente pequeo de registros asociativos casi siempre puede
hacer que los accesos a memoria sean no ms de un 10% o 15% ms lentos que los accesos a memoria
sin transformacin.
7.7.4 Proteccin y compartimiento
Una ventaja particular de la segmentacin es la asociacin de la proteccin a los segmentos.
Como los segmentos representan una porcin de un programa definida semnticamente, es
probable que todos los registros del segmento se utilicen de la misma manera. De este modo tenemos
algunos segmentos que son instrucciones, mientras que otros son datos.
En una arquitectura moderna, las instrucciones no se modifican a s mismas, por lo que los
segmentos de instrucciones pueden definirse de slo lectura o de slo ejecucin. El hardware de
transformacin de memoria consultar los bits de proteccin asociados a cada entrada de la tabla de
segmentos para evitar accesos ilegales a la memoria, como un intento de escribir en un segmento de slo
lectura o utilizar como datos un segmento de slo ejecucin.
Si colocamos un arreglo en su propio segmento, el hardware de administracin de memoria
verificar automticamente que los ndices del arreglo sean legales y no salgan de los lmites del arreglo.
De esta manera, el hardware detectar muchos errores comunes en los programas antes de que puedan
causar daos serios.
Otra ventaja de la segmentacin es el compartimiento de cdigo o datos. Cada proceso tiene una
tabla de segmentos asociada a su PCB (bloque de control de proceso), utilizada por el despachador
para definir la tabla de segmentos del hardware cuando se asigna la CPU a ese proceso. Los segmentos
se comparten cuando las entradas de las tablas de segmentos de dos procesos distintos apuntan a las
mismas localidades fsicas (Fig. 7.21).
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-38
43062
68348
72773
90003
98553
memoria fsica
0
1
tabla de segmentos
proceso P
memoria lgica
proceso P
2
2
0
1
tabla de segmentos
proceso P
memoria lgica
proceso P
segmento 0
segmento 1
25286
4425
43062
68348
lmite base
editor
datos 1
1
segmento 0
segmento 1
25286
8550
43062
90003
lmite base
editor
datos 2
1
Figura 7.21 Segmentos compartidos en un sistema de memoria segmentada.
El compartimiento tiene lugar a nivel de segmento, de manera que cualquier informacin puede
compartirse si est definida como un segmento. Pueden compartirse varios segmentos, por lo que un
programa compuesto por varios segmentos tambin se puede compartir.
Por ejemplo, considere el uso de un editor de textos en un sistema de tiempo compartido. Un
editor completo puede ser bastante grande, compuesto por varios segmentos. Estos segmentos pueden
compartirse entre los usuarios, limitando la memoria fsica necesaria para apoyar las tareas de edicin.
En vez de tener n copias del editor, slo necesitamos una. Para cada usuario seguimos
necesitando segmentos nicos, separados, con el propsito de almacenar las variables locales. Por
supuesto, estos segmentos no se compartirn.
Tambin es posible compartir slo partes de los programas. Por ejemplo, los paquetes de
subrutinas comunes pueden compartirse entre varios usuarios si se definen como segmentos
compartibles, de slo lectura. Dos programas en FORTRAN, por ejemplo, pueden utilizar la misma
subrutina Sqrt, pero slo se necesitara una copia fsica de esta rutina Sqrt.
Aunque este compartimiento parece sencillo, existen algunas consideraciones sutiles. Los
segmentos de cdigo con frecuencia contienen referencias a s mismos. Por ejemplo, un salto
condicional normalmente tiene una direccin de transferencia, la cual se compone de un nmero de
segmento y un desplazamiento. El nmero de segmento de la direccin de transferencia ser el mismo
nmero del segmento de cdigo. Si tratamos de compartir este segmento, todos los procesos que lo
comparten deben definir el segmento de cdigo compartido con el mismo nmero de segmento.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-39
Por ejemplo, si queremos compartir la rutina Sqrt y un proceso quiere que est en el segmento 4
mientras otro quiere que est en el segmento 17, cmo debe referirse a s misma la rutina Sqrt?
Puesto que slo existe una copia fsica de Sqrt, debe referirse a s misma de igual manera para ambos
usuarios: debe tener un nmero de segmento nico.
Al aumentar el nmero de usuarios que comparten el segmento, tambin aumenta la dificultad
para encontrar un nmero de segmento adecuado.
Los segmentos de slo lectura (sin apuntadores) pueden compartirse con nmeros de segmento
distintos, al igual que muchos segmentos de cdigo que no se refieren a s mismos de manera directa,
slo indirecta. Por ejemplo, los saltos condicionales que especifican la direccin de salto como un
desplazamiento a partir del contador del programa o relativo a un registro que contiene el nmero de
segmento, permitiran que el cdigo evitara una referencia directa al nmero de segmento.
7.7.5 Fragmentacin
El planificador a largo plazo debe encontrar y asignar memoria para todos los segmentos de un
programa de usuario.
Esta situacin es similar a la que se presenta en la paginacin, excepto que los segmentos tienen
longitud variable, mientras que todas las pginas tienen el mismo tamao.
As, igual que en el esquema de particiones de tamao variable, la asignacin de memoria es un
problema de asignacin dinmica del almacenamiento, que generalmente se resuelve con el algoritmo
del primer ajuste o del mejor ajuste.
La segmentacin puede entonces ocasionar fragmentacin externa, cuando todos los bloques de
memoria libre son muy chicos para contener un segmento. En este caso, el proceso deber esperar a que
haya ms memoria disponible (o por lo menos un hueco ms grande) o puede emplearse la
compactacin para crear un hueco ms grande.
Como la segmentacin es, por naturaleza, un algoritmo de relocalizacin dinmica, cuando lo
deseemos podemos compactar la memoria.
Si el planificador de la CPU debe esperar por culpa de un proceso, debido a algn problema de
asignacin de memoria, puede omitirlo o no al recorrer la cola de la CPU en busca de un proceso ms
pequeo, de menor prioridad, para ejecutarlo.
Cun serio es el problema de la fragmentacin externa en un esquema de segmentacin?
Ayudara la planificacin a largo plazo junto con la compactacin? Las respuestas a estas preguntas
dependen principalmente del tamao promedio del segmento.
En un extremo, podemos definir que cada proceso sea un segmento. Esta estrategia se reduce al
esquema de las particiones de tamao variable.
En el otro extremo, cada palabra puede colocarse en su propio segmento y relocalizarse por
separado.
Esta disposicin elimina por completo la fragmentacin externa; sin embargo, cada palabra
necesitara un registro base para su relocalizacin, duplicando la utilizacin de memoria!
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-40
Por supuesto, el siguiente paso lgico, pequeos segmentos de tamao fijo, es la paginacin.
Generalmente, si el tamao promedio de los segmentos es pequeo, la fragmentacin externa
tambin ser pequea. (Como analoga, considere colocar maletas en el portaequipajes de un automvil;
parece que nunca caben. Sin embargo, si saca todo de las maletas y coloca los objetos uno a uno en el
portaequipajes, todo cabe.) Como cada segmento es menor que todo el proceso, es ms probable que
quepan en los bloques de memoria disponibles.
7.8 Segmentacin paginada
Tanto la paginacin como la segmentacin tienen sus ventajas y desventajas.
De hecho, de los dos microprocesadores ms populares:
- la lnea Motorola 68000 est diseada con un espacio de direcciones lineal,
- la familia Intel 8086 se basa en la segmentacin.
Actualmente ambos estn combinando los modelos de memoria para conseguir una mezcla de
paginacin y segmentacin.
Es posible combinar estos dos esquemas para mejorar cada uno de ellos, y esta combinacin se
ejemplifica con el innovador, pero poco utilizado, sistema MULTICS, donde las direcciones lgicas se
forman a partir de un nmero de segmento de 18 bits y un desplazamiento de 16 bits. Aunque este
esquema crea un espacio de direcciones de 34 bits, es tolerable el espacio adicional de la tabla, ya que el
nmero variable de segmentos representa naturalmente a un STLR. Como slo necesitamos tantas
entradas en la tabla de segmentos como segmentos hay, en la tabla de segmentos no habr entradas
vacas.
Sin embargo, con segmentos de palabras de 64 K, el tamao promedio de los segmentos podra
ser grande y la fragmentacin externa constituira un problema, incluso si la fragmentacin externa no es
un problema, el tiempo de bsqueda para asignar un segmento, utilizando el primer ajuste o el mejor
ajuste, sera excesivo. Por tanto, podramos desperdiciar memoria debido a la fragmentacin externa,
tiempo por las bsquedas prolongadas, o ambos.
La solucin que se adopt fue paginar los segmentos. La paginacin elimina la fragmentacin
externa y hace de la asignacin un problema trivial: se puede usar cualquier marco vaco para una pgina
deseada. El resultado se muestra en la figura 7.22.
Observe que la diferencia entre esta solucin y la segmentacin pura consiste en que la entrada
de la tabla de segmentos no contiene la direccin base del segmento, sino la direccin base de una
tabla de pginas para este segmento.
El desplazamiento en el segmento se divide entonces en un nmero de pgina de 6 bits y un
desplazamiento en la pgina de 10 bits.
El nmero de pgina se usa como ndice para la tabla de pginas a fin de obtener el nmero de
marco. Por ltimo, el nmero de marco se combina con el desplazamiento en la pgina para formar
una direccin fsica.
SISTEMAS OPERATIVOS 7 - Administracin de memoria
7-41
direccin fsica
no
trampa
memoria
porcin de la
tabla de pginas
STBR
direccin lgica original
tabla de segmentos
s d
longitud de
la tabla de
segmentos
base de la
tabla de
pginas
p d
d
m m d
+

+
Figura 7.22 Segmentacin paginada en el GE 645 (MULTICS).
Ahora debemos tener una tabla de pgina particular para cada segmento.
Sin embargo, como cada segmento tiene limitada su longitud por su entrada de la tabla de
segmentos, la tabla de pginas no necesita ser de tamao completo. Slo requiere tantas entradas como
las que realmente se necesitan. Adems, la ltima pgina de cada segmento en general no estar llena,
por lo que tendremos en promedio media pgina de fragmentacin interna por segmento, en
consecuencia, aunque hemos eliminado la fragmentacin externa, hemos introducido la fragmentacin
interna y aumentado el espacio consumido por la tabla.
Para ser sinceros, incluso la perspectiva de la segmentacin paginada de MULTICS que
acabamos de presentar es simplista. Como el nmero de segmento es una cantidad de 18 bits, podemos
tener hasta 262.144 segmentos, lo que requiere una tabla de segmentos muy grande.
Para suavizar el problema, - MULTICS pagina la tabla de segmento!. As, generalmente una
direccin en MULTICS utiliza el nmero de segmento para definir un ndice de pgina en una tabla de
pginas para la tabla de segmentos. A partir de esta entrada, localiza la parte de la tabla de segmentos
que contiene la entrada para este segmento. La entrada de la tabla de segmentos apunta a una tabla
de pginas para este segmento, la cual especifica el marco que contiene la palabra deseada.
- - - - - - - - - - - - - - - - - - - - - - - -

Vous aimerez peut-être aussi