close

Direkte minnetilgang

Hopp til navigasjon Hopp til søk
Image
Drift av et system med DMAC

Innen datavitenskap er DMA ( Direct Memory Access , " direkte minnetilgang ") til en datamaskin mekanismen som lar andre undersystemer, for eksempel periferiutstyr , få direkte tilgang til det interne minnet for å utveksle data , i lesing og/eller skriving, uten involverer kontrollenheten (CPU) for hver byte som overføres gjennom den vanlige avbruddsmekanismen og den påfølgende forespørselen om ønsket operasjon, men ved å generere et enkelt avbrudd per overført blokk. [1] [2]

Beskrivelse

DMA, gjennom den direkte tilgangskontrolleren (DMAC), har derfor som oppgave å administrere dataene som går gjennom BUS -en, slik at eksterne enheter som arbeider med forskjellige hastigheter kan kommunisere uten å utsette CPU-en for en enorm avbruddsbelastning som kontinuerlig vil avbryte den respektive behandlingen . syklus .

DMA brukes av mange maskinvaresystemer som diskstasjonskontrollere , grafikkort , nettverkskort og lydkort .

I hovedsak, i en DMA-overføring, kopieres en minneblokk fra en enhet til en annen. Frakoblingen av databussen fra prosessoren for å tilordne den til styringen av DMA, som sistnevnte bruker for overføring av data mellom de to periferienhetene, skjer via busssvitsjer på forespørsel fra DMAC. CPUen starter ganske enkelt overføringen ved å frigjøre databussen, mens selve overføringen gjøres av DMA-kontrolleren (DMAC). Et typisk tilfelle er å flytte en minneblokk fra en ekstern minnestasjon til hovedminnet . Hvis denne operasjonen, som den skjer takket være DMA, ikke blokkerer prosessoren, kan den fortsette å utføre andre operasjoner.

DMA administrerer overføringene mellom CPU og periferiutstyr gjennom bruk av forskjellige linjer (Acknowledge, request, control) og de to DC (Data Counter) og IOAR (Input / Output Address Register) registre . Når CPU trenger data i minnet, laster den inn adressen som den skal starte operasjonen fra i IOAR og antall påfølgende data som skal behandles i DC, og informerer DMA om en ytterligere bit om det er en operasjon med lesing eller skriving. På dette tidspunktet sender DMA forespørselen til den perifere enheten og når den mottar bekreftelsessignalet starter den overføringen. Ved hvert trinn økes IOAR og DC reduseres til DC er lik 0.

Overføringen mellom DMA og I/O kan skje på flere måter:

  • Burst Transfer : Når overføringen har begynt, opprettholder DMA kontrollen over BUS-en på bekostning av CPU-en, til den avsluttes: tilgang til bussen av CPU-en forblir nektet gjennom hele overføringen. Dette forutsetter at enheten og minnet tillater en så rask og holdbar overføring som DMA-kontrolleren trenger;
  • Cycle Stealing : DMA utfører ordoverføringen kun en hel syklus om gangen (dvs. for hver syklus kobler den til periferutstyret og utfører overføringen bare hvis den er klar, med andre ord ved å utføre et håndtrykk). Som et resultat er tiden hvor CPUen nektes tilgang til databussen mer fragmentert;
  • Gjennomsiktig / skjult : DMA-en okkuperer BUS-en bare når CPU-en ikke trenger den. For å få dette til å skje, overvåker DMA CPU-en og starter en busssyklus bare hvis instruksjonen som utføres i CPU-en er lang nok til å tillate det og hvis denne instruksjonen ikke gjelder overføringer på BUS-en.

Scatter-gather DMA-teknikken tillater overføring av data til flere minneregioner under en enkelt DMA-transaksjon. Resultatet tilsvarer en kjede av vanlige DMA-forespørsler, men dette avlaster CPU-en ytterligere for avbrudd og datakopieringsoperasjoner.

Akronymet DMREQ står for DMA REQuest . DMACK står for DMA acknowledgement .

Operasjon

DMA-brikken har inne i minst fire registre som er tilgjengelige for programvaren som kjører i CPU:

  1. Den første inneholder startminneadressen for lesing eller skriving
  2. Den andre teller antall byte (eller ord) som skal overføres
  3. Den tredje spesifiserer enhetsnummeret eller I/O-adresseområdet som skal brukes, som bestemmer ønsket I/O-enhet
  4. Den fjerde bestemmer om dataene skal leses fra I/O-enheten eller om de skal skrives til den

Derfor, for å overføre en blokk på 32 byte fra minneadressen 100 til terminalen (dette er enhet 4), skriver CPU tallene 100, 32 og 4 i de tre første DMA-registrene, pluss koden for skriving (i dette tilfellet anta være 1) i det fjerde registeret. På dette tidspunktet sender DMA en bussforespørsel om å lese byte 100 fra minnet, på samme måte som CPUen ville gjort. Så snart byten er oppnådd, vil DMA-kontrolleren foreta en I/O-forespørsel til enheten 4 med sikte på å skrive byten. Når disse operasjonene er fullført, øker DMA-kontrolleren sitt adresseregister med 1 og reduserer tellerregisteret med 1. Hvis tellerregisteret fortsatt er positivt, fortsetter det med minnelesing av en annen byte og skriving i enheten.

Til slutt, når telleren tømmes, slutter DMA-kontrolleren å overføre data og sender en puls på avbruddslinjen koblet til CPU-brikken. I nærvær av DMA trenger CPU-en bare å initialisere noen få registre, hvoretter den er fri til å utføre andre oppgaver til overføringen er fullført, signalisert av et avbrudd fra DMA-kontrolleren. Noen DMA-kontrollere har to, tre eller flere sett med registre for å kontrollere samtidige overføringer.

Mens DMA avlaster CPU-en for den tunge belastningen av I/O, er ikke prosessen helt gratis. Hvis en høyhastighetsenhet, for eksempel en disk, overføres av DMA, vil det ta mange busssykluser å få tilgang til minnet og enheten. Under disse syklusene må CPU-en vente (DMA har alltid en bussprioritet høyere enn CPU-en, fordi I/O-enheter knapt tåler forsinkelser). Fenomenet som oppstår når DMA-kontrolleren stjeler busssykluser fra CPUen kalles syklustyveri . Ikke engang gevinsten ved å slippe å håndtere et avbrudd per byte (eller per ord) betaler i stor grad tilbake skaden forårsaket av tilegnelse av løkker.

Merknader

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

Bibliografi

Relaterte elementer

Andre prosjekter

Eksterne lenker