Memoria virtuale vs. spazio degli indirizzi virtuali


3

So che la memoria virtuale è un file di paging che il computer utilizza per archiviare una parte della RAM sul disco rigido per un processo in esecuzione. Ma quanto è diverso lo spazio degli indirizzi virtuali? è la RAM o il disco rigido o entrambi?


3
La memoria virtuale NON è solo "un file di paging". Stai ancora usando la memoria virtuale anche se non hai un file di pagine.
Jamie Hanrahan,

Esistono sistemi con memoria virtuale e nessun file di paging (come la maggior parte dei router SoHo) e sistemi con file di paging e nessuna memoria virtuale (i file di paging sono stati utilizzati su molti primi computer che non avevano supporto per la memoria virtuale). Questo è un malinteso comune.
David Schwartz,

Risposte:


8

Lo spazio di indirizzi virtuali è ciò che un singolo programma vede quando viene eseguito. A seconda di come è stato configurato il programma, questo spazio di indirizzi sarà grande quanto il massimo supportato dal sistema operativo.

Il kernel del sistema operativo è quindi responsabile della mappatura degli indirizzi nel vaso sulla memoria fisica, sia quella RAM, sia i file delle pagine di sistema.

Con questa progettazione, i programmi stessi rimangono inconsapevoli di risorse e indirizzi reali e possono funzionare come se avessero tutta la memoria di sistema a loro disposizione, o almeno la memoria massima che un singolo processo può usare.

In breve, un programma funziona con VAS e il sistema operativo gestisce la mappatura di VAS sulla memoria reale in modo che sia invisibile al programma in esecuzione. Il programma in esecuzione vede solo il suo VAS.


0

Virtual Address Space è una limitazione della dimensione della memoria che un programma può indirizzare.

Ciò è vincolato al limite esterno dallo stile dei puntatori: in teoria un puntatore a 32 bit può indirizzare 4 GB di spazio virtuale. Il limite reale dipende dalla progettazione del sistema operativo in quanto utilizza una parte significativa dello spazio degli indirizzi accanto allo spazio utente.

In Win32, l'impostazione predefinita è consentire uno spazio di indirizzi virtuale di 2 GB come spazio utente.

Un puntatore a 64 bit può indirizzare molto di più, in pratica sono ammessi 48 bit e ci sono molti dettagli su questa risposta da superutente .

In teoria, qualcuno potrebbe costruire un computer fisico con abbastanza RAM da poter mappare direttamente quel 2GB di spazio utente sulla memoria fisica (probabilmente necessitando almeno 3GB di fisico) in modo da avere processi a 32 bit in cui la memoria virtuale non era molto virtuale.


2 GB di spazio utente richiedono solo 2 GB di memoria fisica. Il limite di 2 GB è dovuto in gran parte alla progettazione del sistema operativo, ma soprattutto al fatto che i puntatori in C / C ++ sono connessi per impostazione predefinita.
surfasb,

-1

Lo spazio di indirizzi virtuali è ciò che vede il processo. Ad esempio, la tua e-mail si trova in una casella di posta che, diciamo, ha una dimensione di 25 GB. Questo è il tuo spazio di indirizzi virtuale.

Lo spazio di indirizzi virtuali consiste nel distinguere il fatto che non tutti gli spazi di indirizzi virtuali corrispondono a uno spazio di indirizzi fisico . Supponiamo che tu abbia 20 utenti di posta elettronica con 25 GB di spazio in arrivo. Ma hai solo 100 GB di spazio su disco sul tuo server. Bene, puoi prendere vecchie e-mail e archiviarle e conservare solo quelle recenti sul tuo server perché le persone di solito controllano solo le e-mail più recenti.

L'archiviazione della posta elettronica dal server, ad esempio, un'unità a nastro è simile alle parti di paging della RAM del computer su disco. Quando qualcuno va a guardare la vecchia e-mail, basta semplicemente "sfogliare" la vecchia e-mail dal nastro sul server. L'utente e-mail non conoscerà mai la differenza.

Allo stesso modo, ogni processo sulla tua macchina ha X spazio di indirizzi virtuale, anche se potresti avere meno X * number of processesdella memoria fisica.

La memoria virtuale è esattamente questo. Spazio di indirizzi virtuali. Ma la memoria virtuale è solo lo spazio degli indirizzi virtuali che si sta utilizzando.


Questo è completamente sbagliato.
Andy Dent,

Veramente? Per favore, spiega ...
Surfasb,

Le dimensioni di una casella di posta in arrivo da 25 GB su disco non hanno assolutamente nulla a che fare con lo spazio di indirizzi virtuali. C'è una definizione molto semplice e capisco che stavi cercando di usare un'analogia. Molte persone che leggono la tua risposta, che non sanno già cos'è lo spazio di indirizzi virtuali, non si rendono conto che è puramente un'analogia.
Andy Dent,

1
"La memoria virtuale è solo lo spazio degli indirizzi virtuali che si sta utilizzando." No non lo è. Lo spazio di indirizzi virtuali è lo spazio che il tuo programma può affrontare in teoria, come una combinazione delle restrizioni sulla dimensione del puntatore e le restrizioni del sistema operativo.
Andy Dent,

Penso che sia un'ottima analogia considerando che la maggior parte delle persone che leggono la risposta provengono dallo spazio di "cosa significa memoria virtuale e spazio di indirizzamento della memoria virtuale per me come utente medio". Ora, se si tratta di stackoverflow, questa analogia non sarebbe sufficiente e la domanda stessa avrebbe bisogno di più contesto. Tieni presente che questo è Superuser, non un gruppo di programmatori Device Driver.
surfasb,
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.