Inviato: 24 feb 2004, 11:03
Rieccomi
lo so, ho latitato parekkio nel continuare questo post ma alcuni impegni accademici mi hanno tenuto lontano!
Cmq rieccomi come promesso a raccontarvi della memoria cahe.
Nn so se qualcuno l'ha notato ma quando abbiamo visto le prestazioni del processore convenzionale in diversi momenti c'era una degradazione dovta alla lentezza della memoria... in realtà se il sistema rimane quello ke abbiamo descritto la memoria diventa un collo di bottiglia insormontabile e nn ci permette di migliorare le prestazioni... qual'è l'idea? L'idea è di fare la stessa cosa ke ha portato all'introduzione della memoria principale (la RAM) cioè istituire una ulteriore gerarkia di memoria.
Quindi è come se la RAM diventasse la memoria di massa (nella gerarkia di memoria virtuale la memoria di massa era l'hard disk) e la cache diventa la memoria più piccola e veloce...
Per vari motivi di prestazioni la memoria cache viene integrata direttamente sulla cpu.
Come inseriamo la cache nel modello visto nei post precedenti? Siccome il nostro scopo è modificare il minimo possibile noi dobbiamo fare in modo ke il processore nn si accorga ke è stata introdotta questa nuova gerarkia di memoria. Quindi x il processore è come se ci fosse ancora solo la memoria principale. Come si fa?
Se avete seguito i post precedenti nn .troverete difficoltà a capire il procedimento. Ecco quello ke succede
- Il processore genera l'indirizzo logico
- L'MMU deduce dalla tabella di rilocazione se la pagina interessata è caricata in memoria, se nn lo è restituisce al processore un'eccezione ke porterà in azione il meccanismo ke farà arrivare la pagina in memoria
Fino a qui niente di nuovo... ora aggiungiamo i passaggi ke ci mancano
- Se la pagina sta in memoria (stando alla tabella di rilocazione) l'MMU instrada la rikiesta alla memoria cache (tra i due esiste un collegamento diretto)
- A questo punto possono succedere due cose:
1) il dato rikiesto sta in cache
2) il dato rikiesto nn sta in cache, ma da quanto ci ha detto la tabella di rilocazione sta sicuramente in memria principale. in analogia a quanto succedeva nella gerarkia di memoria virtuale qui si ha un fault di cache. In gergo si kiama "cache miss"
Nel primo caso la cache manda direttamente quanto rikiesto al processore senza ripassare x l'MMU. Nel secondo caso la cache, di nuovo senza ripassare x l'MMU, kiede alla memoria di mandarle i dati ke rikiesti; appena i dati arrivano la cache li scriverà al suo interno e li manderà l processore...
In particolare la cache nn rikiede solo la parola rikiesta dal processore ma prende tutto un pezzo della pagina ke contiene quella parola. Questo pezzo viene detto "blocco"... questo esattamete come succedeva x la gerarkia di memoria virtuale dove quando c'è un fault viene kiesta nn solo la parola ke serve al momento ma tutta la pagina ke la contiene.
In assenza di cache miss l'aver introdotto la cache aumenta parekkio le prestazioni del processore tanto ke ora a fare da collo di bottiglia nn è + la memoria ma il processore... questo verrà superato con l'introduzione dell'arkitettura pipeline ma ne parleremo dopo.
Ovviamente i cache miss degradano le prestazioni xkè rendono necessario un accesso in memoria ke come sappiamo rallenta tutto. Quello ke dobbiamo fare quindi è avere la cache sufficientemente grande in modo tale ke dopo un serie di cache miss iniziali si hanno in cache tutti i dati necessari e quindi nn c'è + bsogno di passare x la memoria...
Nei prossimi post espanderò l'argomento è sarò un po + preciso, x il momento cercate di capire xkè la cache è importante x migliorare le prestazioni.
X ora mi limiterò a darvi solo qualke piccola informazione e considerazione.
Intanto fissate bene questo: nella cache ci stanno solo delle istruzioni o dei dati relativi al processo in esecuzione al momento. AL cambiare del processo in esecuzione tutto quello presente nella cache viene marcato come "non significativo" e quindi al cambiare di processo ci sarà una serie di cache miss ke porterà istruzioni e dati relativi al novo processo.
Le gerarkie di memoria possono essere ulteriormente espanse... già da tempo si ha una memoria cache di 2° livello ke prima era integrata nella mobo e successivamente (sempre x un motivo di prestazioni) è stata integrata ank'essa nella cpu e avrete visto ke da poco è disponibile anke un pentium 4 con cache di 3°livello integrata nella cpu...
Il processo è sempre lo stesso: il livello + alto della gerarkia è una memoria + grande e + lenta del livello + basso e ogni memoria fa da tampone a quella superiore.
Beh, mi sa ke vi dato materia x riflettere...
Ci sentiamo alla prossima!
Ciao Ciao
lo so, ho latitato parekkio nel continuare questo post ma alcuni impegni accademici mi hanno tenuto lontano!
Cmq rieccomi come promesso a raccontarvi della memoria cahe.
Nn so se qualcuno l'ha notato ma quando abbiamo visto le prestazioni del processore convenzionale in diversi momenti c'era una degradazione dovta alla lentezza della memoria... in realtà se il sistema rimane quello ke abbiamo descritto la memoria diventa un collo di bottiglia insormontabile e nn ci permette di migliorare le prestazioni... qual'è l'idea? L'idea è di fare la stessa cosa ke ha portato all'introduzione della memoria principale (la RAM) cioè istituire una ulteriore gerarkia di memoria.
Quindi è come se la RAM diventasse la memoria di massa (nella gerarkia di memoria virtuale la memoria di massa era l'hard disk) e la cache diventa la memoria più piccola e veloce...
Per vari motivi di prestazioni la memoria cache viene integrata direttamente sulla cpu.
Come inseriamo la cache nel modello visto nei post precedenti? Siccome il nostro scopo è modificare il minimo possibile noi dobbiamo fare in modo ke il processore nn si accorga ke è stata introdotta questa nuova gerarkia di memoria. Quindi x il processore è come se ci fosse ancora solo la memoria principale. Come si fa?
Se avete seguito i post precedenti nn .troverete difficoltà a capire il procedimento. Ecco quello ke succede
- Il processore genera l'indirizzo logico
- L'MMU deduce dalla tabella di rilocazione se la pagina interessata è caricata in memoria, se nn lo è restituisce al processore un'eccezione ke porterà in azione il meccanismo ke farà arrivare la pagina in memoria
Fino a qui niente di nuovo... ora aggiungiamo i passaggi ke ci mancano
- Se la pagina sta in memoria (stando alla tabella di rilocazione) l'MMU instrada la rikiesta alla memoria cache (tra i due esiste un collegamento diretto)
- A questo punto possono succedere due cose:
1) il dato rikiesto sta in cache
2) il dato rikiesto nn sta in cache, ma da quanto ci ha detto la tabella di rilocazione sta sicuramente in memria principale. in analogia a quanto succedeva nella gerarkia di memoria virtuale qui si ha un fault di cache. In gergo si kiama "cache miss"
Nel primo caso la cache manda direttamente quanto rikiesto al processore senza ripassare x l'MMU. Nel secondo caso la cache, di nuovo senza ripassare x l'MMU, kiede alla memoria di mandarle i dati ke rikiesti; appena i dati arrivano la cache li scriverà al suo interno e li manderà l processore...
In particolare la cache nn rikiede solo la parola rikiesta dal processore ma prende tutto un pezzo della pagina ke contiene quella parola. Questo pezzo viene detto "blocco"... questo esattamete come succedeva x la gerarkia di memoria virtuale dove quando c'è un fault viene kiesta nn solo la parola ke serve al momento ma tutta la pagina ke la contiene.
In assenza di cache miss l'aver introdotto la cache aumenta parekkio le prestazioni del processore tanto ke ora a fare da collo di bottiglia nn è + la memoria ma il processore... questo verrà superato con l'introduzione dell'arkitettura pipeline ma ne parleremo dopo.
Ovviamente i cache miss degradano le prestazioni xkè rendono necessario un accesso in memoria ke come sappiamo rallenta tutto. Quello ke dobbiamo fare quindi è avere la cache sufficientemente grande in modo tale ke dopo un serie di cache miss iniziali si hanno in cache tutti i dati necessari e quindi nn c'è + bsogno di passare x la memoria...
Nei prossimi post espanderò l'argomento è sarò un po + preciso, x il momento cercate di capire xkè la cache è importante x migliorare le prestazioni.
X ora mi limiterò a darvi solo qualke piccola informazione e considerazione.
Intanto fissate bene questo: nella cache ci stanno solo delle istruzioni o dei dati relativi al processo in esecuzione al momento. AL cambiare del processo in esecuzione tutto quello presente nella cache viene marcato come "non significativo" e quindi al cambiare di processo ci sarà una serie di cache miss ke porterà istruzioni e dati relativi al novo processo.
Le gerarkie di memoria possono essere ulteriormente espanse... già da tempo si ha una memoria cache di 2° livello ke prima era integrata nella mobo e successivamente (sempre x un motivo di prestazioni) è stata integrata ank'essa nella cpu e avrete visto ke da poco è disponibile anke un pentium 4 con cache di 3°livello integrata nella cpu...
Il processo è sempre lo stesso: il livello + alto della gerarkia è una memoria + grande e + lenta del livello + basso e ogni memoria fa da tampone a quella superiore.
Beh, mi sa ke vi dato materia x riflettere...
Ci sentiamo alla prossima!
Ciao Ciao