RAM, memoria virtuale, file di paging e gestione della memoria in Windows

Si applica a:   Windows 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, ad esempio Windows, le applicazioni e molti processi di sistema fanno sempre riferimento alla memoria utilizzando 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 utilizzata, anche quando la memoria richiesta da tutti i processi in esecuzione non supera il volume di RAM installato nel sistema.

Processi e spazi indirizzo

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

Nella configurazione Windows predefinita, 2 gigabyte (GB) di questo spazio di indirizzi virtuali sono designati per l'utilizzo 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) utilizzano solo una frazione dei 2 GB di spazio di indirizzi privati. Il sistema operativo assegna i frame 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 degli indirizzi virtuali (che rimane a 4 GB), ma solo il volume di RAM effettiva che può essere indirizzato dal processore.

La conversione tra l'indirizzo di memoria virtuale a 32 bit utilizzato dal codice in esecuzione in un processo e l'indirizzo RAM a 36 bit viene gestito 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 RAM fisica (indirizzo a 36 bit).

L'elenco seguente descrive la quantità di RAM Windows versioni ed edizioni supportate (a 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 edizione Standard 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 la maggior parte degli scopi pratici, la memoria virtuale è illimitata. Possono essere presenti molti processi e ogni processo dispone di uno spazio di indirizzi virtuali privato di 2 GB. Quando la memoria utilizzata da tutti i processi esistenti supera la RAM disponibile, il sistema operativo sposta le pagine (parti di 4 KB) di uno o più spazi di indirizzi virtuali sul disco rigido del computer. In questo modo viene liberato il fotogramma RAM per altri utilizzi. Nei Windows, queste pagine di paginazione vengono archiviate in uno o più file (Pagefile.sys file) nella radice di una partizione. Può essere presente un file di questo tipo in ogni partizione del disco. 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 sul pulsante Impostazioni pagina).

Gli utenti si chiedono spesso quanto è importante creare il file di paging? Non esiste una sola 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, il tipico consiglio di 1,5 volte la RAM installata è un buon punto di partenza. Nei sistemi server, in genere si desidera disporre di ram sufficiente in modo che non vi sia mai una penuria e in modo che il file di paging non sia utilizzato. In questi sistemi, potrebbe non essere utile mantenere un file di paging di grandi dimensioni. D'altra parte, se lo spazio su disco è elevato, mantenere un file di paging di grandi dimensioni (ad esempio, 1,5 volte la RAM installata) non causa un problema e questo elimina anche la necessità di preoccuparsi delle dimensioni per crearlo.

Prestazioni, limiti architetturali e RAM

In qualsiasi sistema informatico, con l'aumentare del 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 in condizioni critiche e sono diventate un collo di bottiglia.

A un certo punto, non è possibile aumentare la risorsa che non è disponibile. Ciò significa che è stato raggiunto un limite architetturale. Alcuni limiti dell'architettura segnalati di frequente in Windows sono i seguenti:

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

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

Istruzioni tra virgolette e trovate di frequente, ad esempio le seguenti:

Con un server terminal, i 2 GB di spazio di indirizzi condiviso verranno completamente utilizzati prima dell'utilizzo di 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 specifici ambienti Windows NT 4.0 o Windows 2000 e non si applicano necessariamente a Windows Server 2003. Sono state apportate modifiche significative a Windows Server 2003 per ridurre la probabilità che tali limiti architetturali siano in realtà raggiunti nella pratica. Ad esempio, alcuni processi presenti nel kernel sono stati spostati in processi non kernel per ridurre la memoria utilizzata nello spazio di indirizzi virtuali condiviso.

Monitoraggio della RAM e dell'utilizzo della memoria virtuale

Performance Monitor è lo strumento principale per monitorare le prestazioni del sistema e per identificare la posizione del collo di bottiglia. Per avviare Performance Monitor, fare clic sul pulsante Start, scegliere Pannello di controllo, Strumenti di amministrazione e quindi fare doppio clic su Performance Monitor. Ecco un riepilogo di alcuni contatori importanti e di cosa ti spiegano:

  • Memoria, Byte vincolati: questo contatore è una misura della richiesta di memoria virtuale.

    Questo indica 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 paging (o forse entrambi). Man mano che i byte vincolati aumentano rispetto alla RAM disponibile, il paging aumenta e aumentano anche le dimensioni del file di paging in uso. A un certo punto, l'attività di paging inizia a influire in modo significativo sulle prestazioni.

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

    Questo contatore indica la quantità di RAM necessaria in modo che la memoria virtuale utilizzata per tutti i processi sia in RAM. Questo valore è sempre un multiplo di 4.096, ovvero le dimensioni della pagina utilizzate in Windows. Quando la richiesta 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 utilizzata.

    Utilizzare questo contatore per determinare se le dimensioni del file di paging sono 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 paging sia sufficientemente grande in modo che non sia utilizzato più del 50-075%. Se viene utilizzata gran parte del file di paging, la presenza di più di uno su dischi fisici diversi può 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 deriva da una mancanza di RAM. Il sistema operativo utilizza il sistema di paging per scopi diversi dalla sostituzione delle pagine a causa di un eccessivo impegno della memoria.

  • Memoria, output pagine/sec: questo contatore indica quante pagine di memoria virtuale sono state scritte nel file di paging per liberare i frame di pagina RAM 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 Byte vincolati è maggiore della RAM installata, se l'output delle pagine/sec è basso o zero per la maggior parte delle volte, non vi sono problemi di prestazioni significativi da ram insufficiente.

  • Memoria, Byte cache, Memoria, Byte non di paging del pool, Memoria, Byte di paging del pool, Memoria, Codice di sistema Byte totali, Memoria, Byte totali driver di sistema:

    La somma di questi contatori è una misura della quantità di 2 GB della parte condivisa dello spazio di indirizzi virtuali da 4 GB effettivamente utilizzata. Utilizzare questi valori 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, Byte impegnati è maggiore della RAM installata), il sistema operativo tenterà di mantenere una certa frazione di RAM installata disponibile per l'uso immediato copiando le pagine di memoria virtuale che non sono in uso attivo nel file di paging. Di conseguenza, questo contatore non raggiunge zero e non è necessariamente una buona indicazione della quantità di RAM del sistema.

Riferimenti

Estensioni finestra degli indirizzi