Direktan pristup memoriji

Direktan pristup memoriji (DMA) je osobina modernih računara koja omogućava određenom hardverskom podsistemu unutar računara da pristupi sistemskoj memoriji nezavisno od procesora.

Bez DMA, kada procesor koristi programirani ulaz/izlaz, uglavnom je potpuno okupiran tokom celokupnog trajanja operacije čitanja ili pisanja, i usled toga nedostupan da obavlja druge poslove. Koristeći DMA, procesor započne transfer, radi druge operacije dok transfer traje, i prima prekid od strane DMA kontrolera kada se operacija završi. Ova osobina je korisna svaki put kada procesor ne može da isprati brzinu prenosa, ili kada treba da radi nešto korisno dok čeka da se relativno spora ulazno/izlazna operacija završi. Puno hardverskih sistema koristi DMA, uključujući kontrolere diska za skladištenje, grafičke kartice, mrežne adaptere i zvučne kartice. DMA se takođe koristi za transfer podataka među čipovima unutar višejezgarnih procesora. Računari koji imaju DMA kanale mogu da prebacuju podatke ka i od uređaja sa mnogo manje procesorskih gubitaka od onih koji nemaju. Slično tome, procesni element unutar višejezgarnog procesora može da prebacuje podatke ka i od lokalne memorije bez zauzimanja svog procesorskog vremena, omogućavajući da se računanje i prenos podataka izvršavaju paralelno.

DMA se takođe može koristiti za kopiranje između memorija ili pomeranje podataka unutar memorije. DMA može da rastereti procesor zahtevnih memorijskih operacija, kao što su velika kopiranja ili vektorski ulaz/izlaz, na račun namenskog DMA uređaja. Primer implementacije je I/O Acceleration Technology.

Principi uredi

DMA kontroler može da generiše adrese i započinje memorijske cikluse čitanja ili pisanja. On sadrži nekoliko registara koji mogu biti upisivani i čitani od strane procesora. Isti uključuju adresne registre, bajt brojačke registre, i jedan ili više kontrolnih registara. Kontrolni registri određuju koji ulazno/izlazni port se koristi, smer transfera (čitanje iz ulazno/izlaznog uređaja ili pisanje u ulazno/izlazni uređaj), veličinu jedinice transfera (bajt ili reč), i broj bajtova koji se prenose iz cuga.[1]

Da bi izvršio ulaznu, izlaznu ili međumemorijsku operaciju, procesor inicijalizuje DMA kontroler sa brojem reči koje treba preneti, i memorijskom adresom koju treba da koristi. Procesor zatim šalje komandu perifernom urešaju da započne transfer podataka. DMA kontroler zatim obezbeđujed adrese i kontrolne linije čitanja/pisanja ka sistemskoj memoriji. Svaki put kad je reč podataka spremna da bude prenesena između perifernog uređaja i memorije, DMA kontroler povećava svoj interni adresni regiistar dok se ne prenese ceo blok podataka.

DMA transfer se mogu izvršavati ili reč po reč ili odjedanput uzastopno. Ako se izvršava reč po reč, to omogućuje procesoru da pristupi memoriji na suprotnom ciklusu radnog takta magistrale - ovo se zove krađa ciklusa s obzirom da se DMA kontroler i procesor bore za pristup memoriji. U uzastopnom modu DMA, procesor može biti stavljen na čekanje za vreme DMA transfera i ceo blok od stotinu ili hiljadu reči može biti kopiran.[2] Kada su memorijski cilkusi brži od procesorskih, moguć je isprekidani DMA ciklus, gde DMA kontroler pristupa memoriji samo kad procesor ne može.

Kod sistema gde jedan uređaj vlada magistralom, i procesor i periferije mogu dobiti kontrolu nad memorijskom magistralom. Kada periferija dobije kontrolu nad magistralom, može direktno da vrši upis u sistemsku memoriju bez uključivanja procesora u tu operaciju, samostalo obezbeđujući adresne i kontrolne signale po potrebi. Neka mera mora biti preduzeta da se procesor stavi u stanje čekanja da ne bi došlo do konflikta oko magistrale.

Modovi rada uredi

Uzastopni mod uredi

Ceo blok podataka se prenosi u jednoj uzastopnoj sekvenci. Kada DMA kontroler dobije pristup sistemskoj magistrali od strane procesora, on može da prenese sve bajtove podataka iz bloka podataka pre oslobađanja sistemske magistrale nazad procesoru, ali ostavlja procesor neaktivnim tokom relativno dugog perioda. Ovaj mod se takođe naziva "mod blokovskog transfera“.

Mod krađe ciklusa uredi

Mod krađe ciklusa se koristi kod sistema čiji procesor ne sme biti neaktivan za vreme trajanja uzastopnog prenosa. Kod krađe ciklusa, DMA dobija pristup sistemskoj magistrali na isti način kao kod uzastopnog moda, korišćenjem BR (zahtev magistrale) i BG (odobrenje magistrale) signala, koji kontrolišu interfejs između procesora i DMA kontrolera. Međutim, kod krađe ciklusa, nakon prenosa jednog bajta podataka, kontrola nad sistemskom magistralom se prepušta procesoru preko BG signala. Ona se zatim kontinualno ponovo zahteva preko BR signala, prenoseči jedan bajt podataka po zahtevu, dok se ne prenese ceo blok podataka. Kontinualnim uzimanjem i otpuštanjem kontrole nad sistemskom magistralom, DMA kontroler naizmenično poskakuje između izvršavanja instrukcija i prenosa podataka. Procesor obradi instrukciju, zatim DMA kontroler prenese jedinicu podataka, i tako dalje. S jedne strane, blok podataka nije prenesen brzo kao u uzastopnom modu, ali s druge strane procesor nije neaktivan dugo kao što je u utastopnom modu. Mod krađe podataka je koristan za kontrolere koji nadgledaju podatke u realnom vremenu.

Transparentni mod uredi

Transparentni mod oduzima najviše vremena za prenos bloka podataka, ali je i najefikasniji u smislu ukupnih sistemskih performansi. DMA kontroler prenosi podatke samo kada procesor obavlja operacije koje ne uključuju korišćenje sistemske magistrale. Primarna prednost transparentnog moda je što procesor nikad ne staje sa izvršavanjem svojih programa i DMA transfer je slobodan u smislu vremena. Mana transparentnog moda je što hardver mora da utvrdi kada procesor ne koristi sistemsku magistralu, što može biti složeno.

Koherentnost keša uredi

 
Nekoherentnost keša usled DMA

DMA može dovesti do problema koherentnosti keša. Zamislite procesor sa svojim kešom i eksternom memorijom kojoj uređaji mogu direktno pristupiti preko DMA. Kada procesor pristupi lokaciji X u memoriji, trenutna vrednost će biti kopirana u keš. Naredne operacije nad X će ažurirati keširanu kopiju X, ali ne i onu kopiju u eksternoj memoriji, pod pretpostavkom da će biti ažurirana u trenutku kada ona kopija u kešu bude zamenjena drugom memorijskom lokacijom. Ako uređaj pokuša da pristupi X (njenoj kopiji u eksternoj memoriji) pre nego što je ona ažurirana iz keša, uređaj će dobiti netačnu vrednost X.

Similarly, if the cached copy of X is not invalidated when a device writes a new value to the memory, then the CPU will operate on a stale value of X.

Ovaj problem se može rešiti na jedan od dva načina pri dizajnu sistema: Keš-koherentni sistemi implementiraju hardverski metod pri kome su eksterni upisi signalizirani keš kontroleru koji zatim izvršava invalidaciju keša (briše tu vrednost iz keša) za DMA upise ili ažuriranje eksterne memorije u slučaju DMA čitanja. Nekoherentni sistemi prepuštaju ovo softveru, gde operativni sistem mora da se osigura da je eksterna memorija ažurirna na osnovu keša preko nego što otpočne DMA čitanje i da je keš obrisan pre nego što DMA izvrši operaciju upisa nad ekvivaletnom memorijskom lokacijom u eksternoj memoriji. Operativni sistem mora biti siguran da se istom memorijskom opsegu ne pristupa od strane nijedne od pokrenutih niti u međuvremenu. Ovaj zadnji pristup dovodi do nekih resursnih gubitaka kod DMA operacija, s obzirom da većina hardvera zahteva petlju da bi obrisala svaku keš liniju individualno.

Takođe postoje i hibridi, kod kojih je sekundarni L2 keš koherentan dok je L1 keš (tipično na procesoru) kontrolisan od strane softvera.

Primeri uredi

ISA uredi

Kod originalnog IBM PC-a, postojao je samo jedan Intel 8237 DMA kontroler sa četiri DMA kanala (obeleženih kao 0–3), kao deo takozvane Industry Standard Architecture, ili ISA. Ovi DMA kanali su obavljali 8-bitne prenose i mogli su adresirati samo prvi megabajt RAM memorije. Sa IBM PC AT, dodat je drugi 8237 DMA kontroler (kanali 5—7; kanal 4 je neupotrebljiv), i stranični registar je prepovezan da adresira pun adresni prostor od 16 MB memorije 80286 procesora. Ovaj drugi kontroler je obavljao 16-bitne transfere.

