VyÜlo v t²denφku: COMPUTERWORLD
╚φslo:26/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

Cycle stealing

Vztahy mezi jednotliv²mi Φßstmi poΦφtaΦe nemusφ b²t v₧dy zcela idylickΘ. Dokud byl procesor jedin²m pßnem, kter² rozhodoval o vÜem a sßm, bylo jeÜt∞ vÜe jednoduchΘ. Jakmile se ale v naÜich poΦφtaΦφch zaΦφnajφ objevovat r∙znΘ vφce Φi mΘn∞ samostatnΘ a na procesoru nezßvislΘ subsystΘmy, v∞ci se zaΦφnajφ komplikovat. Nßhle se toti₧ vedle sebe vyskytuje vφce autonomnφch subjekt∙, kterΘ mezi sebou sout∞₧φ o zφskßnφ n∞Φeho, co m∙₧e skuteΦn∞ zφskat jen jeden z nich. Na typick² p°φklad jsme narazili v minulΘm vydßnφ tΘto rubriky, kterΘ bylo v∞novßno technice p°φmΘho p°φstupu do pam∞ti, neboli technice DMA.

Jakmile je v n∞jakΘm poΦφtaΦi instalovßn °adiΦ DMA, p°estßvß b²t procesor tohoto poΦφtaΦe jedin²m, kdo m∙₧e po₧adovat p°φstup k operaΦnφ pam∞ti - za ·Φelem Φtenφ Φi zßpisu. Stejn²m po₧adavek toti₧ m∙₧e vznΘst i DMA °adiΦ, tak₧e musφ existovat n∞jak² mechanismus, kter² v p°φpad∞ soub∞hu obou po₧adavk∙ rozhodne o tom, kter² z nich mß b²t uspokojen, a toto rozhodnutφ takΘ prakticky uskuteΦnφ.

Minule, kdy₧ jsme si o technice DMA povφdali poprvΘ, jsme se zmφnili o nejobvyklejÜφm °eÜenφ, kterΘ lze charakterizovat jako "sluÜnΘ chovßnφ DMA °adiΦe". SpoΦφvß v tom, ₧e o p°φstupu k systΘmov²m sb∞rnicφm (a jejich prost°ednictvφm o p°φstupu k pam∞ti) rozhoduje procesor, a DMA °adiΦ jej sluÜn∞ po₧ßdß o doΦasnΘ p°epuÜt∞nφ t∞chto sb∞rnic, tak aby i on mohl s pam∞tφ pracovat. KonkrΘtnφ forma je pak takovß, ₧e DMA °adiΦ poÜle procesoru zvlßÜtnφ signßl (obvykle pojmenovan² HOLD), kter²m ₧ßdß o p°id∞lenφ sb∞rnic. Procesor na tuto ₧ßdost odpovφdß dalÜφm specißlnφm signßlem (HLDA, resp. Hold Acknowledge), kter²m DMA °adiΦi signalizuje p°id∞lenφ sb∞rnic. Zajφmavou otßzkou je, kdy a za jak²ch podmφnek procesor ₧ßdosti DMA °adiΦe vyhovφ: procesor obvykle nenφ konstruovßn tak, aby mohl ₧ßdost ignorovat, tak₧e DMA °adiΦi vyhovφ v₧dy. Nemusφ to ale ud∞lat okam₧it∞ - pokud prßv∞ sßm pracuje s pam∞tφ (tj. prßv∞ z nφ n∞co Φte, resp. n∞co do nφ zapisuje), tuto svou Φinnost nejprve dokonΦφ, a teprve pak p°enechß sb∞r nice DMA °adiΦi. Prßce procesoru s pam∞tφ p°itom probφhß v tzv. cyklech (anglicky: cycles, resp. memory cycles), kterΘ p°edstavujφ jednotlivß "sßhnutφ" do pam∞ti za ·Φelem naΦtenφ Φi zßpisu tak velkΘho objemu dat, jak² je mo₧nΘ zapsat Φi p°eΦφst najednou (tj. u poΦφtaΦ∙ s 8-bitovou datovou sb∞rnicφ 1 byte, s 16-bitovou datovou sb∞rnicφ 2 byty atd.). Pokud tedy ₧ßdost DMA °adiΦe o sb∞rnice p°ijde v pr∙b∞hu n∞jakΘho pam∞¥ovΘho cyklu, procesor jej nejprve dokonΦφ, a teprve pak vyhovφ ₧ßdosti DMA °adiΦe. Jakmile DMA °adiΦ zφskß tφmto zp∙sobem sb∞rnice, m∙₧e je vyu₧φt bu∩ jen pro jedinΘ "sßhnutφ" do pam∞ti (tj. jen po dobu jednoho pam∞¥ovΘho cyklu), nebo i po delÜφ dobu (po vφce pam∞¥ov²ch cykl∙), mß-li co p°enßÜet. Okam₧ik, kdy vracφ sb∞rnice zp∞t procesoru, signalizuje ukonΦenφm svΘ ₧ßdosti (signßlem HOLD) - pokud si tedy DMA °adiΦ chce ponechat sb∞rnice dΘle, staΦφ kdy₧ udr₧uje signßl HOLD v takovΘm stavu, kter² signalizuje ₧ßdost o sb∞rnice.

