1.1.2.1 Areas de almacenamiento temporal (bufer, spool)   2 comments

Es un área de memoria principal reservada para contener los datos leídos de un archivo mientras se utilizan. Cuando esta área temporal queda llena, el programa puede empezar a utilizar estos datos.

Spooling

En el campo de la Informática, el spooling (Simultaneous Peripheral Operations On-Line) se refiere al proceso mediante el cual la computadora introduce trabajos en un buffer (un área especial en memoria o en un disco), de manera que un dispositivo pueda acceder a ellos cuando esté listo.

El spooling es útil en caso de dispositivos que acceden a los datos a distintas velocidades. El buffer proporciona un lugar de espera donde los datos pueden estar hasta que el dispositivo (generalmente más lento) los procesa. Esto permite que la CPU pueda trabajar en otras tareas mientras que espera que el dispositivo más lento acabe de procesar el trabajo.

La aplicación más común del spooling es la impresión. En este caso, los documentos son cargados en un buffer, que habitualmente es un área en un disco, y la impresora los saca de éste a su propia velocidad. El usuario puede entonces realizar otras operaciones en el ordenador mientras la impresión tiene lugar en segundo plano. El spooling permite también que los usuarios coloquen varios trabajos de impresión en una cola de una vez, en lugar de esperar a que cada uno acabe para enviar el siguiente.

El uso de un almacenamiento intermedio permite que varios procesos en paralelo estén generando datos para el dispositivo, sin que se mezcle el resultado, ni que tengan que esperar a que finalice la operación con el periférico. En consecuencia se obtiene una comunicación indirecta entre los programas que escriben los datos y los que los leen. Se suele usar este mecanismo cuando un dispositivo escribe datos a diferente velocidad de la que la lee el dispositivo receptor, lo cual permite que un dispositivo más lento lo procese a su ritmo.

También se puede referir a un dispositivo de almacenamiento que incorpora un spool físico, como una unidad de cinta.

Manejar un buffer implica trabajar con grandes grupos de datos de memoria Ram para que el número de accesos al almacenamiento se reduzca.

El sistema operativo es quien maneja realmente los buffer del sistema. La entrada buffer del CONFIG.SYS permite especificar el numero de almacenamientos intermedios (o accesos) de discos que ha de usar del DOS, esto dependerá del tipo de configuración de cada sistema y se mide en términos de tiempos que consume el desplazamiento, el retraso por rotación y el tiempo de transferencia. Cada sector objeto de lectura anticipada consume un equivalente de memoria de 512 bytes.

En esta ocasión se revisaran diversas formas de administrar el buffer para tratar de reducir lo mas posible los costosos accesos a dispositivos que son muy lentos respecto al CPU.

Almacenamiento temporal único por demanda.

Es utilizado cuando existe un registro por bloque y un almacenamiento por archivo. En este caso el buffer es llenado por demanda del programa del usuario.
El buffer contiene un apuntador al programa y un área de datos.
El programa de canal es similar a este:
Esperar que se pida una lectura.
Mandar una orden de E/S a la unidad de control.
Esperar a que se llene el buffer.
Generar una interrupción para que se utilice el buffer.
En esta espera el CPU y el programa del usuario están ociosos.

Almacenamiento temporal por anticipación.

Se utiliza para evitar esos tiempos ociosos, o sea que se pretende anticipar a la solicitud de lectura del programa manteniendo el buffer lleno.
La estructura de este tipo de buffer esta formado por un apuntador al programa, una bandera de estado (0 vacío, 1 lleno) y el área de datos.
El canal esta revisando continuamente la bandera y si el buffer utiliza la bandera cambia su estado para que el buffer sea llenado de nuevo.

Programa de canal para llenar el buffer:

Ciclo: Si bandera=1 ir a ciclo
Emite un comando de inicio E/S a la Unidad de Control
Esperar mientras el buffer se llena
Bandera = 1
Ir a ciclo.

Programa de canal para desalojar el buffer:

Espera: Si bandera =0 ir a espera
Lee el contenido del buffer en el área de trabajo del registro
Bandera = 0
Ir a espera.

Almacenamiento temporal con bloques.

Este caso se utiliza para cuando en el bloque leído existen n registros. La estructura del buffer incluye un contador (respecto a la estructura anterior) para indicar el registro (registro del buffer) próximo a leer.

Programa de canal para llenar el buffer:

Ciclo: Si bandera = 1 ir a ciclo
Emite un comando de E/S a la unidad de control
Esperar mientras el buffer se llena
Contador = 1
Bandera = 1
Ir a ciclo.

Programa de canal para desalojar el buffer:

Espera : Si bandera = 0 ir a espera.
Lee el registro (contador) dentro del área de trabajo.
contador = contador +1
Si contador > n
Bandera = 0
Vete a espera

La rutina de desalojo esta en espera de las lecturas, pero el programa puede ejecutar otras instrucciones en ese tiempo y mientras se desaloja no puede ser llenado.

Doble almacenamiento temporal.

Es utilizado para n registros por bloque, en este caso existen dos buffers, uno se llena mientras el otro desaloja, esto reduce la espera.
Lógicamente la estructura del buffer cambia, incluye un apuntador al otro buffer.
Existen dos apuntadores para utilizar la anticipación de llenado y desalojo, estos son:

P-llenar: Apunta al buffer que se esta llenando o debe llenarse.
P_desalojo: Apunta al buffer que se esta desalojando o debe desalojarse.
Se llena el buffer apuntado por P-llenar

Programa de llenado:

Ciclo: Si P-llenar^ .bandera = 1 ir a ciclo
Emite comando de E/S a la U. de C.
Esperar mientras P-llenar^ .buffer está llenándose
P-llenar^ .contador = 1
P-llenar^ .bandera = 1
P-llenar = P-llenar^ .siguiente
Ir a ciclo.
El programa se cicla cuando un buffer está lleno y el otro no está totalmente vacío.

Programa de desalojo:

Espera: Si P-desalojo^ .bandera-llenar=0 ir a espera
Leer registro (P-vacio^ .contador) dentro del área de trabajo del registro
P-desalojo^ .contador = P-desalojo^ .contador + 1
Si P-desalojo^ .contador > n
P-desalojo^ .bandera – llenar = 0
P-desalojo = P-desalojo^ .siguiente
Ir a espera.

Esta rutina esta en ciclo solo cuando un buffer ya desalojó y el otro está vacío o empieza a llenarse.
Si el buffer es llenado con más rapidez que desalojado, el programa permanecerá en ciclo, pero esto es preferible a tener ocioso al CPU. Existe una forma de atenuar este problema y es encadenar mas buffers.

Triple almacenamiento temporal.

En esta situación se pretende que el buffer 1 este lleno, el buffer 2 se este llenando y el buffer 3 este desalojando.

Si persiste el problema de que el llenado es más rápido que el desalojo, la rutina de desalojo tendrá que esperar. El tener varios buffers en actividad es que los periodos ociosos se reducen, pero a su vez aumenta la complejidad, el tiempo de ejecución de las rutinas de llenado y desalojo y lo que se requiere de memoria principal.

Publicado 10 marzo, 2011 por Dego דייגו en Sin categoría

2 Respuestas a “1.1.2.1 Areas de almacenamiento temporal (bufer, spool)

Suscríbete a los comentarios mediante RSS.

  1. hola esta muy buena esta informacion pero me gustaria saber si me pueden ayudar diciendome quien creo el spool y en que fecha… y masomenos como se aplican estos en la actualidad… muchas gracias

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: