Come funziona un controller DMA?


14

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.

inserisci qui la descrizione dell'immagine

  1. 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?

  2. 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).

  3. 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!


Sembra che la tua comprensione si basi sul Bus Mastering, che immagino sia più moderno del concetto DMA descritto in quel libro di testo. Il concetto di DMA nel libro di testo è più primitivo.
rwong

Ho aggiunto un diagramma per un modello semplificato utilizzato dal libro.
Tim

La freccia 3 nel diagramma non sembra corrispondere alla descrizione del testo ... congratulazioni. Per determinare quale è corretto, sarà necessario il diagramma di temporizzazione del bus per il passaggio 3. Ancora più importante, è necessario scoprire quale dispositivo è responsabile del mantenimento del segnale dati nel passaggio 3. Il controller del disco invia prima i dati al controller DMA, quindi il controller DMA ripete i dati (inserendo la propria tensione sul bus ) alla memoria?
rwong

Anche "Ack" al punto 4 è sospetto. Il DMA non conosce già il numero di byte da copiare?
rwong

Non sono sicuro di come chiarire. Quali libri su SO e sull'architettura hai studiato o pensi che siano i migliori?
Tim

Risposte:


7

Q1

Nel primo passaggio, NON stiamo usando DMA, quindi il contenuto del controller del disco viene letto pezzo per pezzo dal processore. Il processore ovviamente (supponendo che i dati verranno effettivamente utilizzati per qualcosa, e non solo per essere gettato via), li memorizzerà nella memoria del sistema.

Il buffer in questo caso è un pezzo di memoria sul disco rigido (controller) stesso e il dispositivo controller registra un registro di controllo del disco rigido (controller) stesso.

Non coinvolgere il sistema operativo (o qualche altro software) richiederebbe un qualche tipo di operazione DMA e la sezione di testo che stai discutendo in questa parte della tua domanda NON utilizza DMA. Quindi no, non succederà così in questo caso.

Q2

Quindi, il punto centrale di un controller DMA è "eseguire il noioso compito di archiviare elementi dal buffer interno del dispositivo nella memoria principale". La CPU funzionerà sia con il controller DMA che con il dispositivo disco. Se il disco potesse farlo da solo, non sarebbe necessario un controller DMA.

E in effetti, nei sistemi moderni, la funzionalità DMA è in genere integrata nel controller del disco rigido stesso, nel senso che il controller ha funzionalità di "mastering del bus", il che significa che il controller stesso È il controller DMA per il dispositivo. Tuttavia, guardarli come due dispositivi separati rende l'intero concetto di DMA un po 'meno difficile da capire.

Q3 (tipo di)

