6.13 TRAP kódok és IPE errorok jelentése


A trapek a hibás mûködés leginkább szembetûnô tünetei. A trapek rendszerint igen terjedelmes hibaüzenetekkel járnak, s a felhasználó nem is nagyon tud mást tenni velük, mint feljegyezni ôket, s jelenteni a terméket forgalmazó cégnek. A trapektôl ugyanakkor nem kell félni, mivel azok a komolyabb problémák bekövetkezésétôl (például teljes adatvesztés) óvnak meg bennünket.

Az Intel 386-os processzorától kezdve lehetôség nyílt az úgynevezett védelmi gyûrûk használatára. Ez azt jelenti, hogy ha a processzor egy hibát észlel, akkor a hiba lekezelésére a védelmi gyûrûnek megfelelô hibakezelô rutint hívja meg. Bár a 386-os (és késôbbi) processzor 4 védelmi gyûrûvel rendelkezik, az OS/2 (a legtöbb operációs rendszerhez hasonlóan) csak a 0. és a 3. gyûrût használja. A 0. gyûrûn belül futó alkalmazások korlátlan hardvereléréssel rendelkeznek. A rendszer stabilitása érdekében a 0. gyûrûn belül futó alkalmazások száma korlátozott, többnyire csak a rendszer magját képezô kernel és a közvetlen hardverelérést igénylô driverek kapják meg ezt a privilégiumot. A többi alkalmazás a 3. gyûrûben fut, amit user privilégiumnak is neveznek. Amennyiben ezek az alkalmazások hozzá akarnak férni a hardverhez, akkor azt csak a 0. gyûrûn belül futó kód segítségével tehetik meg. Ez persze lassítja az alkalmazások futási sebességét, viszont jól megírt kernel és driverek esetén növeli a rendszer stabilitását.

Amennyiben a trap a kernel szinten történik, akkor az általában a rendszer teljes megállását is jelenti. A user szintû trapeket általában az alkalmazás maga, vagy az OS/2 kezeli le. Ezeknek a trapeknek a következménye az, hogy az alkalmazás futása megszakad. Kernel szintû trapek esetén a rendszer rögtön megáll, és a képernyôn valami ilyesmi fog megjelenni:

TRAP 000e    ERRCD=0000    ERACC=****     ERLIM=********
EAX=ff050c20 EBX=000000bb  ECX=ffff00c1   EDx=fff379b8
ESI=ffe55a3c EDI=00000000  EBP=00004eb8   FLG=00013282
CS:EIP=0160:fff8dbb8       CSACC=c09b     CSLIM=ffffffff
SS:EIP=0030:00004eb4       SSACC=1097     SSLIM=00003fff
DS=0158      DSACC=c0f3    DSLIM=ffffffff CR0=8001001b
ES=0158      DSACC=c0f3    DSLIM=ffffffff CR2=000000c7
FS=0000      FSACC=****    FSLIM=********
GS=0000      GSACC=****    GSLIM=********

The system detected an internal processing error at location 
##0160:fff66bf0 - 000d:9bf0. 60000, 9084

048600b4 Internal revision
8.125, 94/02/16

The system is stopped.  Record the location number of the error 
and contact your service representative.

User trapek esetén vagy egy pop-up (esetleg VIO) üzenetet, vagy pedig egy bejegyzést kapunk a popuplog.os2 fájlban attól függôen, hogy milyen verziójú OS/2-n van, vagy hogy benne van-e a Config.Sys-ben SUPPRESSPOPUPS kulcsszó. User trap bekövetkezésekor a következô stílusú információ generálódik:

11-21-1999  16:40:12  SYS3175  PID 005b  TID 0001  Slot 0061
F:\OS2\SANE\BIN\SANE2.EXE
c0000005
1e270c28
P1=00000001   P2=00000000  P3=XXXXXXXX    P4=XXXXXXXX  
EAX=001227b0  EBX=00000000 ECX=00000000   EDX=00000002
ESI=00000000  EDI=00000000  
DS=0053       DSACC=d0f3   DSLIM=1fffffff  
ES=0053       ESACC=d0f3   ESLIM=1fffffff  
FS=150b       FSACC=00f3   FSLIM=00000030
GS=0000       GSACC=****   GSLIM=********
CS:EIP=005b:1e270c28       CSACC=d0df     CSLIM=1fffffff
SS:ESP=0053:00122718       SSACC=d0f3     SSLIM=1fffffff
EBP=00122720  FLG=00012293

