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?
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?
Risposte:
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.
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.
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 processes
della 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.