funcionamiento del buffer circular
TRANSCRIPT
-
FUNCIONAMIENTO DEL BUFFER CIRCULAR
-
FUNCIONAMIENTO DEL BUFFER CIRCULAR
Un buffer circular es una estructura de datosmuy 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 cuales 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 = 32Si 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 siguienteposicin disponible para la escritura del siguiente dato.-El indice_lectura siempre apunta al siguiente datodisponible 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 siempredebe apuntar a una localizacin vaca.-Si TAMAO_BUFFER es 32 bytes, slo se pueden usar31 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_lecturatambin 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 rotara la pos. 0. Para ello, se suma 1 al indice y se aplica la operacin mdulo:
indice_escritura = (indice_escritura + 1) % TAMAO_BUFFERindice_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 operacinmdulo:Indice_lectura = (indice_lectura + 1) % TAMAO_BUFFERIndice_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_lecturacantidad = cantidad % TAMAO_BUFFER
- La frmula se aplica para todos los casos.