close

Direkt minnesåtkomst

Hoppa till navigering Hoppa till sökning
Image
Drift av ett system med DMAC

Inom datavetenskap är DMA ( Direct Memory Access , " direkt minnesåtkomst ") för en dator den mekanism som tillåter andra delsystem, såsom kringutrustning , att direkt komma åt det interna minnet för att utbyta data , i läsning och/eller skrivning, utan involverar styrenheten (CPU) för varje byte som överförs genom den vanliga avbrottsmekanismen och den efterföljande begäran om den önskade operationen, men genom att generera ett enda avbrott per överfört block. [1] [2]

Beskrivning

DMA:n, genom direktåtkomstkontrollern (DMAC), har därför till uppgift att hantera data som passerar genom BUS , vilket gör att kringutrustning som arbetar med olika hastigheter kan kommunicera utan att utsätta CPU:n för en enorm avbrottsbelastning som kontinuerligt skulle avbryta respektive behandling . cykla .

DMA används av många hårdvarusystem som diskenhetskontroller , grafikkort , nätverkskort och ljudkort .

I huvudsak, i en DMA-överföring, kopieras ett minnesblock från en enhet till en annan. Frigörandet av databussen från processorn för att tilldela den styrningen av DMA, som den senare använder för överföring av data mellan de två kringutrustningarna, sker via bussväxlar på begäran av DMAC. CPU:n initierar helt enkelt överföringen genom att släppa databussen, medan själva överföringen görs av DMA-styrenheten (DMAC). Ett typiskt fall är att flytta ett minnesblock från en extern minnesenhet till huvudminnet . Om denna operation, som den sker tack vare DMA, inte blockerar processorn kan den fortsätta att utföra andra operationer.

DMA hanterar överföringarna mellan CPU och kringutrustning genom användning av olika linjer (Bekräfta, begäran, kontroll) och de två DC (Data Counter) och IOAR (Input/Output Address Register) register . När CPU:n behöver data som finns i minnet, laddar den adressen från vilken operationen ska startas i IOAR och antalet på varandra följande data som ska bearbetas i DC, vilket informerar DMA om ytterligare en bit om det är en operation för att läsa eller skriva. Vid denna tidpunkt skickar DMA:n begäran till den perifera enheten och när den tar emot bekräftelsesignalen påbörjar den överföringen. Vid varje steg ökas IOAR och DC minskas tills DC är lika med 0.

Överföringen mellan DMA och I/O kan ske på flera sätt:

  • Burst Transfer : När väl överföringen har börjat, upprätthåller DMA kontrollen över BUS på CPU:ns bekostnad, tills den avslutas: åtkomst till bussen av CPU:n förblir nekad under hela överföringen. Detta förutsätter att enheten och minnet möjliggör en så snabb och hållbar överföring som DMA-styrenheten behöver;
  • Cykelstjälning : DMA:n utför ordöverföringen endast en hel cykel åt gången (dvs. för varje cykel ansluter den till den perifera enheten och utför överföringen endast om den är klar, med andra ord genom att utföra en handskakning). Som ett resultat är den tid under vilken CPU nekas åtkomst till databussen mer fragmenterad;
  • Transparent / Hidden : DMA:n upptar BUS endast när CPU:n inte behöver den. För att få detta att hända övervakar DMA:n CPU:n och startar en busscykel endast om instruktionen som exekveras i CPU:n är tillräckligt lång för att tillåta det och om denna instruktion inte avser överföringar på BUS.

Scatter-gather DMA-tekniken tillåter överföring av data till flera minnesregioner under en enda DMA-transaktion. Resultatet motsvarar en kedja av normala DMA-förfrågningar, men detta avlastar CPU:n ytterligare från avbrott och datakopieringsoperationer.

Förkortningen DMREQ står för DMA REQuest . DMACK står för DMA acknowledgement .

Operation

DMA-chippet har inuti minst fyra register som är tillgängliga för programvaran som körs i CPU:n:

  1. Den första innehåller startminnesadressen för läsning eller skrivning
  2. Den andra räknar antalet byte (eller ord) som ska överföras
  3. Den tredje anger enhetsnumret eller I/O-adressutrymmet som ska användas, vilket bestämmer den önskade I/O-enheten
  4. Den fjärde bestämmer om data ska läsas från I/O-enheten eller om den ska skrivas till den

Därför, för att överföra ett block på 32 byte från minnesadressen 100 till terminalen (detta är enhet 4) skriver CPU:n siffrorna 100, 32 och 4 i de tre första DMA-registren, plus koden för skrivning (i detta fall vi antag vara 1) i det fjärde registret. Vid denna tidpunkt gör DMA en bussförfrågan att läsa byte 100 från minnet, liknande hur CPU skulle göra. När väl byten har erhållits, skulle DMA-styrenheten göra en I/O-begäran till anordning 4 som syftar till att skriva byten. När dessa operationer har slutförts ökar DMA-styrenheten sitt adressregister med 1 och minskar sitt räknareregister med 1. Om räknarregistret fortfarande är positivt fortsätter det med minnesläsningen av en annan byte och dess skrivning i enheten.

Slutligen, när räknaren nollställs, slutar DMA-styrenheten att överföra data och skickar en puls på avbrottslinjen som är ansluten till CPU-chippet. I närvaro av DMA behöver CPU:n bara initiera ett fåtal register, varefter det är fritt fram att utföra andra uppgifter tills överföringen är klar, signalerat av ett avbrott från DMA-styrenheten. Vissa DMA-kontroller har två, tre eller fler uppsättningar register för att styra samtidiga överföringar.

Även om DMA avlastar CPU:n från den tunga belastningen av I/O, är processen inte helt gratis. Om en höghastighetsenhet, såsom en disk, överförs av DMA, kommer det att ta många busscykler för att komma åt minnet och enheten. Under dessa cykler måste CPU:n vänta (DMA har alltid en bussprioritet högre än CPU:ns, eftersom I/O-enheter knappast tolererar förseningar). Fenomenet som uppstår när DMA-styrenheten stjäl busscykler från processorn kallas cykelstöld . Inte ens vinsten av att inte behöva hantera ett avbrott per byte (eller per ord) återbetalar till stor del skadan orsakad av approprieringen av loopar.

Anteckningar

  1. ^ Tanenbaum , s. 374-375 .
  2. ^ Bucci 137-143

Bibliografi

Relaterade artiklar

Andra projekt

Externa länkar