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

Trap

Mechanismus p°eruÜenφ, kter²m jsme se zaΦali zab²vat v minulΘm p°φsp∞vku tΘto rubriky, je velmi obecn²m mechanismem, kter² je vyu₧φvßn k mnoha r∙zn²m ·Φel∙m.

Reakce na vn∞jÜφ podn∞ty (hlavn∞ na v²znaΦnΘ stavy vstupn∞-v²stupnφch za°φzenφ, stavy ΦφtaΦ∙, zßsahy u₧ivatele, poruchy hardwaru apod. - viz minule) jsou jen n∞kolika p°φklady, kterΘ majφ jednoho spoleΦnΘho jmenovatele: vznik p°φΦiny takovΘho p°eruÜenφ bezprost°edn∞ nesouvisφ s prßv∞ provßd∞n²m programem a je v∙Φi n∞mu asynchronnφ (v tom smyslu, ₧e prßv∞ probφhajφcφ program nemß p°φm² vliv na to, kdy k ₧ßdosti o p°eruÜenφ dojde). NejΦast∞ji mß p°φΦina takovΘhoto p°eruÜenφ sv∙j p∙vod vn∞ poΦφtaΦe, Φi alespo≥ vn∞ jeho procesoru, a proto se p°eruÜenφ tohoto typu oznaΦujφ takΘ jako vn∞jÜφ. UrΦitß p°φΦinnß souvislost mezi programem a vn∞jÜφm p°eruÜenφm vÜak samoz°ejm∞ m∙₧e existovat: nap°φklad kdy₧ si urΦit² program (proces, ·loha) spustφ n∞jakou vstupn∞-v²stupnφ operaci, po urΦitΘ dob∞ vyvolß tato operace p°eruÜenφ (a¥ ji₧ z d∙vodu signalizace svΘho °ßdnΘho ukonΦenφ, nebo pro indikaci poruchy atd.). Vznik ₧ßdosti o p°eruÜenφ ji₧ nenφ ovlivn∞n tφm, co procesor v danΘm okam₧iku d∞lß - zda jeÜt∞ provßdφ te nt²₧ program, kter² vstupn∞-v²stupnφ operaci spustil, nebo zda mezitφm p°eÜel na provßd∞nφ jinΘho programu.

DalÜφ ·Φel, ke kterΘmu se mechanismus p°eruÜenφ pou₧φvß, je oÜet°enφ r∙zn²ch nestandardnφch situacφ p°i provßd∞nφ jednotliv²ch strojov²ch instrukcφ. Tedy situacφ, kterΘ ji₧ majφ p°φmou a bezprost°ednφ souvislost s prßv∞ probφhajφcφm programem. Jednu mo₧nost jsme si ji₧ naznaΦili p°i popisu mechanism∙ segmentace a strßnkovßnφ: v okam₧iku, kdy n∞jakß strojovß instrukce chce Φφst Φi zapisovat do strßnky (resp. segmentu), kterß se nenachßzφ v operaΦnφ pam∞ti, dochßzφ k tzv. v²padku strßnky (resp. v²padku segmentu). V provßd∞nφ danΘ instrukce vÜak nenφ mo₧nΘ pokraΦovat, dokud nenφ p°φsluÜnß strßnka (segment) p°enesena do pam∞ti. Mφsto toho je t°eba spustit jin² podprogram, kter² naΦtenφ strßnky (segmentu) zajistφ a pak zase vrßtφ °φzenφ takov²m zp∙sobem, aby se mohla dokonΦit rozpracovanß, ale nedokonΦenß strojovß instrukce, kterß v²padek zp∙sobila. A to je jak ÜitΘ na mφru mechanismu p°eruÜenφ.

