Download Manejo o gestión de memoria - hungria berbesi. Sistemas Operativos

Document related concepts

Memoria virtual wikipedia , lookup

Archivo proyectado en memoria wikipedia , lookup

Paginación de memoria wikipedia , lookup

Visopsys wikipedia , lookup

Tabla de paginación wikipedia , lookup

Transcript
1
Memoria Virtual.
¿Qué podemos hacer si un programa es demasiado grande para caber en la memoria disponible? Una
posibilidad es usar superposiciones (overlays), como en MS-DOS: dividimos el programa en trozos
independientes, y los vamos cargando de a uno, a medida que se necesiten. Por ejemplo, compilador
de dos pasadas: Cargamos primero el código de la primera pasada, la ejecutamos, y después la
descartamos para cargar el código de la segunda pasada. Las rutinas comunes y estructuras de datos
compartidas entre las dos pasadas las mantenemos en memoria permanentemente. El problema es que
agregamos complejidad a la solución. No siempre es fácil dividir un programa grande en unidades
independientes, que no interactúan entre sí.
Mucho mejor sería poder extender la memoria de manera virtual, es decir, hacer que el proceso tenga
la ilusión de que la memoria es mucho más grande que la memoria física (o que el trozo de memoria
física que le corresponde, si tenemos multiprogramación). El sistema operativo se encarga de
mantener en memoria física los trozos (páginas) que el proceso está usando, y el resto en disco. Ya
que el disco es barato, podemos tener espacios de direccionamiento enormes.
Manejo o gestión de memoria VIRTUAL
Figura 1: Memoria Virtual
2
El propósito de manejar la memoria es optimizar el uso del RAM (Random Access Memory). El
RAM consiste de uno o más chips en el motherboard o tarjeta madre que mantiene los datos e
instrucciones en forma temporera mientras el procesador los interpreta y ejecuta. El sistema operativo
limpia las áreas de memoria que están ocupadas por los datos e instrucciones cuando éstos ya no se
están usando.
Algunos sistemas operativos usan memoria virtual (Virtual Memory - VM) para optimizar el uso del
RAM. Con la memoria virtual, el sistema operativo asigna una porción de un medio de
almacenamiento, usualmente el disco duro, para funcionar como RAM adicional. Según se
interacciona con un programa, parte de él puede estar en el RAM y el resto del programa está en el
disco duro, el que se está usando como memoria virtual.
El área que el disco duro usa para memoria virtual es llamada “swap file”, pues intercambia (“swap”)
datos, información e instrucciones entre la memoria y el almacenamiento. Una página (page) es la
cantidad de datos e instrucciones que se pueden intercambiar en un momento dado. A la técnica de
intercambiar entre memoria y almacenamiento se le llama “paging”. Cuando un sistema operativo está
mucho tiempo haciendo “paging” en vez de ejecutando una aplicación, se dice que el sistema está
“thrashing”. Por ejemplo, cuando se intenta acceder a una página del Internet, la página ya bajó, pero la
luz del disco duro sigue encendida. Si el “thrashing” sucede con mucha frecuencia, es posible que la
computadora necesite más RAM.
QUE ES LA MEMORIA VIRTUAL.
La memoria virtual es una técnica que permite ejecutar procesos que no caben totalmente en memoria
RAM (memoria física). Esto propicia la creación de programas que sean más grandes que la memoria
física. Además, la memoria virtual ayuda a crear un esquema de abstracción de la memoria que la separa
de la zona lógica que el usuario ve, esto facilita enormemente la tarea a los programadores puesto que no
se han de preocupar por limitaciones de memoria.
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.
3
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.
En el momento en que en el sistema empieza a escasear la memoria, se crea un fichero SWAP
(intercambio) en el disco que sirve como ampliación auxiliar de memoria. En el caso de Windows,
cuando tenemos muchas aplicaciones en funcionamiento y la memoria RAM se agota, el sistema se
apoya en el fichero SWAP para realizar movimientos desde el disco duro a la RAM y viceversa. De ese
modo crean espacios en memoria física para ir ejecutando las órdenes. Esto, evidentemente, hace que el
sistema vaya más lento.
Todo ello permite simular la existencia de 4GB de RAM en el equipo, a pesar de que nadie dispone de
4GB en su ordenador (a excepción de algunos sistemas en empresas y universidades), y dar capacidad de
ejecución a múltiples aplicaciones por grandes que sean.
QUE ES LA MEMORIA VIRTUAL, EL ARCHIVO DE PAGINACION Y COMO
PERSONALIZAR SU TAMAÑO.
Como todos sabemos a estas alturas, los programas que se van a ejecutar y sus correspondientes archivos
pasan del disco duro (que es donde están almacenados) a la memoria del equipo, que es desde donde se
ejecutan. Esto es así porque los sistemas operativos necesitan que todo el programa que se va a
ejecutar esté cargado en memoria.
Pero los programas no siempre caben íntegramente en la RAM, ni tampoco es necesario que se
encuentren íntegramente en ésta. Hay que tener en cuenta que no sólo se trata del programa que
vayamos a ejecutar, sino que también se trata de todos los programas que se cargan en el inicio, incluido
el propio sistema operativo.
Esto afortunadamente no funciona de este modo, ya que si fuera así de poco servirían las capacidades
que alcanzan los ordenadores actuales, y mucho menos la posibilidad de trabajar en multisesión, ya que
estaríamos obligados a instalar cantidades enormes de memoria RAM.
Para evitar esto existe la Memoria virtual.
4
La memoria virtual ha sido definida en muchas ocasiones como una zona del disco duro que se utiliza
como si fuera memoria RAM cuando esta es insuficiente o está próxima a terminarse.
Esta definición, tal y como está expresada, no es del todo exacta, ya que el tamaño de la memoria
virtual es inversamente proporcional a la memoria RAM instalada (que sería lo lógico si esto fuera así),
sino que más bien hay una relación de proporcionalidad directa (es decir, a más cantidad de memoria
RAM
corresponde
un
tamaño
mayor
de
archivo
de
paginación).
Tampoco existe una relación directa entre la memoria virtual utilizada y la cantidad de memoria RAM
disponible, ya que se puede dar el caso de que un proceso necesite muchos segmentos en ejecución
inmediata y entonces estos permanecen en la RAM o que tan solo una pequeña parte del programa se va
a ejecutar de inmediato, con lo que en la RAM tan sólo quedaría una pequeña parte de éste, es decir, tan
sólo unos pocos segmentos.
Una definición más real de lo que es la memoria virtual sería la siguiente: Memoria virtual es una zona
de almacenamiento temporal utilizado por un equipo para ejecutar programas que necesitan más
memoria de la existente, almacenando en ella los segmentos de acceso no inmediato.
Esto, aunque pueda parecer lo mismo, no lo es. Para empezar, debemos tener en cuenta que cuando
cargamos un programa pasa a la memoria para ejecutarse (como ya hemos dicho), pero todo el programa
no se ejecuta al mismo tiempo, sino que realmente se ejecuta por segmentos, pudiéndose llegar (y de
hecho se llega) al caso de haber partes del programa que ni tan siquiera se ejecutan.
Precisamente es en estos casos cuando vemos la verdadera función de la memoria virtual y como
funciona.
Vamos
a
ver
de
una
forma
bastante
resumida
como
sería
este
funcionamiento:
Cuando nosotros cargamos un programa, este es leído del disco duro y pasa a la RAM, desde donde se
ejecuta, empezando por el propio arranque del programa. Pero no todo el programa se ejecuta a la vez,
sino que se ejecuta por segmentos, dependiendo de aquellos que se vayan a utilizar de forma inmediata,
empezando por el inicio del programa, definiéndose estos mediante un sistema de paginación.
Este sistema, que tiene una explicación bastante más larga y laboriosa, pero que para su fácil
comprensión he resumido de este modo, recibe el nombre de segmentación paginada.
5
Dado este sistema de funcionamiento, realmente no es necesario que todo el programa permanezca en la
RAM, ya que tan sólo es preciso que permanezcan aquellas partes del programa que son de ejecución
inmediata. El resto (que también debe permanecer en memoria) pasa a la memoria virtual,
recuperándose aquellas partes (segmentos) que se van a ejecutar en el momento de hacerlo y volviendo a
pasar a la RAM, desde donde se ejecutan, y volviendo a la Memoria virtual una vez ejecutadas.
Bien, llegados a este punto podemos pensar lo siguiente: Y si la memoria virtual está en el disco duro
¿Cuál es entonces la ventaja que tenemos?, porque visto así puede parecer una simple pérdida de tiempo
y de espacio en disco. Pues bien, es cierto que volvemos a copiar una información del disco duro en el
disco duro, pero en primer lugar ya hemos dicho que para que un programa se ejecute este debe estar
cargado integramente en memoria, y en segundo lugar estamos copiando esta información en un
archivo optimizado del disco duro, en el que la información se copia sin ningún tipo de fragmentación
(por lo que el acceso a ella es muchísimo más rápido). Este archivo se denomina archivo de
paginación. La nombre exacto de este archivo es pagefile.sys, y se trata de un archivo oculto de
sistema.
¿Y qué ventaja obtenemos con este sistema? Pues para empezar liberar memoria RAM (y precisamente
por esto es por lo que indiqué que la primera definición dada de memoria virtual no era del todo exacta,
porque no es necesario que haya poca memoria RAM o esta esté agotándose para que actúe este
sistema), ya que en ésta tan solo quedan cargados aquellos segmentos del programa que vamos a utilizar
de forma inmediata, permitiendo que otras tareas o incluso otros programas puedan cargarse en la RAM.
Además, esto nos da la posibilidad de ejecutar procesos que sean más grandes que la cantidad de
memoria física (RAM) que tenemos. Tamaño de la memoria virtual (archivo de paginación):
El archivo de paginación, tiene un tamaño asignado, es decir que su tamaño no depende de la
información que pueda contener en un momento dado.
Vamos
a
ver
qué
tamaño
es
el
recomendado
para
este
archivo
de
paginación.
Aunque no existe un tamaño definido, Windows Vista siempre asigna un valor inicial. Este valor,
dependiendo de la cantidad de memoria RAM que tengamos instalada, se encuentra entre la cantidad de
memoria RAM instalada más 300MB y tres veces la cantidad de memoria RAM instalada. Para equipos
con poca memoria RAM instalada y poca capacidad de disco duro el valor mínimo se asignación inicial
puede bajar.
6
¿Y qué pasa si la cantidad asignada a la memoria virtual resulta insuficiente para la ejecución de un
proceso determinado? Pues simplemente que Windows nos lo notificará y nos pedirá autorización para
aumentar el tamaño de la memoria virtual (es decir, del archivo de paginación).
Ahora bien, nosotros podemos personalizar el tamaño de este archivo, dependiendo de nuestras
necesidades y de factores tales como el espacio disponible en el disco duro.
Personalizar el tamaño de la memoria virtual:
Para personalizar el tamaño de la memoria virtual hay que seguir los siguientes pasos:
En primer lugar vamos a Equipo y pulsamos con el botón secundario (derecho) del ratón. En el menú
contextual que se nos muestra elegimos Propiedades.
En el panel izquierdo encontramos la leyenda Configuración avanzada del sistema. Hacemos clic en
ella
y
se
nos
muestra
la
siguiente
ventana:
7
En dicha ventana vamos a la pestaña Opciones avanzadas, y dentro de estas a Rendimiento. Hacemos
clic en el botón de Configuración.
8
En la ventana que se nos muestra vamos de nuevo a la pestaña Opciones avanzadas, donde vemos la
información referente a Memoria virtual. Hacemos clic en Cambiar, con lo que se nos muestra la
siguiente ventana.
9
Lo primero que tenemos que hacer en esta ventana es desactivar la opción Administrar
automáticamente el tamaño del archivo de paginación para todas las unidades.
En la imagen podemos ver que se nos muestran tres referencias: El tamaño mínimo permitido (señalado
en rojo), el tamaño recomendado (señalado en azul) y el tamaño actual (señalado en verde).
En Unidad hacemos clic en la unidad que contiene el archivo de paginación que queremos cambiar de
tamaño.
10
Hacemos clic en Tamaño personalizado y escribimos los nuevos valores (en Megabytes), tanto el
tamaño inicial (en el cuadro Tamaño inicial) como el tamaño máximo (en el cuadro Tamaño máximo).
Podemos modificar sólo uno de estos parámetros.
Podemos deshabilitar la memoria virtual, pero esto no es recomendable (por mucha RAM que tengamos
instalada), ya que si bien por un lado vamos a ganar espacio en el disco duro, por otro lado toda la
información que debería grabarse en este archivo va a permanecer en la RAM, por lo que vamos a
estar utilizando una gran cantidad de RAM de una forma totalmente inútil e ineficaz.
Por otro lado, un archivo de paginación demasiado grande supone un desperdicio de espacio en el disco
duro, lo que tampoco es muy interesante, aunque el precio de MB en éstos sea bastante económico.
Si aumentamos el tamaño del archivo de paginación (memoria virtual) no es necesario reiniciar el
equipo, pero si lo que hacemos es disminuir este tamaño sí que necesitaremos reiniciarlo para que los
cambios surtan efecto.
A muchos personalmente este parámetro me gusta dejarlo tal y como viene predeterminado, es decir,
dejar que Windows gestione su tamaño. De esta forma suele funcionar bastante bien, por lo que, salvo
que tengamos un serio problema de espacio en disco, no recomiendo modificarlo, a no ser que se esté
muy seguro de lo que se hace y se sepa muy bien qué valor es el más apropiado para nuestras
necesidades y la configuración de nuestro equipo.
11
Hay que tener presente que un tamaño demasiado pequeño del archivo de paginación va a hacer que el
ordenador se ralentice y, en el mejor de los casos, que hagamos un uso de la RAM excesivo e
innecesario, como ya hemos comentado.
Esto último se explica debido a que el acceso de los datos al disco duro es miles de veces más lento que
a la memoria RAM. Si una porción de memoria no se encuentra en esta, el sistema necesita tiempo para
leerlo y volverlo a la memoria principal, para ejecutarlo.
Como ves la memoria se organiza en niveles. Primero las caches del micro que se encargan de tener esos
datos que más usas cerca del procesador y después pasamos a la memoria RAM, quedando como último
recurso el disco duro. A mayor proximidad al procesador, mayor velocidad pero esa memoria es mucho
más cara.
¿Por qué es tan importante?
Si nos quedamos sin memoria no podremos ejecutar más programas y los que estamos ejecutando
tendrán problemas para trabajar con más datos. Además, el uso de memoria virtual puede hacer que tu
equipo funcione más lento si es necesario ir por datos al disco duro. Es siempre un compromiso entre la
velocidad y la cantidad de datos que el sistema es capaz de procesar.
Jamás una configuración de mayor memoria virtual podrá ser mejor que una ampliación de memoria
RAM. Es más, lo ideal sería tener un equipo que no necesitara tener esta característica activada debido a
que tiene un exceso de memoria principal.
Fallos de página
Un fallo de página es la secuencia de eventos que ocurren cuando un programa intenta acceder a datos (o
código) que está en su espacio de direcciones, pero que no está actualmente ubicado en la RAM del
sistema. El sistema operativo debe manejar los fallos de página haciendo residentes en memoria los
datos accedidos, permitiendo de esta manera que el programa continúe la operación como que si el fallo
de página nunca ocurrió.
En el caso de nuestra aplicación hipotética, el CPU primeramente presenta la dirección deseada (12374)
al MMU. Sin embargo, el MMU no tiene traducción para esta dirección. Por tanto, interrumpe al CPU y
causa que se ejecute un software, conocido como el manejador de fallos de página. El manejador de
fallos de página determina lo que se debe hacer para resolver esta falla de página. El mismo puede:

Encontrar dónde reside la página deseada en disco y la lee (este es usualmente el caso si el fallo
de página es por una página de código)

Determina que la página deseada ya está en RAM (pero no está asignada al proceso actual) y
reconfigura el MMU para que apunte a el

Apunta a una página especial que solamente contiene ceros y asigna una nueva página para el
proceso solamente si este intenta alguna vez escribir a la página especial (esto se llama una
12
página de copia en escritura y es utilizada a menudo por páginas que contienen datos
inicializados a cero)

Obtener la página deseada desde otro lugar (lo que se discute en detalle más adelante)
Mientras que las primeras tres acciones son relativamente sencillas, la última no lo es. Por eso
necesitamos cubrir algunos tópicos adicionales.
El conjunto de direcciones de trabajo
El grupo de páginas de memoria física actualmente dedicadas a un proceso específico se conoce como
conjunto de direcciones de trabajo para ese proceso. El número de páginas en el conjunto de direcciones
de trabajo puede crecer o reducirse, dependiendo de la disponibilidad general de páginas del sistema.
El conjunto de direcciones de trabajo crece si un proceso tiene fallos de páginas. El conjunto de
direcciones de trabajo se reduce a medida que existen menos y menos páginas libres. Para evitar que se
acabe la memoria completamente, se deben eliminar las páginas del conjunto de direcciones de trabajo y
convertirlas en páginas libres, disponibles para un uso posterior. El sistema operativo reduce el conjunto
de direcciones de trabajo mediante:

