Relazione tra la riga della cache e la pagina di memoria

  1. Se ho ragione, una pagina nella memoria principale è lunità più piccola per il trasferimento dei dati tra la memoria principale e un dispositivo di archiviazione esterno, come un disco rigido. Una riga della cache di una memoria principale è lunità più piccola per trasferire i dati tra la memoria principale e le cache della CPU.

  2. Mi chiedo se la dimensione di una pagina sia sempre o meglio essere una numero naturale della dimensione della riga della cache? Se la dimensione di una riga della cache è 64 byte e la dimensione di una pagina di memoria è 4KB, ogni pagina contiene 4KB / 64 byte == 64 righe della cache.

  3. Una pagina e una riga della cache sono entrambi oggetti fissi in una memoria? O sono solo un blocco contiguo di una memoria di una certa dimensione, che può iniziare e fluttuare ovunque allinterno della memoria?

  4. È sempre che una riga della cache non può estendersi più di una pagina, cioè parte di una riga della cache è in una pagina e laltra parte della riga della cache è in unaltra pagina?

Grazie.

Commenti

  • Le risposte alle tue domande dipendono fortemente dallarchitettura della CPU.

Risposta

  1. Una riga della cache è lunità più piccola con cui puoi toccare la memoria fisica. Significa che quando leggi / scrivi 1 byte, una riga cache completa che lo contiene viene letta nella cache della CPU e riscritta. Si noti che anche le istruzioni che ignorano la cache per scrivere (istruzioni di streaming temporanee) scrivono nelle dimensioni delle righe della cache. A seconda della CPU, le dimensioni delle righe della cache sono in genere 32/64/128 byte. Quando le pagine di memoria vengono scritte su disco, vengono scritte per intero. Ciò accadrà quando la pressione della memoria è troppo alta o con processi di ibernazione (e possibilmente per altri usi). Verranno anche letti interi quando necessario. Ciò è principalmente dovuto al fatto che il kernel non ha modo di sapere se la pagina è parzialmente o completamente utilizzata. Altre operazioni di lettura / scrittura della memoria esterna possono avere granularità arbitraria (ad esempio: fwrite (..)).

  2. La dimensione della pagina dipende dalla CPU / GPU. Per la maggior parte delle CPU, le dimensioni delle pagine saranno di almeno 4KB e generalmente supportano un mix di 4KB / 64KB / 2 MB / 4 MB / 16 MB / 1 GB (non necessariamente tutte supportate contemporaneamente). La dimensione sarà sempre una potenza di due.

  3. Sia una pagina che una riga della cache sono contigue e richiedono di essere allineate alle rispettive dimensioni. Una riga della cache a 64 byte è sempre allineata a 64 byte e una pagina da 2 MB è sempre allineata a 2 MB.

  4. A causa del punto 3, una riga della cache non può mai estendersi su 2 pagine poiché le dimensioni della pagina lo saranno essere sempre più grande di una riga della cache e sarà sempre un multiplo della dimensione di una riga della cache.

Vedi questa eccellente fonte per una grande quantità di informazioni sulla memoria: http://lwn.net/Articles/250967/

Commenti

  • È questa risposta è ancora rilevante nel 2020? Queste dimensioni sono cambiate?
  • Per quanto ne so, quei valori rimangono pertinenti anche oggi. Tutte le moderne CPU x86 e x64 utilizzano 64 byte per riga di cache e 4KB rimane la dimensione di pagina più comune in Windows e Linux. Per i dispositivi embedded, controlla il manuale interno del tuo processore per i dettagli su cosa è supportato.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *