Salta al contenuto
Note per Studenti Accesso diretto alla memoria (DMA)

Accesso diretto alla memoria (DMA)

In questa pagina 6
In questa pagina 3

Con l'I/O programmato e con quello a interruptClassi di interruzioni; I/O guidato da interrupt; sequenza hardware e software di gestione con salvataggio del contesto sullo stack; identificazione della sorgente (linee multiple, polling, daisy chain, vettore); priorità e interruzioni annidate; eccezioni e modi in ARM.Interrupt → ogni parola passa per la CPU (dal modulo a un registro e dal registro alla memoria). Per trasferire grandi blocchi (dischi, rete) è uno spreco: il modulo DMA trasferisce i dati direttamente tra dispositivo e memoria.

Funzionamento

Definizione (funzionamento del DMA)

  1. La CPU programma il modulo DMA indicando: lettura o scrittura, indirizzo del dispositivo, indirizzo iniziale in memoria, numero di parole da trasferire.
  2. La CPU prosegue con altro lavoro.
  3. Il DMA trasferisce il blocco una parola alla volta, usando il bus: per ogni parola incrementa l'indirizzo e decrementa il contatore.
  4. Alla fine invia un solo interrupt alla CPU.

Esempio. Per 10241024 parole il DMA incrementa l'indirizzo e decrementa il contatore 10241024 volte, poi invia un solo interrupt.

La CPU interviene solo all'inizio e alla fine del blocco.

Uso del bus

Il DMA deve usare il bus di sistema, che è anche quello della CPU:

Definizione (furto di cicli e burst)

  • furto di cicli (cycle stealing): il DMA prende il bus per un ciclo, trasferisce una parola e lo rilascia. La CPU rallenta di poco;
  • burst (a blocco): il DMA tiene il bus per tutto il blocco. Trasferimento più veloce, ma la CPU non può accedere alla memoria nel frattempo.

Esempio. Per 10241024 parole, con furto di cicli il DMA prende il bus per 11 ciclo alla volta (10241024 volte); in burst lo tiene per 10241024 cicli di seguito.

La CPU non viene interrotta (non c'è cambio di contesto): viene solo sospesa in attesa del bus, nei punti in cui le serve (prelievo dell'istruzione o dell'operando, scrittura del risultato). Con le cache la CPU può spesso continuare a lavorare senza usare il bus.

Configurazioni

  • Bus singolo, DMA separato: ogni parola attraversa il bus due volte (dispositivo → DMA → memoria). Semplice ma inefficiente.
  • DMA integrato con i dispositivi o collegato a più dispositivi con un bus di I/O dedicato: ogni parola usa il bus di sistema una sola volta (DMA → memoria).

Canali e processori di I/O

Evoluzione successiva: il modulo di I/O diventa un processore con un proprio insieme di istruzioni (canale di I/O), che esegue programmi di I/O in memoria senza intervento della CPU; poi un vero processore di I/O con memoria locale. Oggi i controllori di disco, rete e GPU hanno DMA propri (bus mastering su PCI Express).

Confronto quantitativo

Formula (confronto tra interrupt e DMA). Trasferire 4 KB in parole da 4 byte = 1024 parole.

  • Interrupt: 1024 interruzioni; se ognuna costa 200 cicli tra salvataggio del contesto, routine e ritorno → circa 205 000 cicli di CPU.
  • DMA: programmazione iniziale (es. 100 cicli) + un interrupt finale (200 cicli) ≈ 300 cicli di CPU, più gli eventuali cicli sottratti sul bus.

Esempio. Con un interrupt per parola servono circa 1024⋅200≈205 0001024\cdot200\approx205\,000 cicli di CPU, con il DMA 100+200=300100+200=300 cicli.

Errori tipici

  • Dire che il DMA "interrompe la CPU per ogni parola": la sospende al massimo per un ciclo di bus, e la interrompe solo alla fine.
  • Dimenticare la coerenza con la cache: se il DMA scrive in memoria un blocco che è anche in cache, la copia in cache va invalidata.

Versione ripasso

Il modulo DMA trasferisce i dati direttamente tra dispositivo e memoria, senza passare per la CPU come nell'I/O programmato e a interruptClassi di interruzioni; I/O guidato da interrupt; sequenza hardware e software di gestione con salvataggio del contesto sullo stack; identificazione della sorgente (linee multiple, polling, daisy chain, vettore); priorità e interruzioni annidate; eccezioni e modi in ARM.Interrupt →.

Funzionamento

  1. La CPU programma il DMA: lettura o scrittura, indirizzo del dispositivo, indirizzo iniziale, numero di parole.
  2. La CPU prosegue con altro lavoro.
  3. Il DMA trasferisce una parola alla volta sul bus (indirizzo +1+1, contatore −1-1).
  4. Alla fine invia un solo interrupt.

Bus e configurazioni

  • Furto di cicli (cycle stealingil DMA prende il bus per un solo ciclo, trasferisce una parola e lo rilascia) oppure burst: più veloce, ma la CPU non accede alla memoria. La CPU è solo sospesa in attesa del bus, non interrotta.
  • Bus singolo e DMA separato: ogni parola attraversa il bus due volte; DMA integrato o con bus di I/O dedicato: una volta. Evoluzione: canale di I/O, processore di I/O.

Confronto (4 KB = 1024 parole)

Interrupt: 1024 interruzioni da 200 cicli →\to circa 205 000 cicli. DMA: 100 + 200 ≈\approx 300 cicli.

Errori tipici: credere che il DMA interrompa la CPU a ogni parola; non invalidare in cache il blocco scritto dal DMA.

Teoria collegata