LIBSANE.DLL 0001:00000c28

Amikor trapinformációt kell elemeznünk, akkor az egyik legfontosabb, hogy maghatározzuk, hogy a user vagy pedig kernel szintû trappel van-e dolgunk. Szerencsére ez könnyen eldönthetô a CS utolsó (hexa) értékének alapján:

GyûrûA CS utolsó digitjének értékeA trap helye
00, 4, 8 vagy CKernel ha EIP nem 7xxxxxxx
00, 4, 8 vagy CVirtuális device ha EIP = 7xxxxxxx
11, 5, 9 vagy DNem használt
22, 6, A vagy ENem használt
33, 7, B vagy FAlkalmazás

Ha például a CS:EIP=005b:0001001f CSACC=d0df CSLIM=1bffffff vagy CS = 005B CSLIM = 1BFFFFFF DS = 0053 DSLIM = 1BFFFFFF trappel van dolgunk, akkor a CS utolsó hexa digitje 5B, ami a fenti táblázat alapján user trapet jelent.

A trapinformáció a trap fajtáját is tartalmazza. Egy kernel trap elsô sora például az lehet, hogy TRAP 000e ERRCD=0000 ERACC=**** ERLIM=********. Ebben az esetben TRAP 000e-rôl van szó. Az alábbi táblázatban összefoglaltuk a lehetséges trapfajtákat:


Trap:Jelentés:SYS információ:Magyarázat:Tanács, javaslat:
0000 (00)Osztási hiba (Divide Error)3184, 19300-val való osztás történt, vagy egy mûvelet eredményét az azt tároló register nem nem tudta kezelni.Másoljuk át az \OS2\INSTALL alkönyvtárban található Config.Sys fájlt a gyökérkönyvtárba. Ha ezután elmaradnak a TRAP-ek, akkor a problémát valószínûleg az egyik (régi Config.Sys-ben lévô) vezérlô okozta.
0001 (01)Hibakeresési probléma (Debug Exception)1931A program engedélyezett egy úgynevezett "single step" meg szakítást annak ellenére, hogy nem hibakeresô futtatta.-
0002 (02)Nem maszkolható megszakítás (NMI)-Az hiba száma alapján: 110: paritáshiba, 111: I/O paritáshiba , 112: Watchdog time-out, 113: DMA döntési time-outEzt a TRAP-et szinte kizárólag hardver, elsôsorban memória, vagy memória-adapter probléma okozza. Ha a memória körül nem találunk problémát, ellenôrizzük az alaplapot, illetve a gépben lévô egyéb adaptereket is.
0003 (03)Egybájtos megszakítás (Debug Break point)1933A program engedélyezett egy INT13-as megszakítást, annak ellenére, hogy nem hibakeresô futatta. Fôleg akkor jelentkezik, ha hibakeresési kód maradt a futtatott programban.Hardver hibára is utalhat, de valószínûleg nem a memória a rossz. Bizonyos esetekben segíthet az IBM1S506.ADD vezérlô IBMINT13.I13-mal való helyettesítése.
0004 (04)Túlcsordulás (Overflow Detected)3185, 1934Az INTO utasítás generálja.-
0005 (05)Tömbhatár túllépés (Array Bounds Check)3191, 1935A BOUND utasítás generálja.-
0006 (06)Nem létezô operandus kód (Invalid OP-Code)3176, 1936-Hibás a futtatott EXE fájl, vagy hardverprobléma (általában nem a memória a rossz). Kapcsoljuk ki a gyorsító tárt és a ROM shadow opciót.
0007 (07)Hiányzó társprocesszor (Missing Coprocessor)1937Olyan program okozza, amelyik társprocesszort igénylô utasítást használ akkor, ha nincs is társprocesszor a gépben.Futtassuk a programnak azt a változatát, amelyik nem kíván társprocesszort. Ellenôrizzük, hogy a memória az alaplapnak megfelelô sebességû.
0008 (08)Dupla hiba (Double Fault)1938Trap trap közben.Sokszor programhiba okozza (Netware Requester, CM/2). Telepítés idejére kommentezzük ki az IBM1S506.ADD meghajtót a Config.Sys-bôl. Néha hardverhiba (például IRQ konfliktus) okozza.
0009 (09)Társprocesszor- szegmens túlfutás (Coprocessor Segment Overrun)1939Olyan társprocesszort használó utasítás okozza, amelyik írni vagy olvasni próbál a tárolási szegmensen túl.-
000A (10)Nem létezô TSS (Task State Segment) (Invalid TSS)1940OS/2 hiba (bug). Akkor történik, amikor az OS/2 egy nem létezô folyamatkapcsoló szegmenst próbál használni.-
000B (11)Hiányzó szegmens (Segment not Present)1941Program vagy OS/2 hiba. Akkor jelentkezik, amikor egy program nem létezô memóriaszegmensre hivatkozik.-
000C (12)Veremhiba (Stack Fault)1942Abban az esetben jelentkezik, ha a verembôl több adatot akar a program kivenni, mint amennyit tartalmaz, illetve ha több adatot akar a verembe tenni, mint amennyit az képes hordozni. Ugyancsak ez a TRAP jelentkezik, ha a program túl sok szubrutint hív meg, illetve ha több szubrutint ad vissza, mint amennyi meg lett hívva.Általában ugyan azok a problémák okozzák, mint amelyek a TRAP 002-ért felelôsek.
000D (13)Általános védelmi hiba (General Protection Fault)1943Nem létezô mutatóra hivatkozás eredménye.Néha hardverhiba következménye (alaplap). Többnyire viszont szoftverhiba felelôs ezért a TRAP-ért.
000E (14)Laphiba (Page Fault)-OS/2 hiba, hiba a virtuális memóriában. Olyan memórialapra hivatkozott a program, amelyik nincs jelen a memóriában, vagy a programnak nincs elég privilégiuma az adat eléréséhez.Néha hardverhiba következménye (memória). Többnyire viszont ezért is a szoftver a felelôs.
000F (15)Intel által lefoglalt---
0010 (16)Társprocesszor-hiba (Coprocessor Error)-A processzor érzékelt egy hibát, amit hardver vagy szoftver úton a társprocesszor okozott.-
(17-31)Intel által lefoglalt---
(32-255)A felhasználó által definiált, maszkolható megszakítások.---

