Direct Memory Access: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Bot: Aggiungo template {{interprogetto}} (FAQ) |
Aggiunta paragrafo "Funzionamento" |
||
Riga 20:
La sigla "DMREQ" sta per ''DMA Request'' (richiesta di DMA); la quale "DMACK" sta per ''DMA Acknowledge'' (accettazione di DMA).
== [[Funzionamento]] ==
Il chip DMA ha al suo interno almeno quattro registri accessibili dal software in esecuzione nella CPU:
# Il primo contiene l'indirizzo di memoria di partenza per la lettura o la scrittura
# Il secondo conta il numero di byte (o parole) da trasferire
# Il terzo specifica il numero di dispositivo o lo spazio d'indirizzamento di I/O da usare, il che determina il dispositivo di I/O desiderato
# Il quarto determina se i dati vanno letti dal dispositivo di I/O oppure se devono essere scritti su di esso
Quindi per trasferire un blocco di 32 byte dall'indirizzo di memoria 100 al terminale (sia questo il dispotivo 4) la CPU scrive i numeri 32, 100e 4 nei primi tre registri DMA, più il codice per la scrittura (in questo caso supponiamo essere 1) nel quarto registro. A questo punto li DMA effettua una richiesta di bus per leggere il byte 100 dalla memoria, analogamente a come farebbe la CPU. Una volta ottenuto il byte, il controllore DMA effettuerebbe una richiesta di I/O al dispositivo 4 finalizzata alla scrittura del byte. Dopo il completamento di queste operazioni, il controllore DMA incrementa di 1 il suo registro d'indirizzo e decrementa di 1 il suo registro contatore. Se il registro contatore è ancora positivo, si prosegue con la lettura di memoria di un altro byte e con la relativa scrittura nel dispositivo.
Infine quando il contatore si azzera, il controllore DMA smette di trasferire dati e manda un impulso sulla linea di interrupt collegata al chip della CPU. In presenza di DMA, la CPU deve solo inizializzare pochi registri, dopo di che è libera di svolgere altri compiti fino al completamento del trasferimento, segnalato da un interrupt proveniente dal controllore DMA. Alcuni controllori DMA dispongono di due, tre o più insiemi di registri per controllare trasferimenti simultanei.
Anche se con il DMA la CPU viene sollevata dal carico pesante dell'I/O, il procedimento non è del tutto gratuito. Se un dispositivo ad alta velocità, come per esempio un disco, è in fase di trasferimento controllato dal DMA, ci vorranno molti cicli di bus per gli accessi alla memoria e al dispositivo. Durante questi cicli la CPU deve restare in attesa (il DMA ha una priorità di bus sempre maggiore di quella della CPU, perchè i dispositivi di I/O difficilmente tollerano ritardi). Il fenomeno che si verifica quando il controllore DMA sottrae cicli di bus alla CPU si dice '''appropriazione di cicli''' (''cycle stealing'', "furto di cicli"). Nientemeno il guadagno che si ottiene nel non dover gestire un interrupt per byte (o per parola) ripaga largamente del danno causato dall'appropriazione di cicli.
== Note ==
|