Anda di halaman 1dari 81

UNIDAD III. ADMINISTRACION DE MEMORIA.

3.1._ Política y filosofía……………………………………..………………………… 113

3.2._ Memoria real………………………………………..…………………………… 122

3.2.1._ Administración de almacenamiento…………..…………………………..... 129

3.2.2._ Jerarquía…………………………………….…..…………………………….. 130

3.2.3._ Estrategia de administración de memoria…..…………………………...… 134

3.2.4._ Asignación contigua v.s. no contigua………..……………………………... 135

3.2.5._ Multiprogramación de partición fija, partición variable, con intercambio de


almacenamiento……………………………..………………………………………… 139

3.3._ Organización de memoria virtual…..………………………………………….. 149

3.3.1._ Evaluación de las organizaciones de almacenamiento……..……………. 155

3.3.2._ Paginación…………………………………………………..………………… 155

3.3.3._ Segmentación…………………………………………..…………………….. 163

3.3.4._ Sistemas de paginación segmentación…………..………………………… 170

3.4._ Administración de memoria virtual……………..……………………………... 185

3.4.1._ Estrategias de administración……………..………………………………… 187

3.4.2._ Técnicas de reemplazo de páginas…..…………………………………….. 189

3.4.3._ Paginación por demanda…………..………………………………………… 189

3.4.4._ Paginación anticipada…………..……………………………………………. 190

3.4.5._ Liberación de página………..………………………………………………... 191

3.4.6._ Tamaño de página………..………………………………………………….. 191

112
UNIDAD III. ADMINISTRACION DE MEMORIA.
3.1._ POLÍTICA Y FILOSOFÍA.

Filosofía: Una de las funciones básicas que debe implementar un Sistema


Operativo es la Administración de la Memoria para tener un control sobre los
lugares donde están almacenados los procesos y datos que actualmente se
están utilizando.

Sea cual sea es esquema de organización del almacenamiento que se adopte


para un sistema específico, es necesario decidir que estrategias se deben
utilizar para obtener un rendimiento óptimo

La política es una actividad orientada en forma ideológica a la toma de


decisiones de un grupo para alcanzar ciertos objetivos.

Política: El sistema operativo debe llevar a cabo una política de espacio de


asignación de memoria.

Esto es necesario cuando se precisa crear el mapa de memoria de un proceso


que ocupa un determinado tamaño para poder así determinar qué zonas libres
se deberían utilizar; esto con el fin de lograr conjugar los siguientes aspectos:

 Buen aprovechamiento de la memoria


 Algoritmo de decisión eficiente

Para lograr conjugar los aspectos anteriores es necesario contestarnos las


siguientes preguntas

 ¿Cuándo se toma un nuevo programa para colocarlo en memoria?


 ¿Se toma el programa cuando el sistema lo solicita específicamente o se
intenta anticiparse a las particiones del sistema?
 ¿En qué lugar del almacenamiento principal se coloca el programa por
ejecutar?
 ¿Se colocan los programas lo más cerca unos de otros en los espacios
disponibles de la memoria principal para reducir al mínimo el desperdicio
de espacio, o se colocan los programas lo más rápido posible para reducir
al mínimo el tiempo de ejecución?
 Si se necesita colocar un nuevo programa en el almacenamiento principal y
éste está lleno,
¿Cuál de los otros programas se desaloja?

113
Una vez que hayan respondido esas preguntas, entonces será posible
determinar cuál es la mejor política de asignación de memoria.

Política de Lectura (Fetch)

Es la que está relacionada con la decisión de cuando se debe cargar una


página en la memoria principal. Las dos alternativas más comunes son:

• Paginación por demanda: Se trae una página a la memoria principal sólo


cuando se hace referencia a una posición en dicha página.

• Paginación previa: Se cargan otras páginas distintas a las demandadas


debido a un fallo de página.

Esta política no es efectiva si la mayoría de las páginas extra que se traen no


se referencian. La utilidad no ha sido demostrada.

Política de Ubicación.

Tiene que ver con determinar dónde va a residir una parte de un proceso en la
memoria principal.

Es un aspecto importante del diseño en un sistema puro de segmentación.

Cómo posibles alternativas se tiene:

• Políticas del mejor ajuste.


• Políticas del primer ajuste
• Y otras.

Sin embargo, para un sistema que usa tanto paginación pura como paginación
combinada con segmentación, la ubicación carece de importancia puesto que
el hardware de traducción de direcciones y el hardware de acceso a la memoria
principal pueden desarrollar sus funciones en cualquier combinación de marco
de página con idéntica eficiencia.

Política de Reemplazo.

Trata de la selección de la página a reemplazar en la memoria principal cuando


se debe cargar una nueva página. Esto resulta difícil de explicar por lo que se
debe tener en cuenta algunos conceptos interrelacionados como ser:

• El numero de marcos de página a asignar a cada proceso activo.

114
• Si el conjunto de páginas a considerar para el reemplazo debe limitarse
a las del proceso que provocó el fallo de página o abarcar todos los
marcos de página situados en la memoria principal.
• De entre el conjunto de páginas consideradas, cuál es la página
específica que debe

• elegirse para el reemplazo.

X6 fue el marco elegido para realizar el reemplazo de páginas. Se elimina la


página que no se está usando y se trae a memoria principal la página que el
sistema operativo necesita.

La Política de Reemplazo se encarga de seleccionar la página a reemplazar de


entre las que están actualmente en la memoria, cuando todos los marcos de
memoria principal están ocupados y es necesario traer una nueva página para
atender a un fallo de página.

Todas las políticas tienen como objetivo que la página a reemplazar sea la que
tenga una menor posibilidad de ser referenciada en un futuro cercano. Debido
al principio de cercanía, hay una alta correlación entre la historia de referencias
recientes y las pautas de futuras referencias.

Es necesario tener en cuenta una restricción de la política de reemplazo:


algunos de los marcos de la memoria principal pueden estar bloqueados; si es
así, la página cargada actualmente en ese marco no puede ser reemplazada.
En los marcos bloqueados se albergan: la mayoría del núcleo del S.O. y las
estructuras clave de control. El bloqueo se consigue asignando un bit de
bloqueo a cada marco, este bit puede guardarse en una tabla de marcos o
estar en la tabla de página actual.

Política de Vaciado.

Una política de vaciado es la contraria a una política de lectura: se preocupa de


determinar el momento en que hay que escribir en la memoria secundaria una
página modificada. Las dos alternativas son:

• El vaciado por demanda


• El vaciado previo.

115
Vaciado por demanda una página se escribirá en la memoria secundaria sólo
cuando haya sido elegida para reemplazarse. Una política de Vaciado previo
escribe las páginas modificadas antes de que se necesiten sus marcos, de
forma que las páginas pueden escribirse por lotes.

Existe un peligro si se sigue estrictamente cualquiera de las dos políticas.

Con el vaciado previo, una página se escribe pero permanece en la memoria


principal hasta que el algoritmo de reemplazo de página diga que se suprime.
El vaciado previo permite escribir las páginas por lotes, pero tiene poco sentido
escribir miles de páginas para encontrarse que la mayoría de ellas han sido
modificadas antes de ser reemplazadas. La capacidad de transferencia de la
memoria secundaria es limitada y no debe malgastarse con operaciones de
vaciado innecesarias.

Por otro lado, en el vaciado por demanda, la escritura de una página


modificada es anterior a la lectura de una nueva página. Esta técnica puede
minimizar las escrituras de páginas, pero hace que un proceso que sufra un
fallo de página pueda tener que esperar dos transferencias de página antes de
desbloquearse.

Una solución es incorporar almacenamiento intermedio de páginas, que


permite la adopción de la siguiente política: vaciar solo las páginas que es
posible reemplazar, pero desconectar las operaciones de vaciado y reemplazo.
Con almacenamiento intermedio de páginas reemplazadas pueden situarse en
dos listas: modificadas y no modificadas

Política de Protección

Consiste en evitar el acceso a posiciones de memoria sin el permiso expreso.


Si se tiene el esquema hardware del registro base, para lograr la protección de
las zonas de memoria basta con añadir un nuevo registro, denominado
registro límite. Este registro guarda la última dirección de la partición, y forma
también parte del PCB del proceso. El hardware, después de sumar el registro
base a la dirección relativa, comprueba que la dirección obtenida no supere el
valor del registro límite.

Si se supera el valor, se está intentando acceder a una zona que no


corresponde al proceso; en esta situación, el hardware genera una interrupción.
El sistema operativo sirve a la interrupción, lo normal es que mande una señal
al proceso por violación de memoria. Si el proceso no tiene definido atrapar esa
señal, lo cual es lo más probable, se eliminará al proceso.

116
Un objeto está protegido, cuando un proceso en particular no tiene permitido
leer, escribir ni ejecutar ese objeto, mientras que otros sí.

Cuando un proceso quiera ejecutar código del sistema operativo, por ejemplo,
para realizar una E/S, no tiene acceso directo a las rutinas que tiene el sistema
operativo en memoria para implementar dicha función, sino que debe realizar
una llamada al sistema para no violar la protección.

Este esquema es necesario, pues los programas de usuario tienen que avisar
al sistema operativo de que le solicitan servicios (al hacer una llamada al
sistema), el sistema operativo atenderá las peticiones si son correctas, o si
pueden ser factibles en dicho momento (por ejemplo, no se asignará una
impresora que está siendo utilizada por otro proceso). Los procesos de usuario
no pueden llamar directamente al sistema operativo gracias a la protección de
memoria.

Una última observación, al margen de la protección: cuando un proceso se


introduce en una partición, lo más probable es que su tamaño no sea el mismo
(es decir, sea algo menor) que el de la partición. Esto origina un problema de
desperdicio de memoria conocido como fragmentación interna.

La protección y compartimiento son dos objetivos importantes aunque


contradictorios para la administración de memoria, ya que si se tiene una
protección idealmente óptima a un programa sólo le debería ser permitido
acceder a sus propios objetos y no a otros.

Política de Compartición

Permite a procesos diferentes acceder a la misma porción de memoria.


Compartir implica la habilidad de acceder a un objeto que pertenece a otro
programa. La situación de compartir se presentaría cuando un programa puede
acceder a cualquier objeto de cualquier otro programa. Esto lleva a establecer
una relación de compromiso entre estos dos objetivos, compartir pero
efectuando un cierto control. Es decir, un programa puede permitir a otro el
acceso a algunos o todos sus objetos mientras que a otros, tiene prohibido el
mismo y además, si es permitida la entrada, se puede controlar el motivo del
acceso restringiéndolo (sólo lectura, sólo escritura, ejecución).

A continuación se da un ejemplo de las ventajas de compartir un programa


permitiendo el acceso a varios usuarios.

Supóngase que 20 usuarios usan un compilador que tiene 100 KB, de los
cuales 20 KB son para los datos, entonces serían necesarios 2 MB de
memoria. Si el código no se modifica a sí mismo, sólo es necesario tener

117
presente una copia en memoria, la cual es compartida por todos los usuarios.
La memoria necesaria se reduce ahora a 480 KB = 80 KB + 20 * 20 KB.

Cuando se comparte código, la tabla de traslación es la misma para todos los


usuarios, lo cual presenta una desventaja cuando un usuario quiere remover un
bloque compartido de la memoria. Las tablas de los otros usuarios deberían ser
revisadas para ver si ellas contienen ese bloque, de ser así la correspondiente
entrada puede ser invalidada. Este inconveniente se soluciona creando una
tabla única, compartida por todos los usuarios.

La desventaja pasa a ser el hecho que pasamos de una protección total a una
desprotección total. Por otro lado, cuando un programa tiene su propio espacio
de direccionamiento virtual y quiere compartir algún objeto también es un
inconveniente, ya que dependiendo de cual programa lo ha ejecutado serán las
direcciones donde se buscarán y almacenarán los datos. Una solución es tener
un espacio de direccionamiento virtual común para todos los programas,
entonces los datos de cada programa podrían usar la misma dirección virtual
de modo que es transparente respecto a cual de los procesos lo ejecuta.

Entre las políticas de asignación de memoria tenemos las siguientes:

• FIFO (First In First Out) Primera en entrar, primera en salir

Los procesos se despachan de acuerdo a su tiempo de llega a la cola de


