VyÜlo v t²denφku: COMPUTERWORLD
╚φslo:25/93
RoΦnφk:1993
Rubrika/kategorie: Co (ne)najdete ve slovnφku

zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ Φlßnek | nßsledujφcφ Φlßnek

Ji°φ Peterka

DMA

P°enßÜet data uvnit° poΦφtaΦe, mezi jeho jednotliv²mi Φßstmi, nemusφ b²t v₧dy ·pln∞ jednoduchΘ. R∙znß perifernφ za°φzenφ toti₧ mohou mφt dosti specifickΘ po₧adavky na to, jak rychle jim majφ b²t data poskytovßna (p°i v²stupnφch operacφch), resp. jak rychle majφ b²t od nich p°ebφrßna (v rßmci vstupnφch operacφ). Vezm∞me si jako p°φklad pevn² disk : kotouΦe, na kter²ch jsou v soust°edn²ch stopßch zaznamenßny jednotlivΘ sektory, se otßΦφ konstantnφ rychlostφ. Tou je pak jednoznaΦn∞ urΦena i rychlost, jakou musφ b²t zapisovßny, resp. Φteny jednotlivΘ datovΘ bity. Diskov² °adiΦ z t∞chto bit∙ sestavuje celΘ byty a slova a op∞t mß jednoznaΦn∞ urΦeno, jak rychle bude jednotlivΘ byty produkovat (p°i Φtenφ), resp. jak rychle je pot°ebuje dostßvat (p°i zßpisu na disk). Diskov² °adiΦ sice m∙₧e b²t vybaven urΦit²m objemem vyrovnßvacφ pam∞ti, kterß dokß₧e po jistou dobu hromadit Φtenß data, ale v obecnΘm p°φpad∞ je nutnΘ odebφrat od diskovΘho °adiΦe Φtenß data a p°enßÜet je do operaΦnφ pam∞ti rychlostφ, odvozenou od rychlosti otßΦenφ disku. Zcela analogicky to platφ pro p°φpad zßpisu na disk.

Kdyby m∞l b²t p°enos dat mezi °adiΦem disku a operaΦnφ pam∞tφ zajiÜ¥ovßn procesorem, mohlo by se stßt, ₧e by to ani p°i nejlepÜφ v∙li nedokßzal "stφhat". ProΦ?

╚innost procesoru je °φzena strojov²mi instrukcemi, kterΘ procesor sßm naΦφtß z operaΦnφ pam∞ti. I kdyby byl procesor vybaven strojovou instrukcφ, kterß p°enßÜφ data z pam∞ti rovnou do vstupn∞-v²stupnφch registr∙ (V/V bran, port∙) perifernφch za°φzenφ, resp. naopak, musel by ji procesor v₧dy nejprve sßm naΦφst z pam∞ti - na p°enesenφ ka₧dΘho bytu "u₧iteΦn²ch dat" by tak ve skuteΦnosti bylo nutnΘ p°enΘst hned n∞kolik byt∙ (tvo°φcφch strojovou instrukci) z pam∞ti do procesoru. A to by byla re₧ie, kterou by bylo nutnΘ m∞°it ve stovkßch procent! N∞kterΘ procesory sice majφ takovΘ strojovΘ instrukce, kterΘ dokß₧φ p°enßÜet postupn∞ celΘ bloky dat (v rßmci jedinΘ instrukce), ale ty se zase nedokß₧φ p°izp∙sobit rychlosti po₧adovanΘ diskov²m °adiΦem. Proto se takovΘto instrukce pou₧φvajφ pro p°esuny blok∙ jen v rßmci pam∞ti.

Je zde vÜak jeÜt∞ jeden zajφmav² moment: ₧ßdnß strojovß instrukce nikdy nem∙₧e p°enΘst byte (slovo, dvojslovo) ze zadanΘho vstupn∞-v²stupnφho registru na zadanou adresu do pam∞ti p°φmo - v₧dy to musφ b²t "nadvakrßt": nejprve z V/V registru do procesoru (do n∞kterΘho jeho pomocnΘho registru, kter² je jinak pro u₧ivatele neviditeln²) a odsud, jeÜt∞ v rßmci tΘ₧e instrukce, do pam∞ti (analogicky pro obrßcen² sm∞r). D∙vod je jednoduch²: adresovß sb∞rnice je jen jedna, a nelze ji tedy vyu₧φt pro adresovßnφ dvou mφst souΦasn∞. Tak₧e i kdyby re₧ie na naΦφtßnφ strojov²ch instrukcφ byla nulovß, procesor nikdy nedokß₧e vyu₧φt maximßlnφ mo₧nou rychlost p°enosu dat po datovΘ sb∞rnici lΘpe ne₧ na polovinu.

Otßzkou ovÜem je, zda by tuto maximßlnφ rychlost nedokßzal vyu₧φt n∞kdo jin² ne₧ procesor a jak.

Jedinou mo₧nostφ, jak "obejφt" procesor a zajistit p°enos dat po adresovΘ sb∞rnici z pam∞ti p°φmo do V/V registru resp. naopak, je vyu₧φt adresovou sb∞rnici pro adresovßnφ jednoho ·Φastnφka p°enosu (nejspφÜe pam∞ti), a druhΘho adresovat jin²m zp∙sobem. Teprve pak je mo₧nΘ implementovat techniku, kterΘ se p°φznaΦn∞ °φkß Direct Memory Access (zkratkou DMA), Φesky: p°φm² p°φstup do pam∞ti.

