# Physical Address Extension

Nell'informatica, Physical Address Extension (PAE, Estensione dell'indirizzo fisico) è una caratteristica di alcuni processori x86 e x86-64 che permette di usare più di 4 gigabyte di memoria fisica nei sistemi a 32 bit - in concomitanza con il supporto appropriato da parte del sistema operativo. Il PAE è supportato dagli Intel Pentium Pro (e successivi) compresi tutti gli ultimi processori Pentium (ad eccezione delle versioni con bus a 400 MHz del Pentium M) - e allo stesso modo dall'AMD Athlon (e successivi).

## Caratteristiche

L'architettura hardware dei processori x86 con PAE è fornita di linee aggiuntive nel bus degli indirizzi per la selezione della memoria aggiuntiva, in modo che la dimensione dell'indirizzo fisico sia aumentata da 32 a 36 bit. Questo, teoricamente, incrementa la dimensione della memoria fisica da 4 GB a 64 GB. La dimensione di 32 bit degli indirizzi virtuali non cambia, in modo che le normali applicazioni continuino ad usare istruzioni con indirizzi a 32 bit e (nel modello a memoria flat) sono limitate a 4 gigabyte di spazio di indirizzamento virtuale. Il sistema operativo usa le tabelle di paging per mappare questo spazio di indirizzamento a 4 GB dentro la memoria virtuale a 8 GB. Il mapping è tipicamente applicato in modo diverso per ogni processo.
In questo modo, la memoria in aggiunta è utile nonostante nessuna normale applicazione possa accedere a tutti gli 8 GB. Per esempio, in Windows a 32 bit, il massimo spazio di indirizzamento di 4GB (VAS) viene diviso in due sezioni di 2GB: 2GB sono allocate dal kernel e altre 2 GB sono per l'utente (applicazione). Indipendentemente da quanta RAM fisica è presente un sistema Windows a 32 bit, ha il VAS (Virtual Address Space) limitato a 4GB. Tuttavia, questo non è vero per Windows a 64 bit che teoricamente ha fino a 16TB di VAS. Le implicazioni di avere un VAS diviso, come nelle versioni 32-bit, x86 di Windows, l'applicazione non è in grado di allocare più di 2 GB di memoria. L'importanza chiave di tale meccanismo è di prevenzione o minimizzazione che le applicazioni causino un crash del sistema usando tutta la memoria disponibile.
Per software che richiedono di accedere a più di 4 GB di memoria RAM, alcuni meccanismi speciali sono forniti dal sistema operativo in aggiunta al supporto di PAE. Su Microsoft Windows questo meccanismo è chiamato Address Windowing Extensions (Estensione della finestra di indirizzi), mentre su sistemi Unix-like una serie di tecniche sono usate, come la chiamata a mmap per mappare una regione di un file dentro o fuori dallo spazio di indirizzamento.

## Struttura della tabella di paginazione

In un sistema a 32-bit in modalità protetta, i processori x86 usano uno schema di traslazione a due livelli, dove il registro di controllo CR3 punta ad una singola page directory lunga 4 KB, che è divisa in 1024 voci × 4 byte che puntano ad una tabella di paginazione di 4 KB, che consiste (in modo simile) di 1024 voci × 4 byte che puntano a page lunghe 4 KB.
Abilitando il PAE (impostando il bit 5, PAE, del registro di sistema CR4) questo schema cambia in modo considerevole. In modo predefinito, la dimensione di ogni pagina rimane a 4 KB. Ogni voce nella tabella di paginazione e nella directory di paging è estesa a 64 bit (8 byte) invece che 32 bit per poterci inserire indirizzi più lunghi; tuttavia, la dimensione della tabella non cambia, in modo che sia la tabella e la directory ora hanno solo 512 voci. Siccome questo permette solo un quarto delle voci dello schema originale, un livello extra nella gerarchia è stato aggiunto, così che CR3 ora punta verso il Page Directory Pointer Table, una piccola tabella che contiene puntatori a 4 page directory.
Le voci nella page directory hanno un flag aggiuntivo, nel bit 7, chiamato PS (Page Size). Se questo bit è 1, la voce page directory non punta ad una tabella di paginazione, ma ad una singola page da 2 MB. Il NX bit è un altro flag nella page directory, nel bit 63, segnare le pagine che sono "No eXecute" (non eseguibili). Visto che i 12 bit meno significativi di una voce nella tabella di paginazione a 64-bit sono flag simili o disponibili per dati specifici dell'OS, un massimo di 51 bit possono essere potenzialmente usati in futuro per indirizzare 2$^{51}$ byte (2 petabyte), di memoria fisica.
Sui processori x86-64, PAE è obbligatorio nella modalità nativa "long mode"; attualmente 48-bit sono usati dei 52 bit possibili sull'AMD Phenom, CPU più vecchie potrebbero usare meno bit.
Le CPU che supportano il PAE possono essere identificate mediante il flag del CPUID PAE.
* Struttura della tabella di paginazione
* No PAE, pagine a 4 KB
* No PAE, pagine a 4 MB
* PAE con pagine a 4 KB
* PAE con pagine a 2 MB