procesos listos, si un proceso llega al procesador sale hasta que termine.
La política FIFO actualmente no se usa como el esquema principal de un
sistema, pero si por ejemplo cuando se usa una política de prioridades y hay
procesos con la misma prioridad, a estos se les podría aplicar FIFO.

• Round Robín (RR) Planificación Por Turno Circular

Los procesos se despachan en la forma que lo hace el FIFO, pero se les


asigna una cantidad limitada de tiempo (CUANTUM) en el procesador, si no
termina en ese lapso se manda al final de la lista de procesos listos.

118
SJF (Shortest Job First) Prioridad del trabajo más corto

Se ejecuta primero el proceso en espera que tiene el menor tiempo estimado.


SJF favorece a los procesos cortos, ya que los largos podrían llegar a
rezagarse mucho tiempo e incluso nunca ejecutarse.

SRT (Sortest remaining time scheduling) Tiempo restante más corto

En SJF una vez que un proceso comienza su ejecución continúa hasta


terminar. En SRT, un proceso en ejecución puede ser desposeído por uno
nuevo de menor tiempo de ejecución.

119
HRN (Highest response Ratio Next ) Prioridad de la tasa de respuesta
más alta

Política no apropiativa que corrige el retraso excesivo de procesos grandes que


produce el SJF, para así no caer en un favoritismo excesivo por los procesos
cortos, lo logra usando una formula basada en el tiempo de espera y el tiempo
de servicio, con lo cual la prioridad de cada trabajo no solo está en función del
tiempo de servicio sino también del tiempo que ha esperado para ser atendido.

Planificar La Porción Justa FSS (Fair Share Scheduling)

En el ambiente UNIX, se desarrollo para proporcionar un costo fijo una tasa


previamente especificada de los recursos del sistema a un conjunto de
usuarios relacionados entre sí.
UNIX aplica tasas parecidas de consumo de recursos a todos los procesos,
pero con FSS los recursos se reparten a varios grupos de porción justa. Figura
A

120
Los recursos no utilizados por un grupo de porción justa se distribuyen a otros
grupos en proporción a sus necesidades relativas. Figura B.

121
3.2._ MEMORIA REAL.

La memoria principal puede ser considerada como un arreglo lineal de


localidades de almacenamiento de un byte de tamaño. Cada localidad de
almacenamiento tiene asignada una dirección que la identifica.

Memoria interna del sistema informático, con direcciones accesibles por los
programas y que puede cargarse en los registros para su posterior ejecución o
procesamiento.

La memoria principal o primaria (MP), también llamada memoria central, es


una unidad dividida en celdas que se identifican mediante una dirección. Está
formada por bloques de circuitos integrados o chips capaces de almacenar,
retener o "memorizar" información digital, es decir, valores binarios; a dichos
bloques tiene acceso el microprocesador de la computadora.

La MP se comunica con el microprocesador de la CPU mediante el bus de


direcciones. El ancho de este bus determina la capacidad que posea el
microprocesador para el direccionamiento de direcciones en memoria.

En algunas oportunidades suele llamarse "memoria interna" a la MP, porque a


diferencia de los dispositivos de memoria secundaria, la MP no puede
extraerse tan fácilmente por usuarios no técnicos.

La MP es el núcleo del sub-sistema de


memoria de un computador, y posee una
menor capacidad de almacenamiento que la
memoria secundaria, pero una velocidad
millones de veces superior.

Lugar en el cual se almacenan datos e


instrucciones en una computadora antes y
durante su ejecución. Los términos
“memoria” y “almacenamiento” se
consideran equivalentes.

Los programas y datos deben estar en el


almacenamiento principal para:

122
 Poderlos ejecutar.
 Referenciarlos directamente.

Los hechos demuestran que generalmente los programas crecen en


requerimientos de memoria tan rápido como las memorias:

 “Ley de Parkinson parafraseada”: Los programas se desarrollan para ocupar


toda la memoria disponible para ellos.

El espacio de direccionamiento lógico queda definido por los registros base y


límite.

PROCESOS Y MEMORIA

Un proceso es un programa en ejecución. Un proceso necesita ciertos


recursos, incluyendo tiempo de CPU, memoria, archivos, y dispositivos de E/S,
para lograr su tarea.

• El sistema operativo es responsable de las siguientes actividades en la


administración de procesos:
– creación de procesos y borrado.
– suspensión de procesos y resumen.
– mecanismos de:

• sincronización de procesos
• comunicación entre procesos

123
 Para que un proceso se ejecute se requiere ubicarlo en memoria principal
junto con los datos que direcciona.
 Para optimizar el uso del computador se requiere tener varios procesos en
memoria principal. (grado de multiprogramación).

DIRECCIONAMIENTO LÓGICO VS. DIRECCIONAMIENTO FÍSICO

El concepto de direccionamiento lógico ligado a un espacio de


direccionamiento físico es central en la gestión de administración de memoria:

- Dirección lógica – generada por la CPU, también conocida como


dirección virtual

- Dirección física – dirección vista desde la unidad de administración de


memoria

Direcciones lógicas y físicas son las mismas


en tiempo de compilación y de carga, y
solamente difieren en tiempo de ejecución.

Pasos en la ejecución

de un programa de usuario

