Download TEMA 8: GESTIÓN DE MEMORIA.

Document related concepts

Segmentación de memoria wikipedia , lookup

Paginación de memoria wikipedia , lookup

Memoria virtual wikipedia , lookup

Unidad de gestión de memoria wikipedia , lookup

Protección de memoria wikipedia , lookup

Transcript
Sistemas Informáticos Multiusuario y en Red
T-8. – Gestión de Memoria.
TEMA 8: GESTIÓN DE MEMORIA.
1. Direccionamiento. ...................................................................................................................... 2
1.1.- Asignación de direcciones. .................................................................................................. 2
2. Jerarquía del almacenamiento. ..................................................................................................... 3
3. Gestión de memoria.................................................................................................................... 3
3.1.- Monoprogramación. ............................................................................................................ 3
3.2.- Multiprogramación.............................................................................................................. 6
3.3.- Paginación. ......................................................................................................................... 8
3.4.- Segmentación. ...................................................................................................................10
3.5.- Sistemas combinados. ........................................................................................................10
3.6.- Memoria Virtual. ...............................................................................................................10
3.6.1. Carga por petición de páginas........................................................................................11
3.6.2. Reemplazamiento de páginas.........................................................................................12
3.6.2.1. Algoritmos de reemplazamiento. .............................................................................12
3.7.- Asignación de memoria. .....................................................................................................13
4. Consideraciones de diseño. ........................................................................................................13
5. Tendencias actuales...................................................................................................................14
El problema se crea al intentar trabajar con varios procesos en memoria simultáneamente.
Por ello será necesario hacer una adecuada gestión de la misma.
Para poder procesar un programa en un ordenador es necesario que previamente, tanto él
como los datos que maneja estén cargados en la memoria principal. Para ello necesitaremos
mantener dichos programas simultáneamente en memoria, es decir deberán compartir la
memoria.
En el funcionamiento de un ordenador, la memoria principal es un recurso central ya que
tanto el procesador como los dispositivos de e/s acceden a ella para leer y/o grabar la
información que manejan.
Procesos
...
...
...
...
...
Micro
Procesador
Memoria
Principal
Dispositivos
Entrada/Salida
Fig.1. La memoria como recurso central.
El procesador leerá de la memoria la instrucción y los datos que debe tratar y escribirá en
ella el resultado. La velocidad a la que se realicen estas lecturas y escrituras condicionará la
rapidez y eficacia del ordenador.
Prof.: Justo Sáez Arenas
1
Sistemas Informáticos Multiusuario y en Red
T-8. – Gestión de Memoria.
1. Direccionamiento.
La memoria física puede verse como una sucesión de bytes o palabras, cada uno con su
propia dirección. Cuando se desarrolla el hardware de un ordenador se define el esquema de
direccionamiento que éste podrá utilizar. Si las direcciones que genera son de 16 bits podrá
direccionar como máximo 64k (potencia 16 de 2) y éste será el tamaño máximo del espacio de
direcciones del ordenador. Aunque tuviera instalado, por ejemplo 128k de memoria sólo podría
acceder a las primeras 64 k.
El hardware también impone la unidad mínima de información direccionable. Si esa
unidad es la palabra, las posiciones sucesivas de memoria corresponderán a palabras sucesivas y
el ordenador será direccionable por palabra. Si a lo mínimo que podemos acceder es a un octeto
(byte) el ordenador será direccionable por octeto. Cada palabra de memoria contendrá uno o
mas bytes dependiendo del diseño.
Se denomina tiempo de acceso a la memoria al que transcurre entre el inicio y el fin de
una operación de lectura o escritura sobre la misma. Otro parámetro característico es el tiempo
de memoria, que marca el retraso que impone el hardware entre el fin de una operación y el
inicio de la siguiente.
Ambos factores se utilizan como indicadores de la velocidad de la memoria principal. Sus
valores pueden varias de decenas a cientos de nanosegundos.
1.1.- Asignación de direcciones.
Los programas deben estar cargados en memoria para su ejecución, pero no saben en qué
posición o dirección de memoria se deben cargar. El programador tampoco, simplemente
definirá una sentencia de inicio de programa y a continuación secuencialmente el resto de
sentencias para realizar el proceso deseado.
Direcciones
Simbólicas
(identificadores
Programa Fuente
COMPILADOR
Direcciones
Relativas
(desplazamiento)
Punto de carga
(Dirección inicio)
Direcciones absolutas
Programa Objeto
ENLAZADOR/CARGADO
R
Programa cargable
Fig.2.Asignación de direcciones en los programas.
Después el compilador, traducirá a lenguaje máquina el programa fuente y les asignará, a
las diferentes
instrucciones y campos, el desplazamiento correspondiente respecto a ese
sentencia inicial, o cero relativo, ósea que asignará direcciones relativas al programa.
Prof.: Justo Sáez Arenas
2
Sistemas Informáticos Multiusuario y en Red
T-8. – Gestión de Memoria.
Una vez enlazado (link), el cargador podrá colocarlo en memoria asignándole el cero
relativo una dirección de carga real, y al resto de sentencias y campos los desplazamientos
correspondientes. Habrá transformado las direcciones relativas en absolutas o reales.
2. Jerarquía del almacenamiento.
Los primeros ordenadores utilizaban memorias de tipo magnético. Dado el nivel
tecnológico del momento, era un hardware muy caro y, por ello, los ordenadores solían tener
poca memoria. Se debía utilizar de la forma más eficaz posible.
No parecía lógico tener cargados en memora principal aquellos programas y datos que no
fueran a ejecutarse, pero tampoco sería práctico compilarlos y enlazarlos cada vez que fuera
necesaria su ejecución. El desarrollo de dispositivos rápidos de almacenamiento (tambores,
discos y cintas) permitió guardar en ellos dichos programas y datos, transfiriéndose a la memoria
principal cuando fueran a procesarse. El SO se encargaría de gestionar también este
almacenamiento secundario.
En la década de los 60 se desarrollaron memorias mucho mas rápidas que las magnéticas, aunque
también mas caras. Estas memorias muy rápidas o cache se comenzaron a utilizar para almacenar los
programas y datos mas utilizados, logrando una mejora general del sistema, Su coste forzó a utilizar
memorias caché de pequeño tamaño.
Memoria
Principal
Memoria
Caché
Memoria o
Almacenamiento
Secundario
3. Gestión de memoria.
Un recurso tan caro e influyente en el rendimiento general del ordenador deberá
gestionarse de la forma más eficaz posible. Por ello, el sistema operativo dedica una parte
importante de su software (el gestor de memoria) a su gestión, buscando la utilización mas
adecuada al servicio que debe dar (BATCH, tiempo compartido, tiempo real, etc.).
3.1.- Monoprogramación.
La memoria dedicada. Los primeros ordenadores utilizaban en régimen
dedicado. El programador disponía por completo del hardware y utilizaba la memoria a su
antojo. No existía sistema operativo ni gestor de la memoria. De esta manera la utilización de la
memoria es ineficaz y se obliga a un conocimiento profundo del hardware utilizado. El
programador tenía que dedicar gran parte de su esfuerzo a gestionar el hardware, desviándolo de
su principal objetivo(procesar determinada información).
Prof.: Justo Sáez Arenas
3
Sistemas Informáticos Multiusuario y en Red
T-8. – Gestión de Memoria.
División de la memoria. La introducción de los sistemas operativos para utilizar
mejor el hardware dividió la memora principal en dos zonas, una utilizable por el usuario y otra
reservada para la parte residente del propio sistema operativo, también llamada monitor que,
entre otras funciones, se encargará de gestionar la memoria. Este reparto de memoria produce
unos cuantos problemas que hay que resolver.
* Cómo asegurar la independencia de ambas zonas (protección).
* Cómo asegurar que los programas de usuario no se vean afectados por esta
nueva división de la memoria.
Protección de la memoria. Ya que el monitor y el programa del usuario van a
compartir la memoria, es necesario proteger la zona del sistema operativo contra cualquier
intento de acceso ilegal del programa que podría afectar al funcionamiento de dicho monitor. Se
establece una dirección de frontera que limita la zona del sistema. Cualquier dirección que
genere el programa de usuario se comparará con dicha frontera permitiendo el acceso si es > ó =
y denegándolo si es menor. El control lo realiza el propio hardware.
Este control provoca un aumento del tiempo de acceso a la memoria, pero el retraso
queda compensado por el mejor rendimiento que permite el sistema operativo.
Solo será necesario controlar las direcciones generadas por el programa. El monitor debe
poder acceder a cualquier punto de la memoria (para cargar programas, pasarles información
etc.) y por tanto no es necesario controlar las suyas.
Reasignación de direcciones. Una vez inicializado el sistema, el contenido del
registro frontera indicará el punto a partir del cual puede cargarse el programa de usuario. Para
ello será necesario reasignar las direcciones del programa en función de la frontera. Existen dos
formas de hacerlo, una estática y otra dinámica.
A. La asignación estática se realiza durante la compilación o bien durante la carga del programa
en memoria. De esta manera si hay variación del tamaño del sistema operativo exigirá una
nueva compilación o carga del programa.
B. La asignación dinámica es la alternativa a la estática para asignar direcciones reales durante
la ejecución. Un dispositivo hardware especial interceptará cada dirección lógica generada
por el programa y le sumará el contenido del registro frontera. El contenido será la dirección
real correspondiente.
Cualquiera que sea la técnica elegida impedirá que el usuario pueda manejar direcciones
reales. Su programa utilizará direcciones relativas que podrán variar de 0 al máximo permitido
por el sistema operativo. Este será el Espacio físico de direcciones. Después el sistema, con la
ayuda del hardware, establecerá la correspondencia adecuada con el espacio lógico de
direcciones. Espacio que estará limitado por la dirección frontera y el tamaño de la memoria
real.
Procesador
Dirección
Relativa
Dirección
+
Memoria
Principal
Absoluta
Registro
frontera
Prof.: Justo Sáez Arenas
4
Sistemas Informáticos Multiusuario y en Red
T-8. – Gestión de Memoria.
Fig. Asignación Dinámica
Intercambio de almacenamiento (swaping). La necesidad de atender a varios
usuarios en los sistemas de tiempo compartido, impulsó el desarrollo de técnicas de Intercambio
de almacenamiento o swaping. Consiste principalmente en liberar espacio de memoria
extrayendo un programa instalado en ella para que pueda ser ocupado por otro que necesite
ejecutarse (y no por salir de memoria sale de cola de preparados).
Mem
HD
Swapping
Usuario
Región
de
swapping
Monitor
Fig. Swapping o intercambio.
Cuando el programa cargado en memoria quede a la espera de una operación de
entrada/salida, por ejemplo, el sistema lo descargará (swap-out) copiándolo exactamente como
está en memoria en dispositivos rápidos de almacenamiento secundario. En su lugar cargará el
de otro usuario, traído (swap-in) de dichos dispositivos, que esté preparado para usar el
procesador.
La eficacia de esta técnica dependerá, principalmente de la velocidad con la que se realice
la carga y descarga de los programas y, por lo tanto, de la velocidad de acceso a los dispositivos
de almacenamiento secundario.
Se puede reducir un impacto del tiempo de intercambio de un programa si lo solapamos
con la ejecución de otro. Para ello el sistema divide la zona de usuario en dos partes y, mientras
en una está procesándose un programa, en la otra se está intercambiando otro.
El sistema deberá encargarse de todas las interrupciones que tengan pendientes los
programas sacados (operaciones de e/s, indicadores externos, etc.). Por ejemplo, en un programa
que ha iniciado una operación de e/s para leer información de un fichero. Quedará a la espera y
el sistema lo sacará al almacenamiento secundario. Si finaliza ahora la operación de e/s no
podremos colocar la información recibida en la memoria del programa pues está ocupado por
otro . Para evitar estos problemas se realizarán estas operaciones sobre buffers del sistema
operativo. Cuando el programa afectado regrese a memoria, el propio sistema le pasará la
información.
Hasta ahora hemos considerado situaciones en las que, en un momento dado, sólo existe
un programa de usuario en memoria principal. Los sistemas correspondientes se denominan, por
ello, de monoprogramación.
Solapar el intercambio de un programa con la ejecución de otro, introduce una novedad
importante; la existencia de varios programas de usuario cargados a la vez en memoria.
Prof.: Justo Sáez Arenas
5
Sistemas Informáticos Multiusuario y en Red
T-8. – Gestión de Memoria.
3.2.- Multiprogramación.
La necesidad de utilizar más eficazmente los ordenadores, conduce a introducir la técnica
de la multiprogramación.
Para poder repartir el procesador entre varios procesos o usuarios, necesitamos tenerlos
en memoria. Por ello la memoria se divide en trozos, llamados particiones o regiones, dónde se
cargarán los diferentes procesos. El número de particiones indicará el grado de
multiprogramación del sistema.
Protección de la memoria. Si tenemos varios procesos en memoria, deberemos
proteger sus respectivas particiones de accesos indeseados. El mecanismo de protección elegido
tendrá que actuar ante cada referencia de memoria generada y deberá ser, por tanto,
especialmente rápido, de lo contrario produciría una degradación importante. Esta exigencia
explica la utilización del hardware para esta función, se puede hacer de dos formas:
A. Dos registros fijos: se pueden utilizar dos registros hardware Registro limite , de forma que
sus contenidos apunten al límite superior e inferior de la partición de que se trate. Cada
dirección generada deberá estar comprendida entre dichos valores.
Esta técnica exige que las direcciones generadas por los procesos sean absolutas,
asignadas bien durante la compilación o bien durante la carga del programa. En ambos casos
será una asignación estática, ya que la variación del contenido de los registros límite (para
cargar el programa en otra partición, por ejemplo) exigiría una nueva compilación o carga.
B. Un registro fijo y uno variable: es una solución mas flexible, consiste en cargar un registro
con la dirección del comienzo de la partición u otro con el tamaño de la misma,
denominándose Registro Base y Límite, ahora ya es posible asignar dinámicamente las
direcciones, ya que bastará actualizar el contenido del registro base para apuntar a otra zona
de memoria. Cada dirección generada por el proceso deberá ser menor que el contenido del
registro límite, y si se le sumara el contenido del registro base para obtener la dirección
absoluta correspondiente. Los programas podrán cargarse en cualquier partición de tamaño
adecuado bastará cambiar el registro de base.
Particiones contiguas de tamaño fijo
Se puede dividir la memoria en
particiones contiguas de tamaño fijo. El número de estas y sus tamaños se definirá al iniciar el
sistema y quedarán fijados para toda la sesión.
Cuando tenga que iniciar un programa, el sistema le asignará una partición que pueda
contenerlo. Será necesario que los programas declaren sus necesidades de memoria al sistema.
Memoria
128K
128K
128K
128K
Particiones Fijas
Prof.: Justo Sáez Arenas
6
Sistemas Informáticos Multiusuario y en Red
T-8. – Gestión de Memoria.
Todos los programas se colocan en cola única de espera, y será el sistema el encargado de
seleccionar cual cargar en la partición disponible en un momento dado. El planificador de
trabajos del sistema es el componente encargado de hacer dicha selección, y los puede hacer
respetando el orden de llegada de los programas. De esta forma para una partición libre se elegirá
el primer programa de la cola si cabe en ella, en caso contrario quedará desocupada y el resto de
los programas deberán esperar que se libere una partición de tamaño adecuado para el primero.
Este criterio de selección (FIFO) es simple de programar pero puede provocar cierta
infrautilización de la memoria. El planificador puede lograr mayor eficacia si cada vez que debe
seleccionar un trabajo, analiza la cola de espera buscando:
* El trabajo de tamaño mas adecuado a la partición libre
* El primero que quepa en la partición disponible.
Los sistemas que vayan a procesar trabajos de tamaños similares podrán utilizar
algoritmos FIFO, que son más fáciles de codificar y provocan menor sobrecarga. Por el
contrario, si deben tratar trabajos con necesidades distintas de memoria deberán recurrir a
técnicas complejas, como el intercambio.
Intercambio: Se pueden mejorar el rendimiento si se le añaden técnicas de
intercambio a la gestión de particiones. Los programas pendientes de un evento o interrupción se
pueden llevar a almacenamiento secundario, cargando en su lugar otro programa disponible.
Analizando la utilización de las particiones aparece otro aspecto negativo. Si nuestro
sistema posee tres particiones de 14k, 10k y 6k, un programa de 11 k se deberá cargar en la
primera partición desaprovechando durando su ejecución 3k. Se produce Fragmentación interna
(queda un trozo de memoria sin utilizar) de la memoria. Si en el mismo ejemplo suponemos
ocupadas las particiones de 14k y 10k y existen trabajos de 7k, 8k y 9k esperando, nos
encontraremos con una partición inutilizable aún habiendo necesidad de memoria. Se ha
producido Fragmentación externa (el programa que se quiere cargar es mayor que el espacio
disponible en la partición de memoria) de la memoria.
Rendimiento: El desarrollo de particiones contiguas de tamaño fijo
representó un gran avance, sin embargo su eficacia quedaba condicionada por la elección del
tamaño y número de las particiones en relación con las características de los programas a tratar.
Particiones contiguas de tamaño variable. Los inconvenientes de la técnica
anterior nacen de la dificultad de definir unas particiones de tamaño adecuado para todos los
trabajos que se deben tratar, pero desarrollando una técnica de gestión que asigna dinámicamente
la memoria a los trabajos de acuerdo con su tamaño se soluciona el problema.
El sistema operativo mantendrá una tabla interna donde registrará las zonas de memoria
disponible o huecos, a cada trabajo le asignará una partición del tamaño solicitado, descontando
dicha cantidad de la citada tabla. Esta es la técnica de particiones contiguas de tamaño variable.
Si queda alguna parte de la memoria libre que no quepa el siguiente trabajo se produce
una Fragmentación externa. Cada trabajo irá terminando en un tiempo determinado e irán
entrando otros trabajos en su lugar, siempre que quepan en la partición desocupada. Cuando se
creen fragmentaciones el gestor de memoria unificará todos estos huecos contiguos con el fin de
disponer de huecos mayores, esto se conoce como compactación.
Compactación: Es la técnica utilizada por algunos sistemas para combatir
el proceso de fragmentación que sufre la memoria. La idea es recolocar las zonas de memorias
utilizadas para lograr un único hueco de memoria disponible. Pero la puesta en práctica de esta
idea no es tan sencilla, pues los programas se pueden mover de formas diferentes quedando el
hueco al final o en el medio, mirando siempre la forma que menos Kb se tengan que desplazar,
ya que su coste en tiempo puede ser considerable.
Prof.: Justo Sáez Arenas
7
Sistemas Informáticos Multiusuario y en Red
T-8. – Gestión de Memoria.
Esta técnica exige que los trabajos sean reubicables y por tanto, solo será utilizable en
aquellos sistemas en los que las direcciones de memoria se asignen durante la ejecución.
Rendimiento: Utilizando particiones variables: se logra un mejor
aprovechamiento de la memoria, pero la fragmentación continúa siendo un problema importante.
Su rendimiento, esta condicionado por la selección que se haga de los trabajos a cargar en
memoria. Para ello se necesitan nuevas técnicas de gestión de la memoria para sistemas
multiprogramación y multiusuario. Estas son la gestión de memoria virtual.
3.3.- Paginación.
Memoria Lógica
P
a
g
i
n
a
s
Tabla de páginas
P1
1
P2
2
Memoria Física
F0
F1
F1
F2
F4
F3
P3
3
P1
F4
F3
P3
Frames o
Marco de
página
P2
F5
P4
4
F6
F7
F7
P4
(Importante conceptos de frames y pagina)
Paginación Es la técnica de gestión que permite asignar la memoria de forma
discontinua. Con este fin se divide la memoria física en trozos de tamaño fijo llamados
armazones, marcos o frames y la lógica en bloques del mismo tamaño llamados páginas.
El So internamente mantiene una Tabla de páginas donde relaciona cada página cargada
en memoria principal con el frame que la contenga, o lo que es lo mismo con su dirección inicial
en memoria real.
Cada dirección que genere el procesador, será interceptada y dividida en dos
componentes:
- Un número de pagina (p)
- Un desplazamiento en la página (d) que indica la posición que ocupa el byte indicado
por la dirección, contando desde el principio de la página.
procesador
Nº.pagina
Desplazamiento
Frame Desplazamiento
Memoria
Física
Tabla de
páginas
Prof.: Justo Sáez Arenas
Frames
...
...
...
8
Sistemas Informáticos Multiusuario y en Red
T-8. – Gestión de Memoria.
Fig. Direccionamiento de memoria paginada
Utilizando p como índice el sistema recorrerá toda la Tabla de paginas (Tpg) hasta
localizar dicha página, a continuación sumará el desplazamiento a la dirección de carga
correspondiente y obtendrá la dirección real adecuada.
Cada programa se subdivide en páginas y estas se cargan en frames libre que no tienen
que ser contiguos. La arquitectura del ordenador establece el tamaño de las páginas y por tanto
de los frames, que suelen ser en potencia de 2.
El sistema analizará cada nuevo trabajo para conocer el número de páginas que ocupa y
buscará en su lista de frames libres un número igual de frames. Si encuentra suficientes, cargará
en ellas las páginas del programa y construirá la correspondiente tala de páginas, actualizando la
lista de frames libres. Cada trabajo en memoria poseerá su propia Tpg apuntada por el bloque de
control del propio trabajo, accesible mediante instrucciones privilegiadas por el sistema. De esta
manera se logra evitar la fragmentación externa, ya que cualquier frame libre es asignable a un
trabajo que necesite memoria.
Rendimiento. Memoria Caché. Para agilizar la conversión de direcciones el sistema
mantiene en memoria la Tpg de cada uno de los trabajos activos, y utiliza un registro especial
llamado Registro Base de Tabla de Páginas, que indica la dirección de la Tpg del trabajo en
ejecución en ese momento. De forma que, cuando deba conmutar a otro trabajo, además de
restaurar el contador de programa y demás indicadores, cargará en dicho registro la dirección de
la Tpg correspondiente.
Para transformar cada dirección lógica (p,d) generada por el procesador en su dirección
real, el sistema deberá acceder primero a la tabla de páginas correspondiente (registro base + p) y
posteriormente a la dirección real(frame +d). De esta manera cada dirección provoca dos accesos
a memoria y se duplican los tiempos de ejecución.
Se ha logrado mejorar la utilización de la memoria pero a costa de una mayor duración de
los procesos. Para solventar este problema se recurrió a memorias pequeñas de muy alta
velocidad (y muy costosas) donde mantener las entradas de la Tpg mas utilizadas. Esta
memoria, conocida como Memoria caché , que es funcionalmente como la memoria principal
pero mucho más rápida, con lo que se reduce notablemente el retraso debido a la paginación.
En caso de sistemas pequeños, con tablas de paginas de pocas entradas se puede utilizar
un grupo de registros de hardware para contener la Tpg, llamados Registros asociativos, cada
uno de ellos dividido en una parte de clave y otra con contenido. La búsqueda de una entrada de
la Tpg por clave, se realiza a la vez en todos los registros y se obtiene inmediatamente su
dirección de frame. Los algoritmos que se emplean en el reemplazamiento de página son FIFO
(primero en entrar, primero en salir).
Páginas compartidas. Esta técnica de la paginación permite que varios procesos o
usuarios compartan páginas cargadas en memoria. Esta posibilidad es especialmente positiva
para los sistemas de tiempo compartido.
Puesto que es muy común utilizar páginas que son comunes para varios procesos, el
contenido de estas debe permanecer inalterado, por lo que deben ser protegidas contra todo
intento de escritura, para ello se añaden a las entradas de la tabla de páginas una serie de bits de
protección que van a indicar si dicha página puede ser sólo leída, o puede ser modificada, etc. De
Prof.: Justo Sáez Arenas
9
Sistemas Informáticos Multiusuario y en Red
T-8. – Gestión de Memoria.
tal forma que si el sistema operativo detecta que se quiere escribir en una página de memoria que
tiene su bit de protección activado contra escritura no lo permitirá.
3.4.- Segmentación.
Segmentación. Los programas se desarrollan, generalmente en torno a un cuerpo central
desde el que se bifurca a otras partes, rutinas, o se accede a zonas de datos (tablas, pilas matrices,
etc.). Desde este punto de vista el programa es un conjunto de componentes lógicos de tamaño
variable, un conjunto de segmentos.
De esta manera el espacio lógico de direcciones se puede considerar como un conjunto de
segmentos, cada uno definido por su tamaño y número.
Toda dirección lógica se expresará mediante dos valores: número de segmento, s, y
desplazamiento dentro del segmento.
La segmentación del programa la realizará el compilador. En general es similar a la
paginación, teniendo en cuenta que ahora si tiene sentido emplear una técnica para determinar la
colocación de los segmentos en memoria, pudiendo ser la del mejor ajuste la que se emplee.
Puesto que la memoria física se direcciona linealmente con un número, será necesario
transformar cada dirección ól gica (s, d) en una dirección real unidimensional (r). Esta conversión
la realiza un dispositivo especial de hardware consultando la tabla de segmentos correspondiente.
Esta técnica permite reducir la fragmentación interna, ya que se asigna a cada programa
la cantidad de memoria que requiere.
La carga de programa en memoria exige la búsqueda de los huecos adecuados a sus
segmentos intentando ajustar lo más posible.
Al igual que la paginación la segmentación requiere el uso de memorias caché y también
permite utilizar segmentos compartidos.
3.5.- Sistemas combinados.
Algunos sistemas utilizan una técnica de paginación segmentada: consiste en segmentar la
tabla de páginas adecuándola al tamaño del programa. Para ello mantiene una tabla de segmentos
cuyo tamaño indica la dirección de inicio de cada tabla de páginas y su tamaño. Se utiliza un
hardware especial. La serie 370 de IBM utiliza esta técnica.
Otros utilizan la Segmentación Paginada utiliza segmentos cuyo tamaño siempre es un
numero entero de páginas. Por ejemplo el sistema Multics GE 645
3.6.- Memoria Virtual.
Como sabemos los sistemas operativos intentarán gestionar la memoria para poder tener
cargados mas de un programa simultáneamente y en ejecución, esto es lo que denominamos
memoria virtual, puesto que no todos los programas o sus partes tienen porque estar cargados en
memoria física real.
La memoria virtual es una técnica de gestión que, combinando hardware y software,
permite la ejecución de programas parcialmente cargados en memoria real. Esta forma de
trabajar aporta ventajas importantes:
* Si los programas se pueden ejecutar por partes, la memoria lógica puede ser mayor que
la real disponible.
Prof.: Justo Sáez Arenas
10
Sistemas Informáticos Multiusuario y en Red
T-8. – Gestión de Memoria.
* Puesto que cada programa ocupa menos memoria real, se puede elevar el índice de
multiprogramación y, por tanto, la eficiencia del sistema.
* Al cargar menos cantidad de cada programa se necesitan menos operaciones de e/s para
las operaciones de carga e intercambio de los mismos.
Esta técnica surgió con la finalidad de permitir que pudiesen trabajar muchos usuarios
simultáneamente en el ordenador, a pesar de contar con una cantidad escasa de memoria. Su en
un sistema multiusuario y multiprogramación hay muchos usuarios que desean ejecutar sus
programas, parece claro que aunque pongamos mucha memoria es seguro que se terminará
llenando y habrá usuarios que no puedan ejecutar sus programas y tengan que esperar a que
terminen los afortunados que consiguieron entrar a tiempo. Esto tiene mas significación
actualmente ya que los programas cada vez son mayores, y muchos de ellos ni siquiera se
podrían ejecutar aunque tuvieran disponible toda la memoria del ordenador.
Imaginemos un programa que se está ejecutando, lógicamente empezaría por la primera
instrucción e iría ejecutándose una tras otra hasta terminar. Pero a lo largo de su ejecución no
siempre es necesario tener todas las instrucciones del programas. Así cuando comienza, las
instrucciones del final no son en absoluto necesarias ya que todavía tardará en llegar a ellas para
ejecutarlas. Por ello el sistema operativo podría tomar solo la parte de instrucciones y de datos
que son realmente necesarios y copiarlos en la memoria, dejando el resto en el disco. Solo
cuando necesite las partes que están en el disco las traería a la memoria y devolvería al disco lo
anterior que ya no es necesario, es decir, sustituirá unos trozos del programa por otros según se
vayan necesitando.
El usuario no notará nada especial, quizás que se ejecuta algo mas lento (debido al tiempo
necesario para leer del disco el trozo y copiarlo en la memoria, que no sería necesario si
estuviese todo el programa en memoria), pero parecería que está todo en memoria ejecutándose
normalmente. Es decir el usuario tienen la ilusión de que todo su programa está en memoria, de
ahí el nombre de gestión de la memoria Virtual.
Las diferentes partes de un programa se van cargando en memoria a medida que se
necesitan, por lo que debemos considerar los siguientes conceptos:
A. Carga: las funciones del programa se cargaran cuando se necesiten en respuesta a una
“petición de página” o bien cargarlo por adelantado que se conoce como
“anticipación o prepaginación”.
B. Colocación: cuando se utiliza segmentación al cargar un nuevo segmento se deberá
decidir en que hueco colocarlo.
C. Sustitución: lo normal será tener toda la memoria ocupada y cuando se necesita cargar
una nueva parte de programa hay que sacar otra de la memoria y realizar lo que se
denomina “reemplazo de página”.
3.6.1. Carga por petición de páginas.
Es el mecanismo utilizado más frecuentemente en la técnica de memoria virtual, su
funcionamiento es similar al de la paginación por intercambio.
Este algoritmo no lleva a memoria todo el programa sino que solo carga aquellas páginas
que se le pidan.
Cuando el procesador genere una dirección que pertenezca a una página que no se
encuentra en memoria la busca y la carga en memoria; esto es lo que se conoce como “falta de
Prof.: Justo Sáez Arenas
11
Sistemas Informáticos Multiusuario y en Red
T-8. – Gestión de Memoria.
páginas”, que será un punto clave a la hora de diseñar el sistema, puesto que puede producir un
retraso adicional en la ejecución de los programas.
3.6.2. Reemplazamiento de páginas.
Cuando la memoria principal está llena de páginas y es necesario cargar una nueva
deberemos seguir algún criterio para sacar una de las que ya están cargadas, esto conlleva una
sobrecarga importante.
La rutina del sistema que gestiona la falta de páginas trabaja de la siguiente forma:
1. Encontrar la página solicitada en el almacenamiento secundario.
2. Encontrar un frame libre, y si existe utilizarlo.
3. Si no hay un frame libre utilizar un “algoritmo de reemplazamiento” para seleccionar
la página a reemplazar.
4. Salvar la página reemplazada en el almacenamiento secundario actualizando las
tablas que correspondan.
5. Llevar la página solicitada al frame libre y actualizar la tabla que corresponda.
3.6.2.1. Algoritmos de reemplazamiento.
La situación optima sería poder prever que páginas serán pedida, lo cual es imposible,
pero podemos prever en cierta medida el comportamiento del sistema partiendo de la experiencia
del pasado, viendo las necesidades que han ido teniendo los procesos.
Los algoritmos que se han ideado para controlar el reemplazamiento serán mas o menos
eficientes en función de dos factores:
A. Número de falta de páginas que provoca, es decir, numero de veces en que no se
encuentra en memoria la página solicitada.
B. Coste de su utilización, es decir, la sobrecarga que se produce en el sistema al utilizar
dicho algoritmo.
-
-
Algoritmo FIFO: el más sencillo, cuando se necesita sustituir una página se elige aquella que
lleve más tiempo en memoria. Algoritmo fácil de programar que produce poca sobrecarga en
el sistema pero su eficacia es relativa sobre todo en sistemas de tiempo compartido.
Algoritmo LRU (Least Recently Used): se basa en sustituir aquella página que haya sido
usada menos recientemente. En este caso la utilización del tiempo de uso es un criterio que
refleja mucho mejor el comportamiento de los procesos en su utilización de memoria.
Ponerlo en práctica es relativamente complicado ya que se debe contabilizar el tiempo en el
que se produce cada referencia a memoria para poder clasificas las páginas según su uso.
Esto se puede realizar de varias formas:
A. Contadores de Hardware: la solución más simple es incorporar un contador de
referencias a memoria y añadir un campo a las entradas de la tabla de páginas que
pueda almacenar el valor de dicho contador. Para reemplazar una página el sistema
busca el valor del contador registrado que sea menor.
B. Matrices de hardware: si se dispone de n frames, el hardware debe mantener una
matriz de n * n bits inicializados a cero. Cuando se quiere acceder a una página se
ponen a uno todos los bits de la fila de esa página y a cero los de la columna (menos
Prof.: Justo Sáez Arenas
12
Sistemas Informáticos Multiusuario y en Red
T-8. – Gestión de Memoria.
el de su fila). En cualquier momento la página menos usada es aquella cuya fila
tenga el menor valor binario.
C. Pilas: se mantiene una pila de números de páginas utilizadas. Cada vez que se utiliza
una página su numero se coloca al principio de la pila, en un momento determinado
la página menos recientemente utilizada será la del fondo de la pila.
Los algoritmos LRU necesitan disponer de hardware especial.
-. Otros algoritmos:
Dada la dificultad del LRU se intentan otros algoritmos más sencillos como son:
• Bit de referencia: se asocia a cada entrada de la tabla de páginas un bit, cada vez que
se utiliza esa página activa dicho bit, en un momento dado si necesitamos cargar una
página se consultará dicho bit para ver cual es reemplazada.
• LFU (Least Frequently Used): se asocia un contador a cada página que se actualiza a
intervalos regulares de tiempo. Se reemplazará la página cuyo contador sea menor.
• Bit de modificación: algunos algoritmos se complementan utilizando esta técnica que
consiste en añadir un bit en la tabla de páginas que indica si una página a variado su
contenido o no. Se sustituirán preferentemente aquellas páginas que no se hayan
modificado, evitando así tener que guardar su contenido en el almacenamiento
secundario con el consiguiente ahorro en tiempo de entrada salida.
3.7.- Asignación de memoria.
Al diseñar un sistema operativo se debe afrontar el problema de cuantos frames o marcos
a asignar a cada proceso activo. La propia arquitectura del ordenador impone unos mínimos de
asignación por proceso que marcaran el mínimo con el que trabajara el sistema operativo
(mínimo estructural). Si por cualquier razón un proceso se queda con menos frames que el
mínimo estructural el sistema debe sacarlo y suspenderlo (swap-out).
Cuando los procesos necesitan tener muchas paginas activas en memoria y esta se
encuentra llena se van a producir una gran cantidad de intercambios de paginas entre memoria y
almacenamiento secundario lo que conlleva un consumo considerable de tiempo, esto se
denomina hiperpaginación o trashing.
Para evitar las situaciones anteriores (mínimo estructural e hiperpaginación) es necesario
asignar a cada proceso el numero de frames que necesita en cada momento, pero el problema
radica en conocer ese numero.
Afortunadamente todos los programas están compuestos por varias partes o subrutinas, de
forma que su ejecución se realiza por fases, así el proceso direcciona solo una pequeña parte de
sus páginas, lo que nos ayudará a conocer más fácilmente el numero de frames que necesita.
También una forma de evitar los problemas anteriores se basa en controlar la frecuencia
con la que un proceso produce faltas de pagina. Si la frecuencia de falta de pagina de un proceso
supera un limite el sistema le asigna mas frames y si cae por debajo de un limite inferior le
reducirá su numero de frames asignados.
4. Consideraciones de diseño.
Prof.: Justo Sáez Arenas
13
Sistemas Informáticos Multiusuario y en Red
T-8. – Gestión de Memoria.
Al diseñar la gestión de un sistema operativo una parte muy importante es elegir los
algoritmos de asignación de página, de asignación de frames y reemplazamiento de paginas. Pero
hay otros aspectos a tener en cuenta, una de los más importantes es el tamaño de las paginas que
afecta notablemente al rendimiento del sistema. Este factor esta limitado por las características
de la propia maquina y decidir su tamaño no es sencillo puesto que hay que equilibrar diversos
factores:
1. Tabla de páginas: estas se encuentran en memoria principal y es necesario reducir su
tamaño lo que nos condiciona a diseñar páginas grandes y así conseguir tablas de
páginas más pequeñas.
2. Fragmentación: el tamaño de los programas no suele ser múltiplo exacto de paginas,
loo que nos produce la ya comentada fragmentación externa e interna. Ello nos
recomienda páginas pequeñas.
3. Transferencia: llevar una página del almacenamiento secundario a memoria y
viceversa conlleva la mayor parte de consumo de tiempo de un sistema. Desde este
punto de vista es bueno que las páginas sean grandes para hacer menos intercambio
con el almacenamiento secundario.
4. Falta de página: a mayor tamaño de pagina menos faltas de páginas.
El tamaño de las páginas es siempre una potencia de dos pudiendo variar entre 512 y
4096 bytes dependiendo de cada fabricante.
La gestión de la memoria debe posibilitar también compartir páginas entre procesos
(páginas compartidas). Las cuales llevarán un indicativo (por ejemplo, un bit) que les asegure un
tratamiento especial.
5. Tendencias actuales.
Debido al abaratamiento de las memorias los sistemas disponen de gran cantidad de la
misma además son más rápidas lo que va a permitir sistemas operativos más potentes.
Por otro lado los mecanismos hardware que ayudan a la gestión de la memoria son mucho
más sofisticados.
Todo ello lleva a la necesidad de mejorar los sistemas operativos con el fin de gestionar
una mayor cantidad de procesos simultáneos de forma eficiente y sin problemas entre cada uno
de los procesos.
Prof.: Justo Sáez Arenas
14