U mikroprocesorov²ch systΘm∙ mß realizaci tΘto techniky na starosti specializovan² obvod, tzv. °adiΦ p°φmΘho p°φstupu do pam∞ti (DMA-°adiΦ). Jeho ·kolem je tedy zajiÜ¥ovat p°enos dat po datovΘ sb∞rnici p°φmo mezi vstupn∞-v²stupnφmi za°φzenφmi a pam∞tφ, bez doΦasnΘho uklßdßnφ t∞chto dat kdekoli v pomocn²ch registrech a bez ·Φasti a bez zprost°edkovßnφ procesorem.

Mß-li ovÜem DMA °adiΦ zajistit takov²to p°φm² p°φstup do pam∞ti, musφ um∞t ovlßdat operaΦnφ pam∞¥ - posφlat jφ adresy po adresovΘ sb∞rnici a generovat nezbytnΘ °φdicφ signßly, je₧ jsou p°edßvanz po °φdicφ sb∞rnici. Krom∞ toho se DMA-°adiΦ musφ um∞t takΘ dohodnout s procesorem, proto₧e v danΘm okam₧iku m∙₧e i procesor chtφt pracovat s pam∞tφ. NejΦast∞jÜφ °eÜenφ je takovΘ, ₧e o vyu₧itφ pam∞ti rozhoduje procesor a DMA-°adiΦ v okam₧iku skuteΦnΘ pot°eby ₧ßdß procesor o p°id∞lenφ sb∞rnic a s nimi o prßvo p°φstupu k pam∞ti. Jakmile procesor tΘto ₧ßdosti vyhovφ, stßvß se DMA-°adiΦ v²luΦn²m pßnem pam∞ti a vÜech sb∞rnic a m∙₧e zprost°edkovat p°φm² p°enos dat mezi V/V za°φzenφm a pam∞tφ. Po jeho skonΦenφ pak zase vracφ sb∞rnice (a s nimi i pam∞¥) zp∞t procesoru.

V praxi jsou DMA-°adiΦe tvo°eny n∞kolika samostatn²mi kanßly, z nich₧ ka₧d² je pevn∞ vyhrazen urΦitΘmu za°φzenφ - proto, aby jej mohl adresovat ji₧ d°φve naznaΦen²m "jin²m zp∙sobem". Ten spoΦφvß v tom, ₧e mezi za°φzenφm a jemu vyhrazen²m kanßlem DMA-°adiΦe vedou dva signßly: jednφm za°φzenφ signalizuje svou p°ipravenost a ₧ßdß o zprost°edkovßnφ p°enosu dat z pam∞tia do nφ a druh²m kanßl DMA-°adiΦe odpovφdß na tuto v²zvu.

P°esn² postup je nßsledujφcφ: za°φzenφ, kterΘ chce iniciovat p°enos dat v rßmci p°φmΘho p°φstupu do pam∞ti, nejprve po₧ßdß "sv∙j" kanßl DMA °adiΦe (p°φsluÜn²m signßlem). DMA °adiΦ pak po₧ßdß procesor o p°id∞lenφ sb∞rnic. Jakmile mu procesor vyhovφ, p°φsluÜn² kanßl DMA °adiΦe vyÜle na adresovou sb∞rnici adresu (pat°φcφ pam∞ti!) a vygeneruje pot°ebnΘ °φdicφ signßly pro pam∞¥ (po₧adujφcφ Φtenφ, resp. zßpis). Kanßl zßrove≥ SouΦasn∞ s tφm odpovφ vstupn∞-v²stupnφmu za°φzenφ na jeho ₧ßdost, a tφm jej souΦasn∞ vyzve k umφst∞nφ dat na datovou sb∞rnici ( p°i p°enosu sm∞rem do pam∞ti), resp. k jejich p°evzetφ z tΘto sb∞rnice (v p°φpad∞ p°enosu opaΦn²m sm∞rem).

DMA °adiΦ p°itom m∙₧e pracovat v r∙zn²ch re₧imech - m∙₧e zajiÜ¥ovat jednotlivΘ p°enosy, tedy po ka₧dΘm jednotlivΘm p°φstupu do pam∞ti zase sb∞rnice vrßtit procesoru, nebo si je m∙₧e ponechat tak dlouho, dokud je co p°enßÜet. Tφmto zp∙sobem pak dokß₧e skuteΦn∞ vyu₧φt maximßlnφ mo₧nou rychlost p°enosu dat po datovΘ sb∞rnici.

Zde je vÜak dobrΘ si zd∙raznit jeÜt∞ jeden moment. DMA °adiΦ nenφ °φzen programem, resp. strojov²mi instrukcemi, a nemß tudφ₧ re₧ii, kterß by p°ipadala na naΦφtßnφ z pam∞ti. Je to jedno·ΦelovΘ za°φzenφ optimalizovanΘ prßv∞ a pouze na zajiÜt∞nφ p°φmΘho p°φstupu do pam∞ti. Ka₧d² kanßl pot°ebuje ke svΘ Φinnosti v podstat∞ jen t°i ·daje: kolik dat mß p°enΘst, kter²m sm∞rem a z kterΘho, resp. ze kterΘho mφsta v pam∞ti (tj. od jakΘ poΦßteΦnφ adresy). Program, kter² iniciuje n∞jakou vstupn∞-v²stupnφ operaci, musφ tyto ·daje zapsat do °φdφcφch registr∙ p°φsluÜnΘho kanßlu DMA-°adiΦe.


zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ Φlßnek | nßsledujφcφ Φlßnek
Tento Φlßnek m∙₧e b²t voln∞ Üφ°en, pokud se tak d∞je pro studijnφ ·Φely, na nev²d∞leΦnΘm zßklad∞ a se zachovßnφm tohoto dov∞tku. Podrobnosti hledejte zde, resp. na adrese http://archiv.czech.net/copyleft.htm