Escribiendo las páginas modificadas a un área dedicada en un dispositivo de almacenamiento
masivo (usualmente conocido como espacio de intercambio o de paginado)

Marcando las páginas sin modificar como libres (no hay necesidad de escribir estas páginas fuera
del disco pues no se han cambiado)
Para determinar los conjuntos de trabajo apropiados para todos los procesos, el sistema operativo debe
hacer un seguimiento de la información de uso de todas las páginas. De esta manera, el sistema
operativo determina cuales páginas son usadas activamente (y deben mantenerse en memoria como
residentes) y cuales no (y por lo tanto, se pueden eliminar de memoria). En la mayoría de los casos, se
utiliza un tipo de algoritmo de "menos usado recientemente" para determinar cuales páginas son
elegibles para eliminarse de los conjuntos de trabajo de los procesos.
Intercambio
Mientras que el hacer intercambio de memoria (swapping, escribiendo páginas modificadas al espacio
swap del sistema) es una parte normal de la operación del sistema, es posible experimentar demasiado
intercambio. La razón por la que estar atentos ante el excesivo intercambio es que la situación siguiente
puede ocurrir fácilmente, y repetirse una y otra vez:

Las páginas de un proceso son intercambiadas (swapped)

El proceso se vuelve ejecutable e intenta acceder a una página en el espacio de intercambio

La página es colocada en memoria (lo más probable forzando a otras páginas de procesos a que
sean extraídas de allí)

Un momento después, la página es colocada nuevamente fuera de memoria
13
Si esta secuencia de eventos se extiende demasiado, esto se conoce como thrashing y es un indicativo de
insuficiente RAM para la carga de trabajo actual. "Trashing" es extremadamente perjudicial para el
rendimiento del sistema, pues las cargas de CPU y E/S que se pueden generar en tal situación
rápidamente sobrepasa la carga impuesta por el trabajo real del sistema. En casos extremos, puede que el
sistema no realice ningún trabajo útil, consumiendo todos sus recursos moviendo páginas dentro y fuera
de memoria.
Implicaciones de rendimiento de la memoria virtual
Mientras que la memoria virtual hace posible que las computadoras manejen más fácilmente
aplicaciones más grandes y complejas, como con cualquier otra herramienta, esto viene a un precio. El
precio en este caso es el de rendimiento — la memoria virtual de un sistema operativo tiene mucho más
que hacer que un sistema operativo sin memoria virtual. Esto significa que el rendimiento nunca es tan
bueno con memoria virtual como lo es cuando la misma aplicación esta 100% residente en memoria.
Sin embargo, esta no es razón suficiente para abandonar la idea. Los beneficios de la memoria virtual
son demasiados para hacer esto. Y, con un poco de esfuerzo, es posible lograr un buen rendimiento. Lo
que se debe hacer es examinar aquellos recursos de sistemas impactados por el uso pesado del
subsistema de memoria virtual.
Escenario de rendimiento del peor caso
Por un momento, utilice lo que ha leído en este capítulo y considere qué recursos del sistema son
utilizados extensivamente por fallos de páginas y actividad de intercambio:

