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

Memory Mapped vs. Isolated I/O

Zamysleli jste se n∞kdy nad tφm, jak je mo₧nΘ, ₧e dneÜnφ poΦφtaΦe dokß₧φ pracovat s tak r∙znorod²mi druhy perifernφch za°φzenφ (od tiskßren, myÜφ, plotter∙ a₧ po Φidla v atomov²ch reaktorech Φi regulaΦnφ ventily ·st°ednφho topenφ), kdy₧ ₧ivotnφ obzor t∞chto poΦφtaΦ∙ je omezen jen na bity, byty Φi slova a veÜker² styk program∙ s jejich okolφm mß povahu Φtenφ jednotliv²ch bit∙ a jejich nastavovßnφ na jedniΦky a nuly?

D∙sledkem je skuteΦnost, ₧e jakΘkoli perifernφ za°φzenφ se v∙Φi procesoru a na n∞m probφhajφcφmu programu musφ "tvß°it" jako sada vstupn∞-v²stupnφch registr∙ (tΘ₧: vstupn∞-v²stupnφch bran, V/V port∙, viz minule), ze kter²ch lze n∞co Φφst a do kter²ch lze zapisovat. Program, kter² chce s p°φsluÜn²m perifernφm za°φzenφm pracovat, pak musφ p°esn∞ v∞d∞t, kterΘ vstupn∞/v²stupnφ registry to jsou, jak² je p°esn² v²znam toho, co si z nich m∙₧e p°eΦφst, a jak² je p°esn² efekt toho, kdy₧ do n∞kterΘho z nich n∞co zapφÜe. Nap°φklad kdy₧ chce program vytisknout znak na tiskßrn∞, musφ jej nejprve zapsat do urΦitΘho konkrΘtnφho vstupn∞ v²stupnφho registru, pak zm∞nit hodnotu jednoho konkrΘtnφho bitu v jinΘm vstupn∞-v²stupnφm registru a za urΦit² Φasov² interval tento bit zase vrßtit zp∞t do jeho p∙vodnφho stavu. Z hlediska programu pak ji₧ nenφ p°φliÜ podstatnΘ, jak jsou jednotlivΘ vstupn∞-v²stupnφ registry napojeny na "vn∞jÜφ sv∞t" - nap°φklad jak²m konkrΘtnφm zp∙sobem je zajiÜ¥ovßn p°evod n∞jakΘ sledovanΘ analog ovΘ veliΦiny do digitßlnφho tvaru a jak je Φφseln∞ vyjßd°ena. Mφsto toho je pro dan² program d∙le₧itΘ, kde si tuto hodnotu m∙₧e p°eΦφst, v jakΘm tvaru, jak Φasto je aktualizovßna atd.

Co je ovÜem pro obslu₧nΘ programy velmi podstatnΘ, je zp∙sob, jak se ke zmφn∞n²m vstupn∞-v²stupnφm registr∙m (V/V brßnßm) v∙bec dostat. V principu toti₧ existujφ dva odliÜnΘ p°φstupy k °eÜenφ tΘto otßzky.

Prvnφ spoΦφvß v tom, ₧e vstupn∞-v²stupnφ registry se budou "chovat" naprosto stejn∞ jako pam∞¥ovß mφsta operaΦnφ pam∞ti. Budou tedy mφt p°id∞leny adresy stejnΘho typu jako skuteΦnß pam∞¥, a v d∙sledku toho bude mo₧nΘ pracovat s t∞mito registry prost°ednictvφm stejn²ch instrukcφ, kterΘ jsou urΦeny pro prßci s pam∞tφ. Tato mo₧nost ve svΘ podstat∞ znamenß, ₧e existuje jen jedin² adresov² prostor (adresov² prostor pam∞ti) a jednotlivΘ vstupn∞-v²stupnφ registry jsou do tohoto adresovΘho prostoru logicky zaΦlen∞ny - tzv. zamapovßny. Odsud takΘ pojmenovßnφ tΘto mo₧nosti: memory mapped I/O. V anglicky psanΘ odbornΘ literatu°e je vÜak mo₧nΘ se setkat i s pon∞kud zavßd∞jφcφm oznaΦenφm memory mapping, kterΘ se pak doslovn∞ p°eklßdß jako mapovßnφ pam∞ti. Zavßd∞jφcφ je oznaΦenφ proto, ₧e naznaΦuje urΦitou zm∞nu ve zp∙sobu p°φstupu k pam∞ti jako takovΘ, zatφmco ve skuteΦnosti jde jen o chovßnφ zmφn∞n²ch vstupn∞-v²stupnφch registr∙. V∞cn∞ sprßvn∞jÜφ je mluvit spφÜe o zamapovßnφ do pam∞ti.

