Un computer con sistema operativo a 32 bit può utilizzare fino a 8 GB di RAM + 20 GB di file di pagina?


98

Quello che capisco del sistema operativo a 32 bit è che l'indirizzo è espresso in 32 bit, quindi al massimo il sistema operativo potrebbe utilizzare 2 32 = 4G di spazio di memoria - suppongo che l'unità sia byte, quindi 4 GB.

Questo significa che se qualsiasi macchina con un sistema operativo a 32 bit (sia esso Windows o Unix) ha più di 4 GB di RAM + file di pagina sul disco rigido, ad esempio 8 GB di RAM e 20 GB di file di pagina, la sua memoria non sarà mai "esaurita" "?

Per "esaurito" intendo che aumentare la RAM o il file di paging non aiuta le prestazioni; ovviamente, è sempre possibile che un'applicazione continui a richiedere memoria dal sistema operativo ma non riesca.

Allo stesso modo, se questo computer con sistema operativo a 32 bit ha 2 GB di RAM e 2 GB di file di pagina, aumentando le dimensioni del file di paging non si ottengono prestazioni. È vero?


2
Come nota a margine, se ti capita di avere più di 4 GB di RAM e solo un sistema operativo a 32 bit, puoi creare un disco RAM. Questo è un disco rigido nella tua RAM, e puoi usare la RAM inutilizzata / non indirizzata per posizionarlo.
Simon Verbeke,

10
Non puoi. Un ramdisk deve ancora essere creato attraverso il sistema operativo, se il sistema operativo non può utilizzare la memoria, non è possibile creare un ramdisk anche lì. (A meno che il BIOS non sia in grado di creare un ramdisk, il che è raro).
Vedi il

