Almacenamiento
virtual significa la capacidad de direccionar un espacio de almacenamiento
mucho mayor que el disponible en el almacenamiento primario de determinado
sistema de computación.
Esta tecnología apareció
en 1960 en la Universidad de Manchester (Inglaterra), en el sistema “Atlas”.
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).
Los métodos más
comunes de implementación son mediante:
• Técnicas de paginación.
• Técnicas de
segmentación.
• Una
combinación de ambas técnicas.
3.3.1 Evaluación de las Organizaciones de Almacenamiento
Almacenamiento virtual "significa la capacidad
de direccional un espacio de almacenamiento mucho mayor que el disponible en el
almacenamiento primario de determinado sistema de computación”.
Esta tecnología apareció en 1960 en la Universidad de Manchester (Inglaterra), en el sistema “Atlas”.
Los métodos más comunes de implementación son mediante:
Esta tecnología apareció en 1960 en la Universidad de Manchester (Inglaterra), en el sistema “Atlas”.
Los métodos más comunes de implementación son mediante:
·
Técnicas de “paginación”.
·
Técnicas de “segmentación”.
·
Una combinación de ambas técnicas.
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:
La evolución en las organizaciones de almacenamiento puede resumirse como sigue:
Real:
- Sistemas dedicados a un solo usuario.
- Real:
- Sistemas de multiprogramación en memoria real:
- Multiprogramación en partición fija:
- Absoluta.
- Relocalizadle (reubicadle).
- Multiprogramación en partición variable.
- Virtual:
- Multiprogramación en almacenamiento virtual:
- Paginación pura.
- Segmentación pura.
- Combinación paginación / segmentación.
3.3.2 Paginación
En sistemas operativos de computadoras, los
sistemas de paginación de memoria dividen los programas en pequeñas partes o
páginas. Del mismo modo, la memoria es dividida en trozos del mismo tamaño que
las páginas llamados marcos de página. De esta forma, la cantidad de memoria
desperdiciada por un proceso es el final de su última página, lo que minimiza
la fragmentación interna y evita la externa.
En un momento cualquiera, la memoria se encuentra
ocupada con páginas de diferentes procesos, mientras que algunos marcos están
disponibles para su uso. El sistema operativo mantiene una lista de estos
últimos marcos, y una tabla por cada proceso, donde consta en qué marco se
encuentra cada página del proceso. De esta forma, las páginas de un proceso
pueden no estar contiguamente ubicadas en memoria, y pueden intercalarse con
las páginas de otros procesos.
En la tabla de páginas de un proceso, se encuentra
la ubicación del marco que contiene a cada una de sus páginas. Las direcciones
lógicas ahora se forman como un número de página y de un desplazamiento dentro
de esa página (conocido comúnmente como offset). El número de página es usado
como un índice dentro de la tabla de páginas, y una vez obtenida la dirección del
marco de memoria, se utiliza el desplazamiento para componer la dirección real
o dirección física. Este proceso se realiza en una parte del computador
específicamente diseñada para esta tarea, es decir, es un proceso hardware y no
software.
De esta forma, cuando un proceso es cargado en
memoria, se cargan todas sus páginas en marcos libres y se completa su tabla de
páginas.
3.3.3 Segmentación
Segmentación
En un esquema de segmentación un espacio de
direcciones lógicas es un conjunto de segmentos. Cada segmento tendrá un nombre
y un largo. Las direcciones van a hacer referencia tanto al nombre como al
desplazamiento dentro del segmento.
<nro. Segmento, desplazamiento>
Mecanismo de traducción de direcciones.-
Se lleva una tabla de segmento por cada proceso,
cada entrada a la tabla de segmento lleva la siguiente información: segment
base (dirección base del segmento)
Segment limit (largo del segmento)
Protección.-
La protección se asegura verificando cada acceso a
la memoria con la tabla de segmentos para asegurar que se está direccionando
dentro del espacio de direcciones lógicas del proceso.
Además el mecanismo de traducción de direcciones
asegura que no se direccione fuera de un segmento en particular. Existen
también bits de protección para cada entrada de la tabla de segmentos que
indicaran si el segmento es read only o read-write.
Segmentos Compartidos.-
Similar a lo visto para paginación. Se comparte la
totalidad de un segmento
Fragmentación.-
El sistema operativo deberá asignar memoria
utilizando algunos algoritmos ya vistos (first fit, worst fit, best fit) Cuando
el sistema operativo intenta cargar un segmento y no hay ningún segmento
disponible de tamaño suficiente para almacenarlo se procederá a compactar la
memoria.
Paginación por demanda.-
Es similar a lo visto para la paginación
introduciendo el concepto de swapping. Los procesos residen en el disco y al
ser ejecutados deben ser cargados en memoria. Cuando un proceso va a ser
ejecutado, el mismo es swappeado a memoria, utilizando lazy swapping. El lazy
swapping nunca trae páginas a memoria si no van a ser ejecutadas. Se necesita
determinar si un página está en memoria o en disco, por lo cual se utiliza el bit
de válido / inválido de la tabla de páginas. Si el bit = 1 la página es válida
y está cargada en memoria si es 0 la página es inválida y no está cargada en
memoria (esta en disco).
Cuando un proceso intenta acceder a una página que
no está cargada en memoria ocurre un page fault (tomo de página). El
procedimiento para manejar un page fault es el siguiente:
1. Verificar si la referencia a la página es válida
(se utiliza una tabla interna (generalmente llevada en PCB) donde se indica las
páginas válidas.
2. Si la referencia no es válida, se cancela la
ejecución del proceso.
3. Encontrar un frame disponible para cargarla (la
página está en disco)(por ejemplo de la free frame list)
4. Solicitar operación de I/O para leer la página de
disco cargarla en el frame obtenido.
5. Modificar la tabla interna y la tabla de páginas
para que ahora está página figure como que está en memoria.
6. Continuar con la ejecución del proceso en la
instrucción en la que fue interrumpido.
3.3.4 Sistemas de Paginación Segmentación
Sistemas de Paginación / Segmentación
Ofrecen las ventajas de las dos técnicas de
organización del almacenamiento virtual [7, Deitel].
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.
Inicio: Fin:
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 (ver Figura 3.31 [7, Deitel]).
El proceso en ejecución hace referencia a la
dirección virtual v = (s,p,d) (ver Figura 3.32 [7, Deitel]).
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.
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:
• 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.
Inicio: Fin:
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 (ver Figura 3.33 [7, Deitel]).
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.
SEGMENTACION/PAGINACION
Tanto la Segmentación como la paginación ofrecen
significativas ventajas, algunos sistemas (Multics y la Serie 370 de IBM)
combinan ambas técnicas en donde los segmentos tienen un tamaño multiplo de
página.
Este método utiliza Segmentación y Paginación tal y
como su nombre lo indica, el proceso es el siguiente: - Se hace la solicitud de
acceso por medio de una dirección “V” la cual contiene los campos Segmento,
Página y Desplazamiento. Con el campo Segmento, lo que se trata es de accesar a
una Tabla de segmentos, cada campo de dicha tabla apunta directamente a la
tabla de páginas asignada para ese segmento conteniendo una dirección que será
sumada a una dirección en la Tabla Asociativa para por fin formar una dirección
real con el desplazamiento de “V”.
En un sistema con un número muy grande de procesos,
segmentos o páginas, ésta estructura puede consumir una parte muy importante de
la memoria real. La cuestión es que la traducción de direcciones puede
realizarse con rapidez pero si se tienen demasiadas tablas, el sistema puede
soportar menos procesos y bajar su rendimiento
Sistema de paginación
Los sistemas de paginación son los utilizados para
dividir los programas en páginas y así poder utilizar programas de mayor tamaño
que la memoria principal, ya que las paginas no son cargadas todas a la vez en
la memoria principal. l traspaso de datos entre los distintos niveles de
almacenamiento se realiza eventualmente en páginas de longitud fija, tal y como
ocurre en la actualidad en los sistemas de memoria virtual. El tamaño de la
página es un parámetro del sistema y no está determinado por las longitudes de
registro elegidas por los programadores. Al usarse la paginación, los datos
serán lógicamente independientes del tamaño de página, pero tendrán que ser
físicamente “empaquetados” para que encajen en las páginas.
En los casos en que se usa hardware de
almacenamiento a niveles múltiples, el traspaso se hace por bloques, semejantes
a las páginas. Esta técnica se conoce con el nombre de promoción o staging.
Segmentación
El objetivo de la segmentación al igual que el de la
paginación es el de dar la facilidad de realizar programas que sean más grandes
que la memoria principal, pero la segmentación, a diferencia de la paginación,
puede dividir los programas en segmentos que no necesariamente sean del mismo
tamaño, pero para poder cargar un segmento en memoria al igual que para cargar
una página debe de existir el suficiente espacio contiguo de memoria principal
para cargarlo.
La segmentación en ocasiones puede ser usada al
mismo tiempo que la paginación.
Ventajas:
Con respecto a la performance del sistema: Se
cuenta con una memoria virtualmente más extensa con la misma memoria
real. Se utiliza mucho más eficientemente la memoria real.
Este esquema permite que la parte de los
programas que no se utiliza no ocupe lugar en la memoria y en cambio quede
disponible para agregar más programas en la mezcla de multiprogramación.
Con respecto al desarrollo de aplicaciones: Al
eliminar las restricciones de memoria permite diseñar los sistemas más
fácilmente, en menor tiempo y a menos costo. Hace más sencillo el mantenimiento
y la ampliación de los programas. Hace más justificable el diseño e
implementación de algunas aplicaciones, cuyos requerimientos de memora varíen
bastante en su ejecución de acuerdo al volumen y complejidad de las
transacciones. con respecto a la operación del computador: Permite que un
equipo de una memoria real menor pueda ser usado sin dificultad como back-up en
caso de necesidad. Hace innecesario efectuar ciertos procedimientos cuyo único
propósito es un mejor aprovechamiento de la memoria real. Simplifica las
actividades de planificación.
Desventajas:
Costo asociado a la transformación de
direcciones; memoria adicional que requiere para almacenar las tablas que debe
mantener el sistema operativo (memoria real de la parte residente del sistema
operativo)para indicar: la cantidad de memoria real implementada, las secciones
que están presente en la memoria real y sus direcciones de ubicación, y
elementos de juicio para determinar qué secciones se tratarán de dejar en
memoria real y cuáles no, o que sección será desplazada cuando otra sección de
memoria virtual deba ser llevada a memoria real; pequeño desperdicio de memoria
que se produce en la última página de un programa (ya que rara vez el tamaño
del programa es múltiplo del tamaño de las páginas); merma en el rendimiento
del computador si es incorrectamente utilizada; posible incremento del tiempo
de ejecución de cada programa como consecuencia de la paginación (operaciones
de entrada/salida que demorarán la ejecución del programa).
Los procedimientos de implementación de la memoria virtual se basan en que cuando se ejecuta un programa, éste está parcialmente en memoria, es decir, sólo hay cargada aquella zona de código y datos que se necesitan en ese instante de tiempo, y no el programa completo. La memoria virtual es la separación entre la memoria lógica disponible para el usuario y la memoria RAM, se implementa generalmente con el método de paginación por demanda aunque también se puede implementar en un sistema con segmentación.
Memoria Virtual
El término memoria virtual se asocia a dos conceptos que normalmente a parecen unidos:
El uso de almacenamiento secundario para
ofrecer al conjunto de las aplicaciones la ilusión de tener mas memoria
RAM de la que realmente hay en el sistema. Esta ilusión de existe tanto a
nivel del sistema, es decir, teniendo en ejecución mas aplicaciones de las que
realmente caben en la memoria principal, sin que por ello cada aplicación
individual pueda usar mas memoria de la que realmente hay o incluso de forma mas
general, ofreciendo a cada aplicación mas memoria de la que existe físicamente
en la maquina.
Ofrecer a las aplicaciones la ilusión de que
están solas en el sistema, y que por lo tanto, pueden usar el espacio de
direcciones completo. Esta técnica facilita enormemente la generación de
codigo, puesto que el compilador no tiene porque preocuparse sobre dónde
residirá la aplicación cuando se ejecute.
Espacio De Direcciones
Los espacios de direcciones involucrados en el manejo de la memoria son de tres tipos:
Los espacios de direcciones involucrados en el manejo de la memoria son de tres tipos:
Direcciones físicas: son aquellas que
referencian alguna posición en la memoria física.
Direcciones lógicas: son las direcciones
utilizadas por los procesos. Sufren una serie de transformaciones, realizadas
por el procesador (la MMU), antes de convertirse en direcciones físicas.
Direcciones lineales: direcciones lineales se
obtienen a partir de direcciones lógicas tras haber aplicado una transformación
dependiente de la arquitectura.
Los programas de usuario siempre tratan con
direcciones virtuales; nunca ven las direcciones físicas reales.
Unidad De Manejo De Memoria
La unidad de manejo de memoria (MMU) es parte del procesador. Sus funciones son:
La unidad de manejo de memoria (MMU) es parte del procesador. Sus funciones son:
Convertir las direcciones lógicas emitidas por
los procesos en direcciones físicas.
Comprobar que la conversión se puede realizar.
La dirección lógica podría no tener un dirección física asociada. Por
ejemplo, la pagina correspondiente a una dirección se puede haber trasladado a
una zona de almacenamiento secundario temporalmente.
Comprobar que el proceso que intenta
acceder a una cierta direccion de memoria tiene permisos para ello.
La MMU se Inicializa para cada proceso del
sistema. Esto permite que cada procesop pueda usar el rango completo de
direcciones lógicas (memoria virtual), ya que las conversiones de estas
direcciones serán distintas para cada proceso.
En todos los procesos se configura la MMU para
que la zona del núcleo solo se pueda acceder en modo privilegiado del
procesador.
La configuración correspondiente al espacio de memoria del núcleo es
idéntica en todos los procesos.
No hay comentarios:
Publicar un comentario