1 Organización y administración del almacenamiento
El almacenamiento
principal, es un recurso relativamente caro, por lo que los diseñadores de
sistemas operativos intentan optimizar su uso. En los últimos años ha
disminuido su costo, pero sigue siendo más caro en relación con el
almacenamiento secundario, y las aplicaciones actuales requieren cantidades
mayores de almacenamiento principal.
La organización
del almacenamiento es la forma de considerar el almacenamiento principal,
bajo los siguientes esquemas de organización:
* Sistemas de usuario único
* Multiprogramación con particiones fijas, con traducción y carga con re-ubicación
* Multiprogramación con particiones fijas, con traducción y carga absoluta
* Multiprogramación con particiones variables
* sistemas de intercambio de almacenamiento
Sea cual sea el
esquema de organización de la memoria que se adopte, hay que decidir qué
estrategias de deben utilizar para obtener un rendimiento óptimo de la
misma.
Las estrategias
de administración del almacenamiento buscan obtener el mejor
aprovechamiento y desempeño posible del caro recurso de almacenamiento
principal. Se divide en las siguientes categorías:
1)
Estrategias de obtención (¿Cuándo se toma un nuevo programa para
colocarlo en memoria? ¿Se toma el programa cuando el sistema lo solicita o se
anticipa?)
a)
Estrategias de obtención por demanda
b)
Estrategias de obtención anticipada
2)
Estrategias de colocación (¿En qué lugar del almacenamiento se coloca el
siguiente programa?)
3)
Estrategias de reemplazo (¿Qué programas se deben reemplazar, los más
antiguos, los menos usados?)
Jerarquía de memoria
La jerarquía de
memoria es la organización piramidal de la memoria en
niveles que tienen las computadoras.
Puntos básicos
Los puntos básicos
relacionados con la memoria pueden resumirse en:
Capacidad
Velocidad
Coste por bit
La cuestión de la
capacidad 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 microprocesador puede
trabajar, de modo que no haya tiempos de espera entre cálculo y cálculo,
utilizados para traer operando o guardar resultados.
En suma, el coste de
la memoria no debe ser excesivo, para que sea factible construir un equipo
accesible.
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
menor coste por bit.
A mayor capacidad
menor velocidad.
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.
Niveles jerárquicos
Los niveles que
componen la jerarquía de memoria habitualmente son:
Nivel 0: Registros del microprocesador o CPU
Nivel 1: Memoria caché
Nivel 2: Memoria primaria (RAM)
Nivel 3: Disco
duro (con el mecanismo de memoria virtual)
Nivel 4: Cintas magnéticas (consideradas
las más lentas, con mayor capacidad, de acceso secuencial)
Nivel 5: Redes (actualmente
se considera un nivel más de la jerarquía de memorias)
PARTICIONES
Esta forma de gestión
consiste en dividir la memoria en varias zonas, pudiendo ser cada zona de un
tamaño diferente. Esto se ilustra en la figura 6.3. El tamaño de las zonas
podrá ser modificado eventualmente por algún usuario responsable de la
administración del ordenador.
Los trabajos se traducían mediante compiladores y ensambladores absolutos,
para ejecutarse en una partición específica.
Una vez introducido un proceso en una partición, permanece en ella hasta su
finalización. Si un trabajo se iniciaba, y la partición para la que estaba
compilado estaba ocupada, tenía que esperar, aunque estuvieran libres otras
particiones. Esto provoca una pérdida de eficiencia.
-Protección
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
*Particiones dinámicas
En este método se va asignando la memoria dinámicamente a los procesos,
conforme se introducen en la memoria. A cada proceso se le asigna exactamente
la memoria que necesita.
El esquema de los
registro base y límite sigue siendo válido para la reasignación y la
protección. Otro tema a tener en cuenta es la cantidad de memoria por asignar a
un proceso recién creado. Si los procesos se crean con un tamaño fijo
invariante, la asignación es muy sencilla, se asigna exactamente lo que se
necesite.
Si, por el contrario,
los segmentos de datos de los procesos pueden crecer, como es el caso de la
asignación dinámica de memoria a partir de una pila, que ocurre en muchos
lenguajes de programación, aparece un problema cuando un proceso intenta
crecer.
Si es de esperar que
la mayoría de los procesos crezcan conforme se ejecuten, sería una buena idea
asignar un poco de memoria adicional siempre que un proceso pase a la memoria,
con el fin de reducir el gasto excesivo asociado con el traslado de procesos
que ya no caben en su memoria asignada
Si los procesos
pueden tener dos segmentos de crecimiento, como por ejemplo, el segmento de
datos, que se utiliza como una pila,
y el stack, se sugiere un método alternativo, el de la figura 5-b.
Fragmentación
La fragmentación: es
la memoria que queda desperdiciada al usar los métodos de gestión de memoria.
Tanto el primer ajuste, como el mejor y el peor producen fragmentación externa
(conocidos como estrategias de Colocación).
La fragmentación es
generada cuando durante el reemplazo de procesos quedan huecos entre dos o más
procesos de manera no contigua y cada hueco no es capaz de soportar ningún
proceso de la lista de espera. Tal vez en conjunto si sea espacio suficiente,
pero se requeriría de un proceso de desfragmentación de memoria o compactación
para lograrlo. Esta fragmentación se denomina fragmentación externa.
Existe otro tipo de
fragmentación conocida como fragmentación interna, la cual es generada cuando
se reserva más memoria de la que el proceso va realmente a usar. Sin embargo a
diferencia de la externa, estos huecos no se pueden compactar para ser
utilizados. Se debe de esperar a la finalización del proceso para que se libere
el bloque completo de la memoria.
Fragmentación interna
La fragmentación
interna es la pérdida de espacio en disco debido al hecho de que el tamaño de
un determinado archivo sea inferior al tamaño del clúster, ya
que teóricamente el archivo estaría obligado a ser referenciado como un clúster
completo. Los clústeres son contiguos de forma que desde el último bit del
archivo situado en el clúster "a" hasta el primer bit del archivo situado
en el clúster contiguo (es decir "b") queda un espacio sobrante
siempre teniendo la condición de que el archivo del clúster "a" fuera
más pequeño que el clúster en sí.
Por eso se sugiere no
disponer de un gran tamaño de partición en los discos nuevos donde la capacidad
es muy importante. Por ejemplo si nuestro clúster es de 18KB (18.432 bytes) por
más que un archivo ocupe menos, en nuestro disco ocupara 18KB. Esto sugiere una
pérdida de ese espacio que dice utilizar pero no utiliza.
Por eso, en nuestro
ejemplo, un archivo de 3KB ocupara en nuestro disco lo mismo que uno de 10KB, o
sea 18 KB. Esa pérdida de espacio se denomina fragmentación interna, y no se
corrige con el desfragmentador, sino disminuyendo el tamaño del clúster, algo
que habitualmente los usuarios solo pueden conseguir creando particiones más
pequeñas.
Fragmentación externa
Este tipo de
fragmentación aparece como consecuencia de las distintas políticas de ajuste de
bloques que tiene un sistema de ficheros, o al utilizar asignaciones dinámicas
de bloques en el caso de la memoria. En el sistema de ficheros, la sucesiva
creación y eliminación de ficheros de distintos tamaños puede conducir al
aislamiento de los bloques libres de un disco y,
dependiendo de la política de ajuste, su no elección para futuros ficheros.
En la memoria del
sistema la fragmentación se produce cuando los procesos asignados han ocupado
posiciones no contiguas de memoria dejando demasiados bloques libres de pequeño
tamaño, en los que no "caben" nuevos procesos.
En sistemas de
ficheros la desfragmentación trata de resolver este problema, alineando los
bloques de datos contiguos y juntando los bloques libres, produciendo así
fragmentos mayores que sí serán elegidos para futuros ficheros. En la memoria
principal se soluciona compactando los procesos para que estos ocupen
posiciones contiguas y dejar los bloques libres juntos, o también se soluciona
con la paginación de memoria.
Condensación
Esta técnica
consiste en fusionar dos huecos de memoria libre adyacentes en uno sólo que
tendrá como capacidad la suma de los dos originales. Cuando un trabajo termina,
el sistema operativo trata de unir todos los espacios libres en uno solo, para
tener un espacio suficiente para que pueda entrar otro programa en memoria.
Mediante la condensación de huecos se pueden recuperar los bloques contiguos de
almacenamiento más grande que sea posible. Gracias a esto, la velocidad de
acceso es mayor. Por ejemplo, necesitamos 4K de nuestra memoria, pero tenemos
dos huecos, cada uno de 2K. Unimos los dos huecos y tenemos uno de 4K que nos
sirve para almacenar este proceso.
Compactación del
almacenamiento
Una forma de
solucionar la fragmentación externa es usando compactación. Consiste en
desplazar todas las localizaciones de memoria ocupada a un extremo de la misma,
así quedan dos partes bien diferenciadas, la memoria ocupada y la memoria
libre.
La compactación no
siempre es posible, ya que es necesario que la relocalización sea dinámica y se
efectúa en el momento de la ejecución. Además, otro inconveniente que presenta
es que es una técnica costosa, ya que requiere recursos del sistema y puede
provocar que el tiempo de respuesta aumente. El sistema debe detener todo mientras
efectúa la compresión, lo que puede afectar los tiempos de respuesta.
4.1.4
Estrategias para la administración de memoria
De las diversas
organizaciones de memoria tratadas en el tema anterior únicamente las que
realizan una asignación no contigua (paginación, segmentación y segmentación
paginada) del almacenamiento permiten implantar una administración virtual de
la memoria. Para cualquiera de las tres formas de organizar esta memoria
virtual habrá que determinar:
Estrategias de obtención. Determinan cuándo se debe transferir una página o
un segmento del almacenamiento secundaria 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 traerla/lo. Los esquemas de obtención
anticipada intentan determinar por adelantado a qué páginas o segmentos hará
referencia un proceso. Si la probabilidad de una referencia es alta y hay
espacio disponible, entonces se trae al almacenamiento primario la página o
segmento antes de que se haga la referencia explícita
v Estrategias de colocación. Determinan en qué lugar de la memoria principal se
debe colocar una página o un segmento entrante. Los sistemas de paginación
vuelven trivial la decisión de colocación, porque una página entrante se puede
ubicar en cualquier marco de página disponible. Los sistemas con segmentación
requieren estrategias de colocación como las tratadas en el contexto de los
sistemas de multiprogramación con particiones dinámicas.
v Estrategias de reemplazo. Sirven para decidir qué página o segmento se debe
desplazar para dejar espacio a una página o segmento entrante cuando está
completamente ocupada la memoria principal.
Una estrategia de asignación de memoria determina el lugar donde será cargado
un nuevo proceso en base a un criterio.
Las estrategias de asignación son:
1. PRIMER AJUSTE. El Sistema Operativo asigna el primer bloque de memoria libre
con espacio suficiente para satisfacer la información. La búsqueda de este
bloque es de manera secuencial.
2. MEJOR AJUSTE. El sistema operativo busca el bloque de memoria que represente
el menor desperdicio según el requerimiento.
3. PEOR AJUSTE. El sistema operativo asigna el bloque mas grande que encuentre.
No hay comentarios.:
Publicar un comentario