Esercizio dimensionamento buffer
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!
"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
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.
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.
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?
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?
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

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

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