V²padek strßnky Φi segmentu je tedy oÜet°ovßn pomocφ p°eruÜenφ a toto p°eruÜenφ je p°φkladem tzv. vnit°nφho p°eruÜenφ, kterΘ bezprost°edn∞ souvisφ s prßv∞ provßd∞n²m programem a je jφm p°φmo zp∙sobeno. DalÜφmi p°φklady mohou b²t p°eruÜenφ vyvolanß neznßm²m operaΦnφm znakem (tj. pokusem o provedenφ neexistujφcφ strojovΘ instrukce), chybou v adresovßnφ (p°ekroΦenφm dΘlky segmentu, pou₧itφm nep°φpustnΘ kombinace adresovacφch registr∙ apod.), poruÜenφm ochrann²ch mechanism∙ (pokusem o provedenφ privilegovanΘ instrukce v neprivilegovanΘm stavu, pokusem o p°φstup do segmentu, ke kterΘmu nemß prßv∞ probφhajφcφ ·loha p°φstupovß prßva) apod. Dßle sem pat°φ takΘ r∙znß p°eteΦenφ a podteΦenφ (tedy stavy, kdy v²sledek operace nelze umφstit do takovΘho poΦtu bit∙, kter² je k tomu urΦen). V angliΦtin∞ se takovßto vnit°nφ p°eruÜenφ, zp∙sobenß prßv∞ probφhajφcφm programem, oznaΦujφ takΘ jako trap (doslova: past, lΘΦka).

Vnit°nφ a vn∞jÜφ p°eruÜenφ se ovÜem liÜφ i v jin²ch aspektech, ne₧ jen v tom, kde se nachßzφ p°φΦina p°eruÜenφ (zda "uvnit°" procesoru, nebo "vn∞"). V²znamn²m rozdφlem je nap°φklad to, zda mß smysl za urΦit²ch okolnostφ ignorovat ₧ßdost o p°eruÜenφ a akceptovat ji a₧ pozd∞ji, nebo zda takovßto mo₧nost nep°ipadß v∙bec v ·vahu. D∙vody pro doΦasnΘ ignorovßnφ ₧ßdostφ o p°eruÜenφ mohou b²t r∙znΘ - nap°φklad prßv∞ probφhajφcφ program m∙₧e v danΘm okam₧iku provßd∞t takovΘ akce, kterΘ by neumo₧nily korektn∞ provΘst obsluhu p°ijatΘho p°eruÜenφ. Jin²m pßdn²m d∙vodem m∙₧e b²t Φasov² skluz, kter² by nastal p°eruÜenφm prßv∞ probφhajφcφho programu a obsluhou p°eruÜenφ. A co v p°φpad∞, kdy b∞hem obsluhy jednΘ ₧ßdosti o p°eruÜenφ p°ijde dalÜφ ₧ßdost o p°eruÜenφ? Mß b²t pozdr₧ena a₧ do doby, kdy skonΦφ prßv∞ probφhajφcφ obsluha, nebo m∙₧e b²t obslu₧n² program sßm p°eruÜen, a jednotlivß p°eruÜenφ tedy dynamicky vno°ovßna do sebe?

V p°φpad∞ vn∞jÜφch p°eruÜenφ mß smysl, aby existovala mo₧nost doΦasn∞ zabrßnit uplatn∞nφ ₧ßdostφ o p°eruÜenφ - tedy tzv. maskovßnφ ₧ßdostφ o p°eruÜenφ. V principu je mo₧nΘ maskovat vÜechny ₧ßdosti bez rozdφlu nebo jednotlivΘ ₧ßdosti individußln∞. OdliÜn² m∙₧e b²t takΘ ·Φinek maskovßnφ - zamaskovanß ₧ßdost m∙₧e b²t jednoduÜe ignorovßna, a je pak na ₧adateli, aby svou ₧ßdost uplat≥oval tak dlouho, dokud nebude tzv. odmaskovßna a skuteΦn∞ p°ijata. Alternativou je takov² zp∙sob maskovßnφ, p°i kterΘm jsou momentßln∞ zamaskovanΘ ₧ßdosti zaznamenßvßny a automaticky uplat≥ovßny (nynφ ji₧ bez p°φmΘ ·Φasti p∙vodnφho ₧adatele) v okam₧iku, kdy dojde k jejich odmaskovßnφ.

V p°φpad∞ vnit°nφch p°eruÜenφ vÜak maskovßnφ nemß smysl. Co kdyby nap°φklad prßv∞ probφhajφcφ ·loha zp∙sobila v²padek strßnky a p°φsluÜnΘ p°eruÜenφ bylo zamaskovßno? Jak by se m∞l zachovat procesor v p°φpad∞, kdy narazφ na neznßmou strojovou instrukci, ale p°φsluÜnΘ p°eruÜenφ by bylo zamaskovßno? TakovΘto otßzky bychom si mohli klßst dlouho, ale jsou vlastn∞ bezp°edm∞tnΘ, nebo¥ vnit°nφ p°eruÜenφ obvykle nenφ mo₧nΘ maskovat.