Existujφ ovÜem i dv∞ dalÜφ varianty, p°i kter²ch se DMA °adiΦ ji₧ zdaleka nechovß tak "sluÜn∞", jako v p°edchozφm p°φpad∞.

Jedna varianta je zalo₧ena na tom, ₧e procesor nemusφ vyt∞₧ovat pam∞¥ trvale - tedy ₧e jednotlivΘ p°φstupy procesoru do pam∞ti nemusφ navazovat t∞sn∞ na sebe, ale m∙₧e mezi nimi b²t urΦit² Φasov² odstup. Pokud je tento Φasov² odstup dostateΦn∞ velk², m∙₧e jej chytr² DMA °adiΦ vyu₧φt pro sv∙j vlastnφ p°φstup do pam∞ti. Tato technika, oznaΦovanß jako transparentnφ DMA, vÜak p°ipadala v ·vahu jen u n∞kter²ch 8-bitov²ch mikroprocesor∙, zatφmco u dneÜnφch 16 a 32-bitov²ch mikroprocesor∙ ji nelze pou₧φt. D∙vod je ten, ₧e tyto mikroprocesory pracujφ s pam∞tφ velmi intenzivn∞, sna₧φ se z nφ Φφst "dop°edu" do sv²ch cache pam∞tφ, a mezi jednotliv²mi p°φstupy do pam∞ti proto neponechßvajφ prakticky ₧ßdn² Φasov² odstup.

DalÜφ varianta je pak zalo₧ena na myÜlence, ₧e kdy₧ procesor neponechßvß mezi jednotliv²mi p°φstupy k pam∞ti dostateΦn∞ dlouhou dobu, kterou by DMA °adiΦ mohl vyu₧φt, tento si ji "nßsiln∞" prodlou₧φ. Jak?

DMA °adiΦ v tomto p°φpad∞ musφ um∞t sprßvn∞ rozpoznat zaΦßtek a konec ka₧dΘho pam∞¥ovΘho cyklu, vyu₧φvanΘho procesorem. Chce-li sßm pracovat s pam∞tφ, musφ poΦkat na konec prßv∞ probφhajφcφho pam∞¥ovΘho cyklu, a pak, ve sprßvn² okam₧ik, p°inutit procesor, aby nezahajoval dalÜφ pam∞¥ov² cyklus, a naopak sßm zaΦφt pracovat s pam∞tφ. Teprve po jejφm skonΦenφ pak DMA °adiΦ zase nechß procesor, aby v prßci s pam∞tφ pokraΦoval. DomyÜleno do d∙sledku, DMA °adiΦ vlastn∞ ukradne procesoru jeden nebo n∞kolik pam∞¥ov²ch cykl∙, a vyu₧ije je sßm k vlastnφmu prosp∞chu. Proto se takΘ tΘto technice °φkß kradenφ cykl∙ (cycle stealing).

Zajφmav² je konkrΘtnφ mechanismus, kter²m DMA °adiΦ "krade" pam∞¥ovΘ cykly. Procesor tΘto mo₧nosti v∞tÜinou nijak nevychßzφ vst°φc. Mφsto toho musφ DMA °adiΦ vystihnout vhodn² okam₧ik (konec probφhajφcφho pam∞¥ovΘho cyklu) a pak procesor nßhle a bez jeho v∞domφ "uspat" - tak aby nezahajoval dalÜφ pam∞¥ov² cyklus. Toho lze dosßhnout pom∞rn∞ jednoduÜe: procesor se p°i svΘ Φinnosti °φdφ periodicky se m∞nφcφm signßlem (tzv. hodinov²m signßlem), od jeho₧ pr∙b∞hu pak odvozuje Φasov² pr∙b∞h veÜker²ch sv²ch akcφ. Jestli₧e se tento hodinov² signßl nßhle p°estane m∞nit, pro procesor se doslova "zastavφ Φas", a procesor "usne". To mimo jinΘ znamenß, ₧e vÜechny signßly, generovanΘ procesorem, z∙stanou v takovΘm stavu, v jakΘm byly v okam₧iku zastavenφ hodin, a dßle se nem∞nφ.

Pokud tedy DMA °adiΦ dokß₧e vystihnout sprßvn² okam₧ik a procesoru zastavit jeho m∞°φtko Φasu, vlastn∞ tφm procesor odstavφ od sb∞rnic a pam∞ti, a ty pak m∙₧e vyu₧φt sßm.

DMA °adiΦ by ale nem∞l ponechßvat procesor "uspan²" p°φliÜ dlouho. Je zde toti₧ jedno velkΘ nebezpeΦφ: vnit°nφ registry v∞tÜiny dneÜnφch procesor∙ jsou konstruovßny jako dynamickΘ, co₧ znamenß, ₧e pot°ebujφ pravidelnΘ osv∞₧ovßnφ. Za normßlnφch okolnostφ je tato skuteΦnost pln∞ transparentnφ, proto₧e osv∞₧ovßnφ si zajiÜ¥uje procesor sßm. p°itom vÜak vychßzφ z pr∙b∞hu hodinovΘho signßlu, tak₧e kdyby jej DMA °adiΦ zastavil na p°φliÜ dlouhou dobu, obsah dynamick²ch registr∙ procesoru by nebyl vΦas osv∞₧en, a ztratil by se.


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