Zbog svojih zaostalih performansi (2.5 Mbit/s[3]), ovi uređaju su većinski prevaziđeni od pojave 80386 procesora 1985-e i svog kapaciteta za 32-bitne transfere. I dalje su podržani u određenoj meri čisto da podrže ugrađeni stari PC hardver na modernim mašinama. Jedino hardver koji je i dalje relativno čest, a koji koristi ISA DMA su ugrađeni flopi disk kontroleri mnogih PC matičnih ploča i IEEE 1284 paralelni portovi koji podržavaju brzi ECP mod.

Svaki DMA kanal ima 16-bitni adresni registar i 16-bitni brojački registar u vezi s njim. Da bi započeo prenos podataka drajver uređaja postavlja adresni i brojački registar DMA kanala zajedno sa smerom transfera podataka, čitanja ili pisanja. Zatim daje instrukciju DMA hardveru da započne transfer. Kada se transfer završi, uređaj šalje prekid procesoru.

DMA sa vektorskim ulazom/izlazom omogućava transfer podataka ka i od više memorijskih opsega pri jednoj DMA transakciji. To je ekvivalentno lančanju višestrukih jednostavnih DMA zahteva. Poenta je da se procesor rastereti višestrukih ulazno/izlaznih prekida i operacija kopiranja podataka.

DRQ je skraćenica za zahtev za podatkom; DACK za dopuštanje podataka. Ovi simboli, viđeni na hardverskim šemama računarskih sistema sa DMA funkcionalnošću, predstavljaju elektronske signalne linije između procesora i DMA kontrolera. Svaki DMA kanal ima jednu liniju za zahtev i jednu za priznanje. Uređaj koji koristi DMA mora biti podešen da koristi obe linije dodeljenog DMA kanala.

Standardni ISA DMA prenosi:

0. DRAM osvežavanje (prevaziđeno),

1. Korisnički hardver,

2. Flopi disk kontroler,

3. Tvrdi disk (prevaziđeno sa PIO modom, i zamenjeno UDMA modom),

4. Serijski sa XT DMA kontrolera,

5. Tvrdi disk (PS/2 port), korisnički hardver za sve ostalo,

6. Korisnički hardver.

7. Korisnički hardver.

PCI uredi

PCI arhitektura nema centralni DMA kontroler controller, za razliku od ISA. Umesto toga, bilo koja PCI komponenta može zahtevati kontrolu nad magistralom ("postati vlasnik magistrale") i zahtevati upis ili čitanje iz sistemske memorije. Preciznije, PCI komponenta zahteva vlasništvo nad magistralom od kontrolera PCI magistrale (uglavnom južni most čipseta u modernom računarskom dizajnu), koji će vršiti raspoređivanje ukoliko više uređaja zatraži kontrolu magistrale istovremeno, s obzirom da samo jedan može koristiti magistralu istovremeno. Kada komponenta dobije kontrolu, ona će postaviti normalne komande čitanja i pisanja na PCI magistralu, koje će biti prepoznate od strane kontrolera magistrale i prosleđene memorijskom kontroleru korišćenjem šeme koja je specifična za svaki čipset.

Kao primer, na modernom AMD Socket AM2-baziranom računaru, južni most će proslediti transakciju severnom mostu (koji je integrisan na čipu procesora) korišćenjem HyperTransport-a, koji će ih konvertovati u DDR2 operacije i postaviti na DDR2 memorijsku magistralu. Kao što se može videti, dosta je koraka uključeno u PCI DMA transfer; međutim, to predstavlja mali problem, s obzirom da je PCI uređaj ili sama PCI magistrala za nekoliko redova veličine sporija od ostatka komponenti.

Moderni x86 procesor može da koristi više od 4 GB memorije, uz pomoć PAE (proširenja fizičke adrese), 36-bitnog adresnog moda, ili prirodnog 64-bitnog moda kod x86-64 procesora. U tom slučaju, uređaj koji koristi DMA sa 32-bitnom adresnom magistralom nije u mogućnosti da adresira memoriju iznad 4 GB. Novi mehanizam duplog adresnog ciklusa (DAC), u slučaju da je implementiran na obe PCI magistrale i na samom uređaju,[4] omogućava 64-bitno DMA adresiranje. U suprotnom, operativni sistem bi morao da reši problem ili korišćenjem skupih duplih bafera (DOS/Windows nomenklatura) takođe poznatih kao bounce buffer (FreeBSD/Linux), ili može koristiti IOMMU da obezbedi prevođenje adrese ukoliko je dostupan.

I/OAT uredi

