Beh, non mi aspetto una risposta concisa se non quella disponibile da qui.
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 =4 GB di spazio di memoria
Il massimo che il processo può indirizzo è di 4 GB. Stai potenzialmente confondendo la memoria con spazio indirizzo . Un processo può avere più memoria dello spazio degli indirizzi. Questo è perfettamente legale e abbastanza comune nell'elaborazione video e in altre applicazioni ad alta intensità di memoria. A un processo possono essere allocati dozzine di GB di memoria e scambiarli dentro e fuori dallo spazio degli indirizzi a piacimento. Solo 2 GB possono andare nell'utente spazio degli indirizzi alla volta.
Se hai un garage per quattro auto a casa tua, puoi comunque possedere cinquanta auto. Non puoi tenerli tutti nel tuo garage. Devi avere uno spazio di archiviazione ausiliario da qualche altra parte per archiviarne almeno 46; quali auto tieni in garage e quali nel parcheggio in fondo alla strada dipende da te.
Questo significa che qualsiasi sistema operativo a 32 bit, sia esso Windows o unix, se la macchina ha RAM + file di paging sul disco rigido superiore a 4 GB, ad esempio 8 GB di RAM e 20 GB di file di paging, non ci sarà mai "memoria esaurita"? /P>
Assolutamente non significa questo. Un singolo processo potrebbe utilizzare più memoria di quella! Anche in questo caso la quantità di memoria utilizzata da un processo è quasi del tutto estranea alla quantità di spazio di indirizzi virtuali utilizzato da un processo. Proprio come il numero di auto che tieni in garage è completamente slegato dal numero di auto che possiedi.
Inoltre, due processi possono condividere pagine di memoria non private . Se venti processi caricano tutti la stessa DLL, i processi condividono tutti le pagine di memoria per quel codice. Non condividono lo spazio degli indirizzi di memoria virtuale , condividono la memoria .
Il mio punto, nel caso non sia chiaro, è che dovresti smettere di pensare alla memoria e allo spazio degli indirizzi come la stessa cosa, perché non sono affatto la stessa cosa.
se questa macchina con sistema operativo a 32 bit ha 2 GB di RAM e 2 GB di file di paging, l'aumento delle dimensioni del file di paging non aiuterà le prestazioni. È vero?
Hai cinquanta auto e un garage per quattro auto e un parcheggio per 100 auto in fondo alla strada. Aumenti le dimensioni del parcheggio a 200 posti. Qualcuno delle tue auto diventa più veloce perché ora hai 150 posti auto extra invece di 50 posti auto extra?
La risposta di Ramesh è completamente sbagliata. Un processo non può avere più memoria dello spazio degli indirizzi e semplicemente perché non può indirizzarlo !! Per utilizzare più di 4 GB il processo deve accedervi tramite l'indirizzo, come usare ponters in C/C++. Se presumibilmente puoi avere, ad esempio, 10 GB di RAM, come puoi dire al processo di accedere ai dati che si trovano a 5 GB, se i tuoi puntatori, a 32 bit, possono raggiungere al massimo 4 GB? È impossibile.Tutte le sue spiegazioni sono legate al sistema operativo. Può attivare al massimo alcuni blocchi di 4 GB, da un pool di, diciamo, 64 GB. Quindi ci sono sempre un massimo di 4 GB contemporaneamente e qualsiasi processo può accedere al massimo a 4 GB. Quindi, per un processo diverso, l'SO può attivare un blocco diverso di 4 GB dal pool, ma il processo sarà nuovamente limitato a 4 GB. In realtà, anche se un puntatore a 32 bit può indirizzare fino a 4 GB, il limite per un 32 -bit è di 3GB.