Esercizio dimensionamento buffer

holly_golightly1
Ciao! Questo è l'esercizio sul dimensionamento del buffer che ho provato a risolvere:

"Una generica unità di input rileva una temperatura ogni 10 ms e la memorizza nel suo buffer interno sotto forma
di numero intero a 16 bit. Sapendo che la CPU preleva tutti i dati dal buffer periodicamente una volta al minuto,
calcolare la dimensione minima del buffer (espressa in byte) per non perdere dati, ossia per evitare che i dati
non ancora prelevati dalla CPU siano sovrascritti da nuovi dati"

Significa che la CPU farà in media 1 accesso al min a cui bisogna sommare gli accessi necessari per il fetch dell'istruzione.
Quindi in totale gli accessi della CPU saranno 2 al min. Ad ogni operazione dovrà prelevare dati la cui dim. sarà 1,600,000 bit (cioè
in un min l'unità di input rileva 100000 dati da 16 bit ciascuno).

E' possbile che la dimensione minima del buffer sia appunto 1,600,000 bit cioè 196 KB?

Grazie!

Risposte
Rggb1
Non ho capito il tuo ragionamento in merito al fetch, che c'entra?

Comunque rivedi anche i calcoli: "ogni 10 ms" significa 100 volte al secondo ovvero 6000 volte al minuto, quindi ci sono da mantenere 6000x16 bit di informazione. E lo spazio del buffer deve ovviamente tenere conto della latenza necessaria al prelevamento dei dati.

holly_golightly1
Grazie per avermi fatto notare il mio errore di calcolo.

Ho pensato che il fetch dell'istruzione fosse da considerare perchè è comunque necessaria per lo svolgimento di qualsiasi operazione.

Quindi, se la latenza della CPU è il tempo che la CPU stessa impiega ad eseguire una particolare istruzione (immagino che in questo caso bisogna considerare il tempo che la CPU impiega a prelevare i dati ossia 1min) la dimensione minima del buffer è appunto 6000x16 bit?

Rggb1
Ok, se intendevi in quel senso. Comunque la CPU non può impiegare un minuto a prelevare i dati, no? ;)

Direi invece, considerando il caso peggiore, che l'unità legge nel proprio buffer 6000x16 bit ovvero 12000 byte; usando un buffer di 12K (12228 bytes) ho a disposizione 228 byte "extra", capacità che permette di continuare a leggere campioni per oltre un secondo (tempo più che sufficiente, affinché la CPU prelevi i dati, addirittura un tempo esagerato), ed inoltre ottengo un buffer dimensionato correttamente a multipli di K.

Si potrebbe anche dire, usando una considerazione più "scolastica", che 10ms sono più che sufficienti a leggere i dati(*) e che in questo tempo l'unità potrebbe leggere un altro dato, il che porterebbe a dimensionare il buffer a 6001x16 bit ovvero 12002 byte... ma la mia prima idea mi piace di più.

(*) Esempio esagerato: lettura dalla memoria buffer con 8 cicli per byte, trasferimento in memoria centrale altrettanti 8 cicli, totale 16 cicli per byte ovvero 12000x16=192000 cicli di clock; per impiegare più di 10ms per questa operazione, la velocità di clock deve essere sotto i 2Mhz, ovvero quella di un processore anni '70 :-D

holly_golightly1
Ti ringrazio molto per l'aiuto! Sei stato molto chiaro!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.