Swapping y esquemas de asignación

De Departamento de Informatica
Saltar a: navegación, buscar

Contenido

Swapping

Visión esquemática de swapping.

Introducción

Swapping (del inglés "swap", que significa intercambiar) es mover un proceso o parte de él temporalmente desde la memoria principal a un dispositivo secundario de almacenamiento (memoria de apoyo) para luego devolverlo a la memoria principal. El propósito de esta técnica es que el sistema operativo sea capaz de asignar más memoria de la que tiene físicamente. De esta forma, en el caso que algún proceso requiera de memoria y ya esté toda asignada o no haya suficiente, el kernel se preocupa de intercambiar páginas de memoria desde y hacia la memoria de apoyo para hacerle espacio.

La memoria de apoyo debiera ser rápida y de tamaño suficiente para almacenar las copias de imágenes de memoria de los procesos, también debe proporcionar acceso directo a estas imágenes. El disco duro es usualmente quien funciona como memoria de apoyo.

Todos los sistemas operativos actuales cuentan con alguna versión de swapping (Windows, Linux y UNIX). El sistema mantiene una cola de procesos en estado ready que están listos para ser ejecutados y cuyas imágenes de memoria se encuentran en el disco.

Ventajas

Permite correr una mayor cantidad de programas y de estar bien configurada, puede mejorar el rendimiento de los procesos ejecutados.

Desventajas

Un problema no menor del swapping reside en los tiempos necesarios para realizar las copias a la memoria de apoyo ya que normalmente son discos duros y es muy costoso en términos de tiempo estar constantemente copiando y leyendo procesos (varios órdenes de magnitud), cuando estos tiempos se hacen muy largos, pueden terminar haciendo más lenta la ejecución del programa. Este problema es conocido como "thrashing" y la forma más simple de solucionar es agregar más memoria o bien, mejorar el diseño de las aplicaciones para que disminuyan su consumo.

Otra desventaja es la problemática de donde almacenar los bloques transferidos que se sacan de la memoria principal, para solucionar este problema es necesario referirse al y prioridad del proceso, si se encuentra activo constantemente y tiene alta prioridad se deja en memoria, si el proceso presenta grandes lapsos de inactividad es conveniente pasarlo a disco duro, y si está en un punto intermedio puede convenir traspasarlo hacia el buffer del sistema operativo.

Uso en sistemas operativos

Windows:

La memoria virtual se introdujo en Windows desde la versión 3.1 en 1991. El sistema operativo crea un archivo oculto y lo usa como memoria virtual. Generalmente se encuentra en el directorio raíz, pero puede estar en el directorio WINDOWS. Su tamaño depende de la configuración que el usuario escoja, el valor por defecto es 1,5 veces la cantidad de memoria física. Cabe agregar que el cambiar muchas veces el tamaño del archivo swap puede hacerlo mas propenso a fragmentarse, lo que disminuye el rendimiento (este archivo no se fragmenta con las herramientas de Windows como ntfsdefrag). El archivo viene protegido para que no pueda ser eliminado o movido, si se sobrepasa esta restricción, el sistema dejará de funcionar al reiniciar, cayendo en una BSoD (Blue Screen of Death).

Linux:

Aquí es posible designar una partición entera del disco duro como memoria virtual. Aunque es posible usar también un archivo, se recomienda asignar una partición separada ya que disminuye la probabilidad de fragmentación. Una área de swap es creada al ejecutar el comando "mkswap filename/device". Para aumentar el rendimiento del swapping, se recomienda también dejar la partición al comienzo del disco duro, ya que las transferencias son ligeramente mas rápidas que al final del disco.

Roll out, roll in

Es una variante del swapping que se usa para algoritmos de itineración basados en proridades. La idea consiste en remover de la memoria principal los procesos con baja prioridad ("rolled out") para hacer espacio y ejecutar procesos con prioridad más alta ("rolled in").

Esquemas de asignación

Asignación Contigua

Asignación contigua es cuando un objeto lógico es colocado en un conjunto de posiciones de memoria con direcciones consecutivas de manera obligada.

Un espacio de memoria se divide por lo general en dos tipos: una parte orientada y destinada en el Sistema Operativo y otra destinada a proceso de usuario

Asignación con una sola partición

Esta asignación se carga un solo proceso a la vez. Toda la memoria del ordenadora excepcion de una pequeña parte reservada para el Sistema Operativo esta disponible para una aplicacion individual Estos procesos se conocen como procesos transitorios. El Sistema Operativo necesita tener conocimiento de su primera y ultima posición disponible para la asignación de procesos transitorios. Cuando el proceso transitorio termina, el Sistema Operativo puede cargar otro para que se ejecute. Dentro de las responsabilidades del sistema operativo para esta asignación es asegurarse que el tamaño de la imagen este dentro de los limites de memoria disponible, sino el proceso no se cargara. MS-DOS es un ejemplo de un sistema que asigna memoria de esta manera.

Asignación con múltiples particiones

La asignación con múltiples asignaciones consiste en ejecutar varios procesos a la vez en memoria. La idea central consiste en dividir la memoria en varias particiones normalmente contiguas, ubicando un proceso en cada partición. Cada partición puede contener toda la información para un trabajo o tarea específica. Esta asignación requiere de algún soporte de hardware para evitar que los trabajos interfieran unos con otros o con el Sistema Operativo. La división puede llevarse de manera estática y dinámica


Asignación de Memoria con particiones estáticas
.

