Qualcuno può chiarirmi qual è la differenza tra memoria virtuale e spazio di swap ?
E perché diciamo che per una macchina a 32 bit la memoria virtuale massima accessibile è di soli 4 GB?
Qualcuno può chiarirmi qual è la differenza tra memoria virtuale e spazio di swap ?
E perché diciamo che per una macchina a 32 bit la memoria virtuale massima accessibile è di soli 4 GB?
Risposte:
C'è un eccellente espianto della memoria virtuale su superutente .
In poche parole, la memoria virtuale è una combinazione di RAM e spazio su disco che i processi in esecuzione possono utilizzare.
Lo spazio di swap è la porzione di memoria virtuale che si trova sul disco rigido, utilizzata quando la RAM è piena.
Per quanto riguarda il motivo per cui la CPU a 32 bit è limitata a 4 GB di memoria virtuale, è affrontato bene qui :
Per definizione, un processore a 32 bit utilizza 32 bit per fare riferimento alla posizione di ogni byte di memoria. 2 ^ 32 = 4,2 miliardi, il che significa che un indirizzo di memoria lungo 32 bit può riferirsi solo a 4,2 miliardi di posizioni uniche (cioè 4 GB).
C'è una certa confusione riguardo al termine Memoria virtuale, e in realtà si riferisce ai seguenti due concetti molto diversi
Spazio di swap, OTOH, è il nome della porzione di disco utilizzata per memorizzare pagine RAM aggiuntive quando non in uso.
Una consapevolezza importante da fare è che il primo è possibile in modo trasparente grazie al supporto hardware e OS del secondo.
Per capire meglio tutto ciò, si dovrebbe considerare come la "Memoria virtuale" (come nella definizione 2) sia supportata dalla CPU e dal SO.
Supponiamo di avere un puntatore a 32 bit (i punti a 64 bit sono simili, ma utilizzano meccanismi leggermente diversi). Una volta abilitata la "Memoria virtuale", il processore considera questo puntatore come tre parti.
Ora, quando la CPU cerca di accedere al contenuto di un puntatore, consulta prima la tabella Page Directory - una tabella composta da 1024 voci (nell'architettura X86 la cui posizione è puntata dal registro CR3). La voce della directory delle pagine a 10 bit è un indice in questa tabella, che punta alla posizione fisica della tabella delle pagine . Questa, a sua volta, è un'altra tabella di 1024 voci ciascuna delle quali è un puntatore nella memoria fisica e diversi bit di controllo importanti. (Torneremo su questi più tardi). Una volta che una pagina è stata trovata, gli ultimi 12 bit vengono utilizzati per trovare un indirizzo all'interno di quella pagina.
Ci sono molti altri dettagli (TLB, pagine grandi, PAE, selettori, protezione pagina) ma la breve spiegazione sopra cattura il succo delle cose.
Utilizzando questo meccanismo di traduzione, un sistema operativo può utilizzare un diverso set di pagine fisiche per ogni processo, dando così a ciascun processo l'illusione di avere tutta la memoria per se stesso (poiché ogni processo ottiene la propria directory di pagine)
Oltre a questa memoria virtuale, il sistema operativo può anche aggiungere il concetto di paging . Uno dei bit di controllo discussi in precedenza consente di specificare se una voce è "Presente". Se non è presente, un tentativo di accedere a quella voce comporterebbe un'eccezione di errore di pagina . Il sistema operativo può acquisire questa eccezione e agire di conseguenza. I sistemi operativi che supportano lo scambio / paging possono quindi decidere di caricare una pagina dallo spazio di scambio , correggere le tabelle di traduzione e quindi rilasciare nuovamente l'accesso alla memoria.
È qui che i due termini si combinano, un sistema operativo che supporta memoria virtuale e paging può dare ai processi l'illusione di avere più memoria di quella effettivamente presente pagando (scambiando) pagine dentro e fuori dall'area di scambio.
Per quanto riguarda la tua ultima domanda (perché si dice che la CPU a 32 bit è limitata a 4 GB di memoria virtuale). Si riferisce alla "Memoria virtuale" della definizione 2 ed è un risultato immediato della dimensione del puntatore. Se la CPU può utilizzare solo puntatori a 32 bit, hai solo 32 bit per esprimere indirizzi diversi, questo ti dà 2 ^ 32 = 4 GB di memoria indirizzabile.
Spero che questo renda le cose un po 'più chiare.
IMHO è terribilmente fuorviante usare il concetto di spazio di swap come equivalente alla memoria virtuale. VM è un concetto molto più generale dello spazio di swap. Tra le altre cose, la VM consente ai processi di fare riferimento a indirizzi virtuali durante l'esecuzione, che vengono tradotti in indirizzi fisici con il supporto di hardware e tabelle di pagina. Pertanto, i processi non riguardano la quantità di memoria fisica del sistema o la posizione effettiva dell'istruzione o dei dati nella gerarchia della memoria fisica. VM consente questa mappatura. L'elemento di riferimento (istruzione o dati) può essere residente in L1, o L2, o RAM, o infine su disco, nel qual caso viene caricato nella memoria principale.
Lo spazio di swap è solo un posto nella memoria secondaria in cui le pagine vengono archiviate quando sono inattive. Se non c'è RAM sufficiente, il sistema operativo può decidere di scambiare le pagine di un processo, per fare spazio ad altre pagine di processo. Il processore non esegue mai istruzioni o legge / scrive dati direttamente dallo spazio di swap.
Si noti che sarebbe possibile avere spazio di swap in un sistema senza VM. Cioè, i processi che accedono direttamente agli indirizzi fisici, potrebbero ancora averne parti su disco.
Anche se il thread è piuttosto vecchio e ha già ricevuto una risposta. Vorrei comunque condividere questo collegamento poiché questa è la spiegazione più semplice che ho trovato finora. Il link sottostante ha diagrammi per una migliore visualizzazione.
Differenza chiave: la memoria virtuale è un'astrazione della memoria principale. Estende la memoria disponibile del computer memorizzando le parti inattive della RAM del contenuto su un disco. Ogni volta che il contenuto è richiesto, lo recupera nella RAM. La memoria di swap o lo spazio di swap è una parte del disco rigido utilizzata per la memoria virtuale. Pertanto, entrambi sono anche usati in modo intercambiabile.
La memoria virtuale è abbastanza diversa dalla memoria fisica. I programmatori ottengono l'accesso diretto alla memoria virtuale anziché alla memoria fisica. La memoria virtuale è un'astrazione della memoria principale. Viene utilizzato per nascondere le informazioni della reale memoria fisica del sistema. Estende la memoria disponibile del computer memorizzando le parti inattive del contenuto della RAM su un disco. Quando il contenuto è richiesto, lo recupera nella RAM. La memoria virtuale crea l'illusione di un intero spazio di indirizzi con indirizzi che iniziano con zero. È principalmente preferito per la sua caratteristica di ottimizzazione grazie alla quale riduce i requisiti di spazio. È composto dalla RAM disponibile e dallo spazio su disco.
La memoria di swap viene generalmente chiamata spazio di swap. Lo spazio di swap si riferisce alla porzione della memoria virtuale riservata come posizione di archiviazione temporanea. Lo spazio di swap viene utilizzato quando la RAM disponibile non è in grado di soddisfare i requisiti di memoria del sistema. Ad esempio, nel sistema di memoria Linux, il kernel individua ogni pagina nella memoria fisica o nello spazio di swap. Il kernel mantiene anche una tabella in cui vengono conservate le informazioni riguardanti le pagine scambiate e le pagine nella memoria fisica. Le pagine a cui non si accede da molto tempo vengono inviate all'area dello spazio di swap. Il processo è indicato come scambio. Nel caso in cui sia richiesta la stessa pagina, viene scambiata nella memoria fisica sostituendo una pagina diversa. Quindi,
"Memoria virtuale" è un termine generico. In Windows, è chiamato Paging o impaginazione. In Linux, si chiama Swap.