Kao primer DMA mašine uključene u opštenamenski procesor, noviji Intel Xeon čipsetovi sadrže DMA tehnologiju pod nazivom I/O Acceleration Technology (I/OAT), namenjenu da poboljša mrežne performanse na visokopropusnim mrežnim interfejsima, prvenstveno gigabitnom eternetu i bržim.[5] Međutim, razni benčmarkovi ovog pristupa od strane Intelovog [[Linuks jezgro|Linuks] programera Andrew-a Grover-a pokazuju ne višnj od 10% poboljšanja performansi po pitanju opeterećenja procesora pri opterećenju, i nikakva poboljšanja pri slanju podataka.[6]

AHB uredi

Kod sistema na čipu i integrisanih sistema, tipična infrastruktura sistemske magistrale je kompleksna magistrala na čipu kao što je AMBA magistrala visokih performansi. AMBA definiše dve vrste AHB komponenti: master i slave. Slave interfejs je sličan programiranom ulazu/izlazu kroz koji softver (koji radi na integrisanom procesoru, npr. ARM) možte da piše/čita ulazno/izlazne registre ili (ređe) lokalne memorijske blokove unutar uređaja. Master interfejs može biti korišćen od strane uređaja da izrvšava DMA transakcije ka i od sistemske memorije bez velikog opterećivanja procesora.

Zbog toga, uređaji visoke propusne moći kao što su mrežni kontroleri koji prenose velike količine podataka ka i od sistemske memorije će imati dva interfejsna adaptera ka AHB-u: master i slave interfejs. To je zato što magistrale na čipu kao što je AHB ne podržavaju magistralu sa tri stanja ili promenu smera bilo koje linije magistrale. Kao i kod PCI, nije potreban centralni DMA kontroler s obzirom da DMA kontroliše magistralu, ali je potreban arbitar u slučaju da postoji više mastera na sistemu.

Interno, višekanalna DMA mašina je uglavnom prisutna u uređaju radi izvođenja višestrukih konkurentnih vektorskih ulaza/izlaza programiranih od strane softvera.

Cell (procesor) uredi

Kao primer primene DMA kod multiprocesorskih sistema na čipu, IBM/Sony/Toshiba Cell procesor poseduje DMA mašinu za svaki od 9 procesnih elemenata uključujući jedan Glavni procesorski element (PPE) i osam sinergijskih procesorskih elemenata (SPEs). S obzirom da instrukcije učitavanja/skladištenja SPE jedinica mogu da čitaju/pišu samo svoju lokalnu memoriju, SPE u potpunosti zavisi od DMA po pitanju transfera podataka ka i od glavne memorije i lokalnih memorija drugih SPE elemenata. Iako DMA služi kao glavno sredstvo transporta podataka među jezgrima unutar ovog procesora (za razliku od keš-koherentne CMP arhitekture kod Intelovog otkazanog Larrabee grafičkog procesora opšte namene.

DMA kod Cell procesora je potpuno keš koherentna (doduše lokalna skladišta SPE elemenata kojima operiše DMA nisu globalno koherentni keš u standardnom smislu). I kod čitanja ("get") i kod pisanja ("put"), DMA komanda može preneti ili jedan blok veličine do 16KB, ili listu od 2 do 2048 takvih blokova. DMA komanda se izdaje određivanjem para lokalne adrese i udaljene adrese: na primer kada SPE program izda DMA komandu pisanja, on određuje adresu svoje lokalne memorije kao izvor i adresu virtuelne memorije (koja pokazuje ili na glavnu memoriju ili na lokalnu memoriju drugog SPE elementa) kao odredišta, zajedno sa veličinom bloka. Po nedavnim eksperimentimaing, efektivni vrhunac performansi DMA kontrole kod Cell procesora (3 GHz, pri ujednačenom saobraćaju) iznosi 200GB po sekundi.[7]

Reference uredi

  1. ^ Osborne, Adam (1980). An Introduction to Microcomputers: Volume 1: Basic Concepts (2nd izd.). Osborne McGraw Hill. str. 5–64through 5–93. ISBN 978-0-931988-34-9. 
  2. ^ Horowitz & Winfield 1989, str. 702
  3. ^ Intel publication 03040, Aug 1989
  4. ^ „Physical Address Extension — PAE Memory and Windows”. Microsoft Windows Hardware Development Central. 2005. Arhivirano iz originala 06. 04. 2008. g. Pristupljeno 7. 4. 2008. 
  5. ^ Corbet, Jonathan (6. 12. 2005). „Memory copies in hardware”. LWN.net (December 8, 2005). Pristupljeno 12. 11. 2006. 
  6. ^ Grover, Andrew (1. 6. 2006). „I/OAT on LinuxNet wiki”. Overview of I/OAT on Linux, with links to several benchmarks. Arhivirano iz originala 09. 12. 2006. g. Pristupljeno 12. 12. 2006. 
  7. ^ Kistler, Michael (2006). „Cell Multiprocessor Communication Network”. Extensive benchmarks of DMA performance in Cell Broadband Engine. 

Literatura uredi

Spoljašnje veze uredi