|
 |
Il Processore e il Debugger |
I BUS DEI PROCESSORI 4/6
[9 di 60] |
|
 |
|
Aggiornato
4 aprile 2006 |
 |
|
Il Bus degli INDIRIZZI con la Memoria |
|
 | Adesso è il momento di
entrare nel merito;
non ci è ancora chiaro come possa un numero esadecimale
individuare senza ambiguità una
locazione di memoria o una
periferica... |
 | Nel primo caso l'immagine è forse più
evidente: ogni dispositivo di memoria è formato da una pila di cassetti
(locazioni)
uno sotto l'altro, disponibili a contenere 8 bit (un
byte) ciascuno. |
 | Per accedere ad una di queste locazioni si
usano le linee
del
Bus Address
e, poichè ciascuna di esse può assumere un livello logico binario è facile
pensare che:
 | con
una linea
d'indirizzo (ADD0)
potremo localizzare 2 celle di
memoria, la prima quando la
linea vale 0
e la seconda quando vale 1. |
 | con
2 linee
(ADD0
e ADD1)
si potranno controllare 4 celle di
memoria, la prima con
ADD0=0
e ADD1=0,
la seconda con 01,
la terza con 10
e l'ultima con 11. |
|
 | Il meccanismo si può facilmente
generalizzare: con 3 linee
le celle saranno 23=8
e con n linee
potremo controllare 2n
locazioni |
 | Dunque la massima dimensione della memoria
indirizzabile dipende dalla
quantità di fili
disponibile nel bus address...
Più alto è questo numero, maggiore è il numero di locazioni di memoria
controllabili, in lettura o in scrittura, da parte della CPU. |
 | Per fissare le
idee possiamo considerare il bus
address dell'8086. |
 | Quando questo processore
venne presentato,
con le sue
20 linee d'indirizzo assicurava la disponibilità di
1 Mega
di memoria, per l'esattezza 220=1.048.576 locazioni. |
 |
La cosa faceva faville!
Qualunque altro computer precedente poteva disporre al massimo di
64k
(216=65536
locazioni) di memoria. Sembrava che il problema fosse risolto per sempre....
Sembrava! |
 | Ben presto questa
disponibilità si sarebbe
rivelata assolutamente insufficiente, così come l'aumento a
16 Mega (=224),
assicurato dall'aggiunta di altre 4 linee di indirizzo, con l'avvento di '286
e '386. |
 | I moderni processori dispongono di
36 linee d'indirizzo e i potenziali
65536 Mega
(=236) garantiti sono per ora sufficienti. |
 | Nelle configurazioni che vanno di moda oggi la quantità
normale di ram installata è di 128M con
tendenza ai 256M (raramente ne viene
installata in misura maggiore, se non in presenza di centri di calcolo
particolarmente bisognosi, come server o
work station industriali). |
 | Il futuro ci riserverà certamente
bus address ancora più capaci: le architetture già prevedono una
probabile espandibilità a 48 linee... |
 |
I processori della
famiglia 80x86 hanno visto aumentare velocemente nel tempo anche la
dimensione di questo bus; vediamo il dettaglio (anno 2002):
|
Processore |
Data Address Size |
Dimensione Max Memoria |
|
8088
|
20 bit |
220 = 1 Mbytes |
| 80188 |
20 bit |
220 = 1 Mbytes |
|
8086 |
20 bit |
220 = 1 Mbytes |
| 80186 |
20
bit |
220 = 1 Mbytes |
| 80286 |
24 bit |
224 = 16 Mbytes |
| 80386SX |
24 bit |
224 = 16 Mbytes |
| 80386EX |
25 bit |
225 = 32 Mbytes |
| 80386DX |
32 bit |
232 = 4 Gbytes |
| 80486 |
32 bit |
232 = 4 Gbytes |
| Pentium |
32 bit |
232 = 4 Gbytes |
| Pentium
II |
36 bit |
236 = 64 Gbytes |
| Pentium
III |
36 bit |
236 = 64 Gbytes |
| Pentium
IV |
36 bit |
236 = 64 Gbytes |
|
 |
Il bus address è nato per
indirizzare
(come fa capire il suo nome..) cioè per consentire al processore di
chiamare in causa
una ben precisa locazione di memoria, ma anche una determinata periferica; il numero
dell'indirizzo, posto sul bus, arriva di norma sia alla prima che alla
seconda, ma solo una delle 2 risponderà al processore! Come è
possibile? |
 | La cosa non ha nulla di magico: insieme al