124
UNIDAD DE ADMINISTRACIÓN DE MEMORIA (MMU

Dispositivo de Hardware que convierte

direcciones virtuales a físicas

 En la MMU, el valor del registro de relocalización se suma a todas las


direcciones de memoria generadas por el usuario en tiempo de
ejecución.

El programa de usuario ve solamente direcciones lógicas, y no conoce


direcciones físicas
CARGA DINÁMICA

- La rutina no se carga sino hasta que es invocada.


- Hay mejor aprovechamiento del espacio en memoria; una rutina no usada no
utiliza espacio.
- Útil cuando código extenso se utiliza muy infrecuentemente.
- No se requiere de un soporte especial del SO; puede ser implementado a
través del diseño del programa.

Relocalización Dinámica

vía Registro

LIGADO DINÁMICO

- El ligado se pospone para el tiempo de ejecución del proceso


- Se requiere de un pequeño código para localizar la rutina residente en
memoria
- Este código se modifica a si mismo, de tal manera de poder invocar y
ejecutar la rutina
- El SO requiere comprobar si la rutina se encuentra en el espacio de memoria
del proceso
- El ligado dinámico es muy útil para bibliotecas de
sistema, también conocidas como bibliotecas
compartidas (shared libraries).

MEMORIA VIRTUAL

125
 La memoria principal es pequeña como para acomodar todos programas y
datos permanentemente.

 Por lo que es necesario implementar mecanismos de memoria virtual.

 La memoria virtual es una técnica para dar la ilusión de tener más memoria
que la memoria principal

ADMINISTRADOR DE
MEMORIA

La parte del sistema


operativo que administra la
memoria se llama
administrador de memoria
y su labor consiste en llevar
un registro de las partes de
memoria que se estén
utilizando y aquellas que no, con el fin de asignar espacio en memoria a los
procesos cuando éstos la necesiten y liberándola cuando terminen, así como
administrar el intercambio entre la memoria principal y el disco en los casos en
los que la memoria principal no le pueda dar capacidad a todos los procesos
que tienen necesidad de ella.

Los sistemas de administración de memoria se pueden clasificar en dos tipos:


los que desplazan los procesos de la memoria principal al disco y viceversa
durante la ejecución y los que no.

La administración de memoria se refiere a los distintos métodos y operaciones


que se encargan de obtener la máxima utilidad de la memoria, organizando los
procesos y programas que se ejecutan de manera tal que se aproveche de la
mejor manera posible el espacio disponible.

Para poder lograrlo, la operación principal que realiza es la de trasladar la


información que deberá ser ejecutada por el procesador, a la memoria
principal. Actualmente esta administración se conoce como Memoria Virtual ya
que no es la memoria física del procesador sino una memoria virtual que la
representa. Entre algunas ventajas, esta memoria permite que el sistema
cuente con una memoria más extensa teniendo la misma memoria real, con lo
que esta se puede utilizar de manera más eficiente. Y por supuesto, que los
programas que son utilizados no ocupen lugar innecesario.

126
Entre las principales operaciones que desarrolla la administración de
memoria se encuentran:

 La reubicación, que consiste en trasladar procesos activos dentro y fuera


de la memoria principal para maximizar la utilización del procesador;

 La protección, mecanismos que protegen los procesos que se ejecutan


de interferencias de otros procesos.

 uso compartido de códigos y datos, con lo que el mecanismo de


protección permite que ciertos procesos de un mismo programa que
comparten una tarea tengan memoria en común.

Administrador de Memoria

El administrador de memoria tiene como objetivos:

 Ubicar, reemplazar, cargar y descargar procesos en la memoria


principal.
 Proteger la memoria de acceso indeseados (accidentales o
intencionados).
 Permitir la compartición de zonas de memoria (indispensable para lograr
la cooperación de procesos).
 Llevar un registro de las partes de memoria que se están utilizando y de
aquellas que no se están utilizando.
 Asignar espacio en memoria a los procesos cuando estos los requieran
 Liberar espacio de memoria asignada a procesos que han terminado.

127
Se distinguen los siguientes propósitos del sistema de administración de
memoria:

· Protección.

Si varios programas comparten la memoria principal, se debería asegurar que


el programa no sea capaz de cambiar las ubicaciones no pertenecientes a él.
Aunque una acción de escritura puede tener efectos más graves que una de
lectura, esta última tampoco debería estar permitida, para proporcionar algo de
privacidad al programa. Dado que muchos lenguajes permiten el uso de
punteros dinámicos y arreglos, la verificación sólo en tiempo de compilación no
es suficiente, por lo que además se debe efectuar una verificación en tiempo de
ejecución.

· Compartimiento.

Este objetivo parece contradecir al anterior, sin embargo a veces es necesario


para los usuarios poder compartir y actualizar información (por ejemplo, en una
base de datos) y, si se organiza la tarea de entrada a la misma, se puede evitar
el tener varias copias de la rutina. Por supuesto que debe existir una protección
contra cambios de esta rutina, permitiendo así el control del acceso a una
porción compartida de memoria.

· Reubicación.

La técnica de multiprogramación requiere que varios programas ocupen la


memoria al mismo tiempo. Sin embargo no se sabe con anticipación donde
será cargado cada programa por lo que no es práctico usar direccionamiento
absoluto de memoria.

· Organización física.

Debido al costo de una memoria principal rápida, ésta se usa en conjunto con
una memoria secundaria mucho más lenta (y por consiguiente, barata) a fines
de extender su capacidad, por ejemplo los dispositivos de almacenamiento
magnéticos tales como los discos rígidos. Esta clasificación de la memoria
hace necesario el control del flujo de la información entre esas dos clases de
memoria.

Éste control podrían realizarlo los programadores, lo que incrementaría el


tiempo de desarrollo de una aplicación y se tendrían que resolver problemas
muy complejos como saber de antemano donde y con cuanta memoria se
dispone, información que no siempre posee el programador dada la reubicación

128
dinámica. Por ello es más conveniente que esta tarea la realice el sistema, de
manera transparente al usuario.

· Organización lógica.

Aunque la mayor parte de las memorias son organizadas linealmente con un


direccionamiento secuencial, esto difícilmente concuerde con el camino
seguido por el programa, debido al uso de procedimientos, funciones,
subrutinas, arreglos, etc. Si la administración se hace a través de varias
direcciones, cada estructura lógica podría considerarse una entidad
independiente (segmento). Las ventajas serían que cada uno de los segmentos
podrían ser cargados y compilados independientemente y se tendría acceso
directo a cada uno de ellos.

3.2.1 ADMINISTRACIÓN DE ALMACENAMIENTO.

Históricamente el almacenamiento principal se ha considerado como un


recurso costoso, por lo cual su utilización debe optimizarse.

Por organización del almacenamiento se entiende la manera de considerar este


almacenamiento:

Independientemente del esquema de organización hay que decidir las


estrategias que se utilizarán para optimizar el rendimiento.

 ¿Se coloca un solo programa de usuario o varios?

 ¿Cuándo se consigue un nuevo programa para colocar en la memoria?:

 ¿Cuando el sistema lo pide específicamente o se intenta anticiparse a las


peticiones?

 ¿Dónde se colocará el programa que se ejecutará a continuación?:

 ¿Se prioriza el tiempo de carga o la optimización en el uso del


almacenamiento?

 ¿Con qué criterio se desplazarán programas?

Si se encuentran varios programas de usuario:

129
 ¿Se concede a cada uno la misma cantidad de espacio o se divide el
almacenamiento en porciones o “particiones” de diferente tamaño?

 ¿Se utilizará un esquema rígido de número y tamaño de particiones o un


esquema dinámico y adaptable?

 ¿Se requerirá que los trabajos de los usuarios sean diseñados para
funcionar en una partición específica o se permitirá que se ejecuten en
cualquiera donde quepan?

 ¿Se requerirá o no que cada trabajo sea colocado en un bloque contiguo


de memoria?

3.2.2._ JERARQUÍA.

Se conoce como jerarquía de memoria a la organización piramidal de la


memoria en niveles, que tienen los ordenadores. Su objetivo es conseguir el
rendimiento de una memoria de gran velocidad al coste de una memoria de
baja velocidad, basándose en el principio de cercanía de referencias.

Los puntos básicos relacionados con la memoria pueden resumirse en:

• Cantidad
• Velocidad
• Coste

La cuestión de la cantidad es simple, cuanto más memoria haya disponible,


más podrá utilizarse. La velocidad óptima para la memoria es la velocidad a la
que el procesador puede trabajar, de modo que no haya tiempos de espera
entre cálculo y cálculo, utilizados para traer operandos o guardar resultados. En
suma, el costo de la memoria no debe ser excesivo, para que sea factible
construir un equipo accesible.

Como puede esperarse los tres factores compiten entre sí, por lo que hay que
encontrar un equilibrio. Las siguientes afirmaciones son válidas:

• A menor tiempo de acceso mayor coste


• A mayor capacidad mayor coste
• A mayor capacidad menor velocidad.

130
Se busca entonces contar con capacidad suficiente de memoria, con una
velocidad que sirva para satisfacer la demanda de rendimiento y con un coste
que no sea excesivo. Gracias a un principio llamado cercanía de referencias,
es factible utilizar una mezcla de los distintos tipos y lograr un rendimiento
cercano al de la memoria más rápida.

Los niveles que componen la jerarquía de memoria habitualmente son:

• Nivel 0: Registros
• Nivel 1: Memoria caché
• Nivel 2: Memoria principal
• Nivel 3: Disco duro (con el mecanismo de memoria virtual)
• Nivel 4: Redes (Actualmente se considera un nivel más de la
jerarquía de memorias)

Los programas y datos tienen que estar en la memoria principal para poder
ejecutarse o ser referenciados

– Por lo cual los programas y datos que no son necesarios de inmediato


pueden mantenerse en el almacenamiento secundario.
– El almacenamiento principal es más costoso y menor que el
almacenamiento secundario, pero de acceso más rápido.
– Los sistemas con varios niveles de almacenamiento requieren destinar
recursos para administrar el movimiento de programas y datos entre los
diversos niveles.

131
Cache

Un nivel adicional es el “caché” o memoria de alta velocidad, que posee las


siguientes características:

 Es más rápida y costosa que la memoria principal.


 Impone al sistema un nivel más de traspaso:

 Los programas son trasladados de la memoria principal a la memoria


caché antes de su ejecución.
 Los programas en la memoria caché se ejecutan mucho más rápido que
en la memoria principal.
 Al utilizar memoria caché se espera que:

 La sobrecarga que supone el traspaso de programas de un nivel de


memoria a otro sea mucho menor que la mejora en el rendimiento
obtenida por la posibilidad de una ejecución mucho más rápida en la
memoria caché.

132
Gestión de memoria

Los lenguajes de programación actuales generalmente asumen la existencia de


únicamente dos niveles de memoria, memoria principal y almacenamiento
secundario (normalmente en disco). Aunque en lenguaje ensamblador,
ensamblador en línea y lenguajes como C podemos direccionar directamente
los registros del procesador. Para aprovechar de forma óptima las ventajas de
la jerarquía de memoria es necesario cooperación entre programadores,
compiladores y fabricantes de hardware:

 Programadores deben ser responsables del movimiento entre memoria


principal y disco mediante el uso de ficheros.
 Hardware el movimiento de datos entre la memoria principal y los
niveles de caché es realizado por algoritmos hardware.
 Compiladores son responsables de optimizar el código de modo que el
uso de los registros y la caché sea eficiente.

133
3.2.3._ ESTRATEGIA DE ADMINISTRACIÓN DE MEMORIA.

Están dirigidas a la obtención del mejor uso del recurso memoria principal,
estas pueden ser:

1.- Estrategia de solicitud (búsqueda)

Las “estrategias de búsqueda” están relacionadas con el hecho de cuándo


obtener el siguiente fragmento de programa o de datos para su inserción en la
memoria principal.

(Cuando obtener un fragmento de programa)

• Estrategias de búsqueda por demanda.


• Estrategias de búsqueda anticipada.

En la “búsqueda por demanda” el siguiente fragmento de programa o de datos


se carga al almacenamiento principal cuando algún programa en ejecución lo
referencia.

Se considera que la “búsqueda anticipada” puede producir un mejor


rendimiento del sistema.

2.- Estrategia de ubicación.

(Donde se colocará (cargar) un fragmento de programa nuevo)

Las “estrategias de colocación” están relacionadas con la determinación del


lugar de la memoria donde se colocará (cargará) un programa nuevo.

3.- Estrategia de reposición.

(Qué fragmento de programa descarga, para cargar uno nuevo)

Las “estrategias de reposición” están relacionadas con la determinación de qué


fragmento de programa o de datos desplazar para dar lugar a los programas
nuevos.

Mecanismos de Asignación.
Un mecanismo de asignación determina la cantidad de bloques (particiones)
que serán administrados en la memoria

134
3.2.4._ ASIGNACIÓN CONTIGUA V.S. NO CONTIGUA.

La memoria principal debe dar cabida tanto al sistema operativo como a los
diversos procesos de usuario. Generalmente, la memoria se divide en dos
particiones, una para el sistema operativo residente y otra para los procesos de
usuario. Es posible colocar el sistema operativo en memoria alta o baja. El
factor principal que afecta esta decisión es la ubicación del vector de
interrupciones.

Puesto que dicho vector suele estar en la memoria baja, es más común colocar
el sistema operativo en esa misma Área. Por ello, solo examinaremos la
situación en la que el sistema operativo reside en memoria baja como se
muestra en la siguiente figura.

512 k

Partición de memoria

El tratamiento de la otra situación es similar. Vechar el espacio para otros fines.


El código de este tipo se denomina código transitorio del sistema operativo, ya
que viene y va según se necesita.

El ejemplo de tal código modifica el tamaño del sistema operativo durante la


ejecución de los programas.

Asignación continúa Con Múltiples Particiones

Dado que, en general, es deseable que varios procesos de usuario residan en


la memoria el mismo tiempo, necesitamos considerar el problema de cómo

135
repartir la memoria disponible entre los diversos procesos que están en la cola
de entrada esperando ser transferidos a la memoria. Uno de los esquemas de
asignación de memoria más sencillos consiste en dividir la memoria en varias
particiones de tamaño fijo.

Cada partición puede contener exactamente un proceso, y el grado de


multiprogramación está limitado por el número de particiones. Si una partición
está desocupada, se escoge un proceso de la cola de entrada y se carga en
esa partición. Cuando el proceso termina, la partición queda disponible para
otro proceso.

El sistema operativo mantiene una tabla que indica cuales partes de la


memoria están disponibles y cuales están ocupadas. Inicialmente, toda la
memoria está disponible para los procesos de usuario, y se considera como un
bloque grande de memoria disponible, o hueco.

Cuando un proceso llega y necesita memoria, buscamos un hueco con el


tamaño suficiente para ese proceso; si lo hayamos, asignamos solo la memoria
que se necesita y el resto se deja disponible para satisfacer solicitudes futuras.

Asignación de memoria no contigua.

Hasta ahora se han estudiado esquemas de administración de la memoria en


los que los procesos se almacenan en posiciones contiguas (consecutivas) de
memoria. Sin embargo, un proceso puede dividirse en bloques, y estos bloques
pueden situarse en posiciones no contiguas de memoria principal.

Es más, no es preciso que se encuentren en la memoria todos los bloques de


un proceso para que se pueda ejecutar, basta con que se encuentren los
bloques que contienen código o datos actualmente referenciados, el resto
puede permanecer en memoria secundaria.

La memoria virtual

136
La clave del concepto de memoria virtual es la disociación de las direcciones a
las que hace referencia un proceso en ejecución de las direcciones disponibles
en la memoria principal.

Las direcciones a las que hace referencia un proceso en ejecución, en este


esquema, se llaman direcciones virtuales. El intervalo de direcciones virtuales a
las que puede hacer referencia un proceso en ejecución se llama espacio de
direcciones virtuales, V, del proceso. El intervalo de direcciones reales de la
memoria principal de un ordenador concreto se llama espacio de direcciones
reales, R. El número de direcciones de V se denota |V|, y el número de
direcciones de R, |R|. En los sistemas de almacenamiento virtual ya
implantados lo normal es que |V| >> |R|, aunque se han construido sistemas en
los que |V| < |R|.

La memoria virtual es una técnica de gestión de la memoria que posibilita que


el espacio de direcciones virtuales sea mayor al espacio de direcciones reales.
En otras palabras, se permite hacer programas de tamaño mayor al de la
memoria principal. Para lograr esto, el sistema operativo se encarga de
mantener en la memoria principal solamente aquellas partes del espacio de
direcciones del proceso que actualmente están siendo referenciadas, el resto
permanece en disco.

La memoria virtual se basa en el hecho de que muchos programas presentan


un comportamiento conocido como operación en contexto, según el cual, en
cualquier intervalo pequeño de tiempo un programa tiende a operar dentro de
un módulo lógico en particular, sacando sus instrucciones de una sóla rutina y
sus datos de una sóla zona de datos. De esta forma, las referencias de
memoria de los programas tienden a agruparse en pequeñas zonas del espacio
de direcciones.

La localidad de estas referencias viene reforzada por la frecuente existencia de


bucles: cuanto más pequeño sea el bucle, menor será la dispersión de las
referencias. La observación de este comportamiento conduce al postulado
(Denning, 1970) del llamado principio de localidad: "Las referencias de un

137
programa tienden a agruparse en pequeñas zonas del espacio de direcciones.
Estas zonas, además, tienden a cambiar sólo de forma intermitente".

La validez del principio de localidad varía de programa en programa: será, por


ejemplo, más válido en programas que lleven a cabo accesos secuenciales a
vectores que en programas que accedan a estructuras complejas de datos.

La memoria virtual se compagina con la multiprogramación. Al no tener que


almacenar los procesos enteros en la memoria, pueden entrar más en la
memoria principal, con lo que es más probable que siempre exista un proceso
en estado listo. Por otro lado, cuando un proceso espera a que se cargue en la
memoria principal parte de su código o datos, se inicia una E/S con el disco.
Mientras dura dicha E/S la CPU puede ejecutar otro proceso.

Aunque los procesos sólo hacen referencia a direcciones virtuales, deben


ejecutarse en la memoria real. Por lo tanto, durante la ejecución de un proceso
es preciso establecer la correspondencia entre las direcciones virtuales y las
reales. Como se verá más adelante esta correspondencia debe realizarse de
una manera rápida, pues si no, se ralentizaría demasiado el tiempo de
ejecución de los procesos.

Se han desarrollado varios métodos para asociar las direcciones virtuales con
las reales. Los mecanismos de traducción dinámica de direcciones convierten
la direcciones virtuales en direcciones reales en tiempo de ejecución. Todos
estos sistemas tienen la propiedad de que las direcciones contiguas en el
espacio de direcciones virtuales de un proceso no son necesariamente
contiguas en la memoria principal.

Esto se conoce como contigüidad artificial (fig. 6.8). Debe quedar claro que
toda esta correspondencia es transparente al programador, que escribe sus
programas en términos de direcciones consecutivas de memoria virtual.

138
3.2.5._MULTIPROGRAMACION DE PARICION FIJA, PARTICIÓN
VARIABLE, CON INTERCAMBIO DE ALMACENAMIENTO.

Para poder implementar la multiprogramación, se puede hacer uso de


particiones fijas o variables en la memoria. En el caso de las particiones fijas, la
memoria se puede organizar dividiéndose en diversas partes, las cuales
pueden variar en tamaño. Esta partición la puede hacer el usuario en forma
manual, al iniciar una sesión con la máquina.

Una vez implementada la partición, hay dos maneras de asignar los procesos a
ella. La primera es mediante el uso de una cola única que asigna los procesos
a los espacios disponibles de la memoria conforme se vayan desocupando. El
tamaño del hueco de memoria disponible es usado para localizar en la cola el
primer proceso que quepa en él.

Otra forma de asignación es buscar en la cola el proceso de tamaño mayor que


se ajuste al hueco, sin embargo hay que tomar en cuenta que tal método
discrimina a los procesos más pequeños.

El objetivo en todo esto es tener más de un proceso en memoria a la vez, una


solución posible sería dividir la memoria en partes al inicio de una sesión de
uso de la máquina, pero aún así se obtiene el desperdicio de particiones
grandes con una tarea pequeña, entonces la respuesta puede ser tener
particiones pequeñas también.

Las tareas que van llegando se forman hasta que una partición adecuada está
disponible, en cuyo momento la tarea se carga en esa partición y se ejecuta
hasta terminar.

La memoria se divide en particiones de tamaño fijo (puede ser distinto el


tamaño de cada partición).

Con esta estructura de administración de memoria se desperdicia memoria y


tiempo de CPU (si hay un programa corriendo los demás quedan encolados
aunque haya otra partición libre).

139
Particiones Fijas Con Una Cola De Entrada Independiente

Como se habrán dado cuenta de la utilidad de tener mas de un proceso en la


memoria a la vez la pregunta es entonces ¿como debe organizarse la memoria
para poder lograr esto? la forma mas sencilla es dividir la memoria en n partes
(que podrían ser de tamaños distintos) esta partición puede hacerla el operador
en forma manual, al iniciar una sección con la maquina.

Cuando llega un trabajo se le puede colocar en la cola de entrada de la parte


de tamaño mas pequeño de forma que lo pueda contener. Puesto que las
particiones están fijas en este esquema, cualquier espacio que no sea utilizado
por una tarea se pierde.

la desventaja del ordenamiento de las tareas que llegan a la memoria en las


colas independientes es evidente cuando la cola de una partición grande esta
vacía pero la cola de una partición pequeña esta completamente ocupada.

140
Particiones Fijas Con Una Cola de espera

Otro tipo de organización en la multiprogramación de particiones fijas es el que


mantiene una sola cola, cada vez que se libere una partición, se podrá cargar y
ejecutar en ella la tarea mas cercana al frente de la cola que se ajuste a dicha
partición. Puesto que no es deseable que se desperdicie una partición de gran
tamaño con una tarea pequeña.

Otra estrategia consiste en buscar en toda la cola de entrada el trabajo más


grande que se ajuste a la partición recién liberada. Obsérvese que este ultimo
algoritmo discrimina a las tareas pequeñas, negándoles la importancia
suficiente como para disponer de toda una partición, mientras que lo mas
recomendable es que se les de a las tareas pequeñas (que podrían ser tareas
interactivas) el mejor servicio y no el peor.

Una forma de salir del problema es tener siempre una pequeña partición por
ahí, tal partición permitirá la ejecución de las tareas pequeñas sin tener que
asignarles una partición de gran tamaño.

Otro punto de vista es obedecer como regla que un trabajo elegible para su
ejecución no sea excluido más de k veces. Cada vez que se excluya obtiene un
punto cuando adquiera k puntos ya no podrá ser excluido de nuevo.

El sistema es fácil de comprender y de implantar las tareas que van llegando se


forman hasta que una partición adecuada esta disponible en cuyo momento la
tarea se carga en esa partición y se ejecuta hasta terminar.

141
Nunca hay que olvidar que es posible que varios procesos de usuario residan
en la memoria al mismo tiempo, es decir, ejecutarse varios programas o
aplicaciones. Por lo tanto, necesitamos considerar el problema de cómo
repartir la memoria disponible entre los diversos procesos que están en cola de
entrada esperando ser transferidos a la memoria.

Uno de los esquemas de asignación de memoria mas sencillos consiste


en dividir la memoria en varias particiones de tamaño fijo. Cada partición debe
contener exactamente un proceso, y el grado de multiprogramación esta
limitado por el numero de particiones.

El esquema que aquí describiremos, es una generalización del esquema de


particiones fijas llamado (MVT) y se emplea primordialmente en los entornos
por lotes. Cabe señalar, que muchas de las ideas que se presentan aquí,
también son aplicables a un entorno de tiempo compartido en el que se emplea
segmentación pura para determinar la memoria.

El sistema operativo mantiene una tabla que indica cuales partes de la


memoria están disponibles para los procesos de usuarios, y se considera como
un bloque grande de memoria disponible, o tambien llamado HUECO.

Cuando un proceso llega y necesita memoria, este busca un hueco con


el tamaño suficiente para ese proceso; si se halla, se le asigna solo la memoria
que necesita, y el resto se deja disponible para así darle memoria a los demás
procesos futuros.

Supongamos que tenemos 2560k de memoria disponible y un sistema


operativo reside de 400k. Esta situación ocupa lo ya establecido y deja 2160k
para los procesos de usuario. Como se muestra en esta figura.

142
143
INTERCAMBIO

144
El objetivo del intercambio es dar cabida a la ejecución de mas aplicaciones de
las que pueden residir simultáneamente en la memoria del sistema:
Consiste en trasladar el código y los datos de un proceso completo de memoria
al sistema de almacenamiento secundario , para cargar otro previamente
almacenado, no permite a un proceso utilizar mas memoria RAM de la que
realmente existe en el sistema. Esta técnica puede ser ineficiente ya que se
tiene que hacer el intercambio completo del proceso, aunque éste solo vaya a
ejecutar una pequeña porción del código.
Durante el intercambio un proceso puede ser sacado temporalmente de
memoria y llevado a un lugar especial del disco y posteriormente vuelto a
memoria y continuada su ejecución..
El lugar de almacenamiento temporal suele ser un espacio suficientemente
grande como para acomodar copias de las imágenes de meoria de todos los
usuarios.

MULTIPROGRAMACION DE PARTICIONES VARIABLES

Multiprogramación?

Es una técnica que permite que dos o más procesos ocupen la misma unidad
de memoria principal y que sean ejecutados al "mismo tiempo" (pseudo-
paralelismo, en una única CPU sólo puede haber un proceso a la vez) en la
unidad central de proceso o CPU.

VENTAJAS:

 Ejecuta varios procesos.


 Permite el servicio interactivo simultáneo a varios usuarios de manera
eficiente.
 Aprovecha los tiempos que los procesos pasan esperando a que se
completen sus operaciones de E/S
 Aumenta el uso de la CPU.
 Las direcciones de los procesos son relativas, (el programador no se
preocupa por saber en dónde estará el proceso dado que el sistema
operativo es el que se encarga de convertir la dirección lógica en física).

Un proceso entra a ejecutarse y llega al momento en que tiene que hacer


espera por un dispositivo de entrada y/o salida por ejemplo, el CPU estará
ocioso mientras espera que el proceso pueda usar el dispositivo para así
finalmente ejecutarse. Los sistemas de multiprogramación evitan eso ya que
durante ese tiempo de esperar pasan a ejecutar otro proceso teniendo así al
computador ocupado.

145
Partición variable
Este método consiste en las particiones de memoria de tamaños, esto quiere
decir, que cada proceso se le asigna la cantidad de memoria que necesita.
Pasando el tiempo, la memoria comienza a estar más fragmentada y su
rendimiento decae; este fenómeno se denomina fragmentación externa.
FRAGMENTACION EXTERNA: Es la compactación del sistema operativo que
desplaza los procesos para que estén contiguos de forma que toda la memoria
libre quede junta en un bloque.

Este método consiste en particiones de memoria de tamaños variable, o sea, a


cada proceso se le asigna la cantidad de memoria que necesita (la cantidad
exacta y ni un poco más). Tras el ingreso de nuevos procesos y la expulsión de
otras, se generarán huecos de memoria inutilizados. Conforme pasa el tiempo,
la memoria comienza a estar más fragmentada y su rendimiento decae; este
fenómeno se denomina fragmentación externa.

Una técnica para superar la fragmentación externa es la compactación. De vez


en cuando, el sistema operativo desplaza los procesos para que estén
contiguos de forma que toda la memoria libre quede junta en un bloque.

MULTIPROGRAMACION DE PARTICIONES VARIABLES

• Las particiones son variables en número y longitud

• Inicialmente la memoria sólo contiene el sistema operativo

• A cada proceso se le asigna la memoria que necesita exactamente

• Estructuras de datos para gestionar la memoria

– Mapa de bits

• División de memoria en pequeñas unidades libres u


ocupadas

– Lista de procesos y huecos

• Lista única

• Lista de procesos y lista de huecos

– Sistema de los asociados (Knuth 1973)

• División de memoria en bloques potencia de 2

• Se compactan 2 bloques adyacentes del mismo tamaño


146
• Agiliza la fusión de huecos

• Algoritmos de asignación de particiones

– Primer ajuste, Mejor ajuste y Peor ajuste

• Qué hacer si no hay particiones libres

– Esperar a la finalización de algún proceso

_ Intercambio

• Condensación de huecos

– Unión de huecos adyacentes al liberar un proceso

• Compactación

– Movimiento de procesos en la memoria para unir huecos


dispersos y crear huecos de mayor tamaño

 Fragmentación externa

147
 Fragmentación interna, sólo si existe limitación en el tamaño mínimo de
las particiones.

Memoria se divide en bloques de diferentes tamaños de acuerdo a las


necesidades del proceso.

VENTAJAS:

 Define bloques del tamaño requerido termina con la fragmentación


interna, permite un mejor uso de la memoria.

 Estrategia para la asignación de memoria.

PRIMER AJUSTE (FRIST FIT):

Se asigna el primer espacio que sea mayor el tamaño deseado.

MEJOR AJUSTE (BEST FIT):

Se asigna el espacio cuyo tamaño exceda en la menor cantidad al tamaño


deseado.

 Requiere de una búsqueda exhaustiva.

 Mayor fragmentación externa.

 Tiende a llenar con trozos de memorias pequeñas.

PEOR AJUSTE (WORST FIT):

 Se asigna un espacio de memoria cuyo tamaño exceda en el menor del


tamaño deseado.

 Requerimiento de una búsqueda exhaustiva.

 Genera la mayor fragmentación interna.

 Multiprogramación con particiones variables.

COMPACTACION DE MEMORIA:

Es una función de bloques adyacentes para formar un solo bloque más grande.

148
3.3. ORGANIZACIÓN DE MEMORIA VIRTUAL
La memoria virtual es una técnica para proporcionar la simulación de un
espacio de memoria mucho mayor que la memoria física de una máquina. Esta
"ilusión" permite que los programas se hagan sin tener en cuenta el tamaño
exacto de la memoria física.

La ilusión de la memoria virtual está soportada por el mecanismo de traducción


de memoria, junto con una gran cantidad de almacenamiento rápido en disco
duro. Así en cualquier momento el espacio de direcciones virtual hace un
seguimiento de tal forma que una pequeña parte de él, está en memoria real y
el resto almacenado en el disco, y puede ser referenciado fácilmente.

Debido a que sólo la parte de memoria virtual que está almacenada en la


memoria principal, es accesible a la CPU, según un programa va ejecutándose,
la proximidad de referencias a memoria cambia, necesitando que algunas
partes de la memoria virtual se traigan a la memoria principal desde el disco,
mientras que otras ya ejecutadas, se pueden volver a depositar en el disco
(archivos de paginación).

La memoria virtual ha llegado a ser un componente esencial de la mayoría de


los S.O actuales. Y como en un instante dado, en la memoria sólo se tienen
unos pocos fragmentos de un proceso dado, se pueden mantener más procesos
en la memoria. Es más, se ahorra tiempo, porque los fragmentos que no se
usan no se cargan ni se descargan de la memoria. Sin embargo, el S.O debe
saber cómo gestionar este esquema.

La memoria virtual también simplifica la carga del programa para su ejecución


llamado reubicación, este procedimiento permite que el mismo programa se
ejecute en cualquier posición de la memoria física.

En un estado estable, prácticamente toda la memoria principal estará ocupada


con fragmentos de procesos, por lo que el procesador y el S.O tendrán acceso
directo a la mayor cantidad de procesos posibles, y cuando el S.O traiga a la
memoria un fragmento, deberá expulsar otro. Si expulsa un fragmento justo
antes de ser usado, tendrá que traer de nuevo el fragmento de manera casi
inmediata. Demasiados intercambios de fragmentos conducen a lo que se
conoce como hiperpaginación: donde el procesador consume más tiempo
intercambiando fragmentos que ejecutando instrucciones de usuario. Para
evitarlo el S.O intenta adivinar, en función de la historia reciente, qué fragmentos
se usarán con menor probabilidad en un futuro próximo.

149
Los argumentos se basan en el principio de cercanía o principio de localidad
que afirma que las referencias a los datos y el programa dentro de un proceso
tienden a agruparse. Por lo tanto, es válida la suposición de que, durante cortos
períodos de tiempo, se necesitarán sólo unos pocos fragmentos de un proceso.

Una manera de confirmar el principio de cercanía es considerar el rendimiento


de un proceso en un entorno de memoria virtual.

El principio de cercanía sugiere que los esquemas de memoria virtual pueden


funcionar. Para que la memoria virtual sea práctica y efectiva, se necesitan dos
ingredientes. Primero, tiene que existir un soporte de hardware y, en segundo
lugar, el S.O debe incluir un software para gestionar el movimiento de páginas o
segmentos entre memoria secundaria y memoria principal.

Justo después de obtener la dirección física y antes de consultar el dato en


memoria principal se busca en memoria-cache, si está entre los datos
recientemente usados la búsqueda tendrá éxito, pero si falla, la memoria virtual
consulta memoria principal, ó, en el peor de los casos se consulta de disco
(swapping).

La memoria virtual usualmente (pero no necesariamente) es implementada


usando paginación. En paginación, los bits menos significativos de la dirección
de memoria virtual son preservados y usados directamente como los bits de
orden menos significativos de la dirección de memoria física. Los bits más
significativos son usados como una clave en una o más tablas de traducción de
direcciones (llamadas tablas de paginación), para encontrar la parte restante de
la dirección física buscada.

Cómo la memoria virtual se mapea a la memoria física

150
La clave del concepto de memoria (almacenamiento) virtual está en la
disociación:

 De las direcciones a las que hace referencia un programa.


 De las direcciones disponibles en la memoria real (almacenamiento
primario).

Los principales conceptos son los siguientes:

 “Direcciones virtuales”:
o Son las referidas por un proceso en ejecución.
 “Direcciones reales”:
o Son las disponibles dentro del almacenamiento primario.
 “Espacio de direcciones virtuales (v)” de un proceso:
o Es el número de direcciones virtuales a que puede hacer
referencia el proceso.
 “Espacio de direcciones reales (r)” de un computador:
o Es el número de direcciones reales disponibles en el ordenador.

Los procesos hacen referencia a direcciones virtuales pero éstas deben


ejecutarse en el almacenamiento real:

 Las direcciones virtuales deben ser transformadas dentro de las


direcciones reales, mientras el proceso está en ejecución.
 La traducción de direcciones deberá hacerse rápidamente para no
degradar al sistema.

151
Existen varios medios para asociar las direcciones virtuales con las reales
(Figura 3.13).

Los mecanismos de “traducción dinámica de direcciones” (dat) convierten las


direcciones virtuales en reales al ejecutarse el proceso.

Las direcciones contiguas dentro del espacio de direcciones virtuales de un


proceso no tienen por qué ser contiguas dentro del almacenamiento real, a esto
se denomina “contigüidad artificial” (Figura 3.14)

152
Organización del Almacenamiento de Niveles Múltiples

Se deben proporcionar los medios para retener programas y datos en un gran


almacenamiento auxiliar para:

 Permitir que el espacio de direcciones virtuales de un usuario sea mayor


que el espacio de direcciones reales.
 Soportar multiprogramación de forma efectiva en un sistema con
muchos usuarios que compartan el almacenamiento real.

Se utiliza un esquema de almacenamiento de dos niveles (Figura 3.15):

 Primer nivel: “almacenamiento real ”:


o En él se ejecutan los procesos y en él deben estar los datos para
que un proceso pueda referirse a ellos.

153
 Segundo nivel: “almacenamiento auxiliar, secundario o adicional ”:
o Generalmente consta de discos de gran capacidad que pueden
mantener los programas y datos que no caben al mismo tiempo
en el más limitado almacenamiento real.

Cuando se va a ejecutar un proceso su código y datos se pasan al


almacenamiento principal.

El almacenamiento real es compartido por varios procesos:

 Cada proceso puede tener un espacio de direcciones virtuales mucho


mayor que el almacenamiento real.
 Solo se mantiene al mismo tiempo una pequeña parte de los programas
y datos de cada proceso en el almacenamiento real.

154
3.3.1. EVALUACIÓN DE LAS ORGANIZACIONES DE
ALMACENAMIENTO
Las direcciones generadas por los programas en su ejecución no son,
necesariamente, aquellas contenidas en el almacenamiento primario (memoria
real), ya que las direcciones virtuales suelen seleccionarse dentro de un
número mucho mayor de direcciones que las disponibles dentro del
almacenamiento primario.

La evolución en las organizaciones de almacenamiento puede resumirse


como sigue:

 Real:
o Sistemas dedicados a un solo usuario.
 Real:
o Sistemas de multiprogramación en memoria real:
 Multiprogramación en partición fija:
 Absoluta.
 Relocalizable (reubicable).
 Multiprogramación en partición variable.
 Virtual:
o Multiprogramación en almacenamiento virtual:
 Paginación pura.
 Segmentación pura.
 Combinación paginación / segmentación.

3.3.2. PAGINACIÓN.
El concepto de paginación aparece junto con el de memoria virtual, ¿qué es
eso?. Este método fue creado por Fotheringham y la idea básica es la
siguiente.

Cuando ejecutamos un programa este puede caber o no en la memoria física,


si se da la situación de que el proceso es mayor que la memoria, el SO se
encarga de mantener en memoria las partes del programa que estamos usando
y el resto en el disco duro.

Pues bien, la técnica llamada „paginación‟ se encarga del intercambio de


información entre nuestra memoria y el disco duro, porque no hemos cargado
el programa entero

155
Frecuentemente se diferencia entre la “paginación pura” y la “combinación de
paginación y segmentación.

Las páginas se transfieren del almacenamiento secundario al primario en


bloques llamados “marcos de páginas”:

 Tienen el mismo tamaño que las páginas.


 Comienzan en direcciones del almacenamiento real que son múltiplos
enteros del tamaño fijo de la página.
 Podrá colocarse una nueva página dentro de cualquier “marco de
página” o “celda de página” disponible.

La “traducción dinámica de direcciones” incluye:

 Un proceso en ejecución hace referencia a una dirección virtual “v =


(p,d)” (Figura 3.18).
 Un mecanismo de transformación de páginas busca la página “p” en la
“tabla de páginas” y determina si la página “p” se encuentra en el marco
de página “p‟ ”.
 La dirección de almacenamiento real se forma por la concatenación de
“p‟ ” y “d”.

La tabla de “mapa de páginas” debe indicar si se encuentra o no en el


almacenamiento primario la página referenciada:

 En caso afirmativo dónde está en la memoria real.


 En caso negativo dónde puede estar en el almacenamiento secundario.

La dirección de almacenamiento primario “a”, donde comienza el marco de


pagina “p ‟ ” (suponiendo un tamaño de página “p”), está dada por: “a = (p) (p
‟)”; se supone marcos de página numerados 0, 1, 2, etc. (Figura 3.19, Figura
3.20 y Figura 3.21.

156
157
Traducción de Direcciones de Paginación por Transformación Directa

Un proceso en ejecución hace referencia a la dirección virtual v = (p,d).

Antes que un proceso comience su ejecución, el S. O. carga la dirección de


almacenamiento primario de la “tabla de mapa de páginas” en el “registro
origen de la tabla de mapa de páginas” (Figura 3.22).

158
La dirección base de la tabla de mapa de páginas es “b”.

El número de página es “p”.

La dirección en el almacenamiento primario de la entrada en la tabla de mapa


de páginas para la página “p” es “b + p”:

 Indica que el marco de página “p‟ ” corresponde a la página virtual.


 “p‟ ” se concatena con el desplazamiento “d” para formar la dirección real
“r”.

“Esto es un ejemplo de transformación directa debido a que la tabla de mapa


de páginas contiene una entrada por cada una de las páginas del
almacenamiento virtual de este proceso”.

La dirección virtual que se está traduciendo y la dirección base de la tabla de


mapa de páginas son mantenidas en un registro de alta velocidad del control
del procesador.

La tabla de mapa de páginas transformada directamente suele mantenerse en


el almacenamiento primario:

159
 Las referencias a esta tabla requieren un ciclo completo de
almacenamiento primario, que generalmente es la parte más larga de un
ciclo de ejecución de instrucciones.
 Se requiere otro ciclo de ejecución de almacenamiento primario para la
transformación de páginas, lo que puede ocasionar degradación
equivalente a un 50%, para lo cual una solución sería tener la tabla
completa de mapa de páginas de transformación directa en la “caché” de
muy alta velocidad.

Traducción de Direcciones de Paginación por Transformación


Asociativa

Una forma de acelerar la traducción dinámica de páginas consiste en colocar la


tabla completa de mapa de páginas en un “almacenamiento asociativo” que
tenga un tiempo de ciclo mucho más rápido que el almacenamiento primario.

Una variante es la “transformación asociativa pura” (Figura 3.23).

Un programa en ejecución hace referencia a la dirección virtual v = (p,d).

Cada entrada en el almacenamiento asociativo se busca de forma simultánea


para la página “p”:

 Se obtiene “p‟ ” como el marco de página correspondiente a la página


“p”.
 Se concatena “p‟ ” con “d” formando la dirección real “r”.

Cada una de las células del almacenamiento asociativo se registra de manera


simultánea:

 Hace costoso el almacenamiento asociativo.

160
 Implementar la transformación asociativa pura resulta demasiado
costoso, tal lo ocurrido con la implementación de la transformación
directa pura utilizando “caché”.

Traducción de Direcciones de Paginación por Combinación de


Transformación Asociativa / Directa

Se utiliza un almacenamiento asociativo capaz de mantener solo un pequeño


porcentaje del mapa completo de páginas para un proceso (Figura 3.24).

Las entradas de página contenidas en este mapa reducido corresponden solo a


las páginas referenciadas recientemente:

161
 Se presupone que una página recientemente referenciada tendrá
posibilidades de serlo de nuevo próximamente.

 Los rendimientos obtenidos con este esquema de mapa asociativo


parcial superan aproximadamente en un 100 % a los rendimientos
obtenidos con esquemas de mapa asociativo de página completo.

Un programa hace referencia a la dirección virtual v = (p,d).

El mecanismo de traducción de direcciones intenta encontrar la página “p” en el


mapa de página asociativo parcial:

 Si “p” se encuentra allí:


o El mapa asociativo devuelve “p‟ ” como el número de marco de
página correspondiente a la página virtual “p”.
o “p‟ ” se concatena con el desplazamiento “d” para formar la
dirección real “r” que corresponde a la dirección virtual v = (p,d).
 Si “p” no se encuentra en el mapa de pagina parcial:
o Se utiliza un mapa directo convencional.
o La dirección “b” del registro de origen de la tabla de páginas se
añade a “p” para localizar la entrada apropiada a la página “p” en
la tabla de mapa de páginas de transformación directa del
almacenamiento primario.
o La tabla indica que “p‟ ” es el marco de página correspondiente a
la página virtual “p”.
o “p‟ ” se concatena con el desplazamiento “d” para formar la
dirección real “r” correspondiente a la dirección virtual v = (p,d).

Compartimiento de Recursos en un Sistema de Paginación

En sistemas multiprogramados, especialmente en los de tiempo compartido, es


común que más de un usuario esté ejecutando los mismos programas:

 Para optimizar el uso de la memoria real se comparten las páginas que


pueden ser compartidas:
o El compartimiento debe ser cuidadosamente controlado para
evitar que un proceso modifique datos que otro proceso está
leyendo (Figura 3.25).
o Los programas se encuentran divididos en áreas separadas de
“procedimiento” y “datos”.
o Los procedimientos no modificables se llaman “procedimientos
puros reentrantes”.
o Los datos y procedimientos modificables no pueden ser
compartidos.
o Los datos no modificables (ej.: tablas fijas) son compartibles.
 Se debe identificar cada página como compartible o no.

162
 Habrá marcos (celdas) de páginas compartidos por varios procesos.

El compartimiento:

 Reduce la cantidad de almacenamiento primario necesario para la


ejecución eficaz de un grupo de procesos.
 Puede hacer posible que un sistema determinado mantenga una
cantidad mayor de usuarios (procesos).

3.3.3. SEGMENTACIÓN.

En los sistemas de “segmentación” un programa y sus datos pueden ocupar


varios bloques separados de almacenamiento real (Figura 3.26).

163
Los bloques:

 No necesitan ser de igual tamaño.


 Los bloques separados no necesitan ser adyacentes.
 Deben estar compuestos de posiciones contiguas de almacenamiento.

Se complica la protección de bloques de memoria de un proceso de usuario.

Es más difícil limitar el rango de acceso de cualquier programa.

Un esquema posible de protección es el uso de claves de protección del


almacenamiento (Figura 3.27):

 Las claves están bajo el control estricto del S. O.


 Un programa de usuario, a quien corresponde una cierta clave en la cpu,
solo puede hacer referencia a los otros bloques del almacenamiento con
igual clave de protección.

164
Una dirección virtual es un par ordenado v=(s,d) (Figura 3.28):

 “s” es el número del segmento del almacenamiento virtual en el cual


residen los elementos referidos.
 “d” es el desplazamiento en el segmento “s” en el cual se encuentra el
elemento referido.

165
Un proceso solo puede ejecutarse si su segmento actual (como mínimo) está
en el almacenamiento primario.

Los segmentos se transfieren del almacenamiento secundario al primario como


unidades completas.

Un nuevo segmento puede ser colocado en una serie disponible de posiciones


contiguas del almacenamiento primario de tamaño suficiente para alojar al
segmento.

La traducción dinámica de direcciones utiliza una “tabla de mapa de


segmentos”.

Control de Acceso en Sistemas de Segmentación

Se le otorga a cada proceso ciertos derechos de acceso a todos los segmentos


y se le niega completamente el acceso a muchos otros.

Si un proceso tiene “acceso de lectura” a un segmento, puede obtener


cualquier elemento de información contenido en ese segmento.

Si un proceso tiene “acceso de escritura” a un segmento, puede modificar


cualquier contenido del segmento y puede introducirle información adicional,
incluso destruir toda la información del segmento.

166
Un proceso con “acceso de ejecución” de un segmento puede ejecutarlo como
si fuera un programa.

Un proceso con “acceso de adición” puede escribir información adicional al final


del segmento, pero no puede modificar la información existente.

En base a los “tipos de control de acceso” indicados pueden crearse distintos


“modos de control de acceso”.

Ejemplos de combinación de los accesos de lectura, escritura y ejecución para


producir modos de protección útiles se dan en la Tabla 3.1 y en la Tabla 3.2.

Modo Lectura Escritura Ejecución Explicación


No hay permiso
0 N N N
de acceso
1 N N S Solo ejecución
2 S N N Solo lectura
Lectura /
3 S N S
ejecución
Lectura / escritura
4 S S N
pero no ejecución
Acceso no
5 S S S
limitado
Tabla 3.1: Ejemplo de combinación de accesos.

Modo Aplicación
0 Seguridad
Un programa disponible a los usuarios, que no pueden copiarlo
1
ni modificarlo, pero sí ejecutarlo
2 Recuperación de información
Un programa puede ser copiado o ejecutado, pero no puede
3
ser modificado
4 Protege los datos contra un intento erróneo de ejecutarlos
5 Este acceso se concede a los usuarios de confianza

167
Tabla 3.2: Ejemplo de aplicaciones de la combinación de accesos.

Traducción de Direcciones de Segmentación por Transformación Directa

Existen varias estrategias para la implementación de la traducción de


direcciones de segmentación:

 Por transformación directa, asociativa o combinación de asociativa /


directa.
 Con caché suficiente para alojar la tabla completa de mapa de
segmentos o caché parciales que contengan solo las entradas de los
segmentos de referencia más reciente (Figura 3.29).

Se considerará la traducción de direcciones de segmentación con la tabla


completa de mapa de segmentos en la caché.

Un proceso en ejecución hace referencia a la dirección virtual v = (s,d):

 El segmento número “s” se añade a la dirección base “b” en el registro


origen de la tabla de mapa de segmentos formando la dirección de
memoria real “b + s”, de la entrada para el segmento “s” de la tabla de
mapa de segmentos, que contiene la dirección del almacenamiento
primario “s‟ ”, donde comienza el segmento.
 El desplazamiento “d” se añade a “s‟ ” formando la dirección real “r = d +
s‟ ”, correspondiente a la dirección virtual “v = (s,d)”.

168
Un “bit de residencia”, “r”, indica si en la actualidad el segmento se encuentra o
no en el almacenamiento primario.

Si el segmento se encuentra en el almacenamiento primario “s‟ ” es la dirección


en este almacenamiento donde comienza el segmento.

Si el segmento no se encuentra en el almacenamiento primario “a” es la


dirección en el almacenamiento secundario de donde debe recuperarse antes
que el proceso pueda continuar.

Se compara cada referencia a un segmento con los bits de protección para


determinar si se permite la operación que se está intentando.

Si el segmento buscado no está en el almacenamiento primario se genera un


“fallo de pérdida de segmento”:

 El S. O. obtiene el control y carga el segmento referido desde la


dirección “a” del almacenamiento secundario.
 Se comprueba si el desplazamiento “d” es menor o igual a la longitud del
segmento “l ”:
o Si no es así se genera un “fallo de desbordamiento de segmento”
y el S. O. obtiene el control y termina la ejecución del proceso.
o Si el desplazamiento está en el rango del segmento se
comprueban los bits de protección para asegurarse si se permite
la operación que se está intentando:
 Si es así entonces la dirección base del segmento, “s ‟ ”, en
el almacenamiento primario se añade al desplazamiento
“d” formando la dirección de memoria real “r = s ‟ + d”, que
corresponde a la dirección del almacenamiento virtual “v =
(s,d)”.
 Si la operación intentada no se permite se genera un “fallo
de protección de segmento” y el S. O. obtiene el control y
termina la ejecución del proceso.

Compartimiento en un Sistema de Segmentación

Una de las ventajas de la segmentación sobre la paginación es que se trata


más de un hecho lógico que físico:

 En un sistema de segmentación, una vez que un segmento ha sido


declarado como compartido, entonces las estructuras que lo integran
pueden cambiar de tamaño.
 Lo anterior no cambia el hecho lógico de que residen en un segmento
compartido.

169
Dos procesos pueden compartir un segmento con solo tener entradas en sus
tablas generales que apunten al mismo segmento del almacenamiento primario
(Figura 3.30).

3.3.4.- Sistemas de Paginación / Segmentación

Ofrecen las ventajas de las dos técnicas de organización del almacenamiento


virtual.

El tamaño de los segmentos es múltiplo del de las páginas.

No es necesario que todas las páginas de un segmento se encuentren al


mismo tiempo en el almacenamiento primario.

Las páginas de almacenamiento virtual, que son contiguas en este


almacenamiento, no necesitan ser contiguas en el almacenamiento real.

El direccionamiento es tridimensional con una dirección de almacenamiento


virtual “v = (s,p,d)”:

 “s” es el número del segmento.


 “p” es el número de página.
 “d” es el desplazamiento en la página donde se encuentra asignado el
elemento deseado.

Traducción Dinámica de Direcciones en Sistemas de Paginación /


Segmentación

Se considera la traducción dinámica de direcciones de virtuales a reales en un


sistema de paginación / segmentación utilizando la combinación de
transformación asociativa / directa (Figura 3.3).

170
El proceso en ejecución hace referencia a la dirección virtual v = (s,p,d) (Figura
3.32).

171
Las páginas de referencia más reciente tienen entradas en un almacenamiento
asociativo.

Se realiza una búsqueda asociativa para intentar localizar (s,p) en el


almacenamiento asociativo:

 Si se encuentra (s,p), entonces el marco de página “p ‟ ” en el cual


reside dicha página en la memoria real, se concatena al desplazamiento
“d” para formar la dirección de memoria real “r” correspondiente a la
dirección virtual v= (s,p,d).
 Si no se encuentra (s,p), entonces:
o La dirección base “b” de la tabla de segmentos se añade al
número de segmento “s” formando la dirección “b + s” de la
entrada de la tabla de mapa de segmentos para el segmento “s”
de la memoria real.

172
o La entrada de la tabla de mapa de segmentos indica la dirección
base “s‟ ” de la tabla de páginas para el segmento “s”.
o El número de página “p” se añade a “s ‟ ” formando la dirección “p
+ s ‟ ” de la entrada en la tabla de páginas para la página “p” del
segmento “s”:
 Indica que “p‟ ” es el número del marco correspondiente a
la página virtual “p”.
 “p‟ ” se concatena con el desplazamiento “d” formando la
dirección real “r” que corresponde a la dirección virtual v =
(s,p,d).

Si el segmento “s” no se encuentra en el almacenamiento primario se produce


un “fallo de pérdida de segmento”, cuyo caso el S. O. localiza el segmento en el
almacenamiento secundario, crea una tabla de páginas para el segmento y
carga la página apropiada en el almacenamiento primario, pudiendo producir
reemplazos de páginas.

Si el segmento “s” está en el almacenamiento primario y si la referencia a la


tabla de mapa de páginas indica que la página deseada no se encuentra en el
almacenamiento primario, se produce un “fallo de pérdida de página”, en tal
caso el S. O. obtiene el control, localiza la página en el almacenamiento
secundario y la carga, pudiendo reemplazar otra página.

Si una dirección de almacenamiento virtual está más allá del final del segmento
se genera un “fallo de desbordamiento de segmento”, el que debe ser atendido
por el S. O.

Si los bits de protección indican que la operación que se va a ejecutar en la


dirección virtual referida no se permite, se genera un “fallo de protección de
segmento”, el que también debe ser atendido por el S. O.

Si se utiliza un mecanismo de transformación directa pura, manteniendo el


mapa completo dentro del almacenamiento primario, la referencia promedio de
almacenamiento virtual requeriría:

 Un ciclo de almacenamiento para acceder a la tabla de mapa de


segmentos.
 Un segundo ciclo de almacenamiento para hacer referencia a la tabla de
mapa de páginas.
 Un tercer ciclo de almacenamiento para referenciar al elemento deseado
del almacenamiento real.

Cada referencia a un elemento comprende tres ciclos de almacenamiento:

173
 El sistema correría casi a 1 / 3 de su velocidad nominal.
 La traducción de direcciones insumiría 2 / 3 del tiempo.

Con la utilización de registros asociativos (por ej. 16 registros), se logran


velocidades de ejecución del 90 % o más de la velocidad total de
procesamiento de sus procesadores de control.

La estructura de tablas de procesos, de mapas de segmentos y de mapas de


páginas puede consumir un porcentaje importante del almacenamiento primario
cuando se ejecutan un gran número de procesos.

La traducción procede mucho más rápido si todas las tablas están en el


almacenamiento primario, lo que resta espacio para los procesos.

Compartimiento en un Sistema de Paginación / Segmentación

Se implementa disponiendo entradas en tablas de mapa de segmentos para


diferentes procesos que apunten a la misma tabla de mapa de páginas (Figura
3.33).

174
El compartimiento requiere una administración cuidadosa por parte del S. O.,
ya sea en sistemas de paginación, segmentación o paginación / segmentación,
pues se debe considerar qué sucedería si una nueva página reemplazara a
otra página compartida por muchos procesos.

Estrategias de Administración del Almacenamiento Virtual

Las diferentes organizaciones de almacenamiento virtual generalmente


implementadas son:

 Paginación.
 Segmentación.
 Segmentación y paginación.

Las estrategias para la administración de sistemas de almacenamiento virtual


condicionan la conducta de los sistemas de almacenamiento virtual que operan
según esas estrategias.

175
Se consideran las siguientes estrategias:

 “Estrategias de búsqueda”:
o Tratan de los casos en que una página o segmento deben ser
traídos del almacenamiento secundario al primario.
o Las estrategias de “búsqueda por demanda” esperan a que se
haga referencia a una página o segmento por un proceso antes
de traerlos al almacenamiento primario.
o Los esquemas de “búsqueda anticipada” intentan determinar por
adelantado a qué páginas o segmentos hará referencia un
proceso para traerlos al almacenamiento primario antes de ser
explícitamente referenciados.
 “Estrategias de colocación”:
o Tratan del lugar del almacenamiento primario donde se colocará
una nueva página o segmento.
o Los sistemas toman las decisiones de colocación de una forma
trivial ya que una nueva página puede ser colocada dentro de
cualquier marco de página disponible.
 “Estrategias de reposición”:
o Tratan de la decisión de cuál página o segmento desplazar para
hacer sitio a una nueva página o segmento cuando el
almacenamiento primario está completamente comprometido.

Estrategias de Reposición de Página

Las principales son:

 El principio de optimización.
 Reposición de páginas al azar.
 Primero en entrar - primero en salir.
 Menos recientemente usada.
 Menos frecuentemente usada.
 No usada recientemente.
 Conjuntos de trabajo.

El Principio de Optimización

El “principio de optimización” indica que para obtener un rendimiento óptimo, la


página que se va a reponer es una que no se va a utilizar en el futuro durante
el período de tiempo más largo.

El problema es que no es factible predecir el futuro.

Reposición de Página al Azar

176
Consiste en escoger al azar la página que va a ser reemplazada.

Todas las páginas del almacenamiento principal deben tener la misma


probabilidad de ser reemplazadas.

Debe poder seleccionar cualquier página, incluyendo la que va a ser


referenciada a continuación (peor selección).

Este esquema es raramente usado.

Reposición de Página por el Sistema de Primero en Entrar -Primero en


Salir (FIFO)

Se registra el momento en que cada página ingresa al almacenamiento


primario.

Para reemplazar una página, se selecciona aquella que ha estado más tiempo
almacenada.

Se presenta el inconveniente de que se pueden reemplazar páginas muy


usadas, que serán llamadas de nuevo al almacenamiento primario casi de
inmediato.

Se puede presentar la llamada “anomalía FIFO”:

 Belady, Nelson y Shedler descubrieron que con la reposición FIFO,


ciertos patrones de referencias de páginas causan más fallos de páginas
cuando se aumenta el número de marcos (celdas) de páginas asignados
a un proceso: en esto consiste la “anomalía FIFO”.
 Esta anomalía contradice a la intuición (Figura 3.34).

177
Reposición de Página Menos - Recientemente - Usada (LRU)

Esta estrategia selecciona para ser reemplazada la página que no ha sido


usada durante el mayor período de tiempo.

Se basa en la heurística de que el pasado reciente es un buen indicador del


futuro próximo.

Requiere que cada página reciba un “sello de tiempo” cada vez que se
referencia:

 Puede significar una sobrecarga adicional importante.


 No se implementa frecuentemente.

La página seleccionada para reemplazo podría ser la próxima en ser requerida,


por lo que habría que paginarla de nuevo al almacenamiento principal casi de
inmediato.

Reposición de Página Menos - Frecuentemente - Usada (LFU)

Acá interesa la intensidad de uso que haya tenido cada página.

178
La página que será reemplazada es aquella que ha sido usada con menos
frecuencia o que ha sido referida con menos intensidad.

El inconveniente es que se puede seleccionar fácilmente para su reposición la


página equivocada:

 Ej.: La página de uso menos frecuente puede ser la página de entrada


más reciente al almacenamiento principal, y por lo tanto existe una alta
probabilidad de que sea usada de inmediato.

Reposición de Página No Usada - Recientemente (NUR)

Presupone que las páginas que no han tenido uso reciente tienen poca
probabilidad de ser usadas en el futuro próximo y pueden ser reemplazadas
por otras nuevas.

Es deseable reemplazar una página que no ha sido cambiada mientras estaba


en el almacenamiento primario.

La estrategia NUR se implementa con la adición de dos bits de hardware por


página:

 “Bit referenciado”:
o = 0 si la página no ha sido referenciada.
o = 1 si la página ha sido referenciada.
 “Bit modificado” (también llamado “bit sucio”):
o = 0 si la página no ha sido modificada.
o = 1 si la página ha sido modificada.

La selección de la página que será reemplazada comienza buscando una


página que no ha sido referenciada, pero si no la encuentra habrá que
reemplazar una página que ha sido referenciada.

Si una página ha sido referenciada se comprueba si ha sido modificada o no:

 Si no ha sido modificada se la reemplaza:


o Su reposición representa menos sobrecarga que la de una página
modificada, ya que debería grabarse de nuevo en el
almacenamiento secundario.
 Si no se encuentra una página que no ha sido modificada será
reemplazada una página modificada.

Con el transcurso del tiempo la mayoría de los “bits referenciados” serán


activados:

179
 Se pierde la capacidad para distinguir las páginas más deseables para
ser reemplazadas.
 Para evitarlo se ajustan periódicamente todos los “bits referenciados” a
“0”:
o Se logra un nuevo inicio.
o Se vuelve vulnerable al reemplazo aún a las páginas activas, pero
solo brevemente, mientras se reajustan los bits.
o

Los “bits modificados” no se ajustan periódicamente según esta estrategia.

Localidad

El concepto de “localidad” expresa:

 “Los procesos tienden a hacer referencia al almacenamiento en patrones


no uniformes y muy localizados”.

La “localidad” se manifiesta en el “tiempo” y en el “espacio”:

 Es una propiedad empírica (observada).


 Nunca está garantizada pero es altamente probable.
 Ej.: Los procesos tienden a favorecer ciertos subconjuntos de páginas,
las que tienden a ser adyacentes entre sí en el espacio de direcciones
virtuales del proceso.
 Está relacionada con la forma en que se escriben los programas y se
organizan los datos.

“Localidad temporal”: significa que las localidades de almacenamiento


referenciadas recientemente tienen una alta probabilidad de ser referenciadas
en un futuro próximo:

 Se apoya en la utilización de:


o Formación de ciclos (loops).
o Subrutinas.
o Pilas.
o Variables usadas para contar y totalizar.
o

“Localidad en el espacio”: significa que las referencias de almacenamiento


tienden a acumularse de manera tal que, una vez que se hace referencia a una
localidad, es muy probable que las localidades cercanas sean también
referenciadas:

 Se apoya en la utilización de:


o Recorrido de arreglos.
o Ejecución secuencial de código.

180
o Tendencia de los programadores a colocar definiciones de
variables relacionadas, próximas entre sí.

Un programa puede ejecutar eficientemente mientras su subconjunto de


páginas preferido se encuentre en el almacenamiento primario.

El número de fallos de páginas de un proceso depende de la cantidad de


almacenamiento primario disponible para sus páginas.

Generalmente los procesos no muestran patrones de referencias aleatorios


uniformemente distribuidos por sus diferentes páginas.

Al reducir el número de marcos (celdas) de páginas disponibles para un


proceso existe un intervalo durante el cual la razón de fallos de páginas no se
afecta excesivamente.

En determinado punto, cuando se reduce más el número de marcos de


páginas, el número de fallos de páginas aumenta drásticamente.

Mientras el subconjunto de páginas favorecidas por un proceso permanezca en


el almacenamiento primario, el número de fallos de páginas no aumenta
mucho.

Tan pronto como las páginas del subconjunto favorecido son retiradas del
almacenamiento primario, la actividad de paginación del proceso aumenta en
gran medida al referenciar y traer de nuevo estas páginas al almacenamiento
primario.

Los “subconjuntos favorecidos” también son llamados “conjuntos de trabajo” o


“working sets” (Figura 3.35).

181
Conjuntos de Trabajo

Denning desarrolló un punto de vista de la actividad de paginación de un


programa llamado la “teoría de conjunto de trabajo del comportamiento de un
programa”.

Un “conjunto de trabajo” es una colección de páginas a las cuales un proceso


hace activamente referencia.

Denning sostenía que para que un programa se ejecutara eficientemente, su


conjunto de trabajo debe ser mantenido en el almacenamiento primario, para
evitar la “hiperpaginación”.

Una “política de administración de almacenamiento por conjunto de trabajo”


trata de mantener el conjunto de trabajo de los programas activos en el
almacenamiento primario.

La decisión de añadir un nuevo proceso al conjunto activo de procesos


(aumentar el nivel de multiprogramación):

 Se basa en si hay suficiente espacio disponible en el almacenamiento


primario como para acomodar el conjunto de trabajo del nuevo proceso.
 Se toma generalmente de forma heurística ya que es imposible para el
sistema conocer por anticipado el tamaño del conjunto de trabajo de un
proceso dado.

El conjunto de trabajo de páginas de un proceso “w(t,w)” en el momento “t” es


el conjunto de páginas referidas por un proceso durante el intervalo de tiempo
del proceso “t - w” a “t ” (Figura 3.36).

182
El “tiempo del proceso” es el tiempo durante el cual este proceso tiene la cpu.

La variable “w” se denomina “tamaño de la ventana del conjunto de trabajo”:

 La determinación del tamaño de “w” es muy importante.


 Al aumentar el tamaño de la ventana “w” aumenta el tamaño del
conjunto de trabajo (Figura 3.37).

“El verdadero conjunto de trabajo de un proceso es el conjunto de páginas que


deben estar en el almacenamiento primario para la ejecución eficaz de este
proceso”.

Los conjuntos de trabajo cambian mientras un proceso está en ejecución:

 Complica la administración precisa del almacenamiento primario en base


a esta estrategia.
 “Los conjuntos de trabajo son transitorios y el siguiente conjunto de
trabajo del proceso puede diferir substancialmente de su conjunto de
trabajo anterior”.
 Se debe evitar un exceso de compromiso del almacenamiento primario y
la consecuente hiperpaginación.

Comportamiento de un Programa en la Paginación

Respecto del porcentaje de las páginas de un proceso típico referenciadas


desde el momento de iniciarse su ejecución:

 Un proceso tiende a hacer referencia a una parte significativa de sus


páginas inmediatamente después de iniciar su ejecución.
 El proceso puede concluir sin haber referenciado a algunas de sus
páginas, correspondientes a rutinas que atienden errores que no se
produjeron.

183
Respecto de variar el tamaño de la página manteniendo constante la cantidad
de almacenamiento primario:

 El número de fallos de páginas experimentados por un proceso en


ejecución tiende a aumentar con el tamaño de la página, debido a que
se traen al almacenamiento primario un mayor número de
procedimientos y datos que no serán referenciados, restando lugar para
los que sí lo serán.

Respecto de cómo el promedio de tiempo interfallos (tiempo entre fallos de


página) varía al aumentar el número de marcos de página asignados al
proceso:

 Cuantos más marcos de página tenga un proceso, mayor será el tiempo


entre los fallos de páginas.
 El punto de inflexión se da cuando el proceso tiene todo su conjunto de
trabajo en el almacenamiento primario.
 Asignar marcos de página adicionales más allá del punto de inflexión no
produce efectos significativos sobre el tiempo interfallos.

Respecto del porcentaje de instrucciones de una página que son ejecutadas


antes de transferirse el control a otra página, los valores experimentales
obtenidos indican un máximo de 200 instrucciones por página de 1 kb (Figura
3.39).

184
3.4._ ADMINISTRACION DE MEMORIA VIRTUAL.

La memoria virtual es una técnica para proporcionar la ilusión de un espacio de


memoria mucho mayor que la memoria física de una maquina. Esta "ilusión"
permite que los programas se hagan sin tener en cuenta el tamaño exacto de la
memoria física.

La ilusión en la memoria virtual está soportada por el mecanismo de


traducción de memoria, junto con una gran cantidad de almacenamiento rápido
en disco duro. En cualquier momento el espacio de direcciones virtual, está
mapeado de tal forma que una pequeña parte de él, está en memoria real y el
resto almacenado en el disco.

185
Debido a que solo la parte de memoria virtual que está almacenada en la
memoria principal, es accesible a la CPU, según un programa va ejecutándose,
la vecindad de referencias a memoria cambia, necesitando que algunas partes
de la memoria virtual se traigan a la memoria principal desde el disco, mientras
que otras ya ejecutadas, se pueden volver a depositar en el disco (archivos de
paginación).

Por ejemplo, un programa de aplicación grande, podría mostrar un menú con


muchas funciones. Al seleccionar una función del menú, se ejecutarían varias
rutinas específicas de dicha función, pero no se referenciarían las rutinas de las
funciones restantes. En un sistema de memoria virtual, la ejecución de la
función seleccionada del menú, se soportaría trayendo el código y los datos
para esa función a la memoria principal (si no estuviese ya allí). El resto podría
o no sacarse del disco a memoria real. Mientras la memoria física fuese lo
bastante grande para contener el código y datos de cualquier función elemental
de nuestro menú, el tamaño total de la memoria física, podría ser mucho menor
que el tamaño total de nuestro programa.

El mecanismo de paginación, también recoge estadísticas de utilización de las


partes de memoria virtual que están residentes en memoria real o física. Estas
estadísticas ayudan al sistema operativo a decidir que se puede devolver a
disco cuando el espacio de memoria principal está muy "achuchado".

Tres problemas diferentes de la Memoria virtual

 Vitalización de la memoria
 Protección
 Reutilizar la memoria

ADMINISTRACIÓN DE MEMORIA VIRTUAL

Es un método mediante el cual, un sistema operativo simula tener más


memoria principal que la que existe físicamente. Para implementar la memoria
virtual se utiliza un medio de almacenamiento secundario de alta velocidad de
acceso, generalmente en disco duro de la maquina. Un sistema de memoria
virtual se implementa utilizando paginación como método de administración de
memoria básica y algún mecanismo de intercambio (para descargar paginas de
la memoria principal hacia el disco duro y para cargar esas paginas de nuevo a
la memoria).

La memoria virtual es una técnica para proporcionar la simulación de un


espacio de memoria mucho mayor que la memoria física de una maquina. Esta
“ilusión” permite que los programas se hagan sin tener en cuenta el tamaño
exacto de la memoria física. La ilusión de la memoria virtual esta soportada por
el mecanismo de traducción de memoria, junto con una gran cantidad de
almacenamiento rápido en disco duro.

186
Así en cualquier momento el espacio de direcciones virtual hace un
seguimiento de tal forma que una pequeña parte de el, esta en memoria real y
el resto almacenado en el disco, y puede ser referenciado fácilmente.

ESTRATEGIAS DE COLOCACIÓN EN ALMACENAMIENTO

Estrategias del mejor ajuste: Un trabajo que entre en el sistema se colocará


en el espacio vació del almacenamiento principal en el que quepa mejor y que
deje la menor cantidad posible de espacio sin utilizar.

Estrategias del primer ajuste: Un trabajo que entre en el sistema se colocara


en el almacenamiento principal en el primer vació disponibles lo bastante
grande para contenerlo.

Estrategias del peor ajuste: Consiste en colocar un programa en el


almacenamiento primario en el espacio vació donde peor se ajusta es decir en
el espacio más grande posible.

3.4.1._ ESTRATEGIAS DE ADMINISTRACIÓN.

Estrategias de obtención: Determina cuando se debe transferir una página o


un segmento de almacenamiento secundario al primario. Las estrategias de
obtención por demanda esperan a que un proceso en ejecución haga
referencia a una página o a un segmento antes de traer la página o el
segmento de almacenamiento primario. Los esquemas de obtención anticipada
intentan determinar por adelantado a cuales paginas o segmentos hará
referencia un proceso.

Estrategias de colocación: Determinan en que lugar del almacenamiento


primario se debe colocar una pagina o un segmento entrante. Una página
entrante se puede colocar en cualquier marco de página disponible.

Estrategias de reemplazo: Sirven para decidir cual página o segmento se


debe desplazar para dar espacio a una página o segmento entrante cuando
esta completamente ocupado el almacenamiento primario.

ALGORITMO DE REMPLAZO DE PAGINAS


Con el uso del método de paginación se puede llegar a saturar la memoria si
se incrementa demasiado el nivel de multiprogramación. Por ejemplo, si se
corren seis procesos, cada uno con un tamaño de diez páginas de las cuales
187
en realidad sólo utiliza cinco, se tiene un mayor uso del CPU y con marcos de
sobra. Pero pudiera suceder que cada uno de esos procesos quiera usar las
diez páginas resultando en una necesidad de 60 marcos, cuando solo hay 40
disponibles.

Cada columna, es una representación del aspecto de los marcos de página en


un momento determinado. Así la primera columna representa el estado inicial,
la segunda representa el siguiente estado.

Las columnas están formadas por 5 filas. Las filas que forman cada columna,
de arriba abajo representan:

1. La primera fila (la de fondo verde) contiene un número que es la petición


realizada.
2. La segunda fila es una celda de separación para distinguir entre las
demás filas.
3. De la tercera a la quinta, las filas representan el contenido de los marcos
de páginas, así, la tercera fila es el primer marco, la cuarta el segundo, y
la quinta el tercero.

Los colores de las distintas filas también representan algo:

 Las celdas azules, nos indican que el marco de página en el que se


encuentran, contiene una página que no se verá alterada por la petición
realizada.
 Las celdas amarillas, indican que la página que hay en ese marco de
página, al llegar allí produjo un fallo de página. Si esta página se pidió
cuando los tres marcos estaban ocupados, habrá reemplazado a alguno
de ellos, este será determinado según el algoritmo de reemplazo FIFO.
 Las celdas en blanco pueden representar dos cosas. Si aparecen en un
número menor que tres, representarán marcos vacíos. Cuando nos
encontramos los tres marcos en blanco, indicamos que la petición que

188
hay en la primera fila, ha podido ser servida sin necesidad de cambiar el
contenido de los marcos de página.

3.4.2._ TECNICAS DE REEMPLAZO DE PÁGINA

Las rutinas de administración de almacenamiento del Sistema operativo deben


decidir que página del almacenamiento primario se debe desplazar para dejar
espacio a una página entrante.

Principio de Optimalidad: Para obtener un rendimiento óptimo, la página que


se debe reemplazar es aquella que tardará más tiempo en ser utilizada. Esta
estrategia óptima de reemplazo se denomina OPT o MIN.

Reemplazo de Páginas aleatorio: Es una técnica sencilla. Todas las páginas


que se encuentran en el almacenamiento principal tienen la misma probabilidad
de ser elegidas para el reemplazo. Esta estrategia podría seleccionar cualquier
página para ser reemplazada, incluyendo la siguiente página la que se hará
referencia. Las decisiones de reemplazo aleatorio se de páginas se pueden
tomar rápidamente y con un número significativo de marcos de página. Es un
esquema que casi no se utiliza por su enfoque aleatorio de acertar o errar.

Reemplazo de páginas de primeras entradas-primeras salidas (PEPS):


Cada página se registra en el instante que entró en el almacenamiento
primario. Cuando se necesita reemplazar una página, se escoge la que ha
permanecido en el almacenamiento durante el mayor tiempo.

3.4.3.- PAGINACIÓN POR DEMANDA.

Las páginas son cargadas por demanda.

No se llevan páginas del almacenamiento secundario al primario hasta que son


referenciadas explícitamente por un proceso en ejecución.

Las razones del atractivo de esta estrategia son:

 Los resultados de computabilidad, en especial el “problema de parada”,


indican que el camino que tomará la ejecución de un programa no se
puede predecir con exactitud.
 Garantiza que solo las páginas que necesita el proceso sean traídas al
almacenamiento principal.
 La sobrecarga de proceso para decidir qué página traer al
almacenamiento principal es mínima.

189
El principal inconveniente está en los procesos que requieren acumular sus
páginas una por una:

 Los tiempos de espera de páginas son considerables.


 Es creciente la cantidad de almacenamiento primario afectada al
proceso que espera páginas, por lo que el “producto espacio - tiempo”
se incrementa.

El “producto espacio - tiempo” indica la cantidad de almacenamiento que usa


un proceso y la cantidad de tiempo que lo usa.

“La reducción del producto espacio - tiempo de las esperas de páginas de un


proceso es una meta importante de las estrategias de administración del
almacenamiento” (Figura 3.38).

3.4.4._ PAGINACIÓN ANTICIPADA

El S. O. intenta predecir las páginas que un proceso va a necesitar y a


continuación precarga estas páginas cuando hay espacio disponible.

Mientras el proceso ejecuta sus páginas actuales, el sistema carga páginas


nuevas que estarán disponibles cuando el proceso las pida, debido a ello, el
tiempo de ejecución de un proceso se puede reducir.

190
3.4.5._ LIBERACIÒN DE PÁGINAS

Un proceso usuario puede emitir una “liberación voluntaria de página” para


liberar el marco de página cuando ya no necesitara esa página.

Se puede eliminar el “desperdicio” y acelerar la ejecución.

El inconveniente es que la incorporación de mandatos de liberación de páginas


dentro de los programas de usuarios puede ser peligroso y retrasar el
desarrollo de aplicaciones.

“Los compiladores y S. O. deberían detectar automáticamente situaciones de


liberación de página mucho antes de lo que es posible con estrategias de
conjuntos de trabajo”.

Los programas que ya no requieran páginas específicas deberán desechar


tales páginas de sus conjuntos de trabajo. Por lo regular hay un tiempo durante
el cual permanecen en el almacenamiento principal las páginas que ya no se
requieran. Cuando es evidente que ya no será necesaria una página, un
usuario podrá dar una orden de "liberación voluntaria de página" para liberar el
marco de página. Esto eliminaría el retraso que implica dejar que el proceso
deseche poco a poco la página de su conjunto de trabajo.

El inconveniente es que la incorporación de mandatos de liberación de páginas


dentro de los programas de usuarios puede ser peligrosa y retrasar el
desarrollo de aplicaciones.

“Los compiladores y S. O. deberían detectar automáticamente situaciones de


liberación de página mucho antes de lo que es posible con estrategias de
conjuntos de trabajo”.

Un proceso usuario puede emitir una “liberación voluntaria de página” para


liberar el marco de página cuando ya no necesitara esa página.

Se puede eliminar el “desperdicio” y acelerar la ejecución.

3.4.6._ TAMAÑO DE PÁGINA

Generalmente el almacenamiento real se divide en marcos o celdas de página


de tamaño fijo.

Los interrogantes tienen que ver con el tamaño de las páginas, si todas las
páginas tendrán igual tamaño, si en caso de utilizar páginas de diferente
tamaño las páginas mayores deben ser o no múltiplos enteros de las menores,
etc.

191
Algunas consideraciones para determinar el tamaño de página son las
siguientes:

 Cuanto más pequeño sea el tamaño de una página, más páginas y


marcos de páginas habrá y mayores serán las tablas de páginas:
o El desperdicio de almacenamiento debido al tamaño excesivo de
las tablas de página se llama “fragmentación de tablas”.
o Esto indica la necesidad de páginas más grandes.
 Con páginas grandes, grandes cantidades de información que nunca
llegaría a ser referenciada, se paginarán hacia el almacenamiento
primario:
o Esto indica la necesidad de páginas más pequeñas.
 Debido a que las transferencias de e / s del disco (paginación)
consumen bastante tiempo, se debe minimizar la paginación que un
proceso requiera:
o Esto indica la necesidad de páginas grandes.
 Los programas tienden a mostrar la propiedad de localidad de referencia
y esta localidad tiende a ser pequeña:
o Esto indica la necesidad de páginas pequeñas.
 Los procedimientos y datos rara vez comprenden un número entero de
páginas, por lo que los sistemas de paginación experimentan una
“fragmentación interna”:

192

Anda mungkin juga menyukai