View Full Version : ESAME D'ARCHITETTURA ELABORATORI 2: domande sulla CACHE!
DavidTwister
30-05-2003, 15:13
Ragazzi tempo fà ho visto un utente chiedere chiarimenti circa la cache, e ho visto che molti di voi ne hanno saputo dare un'esauriente risposta. Ora mi servono delucidazioni x passare l'esame di architettura degli elaboratori 2 sulla cache. Premetto che ho letto libri interi ma non spiegano bene ciò che voglio capire.
1)Che differenza c'è tra come vengono cancellati i dati presenti nella cache nella Mappatura Diretta, nella Set Associativa e nella Set Completamente Associativa. ossia se la cache è piena di dati e viene richiesto un dato non presente,qual'è la differenza di criterio con il quale viene cancellato un dato presente???
2)Differenza fondamentale tra la Mappatura Diretta e la Set Associativa;
3)Si consideri una chace con 64 blocchi ed una dimensione dei blocchi di 16byte. A quale numero di blocchi corrisponde l'indirizzo del byte 1200?
Il professore ci ha detto che la risposta è 11esimo blocco......ma non dipende dal tipo di organizzazione della cache????
VI PREHO AIUTO!!!!SIAMO DIVERSI AD AVERE QUESTE INDECISIONI!!! :cry:
Mi dispiace, ma le cose sopra devo ancora studiarle :D
Riguardo al punto 3 ha ragione il professore...l'unica cosa che non mi torna sono i 64 blocchi...al posto di "blocchi" dovrebbero essere "gruppi o insiemi"...
Il fatto di avere il numero di insiemi basta per sapere che l'indice è di 6 bit, mentre lo spiazzamento è di 4 bit (16 byte per blocco)...
Dopo è facile perchè |indirizzo/16| ti indica l'insieme interesato...
DavidTwister
30-05-2003, 16:05
Mi dispiace, ma le cose sopra devo ancora studiarle :D
Riguardo al punto 3 ha ragione il professore...l'unica cosa che non mi torna sono i 64 blocchi...al posto di "blocchi" dovrebbero essere "gruppi o insiemi"...
Il fatto di avere il numero di insiemi basta per sapere che l'indice è di 6 bit, mentre lo spiazzamento è di 4 bit (16 byte per blocco)...
Dopo è facile perchè |indirizzo/16| ti indica l'insieme interessato...
scusa...potresti spiegarti meglio sul 3 punto???come si fa a dire che il blocco sarà l'undicesimo ( cosa a cui noi siamo arrivati prima del prof....ma per deduzione) ...se non si sà in realtà se l'11 è libero???
Originally posted by "DavidTwister"
scusa...potresti spiegarti meglio sul 3 punto???come si fa a dire che il blocco sarà l'undicesimo ( cosa a cui noi siamo arrivati prima del prof....ma per deduzione) ...se non si sà in realtà se l'11 è libero???
e poi il centro della questione e con che criterio riscrive i dati sui blocchi,ricomincia semplicemente o cosa????
ovviamente dopo ke la cache è inizialmente piena
Originally posted by "DavidTwister"
scusa...potresti spiegarti meglio sul 3 punto???come si fa a dire che il blocco sarà l'undicesimo ( cosa a cui noi siamo arrivati prima del prof....ma per deduzione) ...se non si sà in realtà se l'11 è libero???
Il fatto che non sia libero non ci importa assolutamente...in ogni caso il blocco in cui andare a cercare se il byte 1200 è in cache (nel caso della lettura) è l'11isimo...
Pensa ad una cache 1-way... Quanti dati consecutivi può contenere ? 64x16 = 1024... 1200 modulo 1024 = 176...176 / 16 = 11...
Ora pensa ad una cache n-way... Quanti dati consecutivi può contenere ?
Sempre 64x16...e il discorso non cambia...
Altro modo per saperlo:
1200 = 10010110000 suddivisibile in etichetta = 1, indice = 001011, spiazzamento = 0000... Come vedi il valore dell'indice è 11 decimale...
lucadeep
30-05-2003, 16:20
Athlon dove sei illuminaci con la tua saggezza!!!! :cry:
Originally posted by "junta83"
e poi il centro della questione e con che criterio riscrive i dati sui blocchi,ricomincia semplicemente o cosa????
ovviamente dopo ke la cache è inizialmente piena
Li sovrascrive... Nelle cache n-way set associative c'è un campo (che noi abbiamo chiamato R) che indica il blocco meno recentemente usato all'interno di tutti gli N blocchi di quell'indice...e viene sovrascritto quello...
Nel caso la cache sia in modalità wrtite back (cioè il dato aggiornatyo viene scritto solo in cache) allora il vecchio dato prima di essere sovrascritto dovrà essere spostato nell'indirizzo corrispondente in memoria...
Nel caso la scrittura sia in modalità write through (ogni volta che un dato viene scritto in cache viene contemporaneamente scritto in memoria) possiamo sovrascrivere il dato vecchio...
Prima di guardare il campo R...per ogni blocco c'è un bit di validità...se il bit è a 0 allora quel blocco è come se fosse vuoto e posso sovrascrivere quello...
DavidTwister
30-05-2003, 16:25
Originally posted by "cionci"
Il fatto che non sia libero non ci importa assolutamente...in ogni caso il blocco in cui andare a cercare se il byte 1200 è in cache (nel caso della lettura) è l'11isimo...
Pensa ad una cache 1-way... Quanti dati consecutivi può contenere ? 64x16 = 1024... 1200 modulo 1024 = 176...176 / 16 = 11...
Ora pensa ad una cache n-way... Quanti dati consecutivi può contenere ?
Sempre 64x16...e il discorso non cambia...
Altro modo per saperlo:
1200 = 10010110000 suddivisibile in etichetta = 1, indice = 001011, spiazzamento = 0000... Come vedi il valore dell'indice è 11 decimale...
ottima risposta......penso di aver capito.....la spiegazione che hai dato è quella a cui noi siamo arrivati durante l'esonero x deduzione.....xkè se fosse stato per le spiegazioni del prof saremmo ancora nella m****.....
con la tua spiegazione ho capito un pò di +....non è che hai materiale tipo pdf o doc da potermi mandare in pvt su architettura degli elaboratori 2??? :confused:
DavidTwister
30-05-2003, 16:27
Originally posted by "cionci"
Li sovrascrive... Nelle cache n-way set associative c'è un campo (che noi abbiamo chiamato R) che indica il blocco meno recentemente usato all'interno di tutti gli N blocchi di quell'indice...e viene sovrascritto quello...
Nel caso la cache sia in modalità wrtite back (cioè il dato aggiornatyo viene scritto solo in cache) allora il vecchio dato prima di essere sovrascritto dovrà essere spostato nell'indirizzo corrispondente in memoria...
Nel caso la scrittura sia in modalità write through (ogni volta che un dato viene scritto in cache viene contemporaneamente scritto in memoria) possiamo sovrascrivere il dato vecchio...
Prima di guardare il campo R...per ogni blocco c'è un bit di validità...se il bit è a 0 allora quel blocco è come se fosse vuoto e posso sovrascrivere quello...
se fosse 1 quindi non andrebbe a sovrasrivere...e cercherebbe il primo con valore 1???
ps:siccome a quanto sembra il nostro prof ci ha spiegato con "denominazioni" differenti....cosa intendi te per "blocco" e per "indice" nella "x way associativa"??? :confused:
Originally posted by "DavidTwister"
se fosse 1 quindi non andrebbe a sovrasrivere...e cercherebbe il primo con valore 1???
Non ho capito... Intendi se tutti i bit V di ogni blocco di un indice fosse 1 ? In tal caso andrebbe a vedere il campo R (ce n'è uno per indice)...
DavidTwister
30-05-2003, 16:37
Originally posted by "cionci"
Non ho capito... Intendi se tutti i bit V di ogni blocco di un indice fosse 1 ? In tal caso andrebbe a vedere il campo R (ce n'è uno per indice)...
vedi...il nostro principale problema (penso) stà proprio nell'organizzazzione in blocchi, bit V, campo R......ora cerco di postare uno schemino così forse c capiamo meglio..... ;)
DavidTwister
30-05-2003, 16:46
allora....proviamo a basarci su questo schemino....ma se ne hai uno migliore magari...è l'unico che ho trovato + semplice! :D
DavidTwister
30-05-2003, 16:47
con questo schema ,......prova a rispiegare ciò che hai detto prima....... :(
Questi schemi non sono fatti molto bene... Guarda quello sotto e dimmi cosa non ti torna...
DavidTwister
30-05-2003, 17:47
premettendo che uno schema così ben fatto me lo sogno sul libro di testo o sugli appunti di questo deficente di prof che ho....penso che abbiamo anche denominazioni diverse......
in particolare....cosa intendi il campo Spiazzamento ed Etichetta???
scusa se t stò facendo perdere tempo! :rolleyes:
ps:lo schema da te messo sarebbe a 2 way associative???? :confused:
Lo spiazzamento è l'indice del byte che mi interessa all'interno del blocco...
Ad esempio...se io voglio scrivere un dato in memoria e questo dato si trova nella cache (utilizzando il metodo write back) dovrò semplicemente riscrivere il byte (o i byte a seconda della dimensione della scrittura che voglio fare) a partire dall'indice individuato tramite lo spiazzamento...
E' da notare che con il write back la comunicazione fra le memoria e la cache avviene sempre a blocchi...infatti:
- quando un indirizzo non è presente in memoria leggo l'intero blocco contenente quell'indirizzo
- quando devo togliere un blocco non usato recentemente dalla cache (perchè mi serve per inserirci un nuovo blocco con stesso indice...si chiama "rimpiazzamento") vado a scrivere l'intero blocco nella memoria centrale
Con il metodo write through:
- quando un indirizzo non è presente in memoria leggo l'intero blocco contenente quell'indirizzo
- quello che modifico all'interno di un blocco lo devo andare a modificare anche in memoria centrale (in questo caso il traferimento non avviene a blocchi, ma come una normale scrittura in memoria)
Il metodo migliore dovrebbe essere il write back...ma senza dubbio il write through è più semplice da gestire visto che con il write back nel caso ci siano più entità che vanno a leggere nella memoria centrale (un controller DMA ad esempio o un'altra CPU) devo prevedere dei meccanismi che permettano agli altri dispositivi di ispezionare la cache per vedere se il dato è presente all'interno di questa...in tal caso il controller della cache provvede a scrivere il dato in memoria ed ad invalidere i dati rpesenti nel blocco...
Originally posted by "DavidTwister"
ps:lo schema da te messo sarebbe a 2 way associative???? :confused:
Sì... Per una cache non associativa ad insiemi cambia soltanto il fatto che non c'è il campo R (ed ovviamente c'è un solo gruppo)...
DavidTwister
30-05-2003, 18:12
procediamo per gradi:
Originally posted by "cionci"
Lo spiazzamento è l'indice del byte che mi interessa all'interno del blocco...
xkè se fosse ad 1 way associative non ce ne sarebbe bisogno,giusto? :rolleyes:
mmm no...penso di aver detto una c******a.
siccome noi abbiamo degli schemi diversi...è difficile intendersi.....
TUTTO DIPENDE DA COSA SI INTENDE NEL TUO SCHEMA PER BLOCCO...COSA HAI ALL'INTERNO DEL BLOCCO??? :confused: :confused: :confused:
Originally posted by "DavidTwister"
xkè se fosse ad 1 way associative non ce ne sarebbe bisogno,giusto? :rolleyes:
mmm no...penso di aver detto una c******a.
siccome noi abbiamo degli schemi diversi...è difficile intendersi.....
TUTTO DIPENDE DA COSA SI INTENDE NEL TUO SCHEMA PER BLOCCO...COSA HAI ALL'INTERNO DEL BLOCCO??? :confused: :confused: :confused:
Certo che serve anche per la cache 1-way... Nei blocchi ci stanno i dati...
La differenza fra 1-way e n-way è che nella n-way ci possono stare n blocchi con lo stesso indice (ma di differente etichetta)...
DavidTwister
30-05-2003, 18:44
Originally posted by "cionci"
Certo che serve anche per la cache 1-way... Nei blocchi ci stanno i dati...
La differenza fra 1-way e n-way è che nella n-way ci possono stare n blocchi con lo stesso indice (ma di differente etichetta)...
allora qui serve un linguaggio internazionale....come hai notato già tu nel primo post, il nostro prof ci ha dato terminologie diverse( ad esempio ciò che tu chami insieme,noi lo chiamiamo blocco.....).Partiamo da questo:cosa intendi te per:
- BLOCCO
- ETICHETTA
Io intendo per blocco quello che il tuo prof chiama dati...
Io intendo per gruppo quello che il tuo prof chiama blocco...
Per etichetta la stessa cosa...
DavidTwister
30-05-2003, 18:50
Originally posted by "cionci"
Io intendo per blocco quello che il tuo prof chiama dati...
Io intendo per gruppo quello che il tuo prof chiama blocco...
Per etichetta la stessa cosa...
quel rettangolino nei tuoi schemi in alto, composto da :etichetta,indice e spiazzamento......sarebbe la suddivisione dell'indirizzo di memoria???
DavidTwister
30-05-2003, 19:41
Originally posted by "DavidTwister"
quel rettangolino nei tuoi schemi in alto, composto da :etichetta,indice e spiazzamento......sarebbe la suddivisione dell'indirizzo di memoria???
te lo chiedo perchè se fosse così, noi abbiamo un altro schema di suddivisione dell'indirizzo di memoria....composto da: TAG(16bit), LINEA( 11 bit), WORD(3 bit), BYTE(2bit).......
TAG = ETICHETTA
LINEA = INDICE
WORD+BYTE = SPIAZZAMENTO
La divisione in WORD e BYTE è un po assurda... In pratica WORD indica a quale WORD (4 byte) accedere all'interno di quello che io chiamo blocco...mentre BYTE indica a quale byte all'interno della WORD scelta accedere... Questa divisione è inutile ai fini della discussione...anzi addirittura controproducente...
Metti che ogni blocco abbia dimensione di 2 byte (chiaramente è una cosa assurda), ma la suddivisione fatta dal tuo prof decadrebbe...
DavidTwister
30-05-2003, 20:27
Originally posted by "cionci"
TAG = ETICHETTA
LINEA = INDICE
WORD+BYTE = SPIAZZAMENTO
La divisione in WORD e BYTE è un po assurda... In pratica WORD indica a quale WORD (4 byte) accedere all'interno di quello che io chiamo blocco...mentre BYTE indica a quale byte all'interno della WORD scelta accedere... Questa divisione è inutile ai fini della discussione...anzi addirittura controproducente...
Metti che ogni blocco abbia dimensione di 2 byte (chiaramente è una cosa assurda), ma la suddivisione fatta dal tuo prof decadrebbe...
io farei decadere tanto volentieri la sua testa bacata....ha avuto la capacità di non farci capire nulla di quello che ha spiegato...con conseguenze che, come t sarai accorto, si vedono.... http://forum.hwupgrade.it/faccine/11.gif
DavidTwister
30-05-2003, 20:28
Originally posted by "cionci"
TAG = ETICHETTA
LINEA = INDICE
WORD+BYTE = SPIAZZAMENTO
La divisione in WORD e BYTE è un po assurda... In pratica WORD indica a quale WORD (4 byte) accedere all'interno di quello che io chiamo blocco...mentre BYTE indica a quale byte all'interno della WORD scelta accedere... Questa divisione è inutile ai fini della discussione...anzi addirittura controproducente...
Metti che ogni blocco abbia dimensione di 2 byte (chiaramente è una cosa assurda), ma la suddivisione fatta dal tuo prof decadrebbe...
tornando in discussione.....da quale componente viene operata la suddivisione in ETICHETTA-INDICE-SPIAZZAMENTO dell'indirizzo di memoria???
:confused:
non hai uno schema che mette accanto cache e memoria centrale e fa vedere i passaggi specifici che subisce un indirizzo di memoria?????
se dovessi spiegare passaggio x passaggio come avviene il piazzamento di una istruzione dalla memoria centrale alla cache,come lo faresti???
del tipo
1)l'indirizzo generato viene suddiviso in ETICHETTA-TAG-SPIAZZAMENTO
2)Si legge......
ecc ecc???
Originally posted by "DavidTwister"
tornando in discussione.....da quale componente viene operata la suddivisione in ETICHETTA-INDICE-SPIAZZAMENTO dell'indirizzo di memoria???
:confused:
Sì dell'indirizzo...
Originally posted by "DavidTwister"
non hai uno schema che mette accanto cache e memoria centrale e fa vedere i passaggi specifici che subisce un indirizzo di memoria?????
se dovessi spiegare passaggio x passaggio come avviene il piazzamento di una istruzione dalla memoria centrale alla cache,come lo faresti???
Non ne ho...la cache è trasparente ai fini della CPU...cioè non si accorge che la sta usando... La CPU svolge un normale ciclo di bus per andare a leggere/scrivere un certo indirizzo... La cache rispetto alla memoria fa le veci della CPU stessa...andando a fare normali cicli di bus soloquando necessario... La suddivisione avviane quando c'è un qualsiasi ciclo di bus dalla CPU...
Pensa alla cache come ad una memoria...pensala organizzata come una matrice...
Dato un indirizzo, la parte dedicata all'indice serve per identificare la linea della matrice... Questa va ad un circuito comparatore...se una delle etichette della linea corrisponde all'etichetta dell'indirizzo e il bit V di questa etichetta è a 1 allora si ha un successo...
Il blocco relativo a questa etichetta verrà indicizzato tramite lo spiazzamento:
- in caso di lettura i byte interessati verranno trasferiti sul bus...
- in caso di scrittura i byte interessati verranno modificati all'interno della cache (e modificati in memoria nel caso di modalità write through)
- in entrambi i casi aggiorno R in modo che indichi il blocco a cui non si è acceduto da più tempo (LRU)
In caso in cui non ci sia alcuna etichetta corrispondente oppure il gruppo non sia valido provvedo al rimpiazzamento...
C'è almeno un gruppo con bit V = 0:
- sovrascrivo un gruppo che ha V = 0
Non c'è almeno un gruppo con bit V = 1:
- nel caso sia in modalità write through sovrascrivo il gruppo indicato da R (l'avevamo già scritto in memoria al momento della eventuale modifica)
- nel caso si operi in modalità write back, il controllore della cache fa uno o più cicli di scrittura per trasferire il blocco individuato da R in memoria, sovrascrivo il blocco
Direi che non c'è niente di più da dire...
DavidTwister
31-05-2003, 10:48
Originally posted by "cionci"
Direi che non c'è niente di più da dire...
solo un'ultima delucidazione: quando hai detto
Originally posted by "cionci"
Quanti dati consecutivi può contenere?64x16=1024....1200 modulo 1024=176...176/16=11
cosa intendi per "1200 modulo 1024"???:confused:
e infine quando hai detto:
Originally posted by "cionci"
1200=10010110000 suddivisibile in etichetta=1, indice=001011, spiazzamento=0000
che senso ha "etichetta = 1" quando l'etichetta in realtà è composta da 16 bit??? :confused:
grazie ancora della disponibilità! ;)
Originally posted by "DavidTwister"
cosa intendi per "1200 modulo 1024"???:confused:
L'operazione di modulo (quella che sia fa ad algebra, in pratica a modulo b è uguale al resto della divisione intera a/b)...16 byte * 64 insiemi = 1024 byte consecutivi...
Originally posted by "DavidTwister"
Che senso ha "etichetta = 1" quando l'etichetta in realtà è composta da 16 bit??? :confused:
Posti come fissi i bit di indice e i bit di spiazzamento, la dimensione dell'etichetta varia a seconda del sistema con cui ci si interfaccia... Metti che vuoi interfacciare una cache di quel tipo su un bus indirizzi a 32 bit...in tal caso avrai un campo etichetta pari a 32 - 6(indice) - 4(spiazzamento) = 22 bit...
In un bus a 16 bit:
16 - 6 - 4 = 6 bit
In un bus a 40 bit:
40 - 6 - 4 = 30 bit
Non hai specificato la dimensione del bus indirizzi del tuo esempio e per quello ho specificato solo l'unica cifra significativa per l'esempio...
Come fai ad avere 16 bit di etichetta ?!?!?! 16 + 6 + 4 = 26 bit... avete un bus idnirizzi a 26 bit ? Mi sembra strano...
DavidTwister
31-05-2003, 16:39
Originally posted by "cionci"
Come fai ad avere 16 bit di etichetta ?!?!?! 16 + 6 + 4 = 26 bit... avete un bus idnirizzi a 26 bit ? Mi sembra strano...
bè...ti riporto semplicemente ciò ke è scritto sul mio libro....ora cerco di fare una scannerizzazione della pagina così c spieghiamo meglio......
cmq calcola che l'esempio del libro nn si basa sulla domanda da me posta...si basa su una cache di 2048 linee......
Originally posted by "DavidTwister"
cmq calcola che l'esempio del libro nn si basa sulla domanda da me posta...si basa su una cache di 2048 linee......
Allora il discorso è diverso ;)
2048 linee = 2^11...11 bit di indice
Se metti 16 bit di etichetta scommetto che i byte sono 32 per blocco... Di conseguenza...5 bit di spiazzamento...
Dico bene ?
DavidTwister
31-05-2003, 16:45
Originally posted by "cionci"
Allora il discorso è diverso ;)
2048 linee = 2^11...11 bit di indice
Se metti 16 bit di etichetta scommetto che i byte sono 32 per blocco... Di conseguenza...5 bit di spiazzamento...
Dico bene ?
PERFETTO!!!sei un mostro!!! :D
infatti ti ricordi il discorso di WORD e BYTE??? ebbene sono uno 3 BIT e l'altro 2BIT!!!
DavidTwister
31-05-2003, 16:49
ok grazie dell'aiuto!!!se rileggendo gli appunti e i tuoi suggerimenti dovessi avere qualche altro dubbio ( :D :D :D )...posso contare sul tuo immenso aiuto????? :D :) :confused:
ps:su che libro di testo hai basato il tuo studio???
Certo se hai bisogno chiedi pure :)
Originally posted by "DavidTwister"
ps:su che libro di testo hai basato il tuo studio???
Sul libro del mio prof...
http://www.ateneonline.it/LibroAteneo.asp?item_id=916
Sono 7 pagine sulla cache...se vuoi... Ma dimmelo in PVT...
DavidTwister
01-06-2003, 09:51
Adesso ho capito tutto!!!Il problema, come pensavo dall'inizio, era che il mio libro di testo non specificava una cosa fondamentale,ossia la seguente che metto per tutto coloro che vogliono saperne di +:
Nel livello della memoria centrale e nel livello della memoria cache le locazioni di memoria sono raggruppate in blocchi (insiemi allineati di locazioni consecutive), di qualche decina di byte (tipicamene 32), e il trasferimento d'informazione dal livello inferiore a quello superiore avviene sempre a livello di blocco.
;)
Con la cache write through la scrittura non avviene a blocchi... Con la cache write back tutti i trasferimenti avvengono esclusivamente a blocchi...
DavidTwister
01-06-2003, 10:21
Originally posted by "cionci"
Con la cache write through la scrittura non avviene a blocchi... Con la cache write back tutti i trasferimenti avvengono esclusivamente a blocchi...
già...ma la cosa fondamentale che mi ha fatto capire tutto è quella frase che ho messo che stava nei tuoi ottimi"appunti"....grazie ancora! ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.