La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

BUFFER Es el área de almacenaje temporal, por lo general en la RAM.

Presentaciones similares


Presentación del tema: "BUFFER Es el área de almacenaje temporal, por lo general en la RAM."— Transcripción de la presentación:

1 BUFFER Es el área de almacenaje temporal, por lo general en la RAM.
El objetivo de la mayor parte del Buffer es de actuar como un área propia, necesita el permiso de la CPU antes de la transferencia de datos a un dispositivo. Como la lectura y la escritura de datos a un disco son relativamente lentos, muchos programas almacenan la información de los cambios de datos dentro de un Buffer y luego lo copian a un disco. Por ejemplo, los procesadores de texto emplean un buffer para almacenar los cambios de un archivo. Entonces cuando se guarda el archivo, el procesador de texto lo pone al día, respecto a los cambios efectuados con el contenido del Buffer.

2 BUFFER Esto es mucho más seguro que el tener acceso sobre el archivo que hay guardado en disco originario, así podemos evitar posibles fallos irremediables, por eso cuando hay un corte de luz, toda la información que tengamos almacenada dentro del Buffer se pierde, por eso muchas veces cuando hacemos un documento, es aconsejable guardar la información cada cierto tiempo. Otro ejemplo común de Buffer, es utilizado para la impresión de documentos, cuando entra una orden de impresión, la información del documento se guarda dentro del buffer, y cuando ha recogido toda la información y después de hacer la comprobación de si se quiere seguir con el proceso de impresión pasa toda la información al papel a través de la impresora.

3 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. Manejar un buffer implica trabajar con grandes grupos de datos de memoria Ram para que el número de accesos al almacenamiento se reduzca. BUFFER 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.

4 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.

5 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.

6 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.

7 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.

8 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.

9 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

10 Programa de llenado: Ciclo: Si P-llenar^ .bandera = 1 ir a ciclo
    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.

