Você está na página 1de 24

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
informacin 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 da, respecto a los cambios efectuados con el contenido
del Buffer.

BUFFER
Esto es mucho ms 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
informacin que tengamos almacenada dentro del Buffer se pierde,
por eso muchas veces cuando hacemos un documento, es
aconsejable guardar la informacin cada cierto tiempo.
Otro ejemplo comn de Buffer, es utilizado para la impresin de
documentos, cuando entra una orden de impresin, la informacin
del documento se guarda dentro del buffer, y cuando ha recogido
toda la informacin y despus de hacer la comprobacin de si se
quiere seguir con el proceso de impresin pasa toda la informacin
al papel a travs de la impresora.

BUFFER
Es un rea de memoria principal reservada para contener los datos
ledos 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 nmero 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 configuracin de cada sistema y se mide
en trminos de tiempos que consume el desplazamiento, el retraso por
rotacin y el tiempo de transferencia. Cada sector objeto de lectura
anticipada consume un equivalente de memoria de 512 bytes.
En esta ocasin 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 interrupcin para que se utilice el buffer.
En esta espera el CPU y el programa del usuario estn ociosos.

Almacenamiento temporal por anticipacin:


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 vaco, 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 ledo existen n
registros.La
estructura del buffer incluye un contador (respecto a la estructura
anterior) para indicar el registro (registro del buffer) prximo 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.
Lgicamente la estructura del buffer cambia, incluye un apuntador al
otro buffer.
Existen dos apuntadores para utilizar la anticipacin 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 llenndose
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

Programa de desalojo:
Espera: Si P-desalojo^ .bandera-llenar=0 ir a espera
Leer registro (P-vaco .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 vaco o empieza a llenarse.
Si el buffer es llenado con ms 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 situacin 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 ms rpido 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 ejecucin de las rutinas
de llenado y desalojo y lo que se requiere de memoria principal.

Memoria CACHE (tamao 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.
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 continuacin de una
lectura estar situada en una
posicin fsicamente contigua a la
ltima lectura, por eso los discos
duros almacenas en la cach los
datos contiguos, para proporcionar
un acceso ms rpido 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 CDROM, pero en general, cuanto ms
grande mejor, pues contribuye de
modo importante a la velocidad de
bsqueda de datos.

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 habra razones para usar nada diferente.
Pero en un sistema interactivo, de tiempo compartido, la situacin 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).

Intercambio (swapping)
El sistema operativo mantiene una tabla que indica qu
partes de la memoria estn desocupadas, y cules 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
dinmicamente, tanto en cantidad como en ubicacin y
tamao. Adems, cuando un proceso es pasado a disco, no
hay ninguna garanta de que vuelva a quedar en la misma
posicin de memoria al traerlo de vuelta, de manera que es
imprescindible el apoyo del hardware para hacer ligadura en
tiempo de ejecucin.

Intercambio (swapping)
Hasta ahora hemos supuesto que los procesos son estticos en
tamao pero es mas realista pensar que pueden crecer, por ejemplo
va asignacin dinmica 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
haba 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. Tambin 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 direccin 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 direccin d, pero el dispositivo esta ocupado

Intercambio (swapping)
Si los procesos pueden crecer, conviene reservar un poco ms 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 slo el que est usando. Qu pasa si
proceso quiere crecer ms all del espacio que se le haba 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 direccin 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 direccin d, pero el dispositivo est ocupado: su
solicitud, por lo tanto, es encolada. Entretanto, el proceso A es
intercambiado a disco, y la operacin se completa cuando A no est
en memoria. En esas circunstancias, lo ledo se escribe en la
direccin 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.

Intercambio (swapping)

Memoria

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

Swapping out

principal

Swapping In

Memoria
secundaria
p.e. Disco duro

Cuando el proceso
acaba, se trae otro de
la memoria auxiliar.

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 tamao fijo e instruimos al linker o al
compilador para que se le asigne una direccin fija al programa. Ser
importante ver cual es el rango de direcciones de memoria
comprometido durante la ejecucin 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
direccin de rango 0-MAXMEM.
Debido a que cada programa debe correr en una particin debe correr
en una particin particular, el sistema operativo debe mantener una
cola de espera separada para manejar cada particin. Cuando se libera
una particin otro programa (el que sigue la cola) puede cargarse y
ejecutarse en esa particin.

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 particin. Esto se conoce como
fragmentacin interna (aunque en realidad se trata del
fenmeno opuesto a la fragmentacin, con un mismo
resultado:el desperdicio de memoria). Algo de esta memoria
desperdiciada podra aprovecharse si permitimos que mas de
un programa se ejecute dentro de una misma particin.

Particin fija
Descripcin:
La memoria principal se divide en un conjunto de particiones fijas
durante la generacin del sistema. Un proceso se puede cargar en una
particin de mayor o igual tamao.
Ventajas:
Sencilla de implementar; poca sobrecarga del sistema operativo.
Desventajas:
Empleo ineficiente de la memoria debido a la fragmentacin interna; el
numero de procesos activos es fijo.

En la mayora de los esquemas de gestin 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 gestin de la
memoria disponible es dividirla en regiones con limites fijos.

Proceso 4

Proceso 5
Proceso 1

Memoria con particin fija

Libre y
desperdiciada

Particin dinmica
Descripcin:
Las particiones se crean dinmicamente, de forma que cada proceso
se carga en una particin de exactamente el mismo tamao que el
proceso.
Ventajas:
No hay fragmentacin interna; poca sobrecarga del sistema operativo.
Desventajas:
Uso ineficiente del procesador debido a la necesidad de compactacin
para contrarrestar la fragmentacin externa.

Particin simple
Descripcin:
La memoria principal se divide en un conjunto de marcos de igual
tamao que los marcos. Un proceso se carga situando todas sus
paginas en marcos libres pero no necesariamente contiguos.
Ventajas:
No tiene fragmentacin externa
Desventajas:
Hay una pequea cantidad de fragmentacin interna.

Você também pode gostar