2012-03-22 23 views
7

Ho appena letto due articoli su questo argomento che forniscono un'infrastruttura inconsistente, quindi voglio sapere quale è corretta. Forse entrambi sono corretti, ma in quale contesto?Quanti byte il controller della cache recupera un tempo dalla memoria principale alla cache L2?

I first uno stati che abbiamo recuperare una dimensione pagina volta

Il controller cache viene sempre osservando le posizioni di memoria in fase di caricamento e caricamento dei dati provenienti da diverse posizioni di memoria dopo la posizione di memoria che è stato appena leggere.

Per fornire un esempio reale, se la CPU ha caricato i dati memorizzati nell'indirizzo 1000, il controller della cache caricherà i dati dagli indirizzi "n" dopo l'indirizzo 1.000. Questo numero "n" è chiamato pagina; se un determinato processore funziona con pagine da 4 KB (che è un valore tipico), caricherà i dati da 4.096 indirizzi al di sotto della posizione di memoria corrente caricata (indirizzo 1000 nel nostro esempio). Nella figura seguente, illustriamo questo esempio.

enter image description here

I second uno stati che abbiamo recuperare sizeof (linea di cache) + sizeof (prefetcher) volta

Così possiamo riassumere come la cache di memoria funziona come:

  1. La CPU richiede istruzioni/dati memorizzati nell'indirizzo "a".
  2. Poiché il contenuto dell'indirizzo "a" non si trova all'interno della memoria cache, la CPU deve recuperarlo direttamente dalla RAM.
  3. Il controller di cache carica una riga (in genere 64 byte) che inizia all'indirizzo "a" nella memoria cache. Si tratta di più dati rispetto alla CPU richiesta, quindi se il programma continua a essere eseguito in sequenza (ovvero richiede l'indirizzo a + 1), le successive istruzioni/dati che la CPU richiederà saranno già caricati nella cache di memoria .
  4. Un circuito chiamato prefetcher carica più dati situati dopo questa linea, cioè inizia a caricare il contenuto dall'indirizzo + 64 nella cache. Per darvi un esempio reale, le CPU Pentium 4 hanno un prefetcher da 256 byte , quindi carica i successivi 256 byte dopo che la linea è già stata caricata nella cache.
+0

Non può essere una pagina intera. I processori attuali possono supportare pagine fino a 4 MB in modalità a 32 bit e 1 GB in modalità a 64 bit. – ughoavgfhw

risposta

9

Completamente dipendente dall'implementazione dell'hardware. Alcune implementazioni caricano una singola riga dalla memoria principale alla volta — e le dimensioni della linea della cache variano molto tra i diversi processori. Ho visto le dimensioni delle linee da 64 byte fino a 256 byte. Fondamentalmente ciò che la dimensione di una "linea di cache" significa è che quando la CPU richiede memoria dalla RAM principale, lo fa n byte alla volta. Quindi se n è 64 byte e si carica un intero di 4 byte a 0x1004, la MMU invierà effettivamente 64 byte attraverso il bus, tutti gli indirizzi da 0x1000 a 0x1040. Questa intera porzione di dati verrà archiviata nella cache di dati come un'unica riga.

Alcune MMU possono recuperare più linee di cache attraverso il bus per richiesta, in modo che una richiesta all'indirizzo 0x1000 su una macchina con 64 byte di cache effettivamente carichi quattro righe da 0x1000 a 0x1100.Some systems ti consente di farlo esplicitamente con uno speciale prefetch di cache o opcode DMA.

L'articolo tramite il primo collegamento, tuttavia, è completamente sbagliato. Confonde le dimensioni di un sistema operativo memory page con un hardware cache line. Questi sono concetti completamente diversi. Il primo è la dimensione minima dello spazio degli indirizzi virtuali che il sistema operativo assegnerà in una sola volta. Quest'ultimo è un dettaglio di come la CPU parla alla RAM principale.

Essi assomigliano a l'un l'altro solo nel senso che quando il sistema operativo esaurisce la memoria fisica, inserirà nel disco una memoria virtuale non utilizzata di recente; in seguito, quando si utilizza nuovamente quella memoria, il sistema operativo carica tutta la pagina dal disco nella RAM fisica. Questo è analogo (ma non correlato) al modo in cui la CPU carica byte dalla RAM, motivo per cui l'autore di "Hardware Secrets" è stato confuso.

Un buon posto per imparare tutto sulla memoria del computer e sul perché le cache funzionano come fanno il lavoro di Ulrich Drepper, What Every Programmer Should Know About Memory.

+0

+1 per il collegamento al documento di memoria di Drepper. Tuttavia, la dimensione della pagina è certamente una funzione hw e il sistema operativo non può scegliere un valore arbitrario per essa (ad esempio, cercare come funzionano le tabelle delle pagine). – janneb

+0

@janneb Questa risposta non sembra il posto giusto per discutere la differenza tra recupero della cache, dimensione della pagina d-ERAT, dimensione TLB e dimensione della tabella VMEM del software. Per farla breve, molte implementazioni consentono dimensioni di pagina variabili nel TLB. Ho un dispositivo seduto sulla mia scrivania che consente di allocare la memoria come pagine 4kb, 64kb o 4mb. – Crashworks

+0

Certo che no, ma così com'è ora, leggendo la tua risposta si potrebbe ottenere la comprensione errata che le pagine di memoria sono solo un dettaglio di implementazione del sistema operativo, mentre in realtà è intimamente connessa con il modo in cui l'HW esegue la ricerca virtuale-> indirizzo fisico. – janneb

Problemi correlati