Torna alla pagina di Architettura degli elaboratori
Questa pagina è stata aggiornata GRAZIE agli appunti che AVETE INVIATO nel periodo di chiusura della sezione UniCrema!! È SERVITA A QUALCOSA, NO?! ;)
:: Architettura degli elaboratori - DMA ::
Il DMA (Direct Memory Access) è un meccanismo che permette ad alcune periferiche di accedere direttamente alla memoria di sistema per scambiarsi dati, oppure leggere o scrivere, senza chiamare in causa la CPU per ogni byte trasferito tramite il meccanismo usuale dell'interrupt e la successiva richiesta di operazione desiderata, ma generando un singolo interrupt per blocco trasferito.
Il DMAC è il DMA-Controller, ed è formato da quattro registri a cui la CPU può accedere:
- PA (PERIPHERAL ADDRESS): contiene l’identificativo dell’interfaccia a periferica con cui interagire per scambiare i dati;
- MDA (MEMORY DATA ADDRESS): contiene l’indirizzo della prossima cella di memoria in cui inserire o prelevare il dato;
- DC (DATA COUNTER): contiene il numero dei dati ancora da trasferire;
- TD (TRANSFER DIRECTION): indica se l’operazione è lettura (in) o scrittura (out).
Gli elementi coinvolti nel funzionamento del meccanismo DMA sono tre: CPU, DMAC e interfaccia a disco. Il comportamento della CPU a livello software è che inizializza il DMAC e l’interfaccia mediante la routine readisk
del sistema operativo. Il programma in esecuzione della CPU richiede lettura da memoria di massa a disco chiamando la routine readisk. Questa routine inizializza il DMAC inserendo:
- nel PA l’identificativo dell’interfaccia;
- nel MDA l’indirizzo della prossima cella di memoria;
- nel DC il numero totale di dati da trasferire;
- nel TD che si tratta di lettura.
Inizializza quindi l’interfaccia comunicandole il numero della traccia e del settore da leggere da disco, e che si tratta di lettura.
Il comportamento a livello hardware dei tre elementi è il seguente:
- l’interfaccia segnala dato pronto al DMAC (ponendo il 1° bit meno significativo a 1 di status);
- il DMAC chiede i bus alla CPU mediante la lina HOLDREQ (del bus di controllo);
- la CPU rilascia i bus mediante la linea HOLDACK (del control bus).
Il DMAC pone sull’address bus il contenuto dell’MDA e attiva in all’interfaccia e memwrite
alla memoria. Viene così trasferito il dato direttamente da interfaccia a memoria mediante il databus. Viene disattivata sia la linea di HOLDREQ che HOLDACK; viene incrementato l’MDA e decrementato il DC. Se il DC > 0 continua il trasferimento, se DC = 0 finisce. A questo punto il DMAC invia un segnale di interruzione alla CPU; la CPU attiva la routine di risposta all’interrupt, che segnala al readisk che è terminata l’operazione. Infine il sistema operativo riattiva il programma che aveva richiesto lettura da disco.
Torna alla pagina di Architettura degli elaboratori