bus address, si fa pervenire ad entrambe un
filo di controllo. Se il livello
presente su di esso è 1 sarà la
memoria ad intervenire, mentre se
0 sarà il dispositivo di I/O. |
 | Questa tecnica è praticata fin dai primi processori che,
con un secondo filo di controllo (o
con 2 fili distinti) possono
far sapere a chi riceve l'indirizzo se deve
dare (read) o ricevere (write)
dati. |
 | Sul processore 8086 la prima
linea di controllo si chiama MEM/IO (MEMoria
o Input/Output) e le
altre 2 RD e
WR
(entrambe attive basse); combinando tra loro questi segnali (con opportuni
piccoli circuiti, detti di
decodifica) viene evitato ogni conflitto
e il processore potrà disporre a suo piacere o dell'una o dell'altro, in
lettura o in scrittura. |
 | Ma chi si incaricherà di suggerire al processore i valori
logici con cui impostare le linee di controllo
e dove prenderà il numero binario da
mettere sul bus address? |
 | Una delle magie dei processori è quella di interpretare ed
eseguire i programmi... Basterà quindi costringerlo ad eseguire l'istruzione
giusta. |
 | Di solito la lettura
o la scrittura di una
locazione di memoria si realizza facendo eseguire
l'istruzione
MOV; spetta alla posizione degli operandi stabilire il flusso
dei dati.
|
 | L'istruzione
MOV è una tra le più varie e multiformi; fissiamo le idee con
un paio tra i numerosi possibili esempi, lasciando al lettore la possibilità
di cimentarsi con altri. |
 | Nelle descrizioni seguenti sono citati concetti (come
indirizzo fisico o
registri) che non ti sono ancora noti, ma il
senso delle operazioni sembra accettabile. |
 | Anche se il tono della trattazione è
decisamente tecnico (e ti sarà chiaro solo al termine di questo
paragrafo dedicato al processore...) desidero proportelo lo stesso, per darti
la possibilità di confrontarti con la reale sequenza di eventi che si
susseguono nelle operazioni di lettura scrittura e della sua memoria.
 | l'istruzione
MOV AL,ES:[DI] si legge così:
metti in AL il contenuto della locazione puntata
da ES:DI.
 | si tratta dunque di un'operazione di
lettura di memoria. |
 | obbliga il processore a scrivere sul
bus address l'indirizzo fisico ottenuto
combinando il contenuto dei suoi 2 registri ES
e DI. |
 | non appena l'indirizzo è stabile il processore mette MEM/IO a 1
e RD a 0,
obbligando la memoria a copiare sul bus dati
il contenuto della locazione puntata dall'indirizzo predisposto sul
bus address (come vedi i 2 bus
sono e hanno compiti
diversi!) |
 | il processore si mette in attesa
sul bus dati per catturare l'informazione in arrivo e, non appena è
disponibile, la scrive nel suo registro AL. |
 | se il processore fosse un 8086
e il contenuto dei suoi registri fosse ES=B800H
e DI=0000H,
sul bus address verrebbe posto l'indirizzo
fisico B8000H (appunto a 20 bit) e sul
bus dati (e poco dopo, in
AL) verrebbe a trovarsi il byte (8 bit)
contenuti nella prima locazione della
RamVideo
destinata alla gestione del Modo Testo. |
|
 | l'istruzione
MOV DS:[SI], AL si legge così:
metti nella locazione puntata da DS:SI il
contenuto del registro AL.
 | si tratta dunque di un'operazione di
scrittura di memoria. |
 | obbliga il processore a scrivere sul
bus address l'indirizzo fisico ottenuto
combinando il contenuto dei suoi 2 registri DS
e SI. |
 | poichè il dato gli appartiene (provenendo da un suo
registro, AL) il processore lo copia
immediatamente sul bus dati, a
disposizione della memoria |
 | dopo qualche istante (non appena indirizzo e dato sono
stabili) il processore mette MEM/IO a
1 e
WR
a 0, obbligando la memoria a prelevare il
dato dal bus dati e a copialo nella
locazione puntata dall'indirizzo predisposto sul bus
address. |
 | se il processore fosse un 8086
e il contenuto dei suoi registri fosse DS=1234H
e SI=0000H,
sul bus address verrebbe posto l'indirizzo
fisico 12340H (sempre a 20 bit) e sul
bus dati (e poco dopo, anche dentro la
locazione) verrebbe a trovarsi il byte (8 bit) contenuto nel registro
AL. |
|
|
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|