Gestione di RAM, memoria virtuale, file di paging e memoria in Windows

Si applica a: Windows Server 7 Service Pack 1, Windows Server 2012 R2
Numero KB originale: 2160852

Riepilogo

Questo articolo contiene informazioni di base sull'implementazione della memoria virtuale nelle versioni a 32 bit di Windows.

Nei sistemi operativi moderni come Windows, le applicazioni e molti processi di sistema fanno sempre riferimento alla memoria usando indirizzi di memoria virtuale. Gli indirizzi di memoria virtuale vengono convertiti automaticamente in indirizzi reali (RAM) dall'hardware. Solo le parti principali del kernel del sistema operativo ignorano questa conversione degli indirizzi e usano direttamente gli indirizzi di memoria reale.

La memoria virtuale viene sempre usata, anche quando la memoria richiesta da tutti i processi in esecuzione non supera il volume di RAM installato nel sistema.

Processi e spazi di indirizzi

A tutti i processi (ad esempio, i file eseguibili dell'applicazione) in esecuzione in versioni a 32 bit di Windows vengono assegnati indirizzi di memoria virtuale ( uno spazio indirizzi virtuale), compresi tra 0 e 4.294.967.295 (2*32-1 = 4 GB), indipendentemente dalla quantità di RAM installata nel computer.

Nella configurazione predefinita di Windows, 2 gigabyte (GB) di questo spazio indirizzi virtuale sono designati per l'uso privato di ogni processo e gli altri 2 GB vengono condivisi tra tutti i processi e il sistema operativo. In genere, le applicazioni (ad esempio Blocco note, Word, Excel e Acrobat Reader) usano solo una frazione dei 2 GB di spazio indirizzi privato. Il sistema operativo assegna i fotogrammi di pagina RAM solo alle pagine di memoria virtuale in uso.

L'estensione pae (Physical Address Extension) è la funzionalità dell'architettura Intel a 32 bit che espande l'indirizzo di memoria fisica (RAM) a 36 bit. PAE non modifica le dimensioni dello spazio di indirizzi virtuali (che rimane a 4 GB), ma solo il volume di RAM effettiva che può essere affrontato dal processore.

La conversione tra l'indirizzo di memoria virtuale a 32 bit usato dal codice in esecuzione in un processo e l'indirizzo RAM a 36 bit viene gestita automaticamente e in modo trasparente dall'hardware del computer in base alle tabelle di conversione gestite dal sistema operativo. Qualsiasi pagina di memoria virtuale (indirizzo a 32 bit) può essere associata a qualsiasi pagina di RAM fisica (indirizzo a 36 bit).

L'elenco seguente descrive la quantità di RAM supportata dalle varie versioni ed edizioni di Windows (a partire da maggio 2010):

Versione di Windows RAM
Windows NT 4.0 4 GB
Windows 2000 Professional 4 GB
Windows 2000 Standard Server 4 GB
Windows 2000 Advanced Server 8 GB
Windows 2000 Datacenter Server 32 GB
Windows XP Professional 4 GB
Windows Server 2003 Web Edition 2 GB
Windows Server 2003 Standard Edition 4 GB
Windows Server 2003 edizione Enterprise 32 GB
Windows Server 2003 Datacenter Edition 64 GB
Windows Vista 4 GB
Windows Server 2008 Standard 4 GB
Windows Server 2008 Enterprise 64 GB
Windows Server 2008 Datacenter 64 GB
Windows 7 4 GB

File di paging

La RAM è una risorsa limitata, mentre per scopi pratici la memoria virtuale è illimitata. Possono essere presenti molti processi e ogni processo ha i propri 2 GB di spazio indirizzi virtuali privati. Quando la memoria usata da tutti i processi esistenti supera la RAM disponibile, il sistema operativo sposta le pagine (parti da 4 KB) di uno o più spazi di indirizzi virtuali nel disco rigido del computer. In questo modo il frame ram viene liberato per altri usi. Nei sistemi Windows queste pagine di paging vengono archiviate in uno o più file (file Pagefile.sys) nella radice di una partizione. In ogni partizione del disco può essere presente un file di questo tipo. Il percorso e le dimensioni del file di pagina sono configurati in Proprietà di sistema (fare clic su Avanzate, fare clic su Prestazioni e quindi fare clic sul pulsante Impostazioni ).

Gli utenti spesso chiedono quanto devo fare il file di pagina? Non esiste una singola risposta a questa domanda perché dipende dalla quantità di RAM installata e dalla quantità di memoria virtuale necessaria per il carico di lavoro. Se non sono disponibili altre informazioni, la raccomandazione tipica di 1,5 volte la RAM installata è un buon punto di partenza. Nei sistemi server, in genere si vuole avere una RAM sufficiente in modo che non vi sia mai carenza e in modo che il file di pagina non venga usato. In questi sistemi non può essere utile mantenere un file di paging di grandi dimensioni. D'altra parte, se lo spazio su disco è abbondante, la gestione di un file di paging di grandi dimensioni (ad esempio, 1,5 volte la RAM installata) non causa un problema e ciò elimina anche la necessità di preoccuparsi di quanto grande per renderlo.

Prestazioni, limiti dell'architettura e RAM

In qualsiasi sistema informatico, man mano che aumenta il carico (il numero di utenti, il volume di lavoro), le prestazioni diminuiscono, ma in modo non lineare. Qualsiasi aumento del carico o della domanda, oltre un determinato punto, causa una riduzione significativa delle prestazioni. Ciò significa che alcune risorse sono a corto di risorse ed è diventata un collo di bottiglia.

A un certo punto, la risorsa che non è disponibile non può essere aumentata. Ciò significa che è stato raggiunto un limite architetturale . Alcuni limiti dell'architettura segnalati di frequente in Windows includono quanto segue:

  • 2 GB di spazio di indirizzi virtuali condivisi per il sistema (kernel)
  • 2 GB di spazio di indirizzi virtuali privati per processo (modalità utente)
  • 660 MB di archiviazione PTE di sistema (Windows Server 2003 e versioni precedenti)
  • 470 MB di archiviazione del pool di paging (Windows Server 2003 e versioni precedenti)
  • 256 MB di archiviazione del pool non di paging (Windows Server 2003 e versioni precedenti)

Questo vale in modo specifico per Windows Server 2003, ma può essere applicabile anche a Windows XP e a Windows 2000. Tuttavia, Windows Vista, Windows Server 2008 e Windows 7 non condividono tutti questi limiti dell'architettura. I limiti per la memoria dell'utente e del kernel (numeri 1 e 2 qui) sono gli stessi, ma le risorse del kernel, ad esempio le PTE e i vari pool di memoria, sono dinamiche. Questa nuova funzionalità abilita la memoria di paging e non di paging. In questo modo, anche le PTE e il pool di sessioni possono superare i limiti descritti in precedenza, fino al punto in cui l'intero kernel è esaurito.

Le istruzioni trovate di frequente e tra virgolette come le seguenti:

Con un Terminal Server, i 2 GB di spazio indirizzi condivisi verranno usati completamente prima di usare 4 GB di RAM.

Questo può essere vero in alcuni casi. Tuttavia, è necessario monitorare il sistema per sapere se si applicano al sistema specifico o meno. In alcuni casi, queste affermazioni sono conclusioni di ambienti Windows NT 4.0 o Windows 2000 specifici e non si applicano necessariamente a Windows Server 2003. Sono state apportate modifiche significative a Windows Server 2003 per ridurre la probabilità che questi limiti architetturali vengano effettivamente raggiunti nella pratica. Ad esempio, alcuni processi presenti nel kernel sono stati spostati in processi non kernel per ridurre la memoria usata nello spazio indirizzi virtuali condiviso.

Monitoraggio dell'utilizzo di RAM e memoria virtuale

Monitor prestazioni è lo strumento principale per il monitoraggio delle prestazioni del sistema e per identificare la posizione del collo di bottiglia. Per avviare Monitor prestazioni, fare clic su Start, fare clic su Pannello di controllo, su Strumenti di amministrazione e quindi fare doppio clic su Monitor prestazioni. Ecco un riepilogo di alcuni contatori importanti e di ciò che indicano:

  • Memoria, byte di cui è stato eseguito il commit: questo contatore è una misura della domanda di memoria virtuale.

    Questo mostra quanti byte sono stati allocati dai processi e a cui il sistema operativo ha eseguito il commit di un frame di pagina RAM o di uno slot di pagina nel file di pagina (o forse entrambi). Man mano che i byte sottoposti a commit aumentano rispetto alla RAM disponibile, il paging aumenterà e anche le dimensioni del file di paging in uso aumenteranno. A un certo punto, l'attività di paging inizia a influire in modo significativo sulle prestazioni.

  • Process, Working Set, _Total: questo contatore è una misura della memoria virtuale in uso attivo .

    Questo contatore mostra la quantità di RAM necessaria in modo che la memoria virtuale usata per tutti i processi sia nella RAM. Questo valore è sempre un multiplo di 4.096, ovvero le dimensioni della pagina usate in Windows. Man mano che la domanda di memoria virtuale aumenta oltre la RAM disponibile, il sistema operativo regola la quantità di memoria virtuale di un processo nel working set per ottimizzare l'utilizzo della RAM disponibile e ridurre al minimo il paging.

  • File di paging, %pagefile in uso: questo contatore è una misura della quantità di file di paging effettivamente in uso.

    Utilizzare questo contatore per determinare se il file di pagina è di dimensioni appropriate. Se questo contatore raggiunge 100, il file di paging è pieno e le operazioni smetteranno di funzionare. A seconda della volatilità del carico di lavoro, è probabile che il file di pagina sia sufficientemente grande da non superare il 50-075% usato. Se si usa gran parte del file di pagina, con più dischi fisici diversi, è possibile migliorare le prestazioni.

  • Memoria, Pagine/Sec: questo contatore è una delle misure più fraintese.

    Un valore elevato per questo contatore non implica necessariamente che il collo di bottiglia delle prestazioni sia dovuto a una carenza di RAM. Il sistema operativo usa il sistema di paging per scopi diversi dallo scambio di pagine a causa dell'eccessivo impegno della memoria.

  • Memoria, Output pagine/sec: questo contatore mostra quante pagine di memoria virtuale sono state scritte nel file di paging in fotogrammi di pagina RAM gratuiti per altri scopi ogni secondo.

    Questo è il contatore migliore da monitorare se si sospetta che il paging sia il collo di bottiglia delle prestazioni. Anche se i byte di cui è stato eseguito il commit sono maggiori della RAM installata, se l'output delle pagine/sec è basso o uguale a zero per la maggior parte del tempo, non si verificano problemi di prestazioni significativi da RAM insufficiente.

  • Memoria, byte della cache, memoria, byte del pool non di paging, memoria, byte di paging del pool, memoria, byte totali del codice di sistema, memoria, byte totali del driver di sistema:

    La somma di questi contatori è una misura di quanta parte dei 2 GB della parte condivisa dello spazio indirizzi virtuali da 4 GB viene effettivamente usata. Usarli per determinare se il sistema sta raggiungendo uno dei limiti dell'architettura descritti in precedenza.

  • Memoria, MByte disponibili: questo contatore misura la quantità di RAM disponibile per soddisfare le richieste di memoria virtuale (nuove allocazioni o per il ripristino di una pagina dal file di paging).

    Quando la RAM è insufficiente (ad esempio, i byte di cui è stato eseguito il commit sono maggiori della RAM installata), il sistema operativo tenterà di mantenere una determinata frazione di RAM installata disponibile per l'uso immediato copiando le pagine di memoria virtuale che non sono in uso attivo nel file di pagina. Pertanto, questo contatore non raggiungerà zero e non è necessariamente una buona indicazione del fatto che il sistema non sia a corto di RAM.

Riferimenti

Estensioni per la finestra degli indirizzi