19.11.2012, 12:57 PM
Bei der Phasensynchronisation hol ich mir ein neues Wort von der Platte und schiebe es in einen "FIFO". Bei einem FIFO fällt ein Wort raus und es kommt ein neues Wort dazu.
Um nun aber nicht alle Worte um jeweils eine Position verschieben zu müssen (ein FIFO ist eigentlich ein Schieberegister), verwendet man einen Index, der jeweils auf die Speicherposition des ältesten Wortes zeigt und dieses mit dem neuen Wert überschreibt. So hat man die Funktion eines FIFOs mit einem einzigen Schreibzugriff erledigt!
Nachteilig ist bei dieser Konstruktion jedoch, dass alle Indizes auf die Obergrenze des Buffers achten müssen. Falls sie diese überschritten haben, so müssen sie wieder an den Anfang des Buffers gestellt werden. Derartige Indizes laufen also erst hoch, kriegen dann einen Schreck und beginnen daraufhin wieder am Anfang. Sie laufen sozusagen im Kreis - in einem Ring. Der Konstrukt heißt daher Ringbuffer.
So hat man einen blitzschnelle Beschreibung des Buffers erreicht (man liest ja nur ein weiteres Wort von der Platte) und einen - durch die permanente Grenzenkontrolle - etwa verlangsamte Auslesung. Da ich bei der Synchronisierung jedoch nicht jede Bufferposition lese, sondern viele zwischendurch überspringe, überwiegt der Vorteil der schnellen Speicherung.
Um nun aber nicht alle Worte um jeweils eine Position verschieben zu müssen (ein FIFO ist eigentlich ein Schieberegister), verwendet man einen Index, der jeweils auf die Speicherposition des ältesten Wortes zeigt und dieses mit dem neuen Wert überschreibt. So hat man die Funktion eines FIFOs mit einem einzigen Schreibzugriff erledigt!
Nachteilig ist bei dieser Konstruktion jedoch, dass alle Indizes auf die Obergrenze des Buffers achten müssen. Falls sie diese überschritten haben, so müssen sie wieder an den Anfang des Buffers gestellt werden. Derartige Indizes laufen also erst hoch, kriegen dann einen Schreck und beginnen daraufhin wieder am Anfang. Sie laufen sozusagen im Kreis - in einem Ring. Der Konstrukt heißt daher Ringbuffer.
So hat man einen blitzschnelle Beschreibung des Buffers erreicht (man liest ja nur ein weiteres Wort von der Platte) und einen - durch die permanente Grenzenkontrolle - etwa verlangsamte Auslesung. Da ich bei der Synchronisierung jedoch nicht jede Bufferposition lese, sondern viele zwischendurch überspringe, überwiegt der Vorteil der schnellen Speicherung.