Hvad er direkte hukommelsesadgang (DMA), og hvordan fungerer det? [MiniTool Wiki]
What Is Direct Memory Access
Hurtig navigation:
Du kan vedtage RDMA teknologi, der gør det muligt for computere i et netværk at udveksle data i hovedhukommelsen uden at involvere processoren, cachen eller operativsystemet på nogen af computerne. Men du kan også bruge DMA-funktionen til direkte at sende data fra en tilsluttet enhed til hukommelsen på computerens bundkort. Dette indlæg fra MiniVærktøj taler primært om DMA.
Definitionen af direkte hukommelsesadgang
Først og fremmest, hvad er direkte hukommelsesadgang? Direkte hukommelsesadgang kan forkortes til DMA, som er en funktion i computersystemer. Det giver input / output (I / O) enheder adgang til systemets hovedhukommelse ( Random Access Memory ), uafhængig af den centrale processorenhed (CPU), som fremskynder hukommelsesoperationer.
Tip: Du kan være interesseret i dette indlæg - 8 nyttige løsninger til at rette din CPU 100% i Windows 10 .
Uden direkte hukommelsesadgang, når CPU'en bruger programmerede ind- / udgange, er den normalt fuldt optaget under hele læse- eller skriveoperationen, så den kan ikke udføre andre opgaver. Med DMA initierer CPU først overførslen, udfører derefter andre operationer, mens overførslen er i gang, og modtager endelig et afbrydelse fra DMA-controlleren (DMAC), når operationen er afsluttet.
Direkte hukommelsesadgang er nyttig, når CPU'en ikke kan følge med i dataoverførselshastigheden, eller når CPU'en skal udføre arbejde, mens de venter på relativt langsom I / O-dataoverførsel.
Flere hardwaresystemer vedtager direkte hukommelsesadgang, såsom controllere til diskdrev, grafikkort, netværkskort og lydkort. DMA bruges også til on-chip dataoverførsel i multi-core processorer. Sammenlignet med computere uden direkte hukommelsesadgangskanaler kan computere med DMA-kanaler overføre data mellem enheder med meget mindre CPU-omkostninger.
Direkte hukommelsesadgang kan også bruges til 'hukommelse til hukommelse' til at kopiere eller flytte data i hukommelsen. Det kan overføre dyre hukommelsesoperationer (såsom store kopier eller scatter-indsamling) fra CPU'en til en dedikeret DMA-motor. DMA er vigtig i netværk-on-chip og hukommelsescomputerarkitekturer.
Hvordan fungerer direkte hukommelsesadgang?
Så hvordan fungerer direkte hukommelsesadgang? Standard Direct Memory Access (også kaldet tredjeparts DMA) vedtager en DMA-controller. DMA-controlleren kan producere hukommelsesadresser og starte hukommelses læse- eller skrivecyklusser. Det dækker flere hardwareregistre, der kan læses og skrives af CPU'en.
Disse registre består af et hukommelsesadresseregister, et byte-tælleregister og et eller flere kontrolregistre. Afhængigt af funktionerne fra Direct Memory Access-controlleren kan disse kontrolregistre udpege en kombination af kilde, destination, overførselsretning (læst fra eller skriv til I / O-enhed), størrelse på overførselsenheden og / eller antallet af bytes, der skal overføres i en burst.
For at udføre input-, output- eller hukommelse-til-hukommelsesoperationer initialiserer værtsprocessoren DMA-controlleren med antallet af ord, der skal overføres, og den hukommelsesadresse, der skal bruges. Derefter kommandoer CPU den perifere enhed for at begynde dataoverførsel.
Derefter tilbyder Direct Memory Access-controller adresser og læser / skriver kontrollinjer til systemhukommelsen. Hver gang en byte af data forberedes til at blive overført mellem den perifere enhed og hukommelsen, øger DMA-controlleren sit interne adresseregister, indtil en komplet datablok overføres.
Driftsformer
Direkte hukommelsesadgang fungerer forskelligt i forskellige driftsformer.
Burst-tilstand
I burst-tilstand transmitteres den fulde datablok i en kontinuerlig sekvens. Når CPU'en giver DMA-controlleren adgang til systembussen, overfører DMA-controlleren alle byte med data i datablokken, før den frigiver kontrol over systembussene tilbage til CPU'en, men det vil medføre, at CPU'en er inaktiv i en lang tid. Denne tilstand kaldes også 'Block Transfer Mode'.
Cyklus stjælingstilstand
Cyklus stjælingstilstand bruges i et system, hvor CPU'en ikke kan deaktiveres i den tid, der kræves til burst-overførselstilstand. I cyklustjælingstilstand opnår DMA-controlleren adgang til systembussen ved hjælp af BR (Bus Request) og BG (Bus Grant) signaler, som er de samme som burst mode. Disse to signaler styrer grænsefladen mellem CPU'en og DMA-controlleren.
På den ene side, i cyklustjælingstilstand, er datablokssendningshastigheden ikke så hurtig som i burst-tilstanden, men på den anden side er CPU-inaktiviteten ikke så lang som i burst-tilstanden.
Gennemsigtig tilstand
Den transparente tilstand tager længst tid at overføre datablokke, men det er også den mest effektive tilstand med hensyn til den samlede systemydelse. I gennemsigtig tilstand overfører Direct Memory Access-controlleren kun data, når CPU'en udfører operationer, der ikke bruger systembusserne.
Den største fordel ved gennemsigtig tilstand er, at CPU'en aldrig stopper med at udføre sine programmer, og direkte hukommelsesadgangsoverførsler er gratis med hensyn til tid, mens ulempen er, at hardwaren skal bestemme, hvornår CPU'en ikke bruger systembusserne, hvilket kan være kompliceret. Dette kaldes også “skjult DMA-dataoverførselstilstand”.