DalÜφm rozdφlem mezi vn∞jÜφm a vnit°nφm p°eruÜenφm je i p°esn² Φasov² okam₧ik, kdy dochßzφ k jejich p°ijetφ, a tφm i ke spuÜt∞nφ p°φsluÜnΘho obslu₧nΘho programu. Zde je dobrΘ si uv∞domit, a to hlavn∞ u vn∞jÜφch p°eruÜenφ, ₧e obslu₧n² program nemusφ nijak souviset s tφm programem, kter² prßv∞ probφhß v okam₧iku uplatn∞nφ ₧ßdosti, a kter² je tudφ₧ p°eruÜen. Z pohledu tohoto programu musφ b²t veÜkerß obsluha p°eruÜenφ pln∞ transparentnφ - program by nem∞l v∙bec poznat, ₧e byl p°eruÜen. To ovÜem znamenß, ₧e obslu₧n² program p°eruÜenφ musφ bezprost°edn∞ p°ed sv²m skonΦenφm uvΘst procesor p°esn∞ do takovΘho stavu, v jakΘm jej nalezl p°i svΘm spuÜt∞nφ, resp. v jakΘm jej zanechal p°eruÜen² program. To se t²kß p°edevÜφm obsahu t∞ch registr∙ a nastavenφ jednotliv²ch p°φznak∙, kterΘ obslu₧n² program sßm m∞nφ, a kterΘ tudφ₧ musφ sßm vhodn∞ uschovat a p°ed sv²m ukonΦenφm zase obnovit. K tomu je ovÜem nezbytn∞ nutnΘ, aby obsah t∞chto registr∙ a p°φznak∙ byl v okam₧iku p°ijetφ p°eruÜenφ jednoznaΦn∞ definovßn. Z to hoto d∙vodu jsou vÜechny ₧ßdosti o vn∞jÜφ p°eruÜenφ p°ijφmßny zßsadn∞ jen mezi dv∞ma strojov²mi instrukcemi - p°esn∞ji ihned po dokonΦenφ jednΘ strojovΘ instrukce, d°φve ne₧ je zahßjeno provßd∞nφ instrukce nßsledujφcφ.

V p°φpad∞ n∞kter²ch vnit°nφch p°eruÜenφ vÜak takovßto strategie nenφ dost dob°e mo₧nß - jestli₧e n∞jakß instrukce zp∙sobφ v²padek strßnky, nenφ mo₧nΘ ji nejprve dokonΦit a teprve pak v²padek strßnky oÜet°it. Procesor naopak musφ co mo₧nß nejrychleji rozpoznat situaci, kterß vy₧aduje p°eruÜenφ, prßv∞ provßd∞nou instrukci p°eruÜit "uprost°ed" a po dokonΦenφ obsluhy ji provΘst celou znovu. K tomu je ovÜem nutnΘ jeÜt∞ to, aby k p°eruÜenφ doÜlo d°φve, ne₧ instrukce staΦφ ud∞lat takovou akci, kterou ji₧ nelze opakovat, p°φpadn∞ vrßtit zpßtky.

Pro jinΘ druhy vnit°nφho p°eruÜenφ vÜak tato ·vaha nemusφ platit. Nap°φklad kdy₧ strojovß instrukce zp∙sobφ p°eteΦenφ (p°i uklßdßnφ v²sledku) a na tuto skuteΦnost mß b²t reagovßno p°eruÜenφm. V takovΘm p°φpad∞ je mo₧nΘ ulo₧it v²sledek vhodn∞ zaokrouhlen² (Φi "o°ezan²") a s p°eruÜenφm poΦkat a₧ na dokonΦenφ instrukce. Samostatnou kapitolou jsou z tohoto pohledu takovΘ instrukce, kterΘ p°φΦinu k vnit°nφmu p°eruÜenφ zavdßvajφ nikoli "necht∞n∞", jak jsme a₧ doposud uva₧ovali, ale naopak zcela zßm∞rn∞. Ale o tom a₧ p°φÜt∞.


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