Se pensi al disco rigido come alla pila di mattoni appena consegnata a un cantiere, e il processore è il muratore che pone i mattoni per costruire la casa. Il controller DMA è il lavoratore che trasporta i mattoni dalla pila di mattoni dove sono necessari per il muratore, il che significa che il muratore può concentrarsi sul lavoro effettivo di posa dei mattoni (che è un lavoro specializzato, se l'hai mai provato te stesso) e il semplice lavoro di "prendere e trasportare" può essere svolto da un lavoratore meno abile.

Prove aneddotiche: quando ho appreso per la prima volta del trasferimento DMA dal disco alla memoria era circa il 1997 circa quando i controller IDE hanno iniziato a utilizzare DMA ed era necessario ottenere un driver "controller IDE della scheda madre" per consentire all'IDE di eseguire il DMA e in quel momento , la lettura dal disco rigido richiederebbe circa il 6-10% del tempo della CPU, mentre DMA nella stessa configurazione impiegherebbe circa l'1% del tempo della CPU. Prima di allora, solo i sistemi di fantasia con controller del disco SCSI avrebbero utilizzato DMA.


5

Questa non è una risposta; è una richiesta di chiarimento che è troppo lunga per essere inserita nei commenti.

Prima che chiunque possa rispondere a questa domanda, si deve spiegare chiaramente l'architettura del sistema informatico di cui si sta discutendo. Vale a dire:

  • Quali sono i sistemi di bus coinvolti in questa descrizione?

    • La maggior parte dei sistemi di computer ha un bus di memoria.
    • La maggior parte dei computer ha anche altri tipi di sistemi bus.
  • L'IO del disco passa anche attraverso il bus di memoria?

    • In altre parole, il disco utilizza le linee del bus degli indirizzi per gli indirizzi e le linee del bus dei dati per i dati?
  • Il controller del disco vede il bus di memoria come ...

    • Un bus di memoria? Cioè, pensa di parlare con un chip di memoria; vale a dire RAS (strobo accesso fila), CAS (strobo accesso colonna), ...
    • Molto improbabile: per parlare con un chip di memoria è necessario essere estremamente precisi sull'emissione di comandi in base al timing della DRAM (latenze) - alcuni cicli di clock troppo presto o troppo tardi, si verificherà una perdita di dati.
  • Quindi ... cosa pensa il controller del disco che il bus "in realtà è"?

  • Nella maggior parte dei sistemi informatici, esiste un tipo di IO chiamato "I / O di porta".

    • L'I / O della porta può essere trasferito sul bus di memoria oppure può avere un altro bus dedicato.
    • La caratteristica distintiva di Port I / O è che si possono finire le cose in un singolo (o un numero costante predefinito di) ciclo di bus - senza preoccuparsi dei pericoli dei tempi DRAM.
  • Nei sistemi più avanzati (ben due decenni fa), ci sono nuovi tipi di sistemi bus. Ad esempio, ISA, PCI, AGP, PCMCIA ... SCSI, ATA, SAS, SATA, FC-AL ...


Ora, con così tante incertezze sollevate sul "sistema informatico in discussione", puoi capire perché non otterrai una risposta chiara alla tua domanda.

Sì, lo so che proviene da un libro di testo. Ne hai una copia. Io non. (Non a casa, ce n'è uno in ufficio, però.) Pertanto, se hai bisogno di una risposta, dovrai mostrare alcuni schemi e spiegare come si presenta il sistema di bus del tuo computer.


Alla fine, però:

  • Un DMA è un dispositivo programmabile. Cioè, la CPU ha la responsabilità ultima di dire al DMA cosa fare. Naturalmente, durante l'intervallo di tempo in cui il DMA prende il controllo del sistema, la CPU coopererà lasciando che il DMA esegua lo spettacolo.

  • Sotto il controllo della CPU (e del sistema operativo che la esegue), un DMA ha la capacità di assumere il controllo di uno o più bus (plurale) al fine di facilitare il trasferimento di dati dal controller del disco alla memoria principale.

  • Durante il lasso di tempo in cui il DMA prende il bus (plurale), il DMA emetterà comandi su quel bus - cioè al posto del suo normale controller, ovvero il DMA finge di fare il lavoro della CPU.

  • Se il trasferimento dei dati coinvolge due bus diversi, il DMA potrebbe dover eseguire questa operazione su un bus diverso.

  • Per poter spostare un numero di byte (parole, ecc.), Il DMA contiene un contatore di loop per tenere traccia della quantità rimanente di dati da copiare.

  • Per poter scrivere nella memoria principale, il DMA contiene un registro degli indirizzi di memoria, che è programmabile dalla CPU, in modo che la CPU possa dire al DMA dove scrivere i dati.

  • A seconda della progettazione del bus del sistema, il DMA potrebbe o meno dover gestire i dettagli raccapriccianti dei cicli di temporizzazione DRAM.

  • Una volta, qualche tempo dopo che il DMA è stato inventato, alcune periferiche iniziano a preimballare il DMA sui loro controller - questo si chiama Bus Mastering . Tuttavia, indipendentemente dal fatto che il DMA si trovi sul pacchetto CPU, sulla scheda madre o sulla scheda I / O, alla fine deve essere sotto il controllo (programmazione) della CPU, perché devono in qualche modo negoziare l'accesso al bus di sistema (plurale) e la memoria principale.

  • I moderni sistemi informatici hanno un sottosistema dedicato chiamato DRAM Controller. Se ce n'è uno, è quasi certo che questo controller DRAM soddisferà anche la funzionalità di DMA, cioè sembra che sia un "loop di copia byte" programmabile e tutta la suddetta complessità è nascosta all'interno del silicio della DRAM controller.


Se lo trovi molto confuso, lo trovo anche confuso, avrai bisogno di diagrammi. Molti diagrammi. Schemi di sistema Schemi del bus. Diagrammi di temporizzazione. Diagrammi di transizione dello stato. eccetera.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.