Alternativnφ mo₧nost k zamapovßnφ vstupn∞-v²stupnφch registr∙ do pam∞ti je takovΘ °eÜenφ, p°i kterΘm V/V registry majφ p°id∞leny adresy jinΘho typu ne₧ pam∞¥ovß mφsta skuteΦnΘ pam∞ti (tzv. V/V adresy, n∞kdy nep°φliÜ sprßvn∞ porty, viz minule). Prostor t∞chto V/V adres je pak disjunktivnφ s prostorem adres pam∞¥ov²ch, a snad proto se tento p°φpad oznaΦuje jako isolated I/O (doslova: izolovan² vstup/v²stup). Odd∞lenφ obou adresov²ch prostor∙ znamenß, ₧e u ka₧dΘ adresy musφ b²t v₧dy jednoznaΦn∞ urΦeno, do kterΘho adresovΘho prostoru pat°φ. V praxi se tato otßzka °eÜφ tak, ₧e pro p°φstup do jednotliv²ch adresov²ch prostor∙ existujφ r∙znΘ strojovΘ instrukce. Vedle instrukcφ pro prßci s pam∞tφ (kterΘ pou₧φvajφ pam∞¥ovΘ adresy) pak existujφ i specißlnφ instrukce pro p°φstup ke vstupn∞-v²stupnφm registr∙m, kterΘ zase pou₧φvajφ v²hradn∞ V/V adresy. Repertoßr t∞chto vstupn∞-v²stupnφch instrukcφ vÜak b²vß mnohem chudÜφ ne₧ repertoßr pam∞¥ov²ch instrukcφ. Nez°φdka jde jen o dv∞ instrukce, pojmenovanΘ p°φznaΦn∞ IN a OUT.

JakΘ jsou vÜak v²hody obou mo₧nostφ, a v Φem jsou naopak jejich nev²hody? U zamapovßnφ do pam∞ti je v²hodou mo₧nost pou₧φvat i pro vstupn∞-v²stupnφ operace relativn∞ bohat² repertoßr instrukcφ pro prßci s pam∞tφ. Nev²hodou je pak to, ₧e vstupn∞-v²stupnφ registry obsazujφ urΦitou Φßst adresovΘho prostoru pam∞ti, kterß pak nem∙₧e b²t vyu₧ita pro skuteΦnou pam∞¥. Naopak u izolovanΘho vstupu/v²stupu je mo₧nΘ vyu₧φt pro skuteΦnou pam∞¥ cel² adresov² prostor pam∞ti, ovÜem za cenu toho, ₧e pro zajiÜ¥ovßnφ vstupn∞-v²stupnφch operacφ bude k dispozici jen velmi omezen² v²b∞r strojov²ch instrukcφ.

ZajφmavΘ je zamyslet se i nad technick²m °eÜenφm obou uveden²ch mo₧nostφ. Adresa, kterou procesor vysφlß po adresovΘ sb∞rnici, m∙₧e mφt pou₧φvßnφ izolovanΘho vstupu/v²stupu dvojφ mo₧n² v²znam - m∙₧e jφt o pam∞¥ovou adresu nebo o V/V adresu. Procesor proto musφ n∞jak²m zp∙sobem signalizovat svΘmu okolφ i to, kter² z t∞chto dvou p°φpad∙ nastal. Mo₧nostφ je vφce: m∙₧e jφt nap°φklad o samostatn² signßl, kter² rozliÜuje pam∞¥ovou a V/V adresu, nebo to m∙₧e b²t vzßjemnß kombinace vφce signßl∙, kterΘ spoleΦn∞ rozliÜujφ Φtenφ z pam∞ti, zßpis do pam∞ti, Φtenφ ze vstupnφho registru a zßpis do v²stupnφho registru. V praxi v₧dy zßle₧φ na tom, zda konkrΘtnφ procesor poΦφtß s mo₧nostφ pou₧φvat izolovan² v²stup, a zda je tudφ₧ vybaven strojov²mi instrukcemi pro vstup a v²stup (a takΘ p°φsluÜn²mi signßly, kterΘ urΦujφ druh adresy na adresovΘ sb∞rnici), nebo nikoli.

P°φkladem procesor∙, kterΘ poΦφtajφ s mo₧nostφ izolovanΘho vstupu/v²stupu, jsou vÜechny mikroprocesory firmy Intel. Tato jejich vlastnost vÜak neznamenß, ₧e by u nich zamapovßnφ vstupn∞-v²stupnφch registr∙ do pam∞ti nebylo mo₧nΘ - vychßzφ-li n∞jak² procesor vst°φc izolovanΘmu vstupu/v²stupu tφm, ₧e je vybaven vstupn∞-v²stupnφmi instrukcemi a nezbytn²mi rozliÜujφcφmi signßly, nabφzφ tφm vlastn∞ jen urΦitou mo₧nost, kterß m∙₧e, ale nemusφ b²t vyu₧φvßna. Zamapovßnφ vstupn∞-v²stupnφch registr∙ je tedy mo₧nΘ pou₧φvat nap°. i u mikroprocesor∙ Intel (i kdy₧ se to obvykle ned∞lß).

Jinak je tomu u procesor∙, kterΘ izolovanΘmu vstupu/v²stupu vst°φc nevychßzφ a nejsou za tφmto ·Φelem vybaveny pot°ebn²mi strojov²mi instrukcemi a rozliÜujφcφmi signßly. KonstruktΘry poΦφtaΦ∙ a programßtory pak takovΘto procesory nutφ pou₧φvat zamapovßnφ vstupn∞-v²stupnφch registr∙ do pam∞ti. P°φkladem mohou b²t vÜechny mikroprocesory firmy Motorola.


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