Upload
juan-humberto-q-villanueva
View
31
Download
0
Embed Size (px)
Citation preview
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.