Come al solito L'
Intel user manual ci fornisce tutte le informazioni che possiamo desiderare, volume 1, capitoli 3.3.3, 3.3.4 e 3.3.7.
32 bit
Ci sono 3 modelli per la memoria:
flat
La memoria e' vista dal programma come uno spazio continuo, chiamato
linear address space, con indirizzi da 0 a 2
31-1, un indirizzo per uno specifico byte in questo spazio e' chiamato
linear address.
effective address=indirizzo a cui iniziano i 4Gb+linear address
segmented
La memoria e' vista dal programma come un gruppo di spazi indirizzabili indipendenti chiamati segmenti, per accededere ad un byte in uno di questi segmenti viene utilizzato un
logical address composto da un selettore di segmento e da un offset (spiazzamento), il selettore di segmento identifica il segmento a cui accedere e l'offset identifica un byte di quel segmento.
I programmi in esecuzione su processori IA-32 possono indirizzare fino a 16383 segmenti, ogunno dei quali puo' essere fino a 2
32 byte in ampiezza.
Internamente i vari segmenti sono mappati nello spazio lineare del processore che si preoccupa di convertire gli indirizzi logici in lineari
real-mode
E' una modalita' utilizzata per mantenere la compatibilita' verso il basso con l'8086, la memoria e' divisa in segmenti da 64Kbyte l'uno (non proprio tutti quanti ma dettagli), il
linear address space e' composto da 2
20 byte (infatti l'address bus dell'8086 ha 20 linee)
64 bit
I processori IA-64 supportano uno spazio indirizzabile piu' ampio di 64Gb, il processore puo' inidirizzare
linear address a 64 bit, anche se, da implementazione ad implementazione, questo spazio potrebbe essere inferiore.
In modalita' a 64 bit la segmentazione e' solitamente (ma non totalmente a causa dei registr FS e GS che possono essere usati come segment register) disabilitata e la base dei segmenti e' posta a 0. Questo significa che, in modalita' a 64 bit, un
linear address coincide col corrispettivo
effective address
La ho fatta un po' lunga ma era difficile da spiegare altrimenti, spero di non essermi fatto sfuggire delle imprecisioni
In parole povere l'address bus delle CPU IA-64 puo' indirizzare fino a 2
64=1.89e19 byte, quindi un solo indirizzo lineare a 64 bit e' piu' che sufficente ad indirizzare una specifica locazione in memoria. Poi sono l'assembler e il linker che si preoccupano di predisporre il tuo programma in modo che quando venga caricato in memoria gli indirizzi risultino giusti.