Dalla sezione 5.1.4 Accesso diretto alla memoria nei moderni sistemi operativi di Andrew S. Tanenbaum, Herbert Bos, 2014 ,
Per semplificare la spiegazione, supponiamo che la CPU acceda a tutti i dispositivi e alla memoria tramite un singolo bus di sistema che colleghi la CPU, la memoria e i dispositivi I / O, come mostrato nella Figura 5-4.
Per spiegare come funziona DMA, esaminiamo innanzitutto come avvengono le letture del disco quando non si utilizza DMA.
- Innanzitutto il controller del disco legge il blocco (uno o più settori) dall'unità in serie, bit per bit, fino a quando l'intero blocco si trova nel buffer interno del controller.
- Successivamente, calcola il checksum per verificare che non si siano verificati errori di lettura. Quindi il controller provoca un interrupt. Quando il sistema operativo inizia a funzionare, può leggere il blocco del disco dal buffer del controller un byte o una parola alla volta eseguendo un ciclo, con ogni iterazione che legge un byte o una parola da un registro del dispositivo del controller e lo memorizza nella memoria principale.
D: nel secondo passaggio,
i dati non vengono trasferiti " dal buffer del controller " alla memoria principale? Perché dice " dal buffer del controller " e " dal registro di un dispositivo controller "?
nella seconda fase, il controller può trasferire i dati dal suo buffer alla memoria principale, senza interrompere la CPU e senza coinvolgere nuovamente il sistema operativo?
Quando si utilizza DMA, la procedura è diversa.
- Innanzitutto la CPU programma il controller DMA impostando i suoi registri in modo che sappia cosa trasferire dove (passaggio 1 in Figura 5-4).
Invia inoltre un comando al controller del disco che gli dice di leggere i dati dal disco nel suo buffer interno e di verificare il checksum. - Quando i dati validi si trovano nel buffer del controller del disco, DMA può iniziare. Il controller DMA avvia il trasferimento inviando una richiesta di lettura sul bus al controller del disco (passaggio 2). Questa richiesta di lettura assomiglia a qualsiasi altra richiesta di lettura e il controller del disco non sa (o cura) se proviene dalla CPU o da un controller DMA. In genere, l'indirizzo di memoria su cui scrivere si trova nelle righe degli indirizzi del bus, quindi quando il controller del disco recupera la parola successiva dal suo buffer interno, sa dove scriverlo. La scrittura in memoria è un altro ciclo di bus standard (passaggio 3).
- Al termine della scrittura, il controller del disco invia un segnale di conferma al controller DMA, anche tramite il bus (passaggio 4). Il controller DMA quindi incrementa l'indirizzo di memoria da utilizzare e diminuisce il conteggio dei byte. Se il conteggio dei byte è ancora maggiore di 0, i passaggi da 2 a 4 vengono ripetuti fino a quando il conteggio raggiunge 0.
- In quel momento, il controller DMA interrompe la CPU per far sapere che il trasferimento è ora completo. All'avvio del sistema operativo, non è necessario copiare il blocco del disco in memoria; è già lì.
D: nel secondo passaggio, il controller DMA richiede al controller del disco di trasferire i dati dal buffer del controller del disco alla memoria principale. Nel primo passaggio, la CPU invia un comando al controller del disco dicendogli di leggere i dati dal disco nel suo buffer interno. Allo stesso tempo, la CPU può anche dire al controller del disco di trasferire i dati dal buffer del controller del disco alla memoria principale, quando il controller del disco termina il trasferimento dei dati dal disco al buffer del controller del disco, in modo che non sia necessario Controller DMA per dire al controller del disco di trasferire i dati dal buffer del controller del disco alla memoria principale? (Non riesco a capire perché abbiamo bisogno di un controller DMA per il trasferimento dei dati tra il disco e la memoria principale, quindi suppongo che mi manca qualcosa di importante per capire la citazione).
- Innanzitutto la CPU programma il controller DMA impostando i suoi registri in modo che sappia cosa trasferire dove (passaggio 1 in Figura 5-4).
Un controller di dispositivo di un dispositivo controlla il dispositivo ed esegue le operazioni sul dispositivo. Su quale dispositivo controlla un controller DMA ed esegue le operazioni?
Grazie!