Přímý přístup do paměti
V informatice je DMA ( přímý přístup do paměti , " přímý přístup do paměti ") počítače mechanismus, který umožňuje jiným subsystémům, jako jsou periferie , přímý přístup do vnitřní paměti za účelem výměny dat při čtení a/nebo zápisu, bez zahrnující řídicí jednotku (CPU) pro každý bajt přenesený prostřednictvím obvyklého mechanismu přerušení a následný požadavek na požadovanou operaci, ale generováním jediného přerušení na přenesený blok. [1] [2]
Popis
DMA prostřednictvím řadiče s přímým přístupem (DMAC) má proto za úkol řídit data procházející sběrnicí a umožnit periferiím pracujícím různými rychlostmi komunikovat, aniž by byl CPU vystaven enormnímu přerušovacímu zatížení , které by neustále přerušovalo příslušné zpracování . cyklus .
DMA používá mnoho hardwarových systémů, jako jsou řadiče diskových jednotek , grafické karty , síťové karty a zvukové karty .
Při přenosu DMA se v podstatě blok paměti zkopíruje z jednoho zařízení do druhého. Odpojení datové sběrnice od procesoru k jejímu přiřazení k řízení DMA, které tento používá pro přenos dat mezi dvěma periferiemi, se provádí pomocí sběrnicových přepínačů na žádost DMAC. CPU jednoduše zahájí přenos uvolněním datové sběrnice, zatímco vlastní přenos provádí řadič DMA (DMAC). Typickým případem je přesunutí bloku paměti z externí paměťové jednotky do hlavní paměti . Pokud tato operace, jak se to děje díky DMA, nezablokuje procesor, může pokračovat v provádění dalších operací.
DMA spravuje přenosy mezi CPU a periferiemi pomocí různých linek (Acknowledge, request, control) a dvou registrů DC (Data Counter) a IOAR (Input/Output Address Register) . Když CPU potřebuje data přítomná v paměti, načte adresu, ze které má začít operace v IOAR, a počet po sobě jdoucích dat, která mají být zpracována v DC, a informuje DMA o dalším bitu, zda se jedná o operaci čtení nebo zápisu. V tomto okamžiku DMA odešle požadavek do periferie a když přijme potvrzovací signál, zahájí přenos. V každém kroku se IOAR zvyšuje a DC snižuje, dokud se DC nerovná 0.
Přenos mezi DMA a I/O může probíhat několika způsoby:
- Burst Transfer : Jakmile je přenos zahájen, DMA udržuje kontrolu nad BUS na úkor CPU, dokud není ukončen: přístup ke sběrnici ze strany CPU zůstává po celou dobu přenosu odepřen. To předpokládá, že zařízení a paměť umožňují tak rychlý a odolný přenos, jaký potřebuje DMA Controller;
- Cycle Stealing : DMA provádí přenos slova vždy pouze jeden úplný cyklus (tj. pro každý cyklus se propojí s periferií a provede přenos pouze v případě, že je připravena, jinými slovy provedením handshakingu). V důsledku toho je čas, během kterého je CPU odepřen přístup k datové sběrnici, více fragmentovaný;
- Transparent / Hidden : DMA zabírá BUS pouze tehdy, když to CPU nepotřebuje. Aby k tomu došlo, DMA monitoruje CPU a spouští cyklus sběrnice pouze v případě, že instrukce prováděná v CPU je dostatečně dlouhá, aby to umožnila, a pokud se tato instrukce netýká přenosů na BUS.
Technika DMA s rozptylovým sběrem umožňuje přenos dat do více oblastí paměti během jedné transakce DMA. Výsledek je ekvivalentní řetězci běžných požadavků DMA, ale to dále zbavuje CPU přerušení a operací kopírování dat.
Zkratka DMREQ znamená DMA REQuest . DMACK je zkratka pro DMA acknowledgment .
Operace
Čip DMA má uvnitř alespoň čtyři registry přístupné softwaru běžícím v CPU:
- První obsahuje počáteční adresu paměti pro čtení nebo zápis
- Druhý počítá počet bajtů (nebo slov), které mají být přeneseny
- Třetí specifikuje číslo zařízení nebo I/O adresní prostor, který se má použít, což určuje požadované I/O zařízení
- Čtvrtý určuje, zda mají být data čtena z I/O zařízení, nebo do něj mají být zapisována
Proto pro přenos bloku 32 bajtů z adresy paměti 100 na terminál (toto je zařízení 4) CPU zapíše čísla 100, 32 a 4 do prvních tří registrů DMA plus kód pro zápis (v tomto případě předpokládejme, že je 1) ve čtvrtém registru. V tomto okamžiku DMA provede požadavek sběrnice na přečtení bajtu 100 z paměti, podobně jako by to udělal CPU. Jakmile je bajt získán, řadič DMA provede I/O požadavek na zařízení 4 zaměřený na zapsání bajtu. Po dokončení těchto operací řadič DMA zvýší svůj registr adres o 1 a sníží svůj registr čítače o 1. Pokud je registr čítače stále kladný, pokračuje čtením paměti dalšího bytu a jeho zápisem do zařízení.
Nakonec, když se čítač vynuluje, řadič DMA zastaví přenos dat a vyšle impuls na přerušovací lince připojené k čipu CPU. Za přítomnosti DMA potřebuje CPU pouze inicializovat několik registrů, po kterých může volně provádět další úkoly, dokud není přenos dokončen, což je signalizováno přerušením z řadiče DMA. Některé řadiče DMA mají dvě, tři nebo více sad registrů pro řízení simultánních přenosů.
Zatímco DMA zbavuje CPU velké zátěže I/O, proces není zcela zdarma. Pokud je vysokorychlostní zařízení, jako je disk, přenášeno pomocí DMA, bude přístup k paměti a zařízení trvat mnoho cyklů sběrnice. Během těchto cyklů musí CPU čekat (DMA má vždy prioritu sběrnice vyšší než CPU, protože I/O zařízení stěží tolerují zpoždění). Jev, ke kterému dochází, když řadič DMA krade cykly sběrnice z CPU, se nazývá kradení cyklů . Ani zisk z nutnosti zpracovávat přerušení na bajt (nebo na slovo) do značné míry nesplácí škody způsobené přivlastněním smyček.
Poznámky
Bibliografie
- Andrew Stuart Tanenbaum , počítačová architektura. Strukturální přístup , Milan, Pearson Education, 2006, ISBN 978-88-7192-271-3 .
- Giacomo Bucci , Architektury elektronických počítačů , Milán, McGraw-Hill, 2001, ISBN 88 386 0889-X .
Související položky
Další projekty
Wikimedia Commons obsahuje obrázky nebo jiné soubory s přímým přístupem do paměti
Externí odkazy
- mmap () a DMA , od Linux Device Drivers, 2nd Edition , Alessandro Rubini & Jonathan Corbet
- DMA a Interrupt Handling na eventhelix.com . Získáno 28. dubna 2005 (z originálu archivováno 25. května 2014) .
- Přímý přístup do paměti