1
La risposta breve è "sì". Sebbene di solito a un processo venga assegnato uno spazio di indirizzi a 32 bit da utilizzare, il sistema operativo stesso può usarne di più (o cambiando banco come abbiamo fatto negli anni 80 o estendendo gli indirizzi scuola come Intel PAE. Inoltre, ricorda che esegui più di un programma alla volta, che può essere composto da più di un processo (Chrome inserisce le schede in diversi processi) e il sistema operativo stesso utilizzerà la memoria per cose come la memorizzazione nella cache dei dati da dischi fissi locali in modo da provare già un accesso più rapido ai dati usato
rbanffy il

Risposte:


145

Quello che ho capito sul sistema operativo a 32 bit è che l'indirizzo è espresso in 32 bit, quindi al massimo il sistema operativo potrebbe utilizzare 2 ^ 32 = 4 GB di spazio di memoria

Il massimo che il processo può affrontare è di 4 GB. Stai potenzialmente confondendo la memoria con lo spazio degli indirizzi . Un processo può avere più memoria dello spazio degli indirizzi. Ciò è perfettamente legale e abbastanza comune nell'elaborazione video e in altre applicazioni ad alta intensità di memoria. Un processo può essere allocato dozzine di GB di memoria e scambiarlo dentro e fuori dallo spazio degli indirizzi a piacimento. Solo 2 GB possono andare nello spazio degli indirizzi utente alla volta.

Se hai un garage per quattro auto a casa, puoi comunque possedere cinquanta auto. Non puoi tenerli tutti nel tuo garage. Devi avere una memoria ausiliaria da qualche altra parte per conservarne almeno 46; quali auto tieni nel tuo garage e quali tieni nel parcheggio in fondo alla strada dipende da te.

Questo significa qualsiasi sistema operativo a 32 bit, sia esso Windows o unix, se la macchina ha un file di pagina RAM + sul disco rigido più di 4 GB, ad esempio 8 GB di RAM e file di pagina 20 GB, non ci sarà mai "memoria esaurita"?

Assolutamente non significa questo. Un singolo processo potrebbe usare più memoria di così! Ancora una volta la quantità di memoria utilizzata da un processo è quasi completamente estranea alla quantità di spazio di indirizzi virtuale utilizzato da un processo. Proprio come il numero di auto che conservi nel tuo garage non è completamente correlato al numero di auto che possiedi.

Inoltre, due processi possono condividere pagine di memoria non private . Se venti processi caricano tutti la stessa DLL, tutti i processi condividono le pagine di memoria per quel codice. Non condividono lo spazio degli indirizzi di memoria virtuale , condividono la memoria .

Il mio punto, nel caso in cui non sia chiaro, è che dovresti smettere di pensare alla memoria e indirizzare lo spazio come la stessa cosa, perché non sono affatto la stessa cosa.

se questo computer con sistema operativo a 32 bit ha 2 GB di RAM e 2 GB di file di pagina, aumentando le dimensioni del file di paging non si ottengono prestazioni. È vero?

Hai cinquanta macchine e un garage per quattro auto e un parcheggio per 100 auto in fondo alla strada. Aumenta la dimensione del parcheggio a 200 punti. Qualcuno delle tue auto diventa più veloce perché ora hai 150 parcheggi extra anziché 50 parcheggi extra?


26
Trovo questa risposta per non rispondere alla domanda in corso ed è quasi ingannevole in alcuni punti.
Rig

48
@Rig: Fantastico, sono felice di sentire le tue critiche costruttive. Ora hai la possibilità di scrivere una risposta migliore e mostrarci il tipo di risposta che ritieni sia meno ingannevole e più pertinente.
Eric Lippert,

4
@BlueRaja: sospetto che stai confondendo la memoria fisica con la memoria . La memoria fisica è solo un'ottimizzazione che consente un accesso più rapido alla memoria. Proprio come le cache del processore sono un'ottimizzazione che consente un accesso più rapido alla memoria. La memoria è a tutti gli effetti spazio riservato nel file di paging. Se una determinata pagina nel file di paging viene (1) mappata su un indirizzo di memoria virtuale o (2) copiata dal disco sulla memoria fisica non è rilevante alla questione se sia allocata o meno.
Eric Lippert,

4
@BlueRaja: l'articolo di Raymond Chen sull'argomento potrebbe aiutare. Mostra come allocare 4 GB fuori dal file di paging; questa è la memoria che il processo possiede . Il processo non può indirizzare tutto in una volta ovviamente, ma può indirizzare qualsiasi pagina mappando una pagina in una pagina VM inutilizzata, utilizzandola per un po 'e quindi scartandola. blogs.msdn.com/b/oldnewthing/archive/2004/08/10/211890.aspx
Eric Lippert,

3
Questa risposta sarebbe stata più chiara, Eric, se avessi dichiarato esplicitamente che Windows (e altri sistemi operativi) ti permettessero di "riservare" la memoria senza averla effettivamente nel tuo spazio di indirizzi virtuale, e quindi di rispondere alla domanda ovvia "allora come fai affrontarlo? ”. Penso che la risposta sia "esiste una sorta di ID pagina che si utilizza per fare riferimento ad esso al fine di sfogliarlo nello spazio degli indirizzi virtuali e quindi è possibile indirizzarlo lì", ma non lo so, e la tua risposta non dice :)
Timwi,

67

È vero che la CPU può indirizzare solo massimo 4 GB di RAM. Tuttavia, le attuali CPU utilizzano una MMU ( Memory management unit ) per tradurre gli indirizzi di memoria specifici del processo in indirizzi di memoria fisica.

Questo MMU viene utilizzato per tutti i tipi di trucchi diversi, dall'isolamento della memoria (il processo A non può manipolare la memoria del processo B) alla condivisione della memoria (il processo A può accedere alla stessa area di memoria fisica del processo B e può scambiare dati in questo modo).

Sebbene la CPU a 32 bit supporti solo 4 GB di memoria per processo, può utilizzare fino a 64 GB di RAM quando si utilizza l'estensione dell'indirizzo fisico . Ciò consente al processo A di utilizzare i primi 4 GB di memoria, mentre il processo B utilizza i successivi 4 GB. In totale, vengono utilizzati più di 4 GB di memoria fisica, ma la quantità totale di memoria utilizzata da un singolo processo è ancora limitata a 4 GB .

PAE è supportato su Linux dalla versione 2.3.23 del kernel e su alcune versioni di Windows Server a 32 bit, ma non su Windows XP, Vista o 7 a 32 bit.

Se la tua CPU non supporta PAE, sarai limitato a 4 GB di memoria fisica (o meno a seconda di altri fattori).

Si noti che il sistema operativo può comunque eliminare parti della memoria fisica sul disco (file di paging) indipendentemente dalla CPU che supporta PAE. In questo modo è possibile avviare più processi che utilizzano più di 4 GB combinati. L'unico impatto di PAE è se è possibile mantenere i 4 GB del processo B nella memoria fisica durante l'esecuzione del processo A.


significa che se non supporta, quindi quello che ho detto sopra è corretto?

10
Windows XP supporta PAE (a partire da SP2, credo), ma ignora la RAM oltre i 4 GB anche quando la macchina supporta PAE; vedi qui . Viene utilizzato per la prevenzione dell'esecuzione dei dati basata su hardware: il bit NX / XD è disponibile solo in una voce della tabella di pagine PAE, non in una voce di tabella "normale".
Wyzard,

Il chipset può anche essere un fattore limitante della quantità di memoria che può essere supportata / utilizzata indipendentemente dal sistema operativo o dall'hacking scelto.
Moab,

5
Aggiungo che il motivo per cui le versioni consumer di finestre a 32 bit non supportano> 4 GB di RAM è che si è scoperto che un numero significativo di unità hardware non funzionava correttamente con tanta memoria; e poiché all'epoca> 4 GB di RAM erano estremamente rari al di fuori dei server / delle workstation di fascia alta, la maggior parte delle aziende che gestivano i driver non erano interessate a spendere soldi per aggiornare i driver che sarebbero stati utilizzati solo dallo 0,1% della loro base di clienti.
Dan Neely,

6
@DanNeely il sistema operativo ha il supporto per la memoria, è limitato a causa di problemi di licenza . Mentre sono d'accordo che questo è un trucco di terze parti, è solo per le varianti consumer di Windows. Le distribuzioni Windows basate su server, a partire da Windows 2000 , hanno supportato oltre 4 GB di memoria (rif. Il primo collegamento).
Sfondamento

15

Parlando in particolare delle varianti di Windows a 32 bit, hanno supportato più di 4 GB di RAM dalle varianti di Windows 2003 (e puoi anche ottenere un hack del kernel per Windows 7 per permetterti di usare tutta la RAM a 32 bit). Tuttavia, questo ha un costo, come indicato nella prima parte della domanda.

In un sistema operativo a 32 bit, la dimensione di un puntatore (indirizzo di memoria) è la stessa della lunghezza della parola della CPU, 32 bit, che consente (come detto) uno spazio di memoria di 2 ^ 32 = 4 GB. Windows utilizza anche un approccio di "memoria virtuale" per le applicazioni, quindi ogni applicazione ha il proprio spazio di memoria.

Poiché ogni puntatore ha una larghezza di soli 32 bit, i puntatori di ciascuna applicazione possono indirizzare solo fino a 4 GB di memoria, anche se il sistema può supportare più di 4 GB di RAM. Per quanto ne so, questo è l'unico avvertimento per l'utilizzo di oltre 4 GB di RAM in un sistema operativo a 32 bit. In totale, puoi avere molte applicazioni che usano più di 4 GB di RAM combinati, ma ogni singolo processo può allocare / accedere solo fino a 4 GB.


Torniamo alla tua domanda, diciamo che hai un programma che utilizza 2 GB di RAM. Se hai 10 istanze di questo programma, sono 20 GB. Verranno esauriti tutti gli 8 GB di RAM e altri 12 GB del file di paging. Quindi sì, con i sistemi operativi a 32 bit, è più che possibile utilizzare questa memoria.

se questo computer con sistema operativo a 32 bit ha 2 GB di RAM e 2 GB di file di pagina, aumentando le dimensioni del file di paging non si ottengono prestazioni. è vero?

L'aumento della dimensione del file di paging di solito non aumenta le prestazioni (a meno che la RAM e il file di paging non siano impostati al minimo assoluto o siano impostati su un valore così basso che il computer si blocca costantemente). Tuttavia, impedirà al computer di esaurire la memoria (virtuale). Ogni volta che qualcosa deve essere eliminato dal file di paging, stai già subendo un enorme successo in termini di prestazioni (poiché il disco rigido è più lento della RAM della tua memoria).


Dei 4 GB di spazio di indirizzi che ogni processo ottiene, solo 2 GB sono effettivamente disponibili per l'uso da parte del programma; l'altro 2 GB è riservato per l'uso da parte del kernel. L' opzione di avvio / 3GB può consentire ad alcuni programmi di utilizzare più RAM.
Wyzard,

1
@Breakthrough: "Aumentare le dimensioni del file di paging non aumenterà mai le prestazioni" Non credo sia vero. Ad esempio, se c'è più scambio, il sistema operativo può scambiare in modo più aggressivo i dati di programma inutilizzati e utilizzare la RAM libera per esempio la memorizzazione nella cache del disco. In alcune configurazioni, ciò può fornire prestazioni migliori. C'è una bella risposta su ServerFault sul perché un file di paging è importante, che tocca questi problemi: serverfault.com/questions/23621/…
sleske,

2
Fai attenzione alle affermazioni generali come "Aumentare le dimensioni del file di paging non aumenterà mai le prestazioni" , è perfettamente possibile che un file di paging troppo piccolo risulti in un thrashing del disco maggiore rispetto a un file di paging più grande! Vedi le risposte e i commenti in questa domanda .
Mark Booth,

1
@sleske Un buon punto, l'ho aggiornato per essere più un tipo di cosa "di solito non". Anche se concordo sul fatto che potrebbe fare un'enorme differenza in un server, per la maggior parte delle persone, il punto che stavo cercando di capire è che sarebbe meglio ottenere solo più RAM (dal momento che durante il paging, le prestazioni sono piuttosto lente come può ottenere).
Sfondamento

-1

Quando si dice che un processore è a 32 bit, significa che può funzionare con numeri a 32 bit usando una singola istruzione. Ciò ha poco a che fare con l'ampiezza del suo bus di indirizzo, che sull'architettura Intel è a 36 bit dal rilascio di Pentium Pro nel 1995.

La famosa limitazione di 4 GB deriva dal fatto che la maggior parte dei software per PC utilizza un modello di memoria flat in cui ogni byte di memoria può essere indirizzato da un puntatore. Poiché un puntatore dovrebbe rientrare in un registro da utilizzare e i registri hanno una larghezza di 32 bit, hai un limite di 4 GB.


Questo non è corretto, come sottolineato in altre risposte precedenti sopra.
ChrisInEdmonton,

Potresti sottolineare un fatto particolare che mi sono sbagliato?
Dmitry Grigoryev il

1
Un singolo processo può utilizzare più di 4 GB. In particolare, le risposte precedenti sottolineano che "Un processo può avere più memoria dello spazio degli indirizzi".
ChrisInEdmonton,

2
Vedi ad esempio blog.superuser.com/2011/04/23/… Ora, certamente, non puoi usare più di 4 GB contemporaneamente, ma un singolo processo può annullare la mappatura e rimappare la memoria, quindi puoi usare più di 4 GB in un unico processo, c'è solo un po 'di contabilità. Quel post sul blog è piuttosto specifico per Windows. Ho eseguito server di database con> 4 GB di memoria allocati, su installazioni Linux a 32 bit. In questi giorni, ovviamente, avresti appena eseguito Linux a 64 bit.
ChrisInEdmonton,

1
OK, mi scuso. Non ho pensato alla possibilità di mmapmemoria aggiuntiva.
Dmitry Grigoryev il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.