home *** CD-ROM | disk | FTP | other *** search
-
- FIGYELEM kisebb pontosítás következik:
-
- Elôzô számunkban 'nyomdahiba' miatt egy kis pontatlanság volt, ezt szeretnénk
- korrigálni. A pontatlanság nem okoz hibát csak zavaró, félreérthetô.
-
- A megszakítás-vektor táblázat elemei NEM 16-bitesek, hiszen távoli memória-
- címre mutatnak és ezt két Word-del tároljuk el ami pont 32-bitet tesz.
- (A szegmens és az offszet külön-külön 16 bites - mint a Word -.)
- Pascal-osan így lehetne leírni a megszakítás-vektor táblázatot:
- Array[0..255] of Pointer; (A Pointer két Word-bôl áll szegmens és offszet)
- A másik kérdéses dolog a szoftver-megszakítások környékén adódik mivel a szak-
- irodalom ellentmondásos megjegyezném, hogy tapasztalataim szerint NEM csak a
- hardver- hanem a szoftver-megszakítások is LEMENTIK a flag-ot.
- (Tehát a szoftver-megszakítás kiváltásakor a processzor a CS:IP regiszterpárt
- és a flag-eket is el menti a verembe.)
-
- Ime az elôzô szám RENDSZERPROGRAMOZÅS cikke kisebb korrigálásokkal:
-
-
-
- RENDSZERPROGRAMOZÅS
-
- A DOS ÉS SZOLGALTATÅSAI - II.
-
- KAPUK A DOS-HOZ : A MEGSZAKITÅSOK
-
- A megszakításokról általában
-
- Megszakításnak nevezünk - a számítógép részérôl kezdeményezett - minden olyan
- "akciót", amely az éppen feldolgozás alatt álló folyamatot - külsôleg v.
- belsôleg - megszakítva, (annak állapotát esetlegesen a folytatáshoz szükséges
- állapotban megôrizve) egy másik folyamatnak - az ún. megszakítási rutinnak -
- adja át a vezérlést. A megszakítási rutin ezután dönthet újabb akció(k) végre-
- hajtásáról és/vagy a vezérlés visszaadásáról a megszakított folyamatnak. Kiváltó
- mechanizmus alapján megkülönböztetünk hardver - ill. szoftver-megszakításokat.
- Elôbbieket mindig valamilyen - a számítógéphez csatlakoztatott - külsô (tehát
- nem a végrehajtó egységen belüli) egység váltja ki (pl. bôvítôkártya, DMA vezérlô)
- jelezvén valamilyen tevékenység befejezését (pl. adat küldése) vagy megkezdésének
- szükségességét (pl. adat fogadása). Ezzel szemben a szoftver-megszakításokat -
- egy speciális utasítás segítségével - maga az éppen aktív folyamat váltja, kvázi
- egy másik folyamatnak (a megszakítási rutinnak) átadva a vezérlést. Ennek
- gyakorlati jelentôségét a késôbbiekben látjuk meg. A fejlettebb architektúrákban
- azonban a megszakítások prioritási hierarchiában vannak elrendezve. Ez azt
- jelenti, hogy a megszakítások között valamilyen "fontossági sorrendet" állapí-
- tanak meg, idôkritikusság (pl. valós idejû alkalmazások) ill. a rendszer mûködô-
- képességének fenntartását befolyásoló jellemzôik (pl. hibakezelô megszakítások)
- alapján. Igy az azonos idôben beérkezett megszakítási kérelmek közül mindig
- egyértelmûen meghatározható, hogy melyik kerüljön elôbb végrehajtásra. E mellett
- általában a nagyobb prioritású megszakítás-kérelmek megszakíthatják az alacsonyabb
- prioritású megszakítások kiszolgálását, míg ez fordítva nem lehetséges. Åltalában
- az ilyen rendszerekben megkülönböztetnek maszkolható (maskable) ill. nem
- maszkolható (NMI - Non-Maskable Interrupt) megszakításokat ; utóbbi megszakítás-
- típusok kiszolgálását nem lehet letiltani. Ezen megszakítások általában
- valamilyen, a rendszer mûködôképességét biztosan veszélyeztetô hibát jeleznek
- (pl. memória-paritás hiba).
-
-
- A PC-k megszakítási rendszere
-
- A PC-k megszakítási rendszere is két különbözô - de szorosan összefüggô - részre
- osztható - a fenti besorolásnak megfelelôen. Az eredeti IBM PC-ben a hardver
- megszakítások kezelését egy i8259A jelû megszakítás-vezérlô végezte. Ez az egység
- 8 szintû hardver-megszakítási rendszert biztosított. Az AT kategóriájú gépekbe
- azonban már két darab i8259A vagy kompatibilis áramkört építenek be, a hardver
- megszakítások számát ezáltal 16-ra növelve. (Az az igazság, hogy ezzel azért egy
- kicsit trükköztek a tervezôk a kompatibilitás megtartása érdekében. Ugyanis azt
- tették, hogy a második 8 db megszakítást kaszkádosították az elsô megszakítás-
- vezérlô 2. megszakítására. Ez azt jelenti, hogy az említett megszakítások befu-
- tásakor mindig az elsô vezérlô 2. megszakításnak megfelelô megszakítási rutin
- kapja meg a vezérlést, és csak a második megszakítás-vezérlô megvizsgálásával
- döntheti el, hogy egyáltalán 8.-15. megszakítás következett -e be (nem pedig
- 2-es), és ha igen, akkor melyik. Ezért adódnak gondok a PC-kben a 7 feletti
- hardver-megszakítások használatával.) A bôvítô egységek a buszra kivezetett
- nyolc ill. tizenhat darab megszakítás-vonal egyike logikai szintjének megvál-
- toztatásával tudják megszakításkérelmeiket jelezni. A megszakítás száma egyben
- - a többi megszakításhoz képesti - prioritást is jelent ; így a 0. számú a
- legnagyobb, míg a 15. a legkisebb prioritású hardver-megszakítás. A hardver
- megszakításokhoz a megszakítás-vezérlô különbözô szoftver-megszakításokat rendel,
- így a hardver-megszakítás bekövetkeztekor - ha a megszakítás a kiszolgálási fel-
- tételeknek megfelel - az meghatározott megszakítási rutin kapja meg a vezérlést.
-
- A PC-k 256 szintû szoftver-megszakítási rendszerrel rendelkeznek. Ez azt jelenti,
- hogy 256 különbözô, egymástól független megszakítási rutin használatát teszik
- lehetôvé. A megszakítások számozása nulla-bázisú, tehát az elsô megszakítás a
- 0., míg az utolsó a 255. számú. A szoftver megszakítások nem alkotnak prioritási
- hierarchiát, így egy megszakítási rutinból szabadon aktiválhatók más megszakítási
- rutinok is. Azt, hogy adott számú megszakítás aktiválásakor melyik folyamat kapja
- meg a vezérlést az ún. megszakítás-vektor táblázat határozza meg, melynek
- elhelyezkedését az alábbi ábra mutatja. A táblázat elemi az ún. megszakítás-
- vektorok, melyek - mint nevük is mutatja - arra a 32 bites memória-címre mutatnak,
- ahol az adott megszakítási rutin belépési pontja helyezkedik el.
-
- A hardver-megszakítások kiszolgálásakor a processzor a flageket és az éppen vég-
- rehajtandó utasítás címét (CS:IP) az éppen aktuális verembe menti el, letiltja a
- megszakításokat, majd a vezérlést a hozzárendelt szoftver-megszakítási rutinnak
- adja át a CS:IP regiszterpár, a megszakítás-vektor táblázat adott elemében tárolt
- értékekkel való feltöltésével. A megszakítási rutin a vezérlést a megszakított
- folyamatnak egy speciális utasítás az IRET (Interrupt RETurn - visszatérés a
- megszakításból) segítségével adja vissza, ami visszatölti - a verembôl - az
- elmentett regiszter-értékeket (köztük a CS:IP-t is!, ezáltal visszaadva a
- vezérlést a megszakított folyamatnak) és engedélyezi a megszakításokat. A
- megszakítás-kiszolgálás során a megszakítás-kezelô rutinnak kell gondoskodnia a
- megôrizni kívánt regiszterek értékének mentésérôl, majd visszatöltésérôl. Ez a
- mechanizmus biztosítja, hogy bármikor is következik be egy megszakítás (ha csak
- nem következik be verem-túlcsordulás - de ez igen valószínûtlen, mert az elmen-
- tett regiszterek mérete nem haladja meg a 6 bájtot - ) a megszakított folyamat
- számára észrevétlenül és zavartalanul zajlódjon le kiszolgálása.
-
- A szoftver-megszakítások kiszolgálása ennél jóval egyszerûbb, hiszen itt az
- éppen aktív folyamat tudatosan, elôre meghatározott idôben kvázi meghívja a
- megszakítási rutint, így fel van készülve a megszakítási rutin által esetlegesen
- a processzor belsô regisztereiben történô változtatásokra és megteheti a szük-
- séget "óvintézkedéseket". A szoftver-megszakítás kiváltásakor a processzor ezért
- a CS:IP regiszterpárt és a flag-eket (az éppen végrehajtandó utasítás címét)
- menti el a verembe. Ebben az esetben is a megszakítási rutinnak magának kell
- gondoskodnia az módosított, de esetlegesen megôrizni kívánt regiszterek értékének
- megôrzésérôl és visszaállításáról. Ez (ti. hogy nem feltétlenül áll vissza minden
- regiszter értéke a híváskorira) lehetôséget nyújt a megszakítási rutinnak a
- megszakítást kérô folyamat felé esetlegesen hibakód, vagy más eredmény közlésére
- a regisztereken keresztül. A szoftver-megszakítási rutin a RETF (Far RETurn -
- távoli (32-bites) visszatérés) utasítás végrehajtásával tudja a vezérlést
- visszaadni a hívó folyamatnak, amelyik a CS:IP regiszterpárt a verem tetejérôl
- leemelt értékkel tölti fel.
-
- Mint látható a hardver- ill. szoftver-megszakítások kiszolgálása mind a
- processzor, mind a megszakítási rutin részérôl más lépések megtételét követeli
- meg, ezért a különbözô célú megszakításrutinok hívásai (programból) nem egyeznek
- meg egymással (igaz, általában nincs is szükség keverésükre ; pl. miért hívna
- meg az ember egy hardver megszakítást?).
-
- Az hardver-megszakításokat IRQ0-IRQ15-el (Interrupt ReQuest - megszakítási
- kérelem), míg a szoftvereket INT 0 - INT FFh-val (INTerrupt - megszakítás)
- jelölik az egyértelmûség kedvéért.
-
- A teljesség kedvéért megemlítem, hogy a fentieken kívül ég egy megszakítás
- létezik a PC-kben: az NMI (ami itt nevének ellenére - igaz, kicsit más módon, mint a többi, de - letiltható) megszakítás RAM paritás-hiba észlelésekor
- generálódik, de különösebb jelentôsége nincs.)
-
-
- Az IBM PC-k memóriatérképe
-
- Kezdôcím│ │ Végcím│ Felhasználás
- (dec) │(hex)│ (hex) │
- ────────┼─────┼───────┼────────────────────────────────────────────────────────────────────────────────
- 0k │0000h│ 03FFh │ 256 elemû megszakítási tábla helye (minden elem szegmens:offszet 32-bites cím)
- 1k │0400h│ 04FFh │ ROM-BIOS adatterület
- 1.25k │0500h│ 9FFFh │ konvencionális memória (természetesen lehet ennél kevesebb is)
- 640k │A000h│ BFFFh │ video-memória helye grafikus módban
- │pl. │ AFA0h │ 320x200x256
- 704k │B000h│ B3FFh │ 4KB-os mono (Hercules) szöveges képernyô 0. lap
- 736K │B800h│ BFFFh │ videó memória szöveges módban (CGA,EGA,VGA)
- 768K │C000h│ EFFFh │ bovítô ROM-ok ill. RAM-mapped egységek (pl. Weitek FPU) számára fenntartott hely
- │ │ │ (általában C000h-C7FFh ill. C000h-CFFFh területen helyezkedik el a video-BIOS)
- 960K │F000h│ FFFFh │ ROM-BIOS
-
- * A memóriatérkép korántsem teljes (sôt!), mindössze arra törekedtünk, hogy az
- Olvasónak legalább elképzelése legyen a PC-k memória-kiosztásáról
-
-
- - STING -
- eMail: STING@CRNL-GIMN.CRNL.HU