Rengaspuskuri

Wikipedia

Loikkaa: valikkoon, hakuun

Rengaspuskuri on tapa käyttää tietokoneen muistia. Rengas sanalla viitataan tapaan, jolla tiedon tallennus- ja lukupaikka kiertää puskuria. Puskuriin tallennettaessa tietoa, kirjoituspaikka etenee kohti puskurin loppua. Kun kirjoituspaikka ylittää puskurin koon, sirretään se takaisin alkuun. Tiedon lukukohta liikkuu samalla tavalla eteenpäin, palaten alkuun puskurin lopussa.

Sisällysluettelo

[muokkaa] Käyttökohteita

Rengaspuskuria voidaan käyttää esimerkiksi muuntamaan tietovirtaa joka saadaan pakettiverkon yli vaihtelevalla nopeudella muotoon josta kiinteällä nopeudella sitä kuluttava käsittelijä saa aina samalla viiveellä seuraavan alkion käsittelyyn.

[muokkaa] Käytännön toteutus C-koodina

Yksinkertainen rengaspuskuritoteutus jossa käytetty kolmea apumuuttujaa (read_position, write_position ja buffer_len) rengaspuskurin sisäiseen kirjanpitoon.

     1  #include <stdio.h>
     2
     3  #define BUFFER_SIZE 10
     4
     5  char buffer_data[BUFFER_SIZE];
     6  int read_position=0;
     7  int write_position=0;
     8  int buffer_len=0;
     9
    10  int ringbuffer_insert(char data){
    11    if( buffer_len < BUFFER_SIZE){
    12      buffer_data[write_position]=data;
    13      buffer_len++;
    14      if(++write_position==BUFFER_SIZE){
    15        write_position=0;
    16      }
    17      return 1;
    18    }
    19    return 0;
    20  }
    21
    22  int ringbuffer_read(char* data){
    23    if(buffer_len>0){
    24        *data=buffer_data[read_position];
    25        buffer_len--;
    26        if(++read_position==BUFFER_SIZE){
    27          read_position=0;
    28        }
    29      return 1;
    30    }
    31    return 0;
    32  }


[muokkaa] Optimointi

Rengaspuskuritoteutuksesta saa puristettua pois muutaman if-lauseen ja apumuuttujan, jos puskurin koko on 2:n potenssi (2,4,8,16,jne). Tällöin ei tarvita ehtoa, jossa testataan vuotaako puskuri seuraavaksi yli, vaan voidaan käyttää bittimaskia ja vapaasti eteenpäin juoksevia luku- ja kirjoituspaikkalaskureita.

[muokkaa] Katso myös

Linkitetty lista



Tämä tietotekniikkaan liittyvä artikkeli on tynkä. Voit auttaa Wikipediaa laajentamalla artikkelia.
Henkilökohtaiset työkalut
Muilla kielillä