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

  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.

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:

  • 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.

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

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.

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.

Lezioni in cui compare

Teoria collegata