Otsemällupöördus

DMA

DMA kasutab DMA kontrollerit, mis võib luua mäluaadresse ning algatada lugemis- ja kirjutamisprotsesse. Need sisaldavad registreid, kuhu saab kirjutada ja lugeda protsessori poolt, sealhulgas mäluaadressiregister, baidiarvuregister ning lisaks üks või mitu kontrollregistrit. Registrid näitavad algset allikat, sihtkohta ning toimingud (lugemine või kirjutamine sisend/väljund seadmest), andmete suurust ning baidihulka, mida ühekorraga edastada. Sisendi, väljundi või mälust-mällu lugemiseks protsessor lähtestab DMA kontrollerile sõnade saatmise hulga ning mäluaadressi. Seejärel saadab protsessor välisseadmesse käsud, mille DMA kontroller annab seadme mälust. Iga kord, kui bait andmeid on valmis saatmiseks, DMA kontroller suurendab mäluregistrit, kuni kogu andmeplokk on saadetud.

Siinihaldus

Siinihaldussüsteemis võivad nii protsessor kui ka välisseadmed saada kontrolli siini üle. Kui välisseadmed saavad siinihalduriteks (inglise keeles bus master), siis on võimalik otse kirjutada süsteemimällu ilma protsessori sekkumata, tagades vajadusel omale mäluaadressi ning võimaldades omavahelise suhtluse ja andmevahetuse. Kuigi teoorias valdab üks välisseade siini, siis praktikas on neil kõigil samaaegselt õigused.

Andmeülekandetüübid

Failiülekanne võib toimuda bait korraga või terve andmeploki kaupa burst mode'is. Kui ülekanne toimub baidi kaupa, siis protsessor ja DMA vahetavad omavahel juurdepääsu mälule (cycle stealing). Burst mode'is on DMA kontrolleril eelisõigused mälule ning jätab protsessori ootama, kuni kogu andmeplokk on üle kantud. Lubatud on ka DMA kontrolleri ning protsessori läbipõimitus, kus DMA kontroller saab mälu kasutada ning protsessor mitte.

Tsüklivargus

Tsüklivarguses (inglise keeles Cycle stealing) on protsessori ja DMA kontrolleri mälu poole pöördumised on ühtsed ning DMA kontrolleri soov siini kasutada on alati kõrgema prioriteediga. Lisaks sellele on kõrge prioriteediga seadmed võrgukaardid, kettad ning graafikakaardid. Pärast ühte baiti andmeülekandeid muudetakse siini automaatselt DMA kontrolleri ja protsessori vahelt, kuni kõik andmed on üle kantud. Sellest tuleneb ka nimetus "Cycle stealing", kus DMA kontroller nii-öelda varastab mäluga suhtlemise tsükleid. Antud meetod vähendab maksimaalset sisend-/väljundsignaalide ülekannet. Lisaks sellele on vähendatud DMA kontrolleri häireid protsessori-mälu suhtluses. Meetod on eriti kasulik kontrollerites, mis jälgivad reaalajas sisenevaid ja väljuvaid andmeid.

Plokk- või valangrežiim

Plokk- või valangrežiimimeetodiga (inglise keeles block or burst mode) on DMA kontrolleril võimalus andmeplokk korraga edastada, protsessor on samaaegselt vabastatud seadmete pöördumisest. Kasutatakse näiteks kettaseadmetes, mis vajavad andmete kiiret ja täieliku ülekannet. Probleemideks on protsessori ooteaeg enne kui avaneb võimalus andmetöötluseks ning mitme erineva seadme soov siini kasutada.

Läbipaistev laad

Läbipaistvas laadis (inglise keeles Transparent mode) on DMA liides on välja töötatud nii, et DMA kontroller suhtleb mäluga siis, kui protsessoril pole tarvis mäluga suhtlemise tsükleid. Peetakse üldplaanis kõige kiiremaks meetodiks, sest protsessor ei pea oma programme sulgema. Negatiivseks pooleks on riistvara keerukus ning hind hetkete tuvastamiseks, millal protsessor ei suhtle mäluga. Lisaks sellele on andmeedastus aeglasem kui eelneval kahel meetodil.

Vahemälu sidusus

DMA võib tekitada vahemälu sidususe probleeme. Olukorras, kus on protsessor koos vahemäluga ning kõvaketas, mis saab DMA abil seadmetele ligi, saab protsessor andmed kohast X ning salvestab selle vahemällu. Kõvakettal muudetakse kohas X mäluandmed ära, kuid protsessor saab jätkuvalt vahemälus olevaid andmeid, mida pole uuendatud. Sama probleem on ka vastupidise olukorraga, kus vahemälu muudetakse, kuid see muutus ei kajastu lõpuks kõvakettal.
Selliste olukordade vältimiseks tuleb luua sidusa vahemäluga süsteem, kus antakse vahemälukontrollerile märku, kui on toimunud väline kirjutamine DMA poolt või vahemälu puhastamine pärast igat DMA lugemist. Mittesidusates süsteemides hoolitseb selle eest operatsioonisüsteem (OS), et enne DMA väljaminevat voogu on vahemälu puhtaks tehtud või uuendatud sissetuleva DMA voole ligipääsu. Samuti hoolitseb OS selle eest, et miski muu ei saaks samal ajal andmetele ligi. Selle kaudu küll DMA töötlusaeg suureneb, sest tuleb läbi töödelda kogu vahemälu.
Leidub ka hübriidseid versioone, kus vahemälu L2 on sidus ning vahemälu L1 juhib tarkvara.

I/OAT

I/OAT (I/O Acceleration Technology) on DMA mootor, mida kasutatakse Intell Xeon kiibistikes, mis vabastab protsessori kopeerides andmed ümber ning võimaldades sellel teha muid toiminguid. Peamine kasutusala on võrgu kiirendamine, kui kasutatakse ka teisteks otstarveteks.

DDIO

DMA-le jõudluseuuendusi DMA mehhanismile on tehtud intel Xeon E5 protsessorites DDIO (Data Direct I/O) lisamisega, mis kasutab vahemälu (20 MB) muutmälu asemel. Selle tulemusena kasutatakse vahemälu kui peamise allika ning sihtkohana I/O seadmete jaoks lubades võrguadapteril suhelda otse võrgus olevate protsessoritega, säästes aega muutmälust vastuste saamisest. Selle tulemusena väheneb latentsusaeg, laseb I/O seadmetel täielikult vahemälus toimetada, kaotab RAM-i ribalaiusega seotud pudelikaelaefekti ning vähendab voolutarvet sellega, et RAM jääb madala koormusega faasi.