@ ziokiller
Eh mi ricordavo che era una cosa complicata, in effetti è ancora più complicata di quanto ricordassi
Ma alla fine nemmeno tanto (per chi mastica l'informatica intendo)... il problema sostanzialmente nasce dalla possibile sovrapposizione tra gli indirizzi I/O delle periferiche e gli indirizzi di memoria RAM.
Da quel che ho capito il bus PCI/AGP da specifiche indirizza a partire dalla locazione 2^32 - 1 (0xFFFFFFFF) a scendere, e con grossi quantitativi di memoria RAM c'è il rischio che la fascia di indirizzi occupata dalle periferiche (in particolar modo in presenza di schede grafiche con grosse quantità di memoria dedicata) vada a cozzare con gli indirizzi della memoria RAM di sistema. Questo genererebbe conflitti che farebbero piantare la macchina.
In realtà le CPU x86 a partire dal Pentium Pro - classe 1995 - sono in grado di indirizzare nativamente fino a 64 GB di memoria RAM, per via del bus indirizzi a 36 bit (ci sono proprio 36 pin fisici sul processore dedicati all'indirizzamento della memoria, quindi abbiamo 2^36 byte di memoria indirizzabili), di conseguenza il problema della sovrapposizione tra indirizzi di I/O delle periferiche e quelli della memoria RAM il sistema operativo lo risolve "saltando" la fascia occupata dagli indirizzi delle periferiche, nel caso sul sistema siano installati più di 4 GB di RAM (se il BIOS supporta questa funzione), e ripartendo ad usare la RAM dai 4 GB in su. In sostanza accade una cosa del genere:
.......................| <-- RAM oltre i 4 GB
.......................|
.......................|
--------------------- <-- Soglia dei 4 GB
************|
************| <-- Fascia degli indirizzi I/O delle periferiche
************|
.......................|
.......................|
.......................| <-- RAM sotto i 4 GB
.......................|
.......................|
Se invece sono installati 4 GB di RAM oppure il BIOS non supporta questa funzione, che si chiama "Memory Hole Remapping", il sistema operativo semplicemente interdice la parte di RAM che risiede nella fascia di indirizzi riservati agli I/O delle periferiche, proprio per evitare sovrapposizioni di indirizzi tra periferiche e memoria. Per questo qualsiasi OS a 32 bit, in presenza di 4 GB di RAM, ne fa vedere di meno.
Un OS a 32 bit quindi può effettivamente arrivare fino a 4 GB di RAM totali (non può superarli però per evidenti motivi) qualora sul sistema siano installati più di 4 GB, perché BIOS permettendo allocherebbe quella fascia di memoria dopo i 4 GB necessaria a raggiungere questo quantitativo, fascia della stessa dimensione di quella usata dall'indirizzamento delle periferiche, come tra l'altro si vede dallo schemino sopra (ci sono 3 righe di I/O periferiche, e 3 di RAM oltre i 4 GB). In effetti Linux e le versioni server di Windows a 32 bit ci arrivano a 4 GB, se sul computer ne sono installati di più, pur non andando oltre (anche con 32 GB di RAM il sistema ne indirizzerebbe sempre solo 4).
Perché la famiglia "client" di Windows a 32 bit (XP, Vista, 7, 8) non lo fa allora? Semplice, per ragioni di licenza. Per Microsoft questi sistemi operativi non devono essere in grado di indirizzare più di 4 GB di memoria, di conseguenza anche installando più di 4 GB di RAM per queste versioni di Windows sulla macchina saranno sempre installati solo 4 GB di RAM, e ne permetterà l'utilizzo solo di 3.25.
Thankso ZioKiller perché mi ha fatto venir curiosità e mi ha spinto ad approfondire la questione

Edited 20 Feb. 2015 16:37