funcionamiento del buffer circular

Upload: juan-humberto-q-villanueva

Post on 02-Mar-2016

30 views

Category:

Documents


0 download

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.