sergioc sei veramente bravo, ma con un sistema operativo Microsoft è inutile utilizzare tanta memoria ram, perchè tanto il sistema operativo anche se è a 64 bit nonn la sfrutta.....quando faranno un vero sistema operativo a 64 bit le cose cambieranno! il problema è "QUANDO"............
Scusate se intervengo in questo thread non molto recente ma ho letto alcune cose non propriamente corrette tecnicamente oltre a uscite fantasiose tipo quella qui sopra (vorrei proprio sapere come si fa a dire che le versioni x64 di Windows non sono versi sistemi operativi a 64 bit).
Il punto fondamente è che state mescolando la quantità di memoria fisica supportata dall'hardware, la quantità di questa memoria fisica mappabile dal sistema operativo e la quantità di memoria virtuale utilizzabile dal sistema operativo e dai processi (la singola istanza di un dato programma in esecuzione) che girano su di esso.
La quantità massima di memoria fisica dipende esclusivamente dall'hardware del vostro computer (dalla CPU e dal controller della memoria presente sulla scheda madre o intregrato sulla CPU stessa). Io ad es ho un portatile Apple il cui processore (a 32 bit) supporterebbe l'installazione di 4GB di RAM ma viene limitato dal controller della memoria presente nella scheda madre che ne supporta solo 2GB.
Un sistema operativo con un kernel relativamente moderno non utilizza mai direttamente agli indirizzi fisici dei byte di memoria ma utilizza gli indirizzi virtuali dei suddetti byte. Per quanto riguarda Windows, stiamo parlando di tutte le versione da Windows 95 in avanti (per la famiglia di OS con kernel 9x) e dal primo Windows NT (3.1) in avanti (quindi i vari NT, 2000, XP, Vista e Seven). L'OS tiene traccia della mappatura tra indirizzi virtuali e indirizzi fisici tramite una struttura dati interna che la CPU utilizza per effettuare la traduzione da indirizzo virtuale a indirizzo fisico.
La quantità di memoria virtuale indirizzabile (e quindi accessibile/utilizzabile) dipende principalmente dal fatto che il sistema operativo sia, in parole molto povere, a 32bit o a 64bit e dalla quantità di memoria che l'OS stesso decide di dedicare all'insieme di dati atti ad effettuare la mappatura degli indirizzi di cui parlavo prima.
In un sistema operativo a 32 bit vengono normalmente utilizzati 32 bit per gestire la mappatura e questo comporta un limite massimo di 4GB di memoria fisica indirizzabile. Se la CPU lo supporta, l'OS può utilizzare l'estensione PAE per utilizzare 36 bit anzichè 32 per effettuare questa mappatura, portando così il limite di memoria fisica indirizzabile a 64GB.
Nelle versioni a 32 bi Windows, PAE NON è comunque utilizzato per superare il limite dei 4GB ma per usufruire di altre funzionalità del processore (l' NX, il supporto per le architetture NUMA, ecc) che hanno come requisito l'attivazione di PAE. La ragione fondamentale sta nel fatto che la maggior parte dei driver in circolazione non sono stati realizzati prendendo in considerazione indirizzi di memoria superiori ai 4GB.
In un sistema operativo a 64 bit vengono invece utilizzati 64 bit per la mappatura portanto il limite teorico a qualcosa meno di 17 milioni di TB. Il limite effettivo è regolato dalla quantità di strutture di mappatura che il sistema operativo decide di utilizzare. Per le versioni x64 di Windows questo limite varia da edizione a edizione. Ad es. l'edizione home premium di Vista lo pone a 16GB, la business a 128GB cosa che, se ci pensate, ha senso: quanti di voi a casa (e intendo un pc utilizzato non per lavorarci sopra) hanno un pc con più di 16GB di RAM ?
La risposta alla domanda "perchè non vedo tutti i miei 4GB di RAM?" sta nel fatto che la memoria fisica indirizzabile di cui ho parlato fin'ora non è composta dalla sola RAM. Sotto l'ombrello "memoria fisica" finiscono tutte quelle zone di memoria presenti nei vari componenti hardware del computer. Quindi, ad esempio, oltre alla RAM anche la memoria della scheda video, per zone di memoria utilizzate per la comunicazione (le porte di I/O) con tutte le schede (grafica, audio, di rete, il controller dei dischi, i controller USB e FireWire e chi più ne ha più ne metta).
Tutta questa "memoria" deve stare dentro il limite di cui sopra e dovendo scegliere cosa sacrificare è parte della RAM che viene lasciata fuori per far spazio a tutto il resto. quindi se avete 4GB di RAM e 512MB di "altra memoria" solo 3.5GB di RAM verranno inseriti nella memoria fisica indirizzabile (se qualcuno dovesse chiedersi perchè è proprio la sua preziona RAM a venire sacrificata e non qualcos'altro provi a domandarsi se preferirebbe vedere tutta la sua RAM ma non i suoi harddisk a causa del fatto che la memoria del controller dei dischi è stata esclusa a favore della RAM)
Altro discorso è quello relativo allo spazio di indirizzamento virtuale di un processo.
Ogni processo in esecuzione sul sistema operativo (ad es un'istanza di Word o del blocco note o di Halo 2) ha a sua disposizione uno spazio di memoria virtuale tutto, non accessibile da altri processi, in cui viene caricato il suo codice (e quelle delle librerie che usa), in cui colloca i dati su cui lavora e in cui il sistema operativo colloca i dati e il codice che gli sono necessari per far "funzionare" il processo. Parte di questo spazio di indirizzamento è dedicata ai dati/codice del processo, parte a quelli del sistema operativo.
Questo spazio virtuale ha una dimensione massima, oltre la quale non è possibile indirizzare memoria.
Parlando di Windows, questo valore varia a seconda di vari fattori:
- architettura target dell'OS (32 bit per x86 o 64 bit per x64)
- architettura target del programma che ha "generato" il processo in questione (anche qui 32 bit per x86 o 64 bit per x64)
- se il programma dichiara di supportare uno spazio di indirizzamento esteso o meno.
Su Windows a 32 bit tutti i processi (ovviamente a 32 bit anche loro non potento l'OS eseguire programmi a 64 bit) hanno uno spazio di indirizzamento di 4GB normalmente diviso in 2: 2 GB per dati e codice del processo e 2 GB per dati e codice dell'OS.
In questo caso un processo può allocare memoria fino a riempire i 2GB della sua parte.
In questo thread si è parlato dell'opzione di avvio /3GB che serve a modificare la divisione dello spazio in 3GB per il processo e 1GB per l'OS. E' importante però dire che questa modifica non viene applicata a tutti i processi ma solo a quelli che dichiarano di supportare lo spazio di indirizzamento esteso (e che quindi sono stati progettati con questa possibilità in mente). Se non processa non dichiara ciò avrà il suo spazio di indirizzamento normale di 2GB + 2GB. Quindi se non avete applicazione che sono state progettate con questa possibilità in mente, /3GB è assolutamente inutile oltre che dannoso perchè costringe l'OS a lavorare con solo 1GB di spazio di indirizzamento a disposizione.
Su Windows a 64 bit i processi a 32 bit che supportano lo spazio di indirizzamento esteso hanno uno spazio di indirizzamento di 4GB per loro e di 8TB per il sistema operativo o di 2GB e 8TB se non lo supportano.
Infine, l'accoppiata Windows a 64 bit con processi a 64 bit che supportano l'indirizzamento esteso porta lo spazio di indirizzamento a 8 TB (su processori x64) o 7 TB (su processori Itanium) per il processo in se e 8 TB per il sistema operativo. Se per qualche strana ragione il processo a 64 bit non dichiara di supportare l'indirizzamento esteso avremo i soliti 2 GB per il processo e 8 TB per il sistema operativo.
Quindi, in soldoni, se volete usare tutti i 4GB o più di RAM che avete dovete usare un sistema operativo a 64 bit.
PS:
- non esistono versioni di Windows a 36 bit ... solo a 32 o 64 bit (o 16 bit se vogliamo ricordare le versioni precedenti a Windows 95 (e, volendo, si potrebbe disquisiere anche sul fatto che probabilmente spetta a Windows for workgroups 3.11 la palma di prima versione a 32 bit ma vabbè )). I 36 bit di cui si parla relativamente a PAE sono quelli che la CPU utilizza per indirizzare la memoria, Windows rimane a 32 bit.