Se lo spazio degli indirizzi virtuali può essere maggiore dello spazio degli indirizzi fisici, come vengono memorizzati i mapping degli indirizzi?


14

Diciamo che stiamo lavorando con un sistema che ha 40 bit di indirizzo fisico. Lo spazio di indirizzi fisici totali (supponendo che la memoria sia indirizzabile in byte) è di byte o 1 TiB. E se gli indirizzi virtuali sono lunghi 48 bit, ciò significa che ci sono più indirizzi disponibili nella memoria virtuale di quanti siano i percorsi nella memoria fisica.240

Questo ha senso per me, perché gli indirizzi "in eccesso" potrebbero riferirsi anche alle posizioni del disco rigido. Tuttavia, ciò che non capisco è come avviene la traduzione tra indirizzi virtuali e fisici. Presumo che ci sia una mappatura memorizzata da qualche parte che collega le posizioni VAS alle posizioni fisiche. Se esistono più posizioni di indirizzi virtuali rispetto a posizioni fisiche, come è possibile archiviare in memoria tutti questi mapping? Almeno avresti bisogno di 48 bit per memorizzare ogni indirizzo virtuale, e poi altri 40 per memorizzare la posizione fisica a cui è mappato. Quindi ovviamente non puoi semplicemente memorizzare una mappatura 1: 1 di ciascun indirizzo virtuale sulla sua controparte fisica, poiché mappare ogni posizione richiederebbe più memoria della memoria fisica stessa.

Cosa mi manca esattamente qui?


Non puoi farlo anche con una piccola quantità di memoria e spazio di indirizzi. Se avessi indirizzi fisici a 16 bit e indirizzi virtuali a 16 bit non saresti ancora in grado di memorizzare tutti i mapping 1: 1!
user253751

2
Il problema è più complesso anche di quanto si pensi. I computer raramente hanno TB di memoria, quindi la memoria fisica è molto meno dello spazio degli indirizzi virtuali. Peggio ancora: ogni processo ha il suo spazio di indirizzi virtuale completamente separato!
Mooing Duck il

Oltre alle posizioni del disco rigido, hai solo bit / spazio da perdere. Ad esempio, è possibile avere un'area estesa sotto lo stack non mappata per evitare overflow non rilevati. Puoi randomizzare ciò che carichi laddove si impedisce un'altra classe di attacchi . Vuoi indicare un singolo bit se l'indirizzo appartiene al kernel o all'utente - vai avanti anche se stai sprecando metà dello spazio. Mentre la maggior parte dei libri di testo si concentra sul paging dell'aspetto della memoria virtuale, c'è molto di più.
Maciej Piechotka,

(Nota anche che gli indirizzi possono essere alias, il che a volte è utile, quindi VA A e indirizzo B si riferiscono allo stesso PA P anche se A! = B.)
Maciej Piechotka,

Risposte:


26

Il trucco per far funzionare questo è "paging". Quando si trasferiscono dati da un disco rigido nella memoria fisica, non si portano solo pochi byte. Tu porti un'intera pagina. 4k byte è una dimensione di pagina molto comune.

Se hai solo bisogno di tenere traccia delle pagine, non di ogni singolo byte, la mappatura diventa molto più economica. Se si dispone di uno spazio di indirizzi di 48 bit e pagine di 4096 byte, è sufficiente tenere traccia di quale delle 2 ^ 36 pagine (circa 69 miliardi di pagine). È molto più facile! Il record di dove si trovano tutte le pagine è noto come "tabella delle pagine".

Se hai effettivamente bisogno di 1-256 TiB di memoria, rinunciare a qualche gigabyte per memorizzare questa tabella di pagine non è un grosso problema. In pratica, tuttavia, faremo cose come l'uso di tabelle di pagine a più livelli , il che ci consente di essere un po 'più efficienti, mantenendo le pagine solo per le aree dello spazio degli indirizzi che stiamo effettivamente utilizzando.


6
Un file di paging è un termine di Windows per un file fisico su disco contenente i contenuti dei frame di pagina fisici che sono stati recuperati per mancanza di memoria, i cui contenuti devono essere conservati. Se non sbaglio, la struttura dei dati che associa gli indirizzi di pagine virtuali a indirizzi di pagine fisiche dovrebbe essere chiamata tabella delle pagine .
Ripristina Monica - ζ--

@hexafraction Penso che tu abbia ragione. Ho apportato la modifica.
Cort Ammon - Ripristina Monica il

2
Quando la memoria effettiva è grande, un altro modo per ridurre la memoria necessaria per le tabelle delle pagine è consentire pagine più grandi. x86 ha un'opzione per mescolare 4 pagine KiB con 2/4 pagine MiB.
Nate Eldredge,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.