2011-11-13 23 views
5

Dalla mia comprensione leggendo diversi articoli ho assunto Process Address Space (PAS) e Virtual Memory (VM) sono gli stessi. La mia comprensione è difettosa? Qualcuno può far luce su questo e illuminarmi? Sono confuso.Process Address Space vs Virtual Memory

Ho capito che lo spazio indirizzo processo non ha nulla a che fare con RAM o memoria fisica.

Ma solo confuso su PAS e VM.

risposta

7

Primo:"memory" is not equal to "address space". Lo spazio degli indirizzi è un intervallo di indirizzi posible. Cioè è 4 Gb per puntatori a 32 bit e 16 Eb per puntatori a 64 bit. D'altra parte, la memoria è ... beh, memoria che puoi effettivamente usare (almeno possibilmente). Quindi, scommetto che ti stai chiedendo se "memoria di processo" è uguale a "memoria virtuale" o se "spazio di indirizzamento del processo" è uguale a "spazio di indirizzamento virtuale".

Secondo: La memoria virtuale è l'unica memoria che è possibile utilizzare in modalità utente. Non è possibile accedere alla memoria fisica. La memoria fisica è per la modalità kernel e i driver. Le applicazioni in modalità utente funzionano solo con la memoria virtuale. Pertanto, tutta la memoria è virtuale in modalità utente. Non c'è bisogno di aggiungere "virtuale". È di default.

Pertanto, "Spazio indirizzo processo" = "Spazio indirizzo processo virtuale", ovvero lo spazio di indirizzamento virtuale del singolo processo. Lo stesso vale per "memoria": "Process Memory" = "[Virtual] Process Memory".

Terzo: Ora, il termine "Memoria virtuale" di solito si riferisce a "Sistema di memoria virtuale" (cosa globale), che è più grande di un solo processo. D'altra parte: poiché l'indirizzamento è specifico per il processo, non esiste "Spazio di indirizzi virtuali di sistema" (spazio di indirizzamento globale di tutti i processi e il kernel).

Quindi, la risposta è:

  1. "Processo Spazio indirizzo" = "Virtual Address Space" = "Spazio indirizzo"
  2. "processo di memoria" <> "memoria virtuale"

Esempi

Ad esempio, il limite tipico per lo spazio di indirizzi di elaborazione è di 4 GB (per applicazioni a 32-bit). Tuttavia, un limite tipico della memoria virtuale del processo è 2 Gb (che può essere espanso fino a 3 Gb per macchine a 32 bit o 4 Gb per macchine a 64 bit).

D'altra parte, la memoria virtuale è più grande del solo processo. Considerare il caso in cui si assegna memoria tramite la funzione CreateFileMapping. È possibile creare, ad esempio, 64 GB di memoria virtuale. Va bene anche se 64 Gb> 2 Gb. Naturalmente, non è possibile utilizzare tutti i 64 Gb allo stesso tempo (perché lo spazio di indirizzamento del processo è di soli 4 Gb), ma è possibile farlo in blocchi, ad esempio, per 512 Mb.

Inoltre, considerare il caso in cui si mappa lo stesso blocco di memoria virtuale in posizioni mupliple (più indirizzi).

In altre parole, il mapping uno-a-uno tra la memoria virtuale e l'indirizzo virtuale non esiste.