11 Programa de desalojo: Espera:   Si P-desalojo^ .bandera-llenar=0 ir a espera                     Leer registro (P-vacío .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.

12 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.

13 Memoria CACHE (tamaño del BUFFER)
El BUFFER o CACHE es una memoria que va incluida en la controladora interna del disco duro, de modo que todos los datos que se leen y escriben a disco duro se almacenan primeramente en el buffer. La regla de mano aquí es 128kb-Menos de 1 Gb, 256kb-1Gb, 512kb-2Gb o mayores. Generalmente los discos traen 128Kb o 256Kb de cache. Memoria CACHE (tamaño del BUFFER)  Si un disco duro está bien organizado (si no, utilizar una utilidad desfragmentadora: DEFRAG, NORTON SPEEDISK, etc.), la serie de datos que se va a necesitar a continuación de una lectura estará situada en una posición físicamente contigua a la última lectura, por eso los discos duros almacenas en la caché los datos contiguos, para proporcionar un acceso más rápido sin tener que buscarlos. De ahí la conveniencia de desfragmentar el disco duro con cierta frecuencia. El buffer es muy útil cuando se está grabando de un disco duro a un CD-ROM, pero en general, cuanto más grande mejor, pues contribuye de modo importante a la velocidad de búsqueda de datos.

14 Intercambio (swapping)
En un sistema de procesamiento por lotes, organizar la memoria en particiones fijas es simple y efectivo: cada trabajo se carga en la memoria cuando le toque su turno, y se queda en memoria hasta que termine. Si hay suficientes particiones para mantener a la CPU siempre ocupada, no habría razones para usar nada diferente. Pero en un sistema interactivo, de tiempo compartido, la situación es diferente, ya que es posible que la memoria no alcance para mantener a todos los procesos. En este caso se usa el disco como apoyo para extender la capacidad de la memoria: algunos procesos se pasan temporalmente a disco, recordar (scheduler de largo plazo).

15 Intercambio (swapping)
El sistema operativo mantiene una tabla que indica qué partes de la memoria están desocupadas, y cuáles en uso. Las partes desocupadas son hoyos en la memoria; inicialmente, toda la memoria es un solo gran hoyo. Cuando se crea un proceso o se trae uno del disco, se busca un hoyo capaz de contenerlo, y se pone el proceso allí. Las particiones ya no son fijas, sino que van cambiando dinámicamente, tanto en cantidad como en ubicación y tamaño. Además, cuando un proceso es pasado a disco, no hay ninguna garantía de que vuelva a quedar en la misma posición de memoria al traerlo de vuelta, de manera que es imprescindible el apoyo del hardware para hacer ligadura en tiempo de ejecución.

16 Intercambio (swapping)
Hasta ahora hemos supuesto que los procesos son estáticos en tamaño pero es mas realista pensar que pueden crecer, por ejemplo vía asignación dinámica de memoria. Si es así, conviene reservar un poco mas de memoria que la que estrictamente necesita al momento de ponerlo en memoria. Al hacer swapping, no es necesario guardar todo el espacio que tiene reservado, sino solo el que esta usando. Que pasa si un proceso quiere crecer mas allá del espacio que se le había reservado? Si hay un hoyo contiguo se puede usar. Si no, se puede pasar el proceso a un hoyo mas grande. Si no hay ninguno, se pasa a disco hasta que haya. También se puede, simplemente, matar al proceso. Otro punto que hay que tener en cuenta al usar swapping, es el I/O que pudiera estar pendiente. Cuando se hace, por ejemplo, input, se especifica una dirección de memoria donde se va a poner lo que se lea desde el dispositivo. Supongamos que proceso A trata de leer del disco hacia la dirección d, pero el dispositivo esta ocupado

17 Intercambio (swapping)
Si los procesos pueden crecer, conviene reservar un poco más de memoria que la que estrictamente necesita al momento de ponerlo en memoria. Al hacer swapping, no es necesario guardar todo el espacio que tiene reservado, sino sólo el que está usando. ¿Qué pasa si proceso quiere crecer más allá del espacio que se le había reservado? Otro punto que hay que tener en cuenta al usar swappping, es el I/O que pudiera estar pendiente. Cuando se hace, por ejemplo, input, se especifica una dirección de memoria donde se va a poner lo que se lea desde el dispositivo. Supongamos que proceso A trata de leer del disco hacia la dirección d, pero el dispositivo está ocupado: su solicitud, por lo tanto, es encolada. Entretanto, el proceso A es intercambiado a disco, y la operación se completa cuando A no está en memoria. En esas circunstancias, lo leído se escribe en la dirección d, que ahora corresponde a otro proceso. Para evitar tal desastre:no pasar a disco procesos co I/O pendiente, o bien hacer siempre I/O desde y hacia buffers del sistema operativo.

18 Intercambio (swapping)
Se basa en tener un único proceso en memoria principal y el resto en memoria secundaria (en tiempo compartido hay mas tiempo que en memoria). Cuando el proceso acaba, se trae otro de la memoria auxiliar. Swapping out Memoria principal Swapping In Memoria secundaria p.e. Disco duro

19 Particiones La memoria mas simple para permitir multitarea es darle a cada programa un lugar fijo en memoria para que corra. Dividimos la memoria en particiones de tamaño fijo e instruimos al linker o al compilador para que se le asigne una dirección fija al programa. Será importante ver cual es el rango de direcciones de memoria comprometido durante la ejecución de nuestro programa. Pero de esta manera cuando queramos correrlo deberemos esperar a que ese rango de direcciones quede libre. Recordemos que estamos hablando de espacio de memoria plana. Cada proceso a memoria es a una única dirección de rango 0-MAXMEM. Debido a que cada programa debe correr en una partición debe correr en una partición particular, el sistema operativo debe mantener una cola de espera separada para manejar cada partición. Cuando se libera una partición otro programa (el que sigue la cola) puede cargarse y ejecutarse en esa partición.

20 Particiones Otro aspecto en el que se consume espacio de memoria en este sistema es que será poco frecuente que un programa ocupe completamente su partición. Esto se conoce como fragmentación interna (aunque en realidad se trata del fenómeno opuesto a la fragmentación, con un mismo resultado:el desperdicio de memoria). Algo de esta memoria desperdiciada podría aprovecharse si permitimos que mas de un programa se ejecute dentro de una misma partición.

21 Partición fija Descripción:
La memoria principal se divide en un conjunto de particiones fijas durante la generación del sistema. Un proceso se puede cargar en una partición de mayor o igual tamaño. Ventajas: Sencilla de implementar; poca sobrecarga del sistema operativo. Desventajas: Empleo ineficiente de la memoria debido a la fragmentación interna; el numero de procesos activos es fijo.

22 En la mayoría de los esquemas de gestión de memoria, se puede suponer que el esquema operativo ocupa una parte fija de la memoria principal y que el resto de la memoria esta disponible para ser usada por varios procesos. El esquema mas sencillo de gestión de la memoria disponible es dividirla en regiones con limites fijos. Proceso 5 Proceso 4 Libre y desperdiciada Proceso 1 Memoria con partición fija

23 Partición dinámica Descripción:
Las particiones se crean dinámicamente, de forma que cada proceso se carga en una partición de exactamente el mismo tamaño que el proceso. Ventajas: No hay fragmentación interna; poca sobrecarga del sistema operativo. Desventajas: Uso ineficiente del procesador debido a la necesidad de compactación para contrarrestar la fragmentación externa.

24 Partición simple Descripción:
La memoria principal se divide en un conjunto de marcos de igual tamaño que los marcos. Un proceso se carga situando todas sus paginas en marcos libres pero no necesariamente contiguos. Ventajas: No tiene fragmentación externa Desventajas: Hay una pequeña cantidad de fragmentación interna.


Descargar ppt "BUFFER Es el área de almacenaje temporal, por lo general en la RAM."

Presentaciones similares


Anuncios Google