Asignación Estática La asignación estática divide a la memoria principal en un conjunto de regiones no sobrepuestas llamadas particiones. Estas particiones se efectúan en algún momento antes de ejecutar los programas de usuario y permanecen siempre fijas. El numero de participaciones distintas representa el grado de multiprogramación del sistema. Si un proceso tiene un tamaño menor o igual a la participación puede ser cargado. En el caso contrario el programador debe diseñar la aplicación con soporte para overlays. Si todas las particiones están ocupadas el Sistema Operativo puede hacer un intercambio de un proceso fuera de una partición. IBM System/360 Sistema operativo multiplicación con un número fijo de tareas (MFT) es un ejemplo de la partición estática.

Las dificultades de esta asignación son:

  • cuando un programa es demasiado grande para caber en una partición, por lo que si el programa no se ha diseñado mediante superposición, simplemente no se puede ejecutar.
  • Malgaste de espacio interno a cada partición cuando el bloque que se carga es menor del tamaño reservado, lo que es conocido como fragmentación interna, es decir, cualquier proceso por pequeño que sea, ocupará una partición completa.
Ejemplo de particiones dinámicas
.

Asignación Dinámica La memoria dinámica es un espacio de almacenamiento que se puede solicitar en tiempo de ejecución. Además de solicitar espacios de almacenamiento, también podemos liberarlos (en tiempo de ejecución) cuando dejemos de necesitarlos. El número de particiones y su tamaño es variable, las cuales son creadas dinámicamente para que se acomoden a las necesidades de cada proceso solicitante. Cuando un proceso termine o sea retirado de memoria el gestor de memoria puede devolver el espacio vacante al fondo de áreas de memoria libres a partir del cual se efectúan las asignaciones de particiones. Multiprogramación con un número variable de tareas (MVT) es un ejemplo de dinámica. Dentro de la asignacion de memoria dinamica existen tres algoritmos para la ubicacion de nuevos procesos:

  • Mejor ajuste: consiste en ubicar el proceso en el espacio de memoria que más se ajuste a su tamaño.
  • Primer ajuste: consiste en ubicar el proceso en el primer hueco disponible, recorriendo desde el inicio de la memoria, cuyo tamaño sea suficiente para el proceso.
  • Próximo ajuste: consiste en ubicar el siguiente hueco disponible, que sea suficientemente grande, a partir de la última asignación de memoria.

Las dificultades de esta asignación son que en los productos de la entrada y salida de procesos en la memoria se van generando porciones cada vez más pequeñas de la memoria sin utilizar, lo que se conoce como fragmentación externa. Su solución va en recurrir a la compactación de memoria de manera de eliminar los espacios entre procesos re ubicando estos en memoria de forma dinámica.

Asignación No Contigua

La Asignación no contigua es cuando la memoria se asigna de tal modo que partes de un solo objeto lógico pueden ser colocadas en áreas no contigua de memoria física. Esta asignación permite la ejecución de procesos cuando solo algunas partes de sus espacios de direcciones están residentes en memoria principal.



Paginación

La Paginación permite que la memoria de un proceso no sea contigua, el método básico de implementación divide la memoria física en bloques de tamaño fijo llamados marcos y la memoria lógica en bloques del mismo tamaño llamados páginas. Las páginas activas de un proceso se cargan en los marcos de la memoria principal que estén disponibles mientras que las paginas inactivas se quedan en memoria secundaria.
Paginación.jpg

La dirección lógica generada consta de dos partes:

  • Número de Pagina (p).
  • Desplazamiento dentro de la página (d).

La tabla de páginas: (contiene la dirección base en memoria física)

  • Permite establecer una correspondencia entre el número de página y un número de marco de memoria física (al numero de pagina p le corresponde el numero de marco n)

La dirección física es el número de marco (m) y el desplazamiento (d).

Paginación2.0.jpg
.

Los tamaño de páginas y marcos son definidos por hardware, normalmente se escoge un tamaño de página potencia de 2 ya que es más fácil la traducción de direcciones lógicas a físicas

Ejemplos
.

Podemos observar en la imagen la memoria logica la tabla de paginas y la memoria fisica. En el ejemplo 1 vemos que se tienen numeros de paginas ordenados de 0 a 3. En la tabla de paginas se puede ver la correspondencia entre el numero de pagina y el marco de la memoria fisica. En el ejemplo 2 se ilustra mejor, se puede ver que la memoria logica consta de 4 bits por pagina, luego se hacen las asignaciones en la tabla de paginas y por ultimo la correspondencia en la memoria fisica, se debe aclarar que cada marco consta de 4 bits, por lo tanto el marco 0 de la memoria fisica va desde 1 a 3, el marco 1 de 4 a 7, etc. La pagina 0 se asigna al marco 5 que corresponde a los bits 20 a 23.

Segmentación

Segmentacion.png
.

En la Segmentación el espacio de direcciones lógicas se compone de un conjunto de segmentos: Cada uno tiene un nombre y una longitud.

  • Para el usuario las direcciones especifican el nombre del

segmento y el desplazamiento dentro de él.

  • El nombre del segmento se numera (es un número).
    • <número segmento, desplazamiento>
  • El procesador Intel 8086 usa segmentación, los programas se separan en:
    • Segmento de Código.
    • Segmento de Datos.
    • Segmento de Pila.
  • Hay una división lógica del proceso en diferentes segmentos.
  • Hardware de segmentación mediante Tabla de segmentos:
  • Establece la correspondencia entre direcciones físicas y lógicas.
  • Se busca en la tabla de acuerdo con el número de segmento.
  • Cada entrada 2 registros:
    • base (dir. Física inicial del segmento en memoria)
    • límite de segmento (longitud del segmento)
  • Se compara límite del segmento con desplazamiento.
  • Si desplazamiento válido, se suma a la dirección el registro base.
Segmentacion1.0.png
.
Herramientas personales
Espacios de nombres
Variantes
Acciones
Navegación
Herramientas