## Supporto dei sistemi operativi
### FreeBSD

FreeBSD supporta il PAE nella serie 4.x dalla versione 4.9, nella serie 5.x dalla 5.1, e in tutta le release 6.x e successive. L'opzione di configurazione PAE del kernel è richiesta per attivare il supporto. I moduli del kernel caricabili a run-time possono essere caricati in un kernel con PAE abilitato solo se sono compilati con il supporto PAE; i moduli binari nelle distribuzioni FreeBSD non sono realizzati con il supporto a PAE, e quindi non possono essere caricati dentro kernel PAE. Non tutti i driver supportano più di 5 GB di memoria fisica; questi driver ovviamente non funzioneranno correttamente su sistemi con PAE.

### Linux

Il kernel Linux include il supporto completo a PAE dalla versione 2.6, permettendo l'accesso fino a 64 GB di memoria su macchine a 32 bit. Un kernel con PAE richiede che la CPU supporti PAE. Ad oggi (2009), molte distribuzioni GNU/Linux escono con un kernel abilitato PAE come opzione predefinita della distribuzione anche se questo comporta un overhead.

### Mac OS X

macOS per processori Intel supporta il PAE e il bit NX in tutte le CPU supportate da Apple (dalla versione 10.4.4, la prima versione non PowerPc). I sistemi Mac Pro e Xserve supportano ad ora 32 GB di RAM, nonostante il kernel Mac OS X 10.5 Leopard rimanga a 32-bit.

### Microsoft Windows

PAE è supportato nelle seguenti versioni a 32 bit di Microsoft Windows (è indicata la massima memoria indirizzabile da ciascun sistema):
| Sistema | Versione 32-bit | Versione 64-bit |
| Windows 2000 Professional, Server | 4 GB | - |
| Windows 2000 Advanced Server | 8 GB | - |
| Windows 2000 Datacenter | 32 GB | - |
| Windows XP Starter | 512 MB | - |
| Windows XP Home, Professional, Media Center | 4 GB | 128 GB |
| Windows Server 2003 Web | 2 GB | - |
| Windows Server 2003 Standard, Small Business/Home | 4 GB | 16 GB |
| Windows Server 2003 Standard, Small Business/Home con SP1 | 4 GB | 32 GB |
| Windows Server 2003 Enterprise Storage | 8 GB | - |
| Windows Server 2003 Enterprise | 32 GB | 64 GB |
| Windows Server 2003 Enterprise R2/SP1, Datacenter | 64 GB | 1 TB |
| Windows Server 2003 Datacenter R2 | 64 GB | 1 TB |
| Windows Vista Starter | 1 GB | - |
| Windows Vista Home Basic | 4 GB | 8 GB |
| Windows Vista Home Premium | 4 GB | 16 GB |
| Windows Vista Business, Enterprise, Ultimate | 4 GB | 128 GB |
| Windows Server 2008 Standard, Web, Small Business | 4 GB | 32 GB |
| Windows Server 2008 Enterprise, Datacenter | 64 GB | 2 TB |
| Windows 7 Starter | 2 GB | 2 GB |
| Windows 7 Home Basic | 4 GB | 8 GB |
| Windows 7 Home Premium | 4 GB | 16 GB |
| Windows 7 Professional, Enterprise, Ultimate | 4 GB | 192 GB |
| Windows 8 | 4 GB | 128 GB |
| Windows 8 Pro | 4 GB | 512 GB |
| Windows Server 2012 Foundation | - | 32 GB |
| Windows Server 2012 Essentials | - | 64 GB |
| Windows Server 2012 Standard, Datacenter | - | 4 TB |
Windows XP Service Pack 2 e successivi, in modo predefinito, su processori con il bit no-execute (NX) o execute-disable (XD), si avvia in modalità PAE per consentire l'uso del bit NX. Il bit NX (o XD) risiede nel bit 63 della voce nella tabella di paginazione e, senza PAE, la tabella di paginazione ha solo 32 bit; quindi PAE è richiesto per sfruttare la feature del bit NX. Tuttavia, le versioni desktop di Windows limitano lo spazio di indirizzamento fisico a 4 GB per la compatibilità dei driver.

### Solaris

Solaris supporta PAE dalla versione 7. Tuttavia, driver di terze parti usati con la versione 7 che non sono scritti per includere il supporto per il PAE possono operare in modo errato su sistemi con PAE.