miércoles, 28 de noviembre de 2012

3.2.5 Multiprogramación de partición fija, partición variable, con intercambio de almacenamiento


Multiprogramación de partición fija.-

La memoria se divide en particiones de tamaño fijo (puede ser distinto el tamaño de cada partición).
Originalmente los programas se compilaban y link editaban para ejecutar en una partición en particular (direcciones absolutas). Posteriormente los compiladores y link editores generan código reubicable para que un programa pudiera ejecutar en cualquier partición de memoria suficientemente grande.
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).
Multiprogramación de partición variable.-
Cada programa o usuario utiliza tanta memoria como sea necesaria siempre que quepa en el almacenamiento real. Cuando los programas van terminando su ejecución se van generando agujeros en memoria.
Particiones fijas o particiones variables
En el esquema de la multiprogramación en memroia real se manejan dos alternativas para asignarle a cada programa su partición correspondiente: particiones de tamaño fijo o particiones de tamaño variable. La alternativa más simple son las particiones fijas. Dichas particiones se crean cuando se enciende el equipo y permanecerán con los tamaños iniciales hasta que el equipo se apague. Es una alternativa muy vieja, quien hacía la división de particiones era el operador analizando los tamaños estimados de los trabajos de todo el día. Por ejemplo, si el sistema tenía 512 kilobytes de RAM, podia asignar 64 k para el sistema operativo, una partición más de 64 k, otra de 128k y una mayor de 256 k. Esto era muy simple, pero inflexible, ya que si surgían trabajos urgentes, por ejemplo, de 400k, tenían que esperar a otro día o reparticionar, inicializando el equipo desde cero. La otra alternativa, que surgió después y como necesidad de mejorar la alternativa anterior, era crear particiones contiguas de tamaño variable. Para esto, el sistema tenía que mantener ya una estructura de datos suficiente para saber en dónde habían huecos disponibles de RAM y de dónde a dónde habían particiones ocupadas por programas en ejecución. Así, cuando un programa requería ser cargado a RAM, el sistema analizaba los huecos para saber si había alguno de tamaño suficiente para el programa que queria entrar, si era así, le asignaba el espacio. Si no, intentaba relocalizar los programas existentes con el propósito de hacer contiguo todo el espacio ocupado, así como todo el espacio libre y así obtener un hueco de tamaño suficiente. Si aún así el programa no cabía, entonces lo bloqueaba y tomaba otro. El proceso con el cual se juntan los huecos o los espacios ocupados se le llama `compactación'. El lector se habrá dado cuenta ya de que surgen varios problemas con los esquemas de particiones fijas y particiones variables: ø En base a qué criterio se elige el mejor tamaño de partición para un programa ? Por ejemplo, si el sistema tiene dos huecos, uno de 18k y otro de 24 k para un proceso que desea 20 k, ø Cual se le asigna ? Existen varios algoritmos para darle respuesta a la pregunta anterior, los cuales se ennumeran y describen enseguida.

·         Primer Ajuste: Se asigna el primer hueco que sea mayor al tamaño deseado.
·         Mejor Ajuste: Se asigna el hueco cuyo tamaño exceda en la menor cantidad al tamaño deseado. Requiere de una búsqueda exhaustiva.
·         Peor Ajuste: Se asigna el hueco cuyo tamaño exceda en la mayor cantidad al tamaño deseado. Requiere también de una búsqueda exhaustiva.
·         El Siguiente Ajuste: Es igual que el `primer ajuste' con la diferencia que se deja un apuntador al lugar en donde se asignó el último hueco para realizar la siguiente búsqueda a partir de él.
·         Ajuste Rápido: Se mantienen listas ligadas separadas de acuerdo a los tamaños de los huecos, para así buscarle a los procesos un hueco más rápido en la cola correspondiente.
Otro problema que se vislumbra desde aquí es que, una vez asignado un hueco, por ejemplo, con "el peor ajuste", puede ser que el proceso requiriera 12 kilobytes y que el hueco asignado fuera de 64 kilobytes, por lo cual el proceso va a desperdiciar una gran cantidad de memoria dentro de su partición, lo cual se le llama `fragmentación interna'.
Por otro lado, conforme el sistema va avanzando en el día, finalizando procesos y comenzando otros, la memoria se va configurando como una secuencia contigua de huecos y de lugares asignados, provocando que existan huecos, por ejemplo, de 12 k, 28k y 30 k, que sumados dan 70k, pero que si en ese momento llega un proceso pidiéndolos, no se le pueden asignar ya que no son localidades contiguas de memoria ( a menos que se realice la compactación ). Al hecho de que aparezcan huecos no contiguos de memoria se le llama `fragmentación externa'.
De cualquier manera, la multiprogramación fue un avance significativo para el mejor aprovechamiento de la unidad central de procesamiento y de la memoria misma, así como dio pie para que surgieran los problemas de asignación de memoria, protección y relocalización, entre otros.
Los overlays
Una vez que surgió la multiprogramación, los usuarios comenzaron a explorar la forma de ejecutar grandes cantidades de código en áreas de memoria muy pequeñas, auxiliados por algunas llamadas al sistema operativo. Es así como nacen los `overlays'.

Esta técnica consiste en que el programador divide lógicamente un programa muy grande en secciones que puedan almacenarse el las particiones de RAM. Al final de cada sección del programa ( o en otros lugares necesarios ) el programador insertaba una o varias llamadas al sistema con el fin de descargar la sección presente de RAM y cargar otra, que en ese momento residía en disco duro u otro medio de almacenamiento secundario. Aunque esta técnica era eficaz ( porque resolvía el problema ) no era eficiente ( ya que no lo resolvía de la mejor manera ). Esta solución requería que el programador tuviera un conocimiento muy profundo del equipo de cómputo y de las llamadas al sistema operativo. Otra desventaja era la portabilidad de un sistema a otro: las llamadas cambiaban, los tamaños de particiones también. Resumiendo, con esta técnica se podían ejecutar programas más grandes que las particiones de RAM, donde la división del código corría a cuenta del programador y el control a cuenta del sistema operativo.

Multiprogramación de Partición Fija

  • Cuando ocurre una petición de e / s la cpu normalmente no puede continuar el proceso hasta que concluya la operación de e / s requerida.
  • Los periféricos de e / s frenan la ejecución de los procesos ya que comparativamente la cpu es varios órdenes de magnitud más rápida que los dispositivos de e / s.
Los sistemas de “multiprogramación” permiten que varios procesos usuarios compitan al mismo tiempo por los recursos del sistema:
  • Un trabajo en espera de e / s cederá la cpu a otro trabajo que esté listo para efectuar cómputos.
  • Existe paralelismo entre el procesamiento y la e / s.
  • Se incrementa la utilización de la cpu y la capacidad global de ejecución del sistema.
  • Es necesario que varios trabajos residan a la vez en la memoria principal.
Multiprogramación de Partición Fija: Traducción y Carga Absolutas
Las “particiones” del almacenamiento principal:
  • Son de tamaño fijo.
  • Alojan un proceso cada una.
  • La cpu se cambia rápidamente entre los procesos creando la ilusión de simultaneidad.
Los trabajos se traducían con ensambladores y compiladores absolutos para ser ejecutados solo dentro de una partición específica
El S. O. resulta de implementación relativamente sencilla pero no se optimiza la utilización de la memoria.
Multiprogramación de Partición Fija: Traducción y Carga Relocalizables
Los compiladores, ensambladores y cargadores de relocalización:
  • Se usan para producir programas relocalizables que puedan ser ejecutados en cualquier partición disponible de tamaño suficiente para aceptarlos
  • Son más complejos que los absolutos.
  • Mejoran la utilización del almacenamiento.
  • Confieren más flexibilidad en el armado de la carga de procesos.

Protección en los Sistemas de Multiprogramación
Si se utiliza asignación contigua de memoria la protección suele implementarse con varios “registros de límites”
Los extremos superior e inferior de una partición pueden ser:
  • Delineados con dos registros.
  • Indicados el límite inferior o superior y el tamaño de la partición o región.

Fragmentación en la Multiprogramación de Partición Fija
La “fragmentación de almacenamiento” ocurre en todos los sistemas independientemente de su organización de memoria.
En los S. O. de multiprogramación de partición fija la fragmentación se produce cuando:
  • Los trabajos del usuario no llenan completamente sus particiones designadas.
  • Una partición permanece sin usar porque es demasiado pequeña para alojar un trabajo que está en espera.
Multiprogramación de Partición Variable
Los procesos ocupan tanto espacio como necesitan, pero obviamente no deben superar el espacio disponible de memoria.
No hay límites fijos de memoria, es decir que la partición de un trabajo es su propio tamaño.
Se consideran “esquemas de asignación contigua”, dado que un programa debe ocupar posiciones adyacentes de almacenamiento.
Los procesos que terminan dejan disponibles espacios de memoria principal llamados “agujeros”:
  • Pueden ser usados por otros trabajos que cuando finalizan dejan otros “agujeros” menores.
  • En sucesivos pasos los “agujeros” son cada vez más numerosos pero más pequeños, por lo que se genera un desperdicio de memoria principal.
Combinación de agujeros (áreas libres)
Consiste en fusionar agujeros adyacentes para formar uno sencillo más grande.
Se puede hacer cuando un trabajo termina y el almacenamiento que libera tiene límites con otros agujeros.
Compresión o Compactación de Almacenamiento
Puede ocurrir que los agujeros (áreas libres) separados distribuidos por todo el almacenamiento principal constituyan una cantidad importante de memoria:
  • Podría ser suficiente (el total global disponible) para alojar a procesos encolados en espera de memoria.
  • Podría no ser suficiente ningún área libre individual .

La técnica de compresión de memoria implica pasar todas las áreas ocupadas del almacenamiento a uno de los extremos de la memoria principal:
  • Deja un solo agujero grande de memoria libre contigua.
  • Esta técnica se denomina “recogida de residuos”

Principales desventajas de la compresión
Consume recursos del sistema
El sistema debe detener todo mientras efectúa la compresión, lo que puede afectar los tiempos de respuesta.
Implica la relocalización (reubicación) de los procesos que se encuentran en la memoria:
  • La información de relocalización debe ser de accesibilidad inmediata.
Una alta carga de trabajo significa mayor frecuencia de compresión que incrementa el uso de recursos.

Estrategias de Colocación del Almacenamiento
Se utilizan para determinar el lugar de la memoria donde serán colocados los programas y datos que van llegando y se las clasifica de la siguiente manera:
  • “Estrategia de mejor ajuste”:
    • Un trabajo nuevo es colocado en el agujero en el cual quepa de forma más ajustada:
      • Debe dejarse el menor espacio sin usar.
  • “Estrategia de primer ajuste”:
    • Un trabajo nuevo es colocado en el primer agujero disponible con tamaño suficiente para alojarlo.
  • “Estrategia de peor ajuste”:
    • Consiste en colocar un programa en el agujero en el que quepa de la peor manera, es decir en el más grande posible:
      • El agujero restante es también grande para poder alojar a un nuevo programa relativamente grande.
Multiprogramación con Intercambio de Almacenamiento
En el esquema de “intercambio” los programas del usuario no requieren permanecer en la memoria principal hasta su terminación.
Una variante consiste en que un trabajo se ejecuta hasta que ya no puede continuar:
  • Cede el almacenamiento y la cpu al siguiente trabajo.
  • La totalidad del almacenamiento se dedica a un trabajo durante un breve período de tiempo.
  • Los trabajos son “intercambiados”, dándose que un trabajo puede ser intercambiado varias veces antes de llegar a su terminación.
Es un esquema razonable y eficiente para un número relativamente reducido de procesos de usuarios.
Los sistemas de intercambio fueron los predecesores de los sistemas de paginación.
El rendimiento de los sistemas de intercambio mejora al reducir el tiempo de intercambio:
  • Manteniendo al mismo tiempo varias “imágenes de usuario o imágenes de memoria” en la memoria principal.
  • Retirando una imagen de usuario de la memoria principal solo cuando es necesario su almacenamiento para una nueva imagen.
  • Incrementando la cantidad de memoria principal disponible en el sistema.
Las imágenes de usuario (imágenes de memoria) retiradas del almacenamiento principal se graban en el almacenamiento secundario (discos).

No hay comentarios:

Publicar un comentario