RAM — Obviamente la RAM disponible es poca (de lo contrario no habría necesidad de fallos
de páginas o de intercambio de páginas).

Disco — Aunque el espacio en disco puede no ser impactado, el ancho de banda de E/S (debido
a mucho paginado e intercambio) si lo será.

CPU — El CPU está utilizando ciclos haciendo el procesamiento necesario para soportar la
administración de memoria y estableciendo las operaciones necesarias de E/S para el paginado e
intercambio.
La naturaleza interrelacionada de estas cargas hace fácil entender cómo las limitaciones de recursos
pueden conducir a problemas graves de rendimiento.
Todo lo que se necesita es un sistema con poca RAM, alta actividad de fallos de páginas y un sistema
ejecutando casi en sus límites en términos de CPU o E/S de disco. En este punto, el sistema está
haciendo trashing, siendo el bajo rendimiento el resultado inevitable.
Escenario de rendimiento del mejor caso
En el mejor caso, la sobrecarga proveniente del soporte a la memoria virtual representa una carga
mínima para un sistema bien configurado:
14

RAM — Suficiente RAM para todos los conjuntos de direcciones de trabajo con suficiente
exceso para manejar cualquier fallo de página.

Disco — Debido a la actividad limitada de fallos de página, el ancho de banda de E/S de disco
será impactado de forma mínima.

CPU — La mayoría de los ciclos de CPU realmente están dedicados a ejecutar aplicaciones, en
vez de ejecutar el código de manejo de memoria del sistema
El punto a tener en mente es que el impacto en el rendimiento de la memoria virtual es mínimo cuando
se utiliza tan poco como sea posible. Esto significa que el factor determinante para un buen rendimiento
del subsistema de memoria virtual es tener suficiente RAM.
Lo siguiente (pero con mucho menos importancia) es suficiente capacidad de E/S de disco y de CPU.
Sin embargo, tenga en cuenta que estos recursos solamente ayudan a que el rendimiento del sistema se
degrade de una forma más limpia de intensivos fallos de página y del intercambio; pero hacen poco para
ayudar el rendimiento del subsistema de memoria virtual (aunque obviamente pueden jugar un papel
importante en el rendimiento global del sistema).