Come funziona un controller DMA?

13

Dalla sezione 5.1.4 Accesso diretto alla memoria in Sistemi operativi moderni di Andrew S. Tanenbaum, Herbert Bos, 2014 ,

To simplify the explanation, we assume that the CPU accesses all devices and memory via a single system bus that connects the CPU, the memory, and the I/O devices, as shown in Fig. 5-4.

  1. ToexplainhowDMAworks,letusfirstlookathowdiskreadsoccurwhenDMAisnotused.

    • Firstthediskcontrollerreadstheblock(oneormoresectors)fromthedriveserially,bitbybit,untiltheentireblockisinthecontroller’sinternalbuffer.
    • Next,itcomputesthechecksumtoverifythatnoreaderrorshaveoccurred.Thenthecontrollercausesaninterrupt.Whentheoperatingsystemstartsrunning,itcanreadthediskblockfromthecontroller’sbufferabyteorawordatatimebyexecutingaloop,witheachiterationreadingonebyteorwordfromacontrollerdeviceregisterandstoringitinmainmemory.

    Q:nelsecondopassaggio,

    • nonsonoidatitrasferiti" dal buffer del controller " alla memoria principale? Perché dice sia " dal controller buffer "e" dal registro di un dispositivo di controllo "?

    • 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. When DMA is used, the procedure is different.

    • First the CPU programs the DMA controller by setting its registers so it knows what to transfer where (step 1 in Fig. 5-4).
      It also issues a command to the disk controller telling it to read data from the disk into its internal buffer and verify the checksum.
    • When valid data are in the disk controller’s buffer, DMA can begin. The DMA controller initiates the transfer by issuing a read request over the bus to the disk controller (step 2). This read request looks like any other read request, and the disk controller does not know (or care) whether it came from the CPU or from a DMA controller. Typically, the memory address to write to is on the bus’ address lines, so when the disk controller fetches the next word from its internal buffer, it knows where to write it. The write to memory is another standard bus cycle (step 3).
    • When the write is complete, the disk controller sends an acknowledgement signal to the DMA controller, also over the bus (step 4). The DMA controller then increments the memory address to use and decrements the byte count. If the byte count is still greater than 0, steps 2 through 4 are repeated until the count reaches 0.
    • At that time, the DMA controller interrupts the CPU to let it know that the transfer is now complete. When the operating system starts up, it does not have to copy the disk block to memory; it is already there.

    Q: nella seconda fase, il controller DMA richiede il disco controller per trasferire i dati dal buffer del controller del disco al memoria principale. Nel primo passaggio, la CPU invia un comando al controller del disco che gli dice 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 che il controller DMA comunichi al controller del disco di trasferire i dati dal buffer del controller del disco a la 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 dispositivo di controllo di un dispositivo controlla il dispositivo ed esegue operazioni sul dispositivo. Quale dispositivo controlla un controller DMA ed eseguire operazioni su?

Grazie!

    
posta Tim 08.02.2015 - 05:49
fonte

2 risposte

7

Q1

