Вы находитесь на странице: 1из 15

FUNCIONAMIENTO DEL BUFFER

CIRCULAR
FUNCIONAMIENTO DEL BUFFER
CIRCULAR
Un buffer circular es una estructura de datos
muy usada en procesos de comunicacin de
datos digitales.
Se define en base a los siguientes elementos:
Una variable ndice de escritura (indice_escritura)
Una variable ndice de lectura (indice_lectura)
El tamao del buffer (TAMAO_BUFFER) el cual
es constante.
FUNCIONAMIENTO DEL BUFFER
CIRCULAR
Direccin en
Memoria
Posicin Indices Espacio en Memoria
31 (vacio)
30 (vacio)
(vacio)
(vacio)
2 (vacio)
1 (vacio)
0 indice_lectura = indice_escritura (vacio)
TAMAO_BUFFER = 32
Si ambos ndices apuntan a la misma ubicacin en
memoria, entonces el buffer est vacio
FUNCIONAMIENTO DEL BUFFER
CIRCULAR
Direccin en
Memoria
Posicin Indices Espacio en Memoria
31
30

2
1 indice_escritura
0 indice_lectura Dato0
Con cada escritura en el buffer el indice_escritura se
incrementa en 1
FUNCIONAMIENTO DEL BUFFER
CIRCULAR
Direccin en
Memoria
Posicin Indices Espacio en Memoria
31
30 indice_escritura
Dato
Dato
2 Dato2
1 Dato1
0 indice_lectura Dato0
-El indice_escritura siempre apunta a la siguiente
posicin disponible para la escritura del siguiente dato.
-El indice_lectura siempre apunta al siguiente dato
disponible para ser ledo.
FUNCIONAMIENTO DEL BUFFER
CIRCULAR
Direccin en
Memoria
Posicin Indices Espacio en Memoria
31 indice_escritura
30 Dato30
Dato
Dato
2 Dato2
1 Dato1
0 indice_lectura Dato0
-En este tipo de buffer nunca se puede usar todo el
espacio del buffer ya que el indice_escritura siempre
debe apuntar a una localizacin vaca.
-Si TAMAO_BUFFER es 32 bytes, slo se pueden usar
31 bytes.
FUNCIONAMIENTO DEL BUFFER
CIRCULAR
Direccin en
Memoria
Posicin Indices Espacio en Memoria
31 indice_escritura
30 Dato30
Dato
Dato
2 indice_lectura Dato2
1 Dato1 (leido)
0 Dato0 (leido)
-Con cada dato leido desde el buffer el indice_lectura
tambin se incrementa
FUNCIONAMIENTO DEL BUFFER
CIRCULAR
En el funcionamiento de este tipo de buffer
circular se presentan 3 casos crticos:
FUNCIONAMIENTO DEL BUFFER
CIRCULAR
Direccin en
Memoria
Posicin Indices Espacio en Memoria
31 indice_escritura
30 Dato30
Dato
Dato
2 indice_lectura Dato2
1 (leido)
0 (leido)
CASO CRITICO 1:
Si el indice_escritura llega a la pos. 31, con la escritura de un nuevo dato debe rotar
a la pos. 0. Para ello, se suma 1 al indice y se aplica la operacin mdulo:
indice_escritura = (indice_escritura + 1) % TAMAO_BUFFER
indice_escritura = (31 + 1) % TAMAO_BUFFER
FUNCIONAMIENTO DEL BUFFER
CIRCULAR
Direccin en
Memoria
Posicin Indices Espacio en Memoria
31 Dato31 (ultimo dato escrito)
30 Dato30
Dato
Dato
2 indice_lectura Dato2
1
0 indice_escritura
CASO CRITICO 1:
El indice_escritura ha rotado a la posicin 0 haciendo uso de la operacin mdulo:
Indice_escritura = (indice_escritura + 1) % TAMAO_BUFFER
FUNCIONAMIENTO DEL BUFFER
CIRCULAR
Direccin en
Memoria
Posicin Indices Espacio en Memoria
31 Dato31
30 Dato30
Dato
Dato
2 indice_lectura Dato2
1 indice_escritura
0 Dato 32
CASO CRITICO 2:
El indice_escritura se encuentra 1 posicin por debajo del indice_lectura (buffer lleno)
-El indice_escritura no puede subir una posicin arriba despus de almacenarse el
prximo dato (indice_lectura=indice_escritura significa buffer vaco!)
-Por lo tanto, no se realiza ninguna escritura y el dato se descarta.
-Entonces antes de almacenar el proximo dato debe verificarse que:
(indice_escritura+1) != indice_lectura
FUNCIONAMIENTO DEL BUFFER
CIRCULAR
Direccin en
Memoria
Posicin Indices Espacio en Memoria
31 indice_lectura Dato31
30 (leido)
(leido)
(leido)
2 (leido)
1 indice_escritura
0 Dato 32
CASO CRITICO 3:
Cuando el indice_lectura llega a la ltima posicin de memoria, debe rotar a la
posicin 0 despus de leerse el dato, para ello se aplica tambin la operacin
mdulo:
Indice_lectura = (indice_lectura + 1) % TAMAO_BUFFER
Indice_lectura = (31+ 1) % TAMAO_BUFFER
FUNCIONAMIENTO DEL BUFFER
CIRCULAR
Direccin en
Memoria
Posicin Indices Espacio en Memoria
31 (leido)
30 (leido)
(leido)
(leido)
2 (leido)
1 indice_escritura
0 indice_lectura Dato 32
CASO CRITICO 3:
-El indice_lectura ha rotado a la pos. 0 con la operacin mdulo:
Indice_lectura = (indice_lectura + 1) % TAMAO_BUFFER
- Si leemos el siguiente dato entonces indice_lectura = indice_escritura y el buffer
est vaco nuevamente.
FUNCIONAMIENTO DEL BUFFER
CIRCULAR
Direccin en
Memoria
Posicin Indices Espacio en Memoria
31 indice_escritura
30 Dato30
Dato
Dato
2 Dato2
1 indice_lectura Dato1
0 (leido)
CANTIDAD DE DATOS EN EL BUFFER
-Primer caso (indice_escritura est por encima de indice_lectura):
cantidad = indice_escritura indice_lectura
FUNCIONAMIENTO DEL BUFFER
CIRCULAR
Direccin en
Memoria
Posicin Indices Espacio en Memoria
31 Dato31
30 Dato30
Dato
Dato
2 indice_lectura Dato2
1 indice_escritura
0 Dato 32
CANTIDAD DE DATOS EN EL BUFFER
-Segundo caso (indice_escritura est por debajo de indice_lectura):
cantidad = TAMAO_BUFFER + indice_escritura indice_lectura
cantidad = cantidad % TAMAO_BUFFER
- La frmula se aplica para todos los casos.

Вам также может понравиться