home *** CD-ROM | disk | FTP | other *** search
/ PC-X 1997 March / pcx08_9703.iso / melyviz / pcx-user / rprog / figyelem.!!! < prev    next >
Encoding:
Text File  |  1996-12-30  |  10.0 KB  |  162 lines

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