Nel primo passaggio, NON usiamo DMA, quindi il contenuto del controller del disco viene letto pezzo per pezzo dal processore. Ovviamente il processore (supponendo che i dati vengano effettivamente utilizzati per qualcosa, e non solo per essere buttati 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 del testo che stai discutendo in questa parte della tua domanda NON sta usando DMA. Quindi, no, non succederà così in questo caso.

Q2

Quindi, il punto centrale di un controller DMA è "eseguire il noioso compito di archiviare materiale dal buffer interno del dispositivo nella memoria principale". La CPU funzionerà sia con il controller DMA che con il dispositivo del disco. Se il disco potesse fare da sé, non ci sarebbe bisogno di un controller DMA.

E infatti, nei sistemi moderni, la funzionalità DMA è tipicamente incorporata nel controller del disco rigido stesso, nel senso che il controller ha capacità di "bus mastering", il che significa che il controller stesso IS il controller DMA per il dispositivo. Tuttavia, considerarli 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 fa i mattoni per costruire la casa. Il controller DMA è il lavoratore che trasporta i mattoni dalla pila di mattoni al punto in cui sono necessari per il muratore, il che significa che il muratore può concentrarsi sul lavoro effettivo di posa dei mattoni (che è un lavoro qualificato, se lo hai mai provato te stesso), e il semplice lavoro di "prendere e trasportare" può essere fatto da un lavoratore meno esperto.

Prova aneddotica: Quando ho appreso per la prima volta del trasferimento DMA da disco a memoria era circa il 1997 circa quando i controller IDE iniziarono a usare DMA, e dovevi ottenere un "controller IDE della scheda madre" per consentire all'IDE di fare DMA e, in quel momento, leggere da il disco rigido richiederebbe circa il 6-10% del tempo della CPU, in cui DMA nello stesso setup userebbe circa l'1% del tempo della CPU. Prima di quel momento, solo i sistemi di fantasia con controller di dischi SCSI avrebbero utilizzato DMA.

    
risposta data 08.02.2015 - 15:50
fonte
5

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

Prima che chiunque possa rispondere a questa domanda, è necessario spiegare chiaramente l'architettura del sistema informatico in discussione. Vale a dire:

  • Quali sono i sistemi 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.
  • Anche l'I / O del disco passa attraverso il bus di memoria?

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

    • Un bus di memoria? Cioè, pensa che stia parlando con un chip di memoria; cioè RAS (strobe di accesso alla riga), CAS (strobe di accesso alla colonna), ...
    • Molto improbabile: parlare con un chip di memoria richiede di essere estremamente preciso sull'emissione di comandi secondo il timing DRAM (latenze): alcuni cicli di clock troppo precoci o troppo tardi, si verificherà una perdita di dati.
  • Quindi ... cosa pensa il controller del disco che il bus è "effettivamente"?

  • Nella maggior parte dei sistemi informatici esiste una sorta di IO chiamata "Port I / O".

    • Port I / O può essere collegato al bus di memoria, oppure possono avere un altro bus dedicato.
    • La caratteristica distintiva di Port I / O è che si possono terminare le cose in un singolo (o un numero costante di cicli di bus) - non c'è bisogno di preoccuparsi dei pericoli dei tempi di DRAM.
  • Nei sistemi più avanzati (ben oltre vent'anni 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 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. Hai una copia. Io non. (Non a casa - ce n'è uno in ufficio, però.) Pertanto, se hai bisogno di una risposta, dovrai mostrare alcuni diagrammi e spiegare come è il sistema di bus del tuo computer.

Nella riga inferiore, tuttavia:

  • Un DMA è un dispositivo programmabile. Cioè, la CPU ha la responsabilità ultima di dire al DMA cosa fare. Ovviamente, durante la fascia oraria in cui il DMA assume il controllo del sistema, la CPU collaborerà lasciando che il DMA esegua lo spettacolo.

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

  • Durante il periodo in cui il DMA assume il bus (plurale), il DMA emetterà comandi su quel bus, cioè al posto del suo solito controller, cioè il DMA finge di fare il lavoro della CPU.

  • Se il trasferimento dei dati coinvolge due bus diversi, il DMA potrebbe doverlo fare su bus diversi.

  • 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 di indirizzo di memoria, programmabile dalla CPU, in modo che la CPU possa comunicare al DMA dove scrivere i dati.

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

  • C'era una volta, qualche tempo dopo che il DMA è stato inventato, alcuni dispositivi periferici iniziano a pre-confezionare DMA sui loro controller - questo è chiamato Bus Mastering . Tuttavia, se il DMA si trova sul pacchetto della CPU, sulla scheda madre o sulla scheda I / O, deve essere in definitiva sotto il controllo (programmazione) della CPU, poiché 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 Controller DRAM. Se ce n'è uno, è quasi certo che questo controller DRAM soddisferà anche le funzionalità di DMA, ovvero sembra un "loop di copia di byte" programmabile e tutta la complessità di cui sopra è nascosta all'interno del silicio della DRAM controller.

Se lo trovi molto confuso - lo trovo anche confuso - avrai bisogno di diagrammi. Un sacco di diagrammi. Diagrammi di sistema Diagrammi degli autobus. Diagrammi di temporizzazione Diagrammi di transizione di stato. ecc.

risposta data 08.02.2015 - 06:52
fonte

Leggi altre domande sui tag