Leggyakrabban a D és E jelû TRAP fordul elô. Különösen az E gyakori, fôleg akkor, ha a gépben keverednek a különbözô elérési idejû és/vagy típusú memóriamodulok. Ha nincs módunkban egyforma modulokat használni, akkor néha az is segít, ha a bank feltöltésénél a leglassabb modul(oka)t tesszük az elsô hely(ek)re. Tipikus még Warp 4 esetében a TRAP 8. Ezeket a problémákat szinte mindig megoldja az IBM1S506.ADD vezérlô lecserélése egy régebbi változatra.

Az Internal Processing Errorok (IPE) a TRAP-ekhez hasonló körülmények között jönnek létre. Például, az üzenet The system has detected an internal processing error at location ##0160:FFF6FC01 - 000D:00015C01..... azt jelenti, hogy egy TRAP D-nek megfelelô problémával állunk szemben. Ezt úgy állapíthatjuk meg, hogy megkeressük az üzenetben az elsô három egymás után következô 0-át és az ezután következô szám vagy betû jelenti a TRAP fajtáját, ami a példa esetében D. A hiba elhárításakor tehát a TRAP D-nél leírtakat kell figyelembe vennünk. Fontos lehet még a location szó után álló cím is. Amennyiben maga a kernel trappel, akkor itt a 160-as cím szokott megjelenni. Ettôl eltérô értékek általában driver hibára utalnak. A CSLIM értéke egyedi, ezért ez alapján elvileg behatárolható a driver, amely a galibát okozza. Ha például a CSLIM=0000f113 értékkel van dolgunk, akkor a hobbes.nmsu.edu-ról letölthetô EXEINFO program segítségével (exeinfo -f -lf113 c:\*.*) találhatjuk meg a hibás modult.

Az IBM Red Books sorozatában megjelent az OS/2 Debugging Handbook (SG24-464x-00, x=1,2,3,4), amelyben további támpontokat találhatunk a trapek elemzéséhez és elhárításához.


A témához kapcsolódó más oldalak:


< [ OS/2 kérdések és válaszok | Keresés | Észrevételek, megjegyzések ] >
Utolsó módosítás ideje: 2000.01.09.