WATCHDOG PROCESSZOR IBM PC AT SZÁMÍTÓGÉPHEZ

Valyon Attila

Budapesti Mûszaki Egyetem
Villamosmérnöki és Informatikai Kar
Villamosmérnöki Szak

Szakmai konzulens:
Majzik István tud. smts.
BME Mûszer- és Méréstechnika Tanszék


Összefoglalás

A tervezett watchdog processzor IBM PC-hez illeszkedõ bõvítõkártya, mely alkalmassá teszi a közönséges személyi számítógépeket nagy megbízhatóságot igénylõ feladatok ellátására. A mûködés a felügyelt processzoron futó programok vezérlési gráfjainak futás közbeni folyamatos ellenõrzésén alapszik. A watchdog processzor hardware szinten támogatja a multitasking környezetben való mûködést, és a vezérlési gráfok jelzõszámalapú real-time monitoringja mellett lehetõséget biztosít az egyes folyamatokhoz kapcsolódó time-out korlátok figyelésére is.

Státuszát tekintve memóriába ágyazott periféria-társprocesszor, mely a felügyelt processzorral - amely elsõdlegesen az i80486 - a maximális hatékonyság érdekében a VESA lokális buszon keresztül kommunikál.

Kulcsszavak


Bevezetés

Az utóbbi évek informatikai gyakorlatában - különösen speciális felhasználási területeken (pl. ipari folyamatok, egészségügyi alkalmazások, banki szolgáltatások) - egyre nagyobb jelentõsége van a nagymegbízhatóságú rendszereknek. A nagyteljesítményû berendezések mellett azonban a személyi számítógépek rohamos elterjedése és mind szélesebb körû felhasználása természetes igényként veti fel a PC-szintû megbízhatóság kérdését is. A megbízhatóság biztosítása a szokásos passzív hibaelfedõ ill. hibajavító módszerek (pl. többszörös redundancia beépítése, hibajelzõ, -javító kódok) mellett aktív hibadetektáló egységek alkalmazásával hatékonyabbá válhat. Így a hibafelismerés alapja - többek között - olyan speciális alrendszer lehet, mely a mûködés közbeni folyamatos monitoring funkcióját képes ellátni az adott számítógépes környezetben. Az ilyen jellegû ellenõrzõ egységek az ún. watchdog processzorok.

A watchdog processzor [1] különleges céláramkör, amely az informatikai rendszerrel kapcsolatos futás közbeni információgyûjtés és real-time adatfeldolgozás alapján ellenõrzi annak helyes mûködését. Mivel statisztikai megfigyelésekbõl következik, hogy a programvezérelt rendszerekben elõforduló hibák jelentõs része a folyamathoz rendelhetõ vezérlési gráf sérülésébõl származik, célszerû a watchdog processzor felügyelõ tevékenységét a programok vezérlési gráfjainak ellenõrzésére koncentrálni. Az ellenõrzés a futás közbeni tényleges vezérlési gráf és egy elõre rögzített, hibátlan referencia-gráf összehasonlításán alapszik.

Az esetlegesen igen terjedelmes - és így szükségszerûen idõigényesen kezelhetõ - referencia-gráf explicit tárolása helyett jelzõszámalapú gráfkódolási módszerekkel elérhetõ a kisebb hardver-igényû és nagyobb sebességû adatfeldolgozás. Jelzõszámalapú hibadetektálás esetén az aktuális vezérlési gráf helyességének felismerése speciális azonosítók alapján történik; a magasszintû programozási nyelven megírt forráskódból egy elõfeldolgozó (preprocesszor) elõállítja a folyamathoz tartozó vezérlési gráfot, s annak csomópontjaihoz egyedi jelzõszámokat rendel (1. ábra.). A jelzõszámokat az ellenõrzött processzor futás közben továbbítja a watchdog processzorhoz az elõfeldolgozó által az eredeti programszövegbe szúrt transzfer utasítások segítségével.

1. ábra. A jelzõszám-hozzárendelés folyamata

A szélesebb körû funkcionális ellenõrzés érdekében a folyamatoknak bizonyos idõzítési korlátnak is eleget kell tenniük: ha két jelzõszám-továbbítás között eltelt idõ túlzottan hosszúra nyúlik, feltételezhetõ a program hibás mûködése (pl. végtelen ciklus). Hibás állapotátmenet detektálása ill. time-out hiba fellépte esetén a watchdog processzor megszakítja a program futását, ami egy esetleges elõzõ hibátlan állapotba való visszatéréssel folytatható. (2. ábra.) A korábbi érvényes állapotok meghatározása a periodikusan továbbított állapot-jelzõszámok nyilvántartásának hardver szintû támogatására épül.

2. ábra. A watchdog processzor mûködési vázlata

A fentieknek megfelelõen a tervezett áramkör IBM PC AT számítógéphez illeszkedõ watchdog processzor (WP) kártya, mely multitasking környezetben képes ellátni a futásidejû monitoringot; a jelzõszámok vételét és vizsgálatát.

A SEIS gráfkódolási algoritmus

A programok, folyamatok vezérlési gráfjainak jelzõszámalapú ellenõrzésére egy hatékony módszer a SEIS (Signature Encoded Instruction Stream [2]) kódolási eljárás alkalmazása. Az algoritmus terjedelmes referencia-adatbázis tárolása nélkül nyújt lehetõséget a nagysebességû jelzõszám-analízis megvalósítására. A SEIS gráfkódolás alapötlete, hogy valamennyi jelzõszám önmagában határozza meg a vezérlési gráf aktuális állapota mellett mindazon állapotokat, amelyekbõl érvényes átmenettel juthatunk ebbe az állapotba. Az állapotátmenetek érvényességének eldöntéséhez tehát elegendõ az aktuális jelzõszám mellett az ezt közvetlenül megelõzõ jelzõszám ismerete. A jelzõszám-hozzárendelés lépései a következõk:

  1. A vezérlési gráf felépítése a programszöveg részletes elemzése alapján: a gráf csomópontjai felelnek meg a program egyes állapotainak, míg a gráf irányított élei jelentik az állapotátmeneteket. Magasszintû nyelven megírt programok esetén a vezérlési gráf csomópontjait kézenfekvõ az egyes utasításokkal azonosítani. (3. ábra.)

    3. ábra. C nyelvû programrészlet és vezérlési gráfja

  2. A vezérlési gráf felbontása a programban szereplõ függvényeknek, eljárásoknak megfelelõ részgráfokra. Ezek a részgráfok önálló egységeket képeznek, amelyek - hibátlan mûködés során - csak egyetlen inicializáló csomóponton keresztül érhetõk el és általában egyetlen végállapottal rendelkeznek. Egy-egy részgráf a magasabb hierarchia szintû leírásban egyetlen összetett csomópontnak tekinthetõ, amelyhez a bemenõ élek csak az inicializáló, a kimenõ élek csak a végállapoton keresztül kapcsolódhatnak.

  3. A kialakult részgráfokban ill. a teljes vezérlési gráfban Euler-körök keresése. Az Euler-kör egy gráf valamennyi élét pontosan egyszer tartalmazó felsorolás (út), amelyben két egymást követõ él esetén a korábbi él végpontja megegyezik az õt követõ él kiindulópontjával, azaz szomszédos élek.

  4. Az elõállított utak mindegyikében az egymást követõ élekhez egyesével növekvõ jelzõszámok hozzárendelése. A nagyobb fokszámú csomópontok hatékony kezelése érdekében a jelzõszámok három részbõl (címkék) állnak: két állapot csak abban az esetben követheti egymást érvényesen, ha a korábbi csomóponthoz tartozó címkék eggyel növelt értékei közül egy - vagy több - szerepel a következõ csomóponthoz tartozó címkék között. Az elõzõ példa vezérlési gráfjának jelzõszám-hozzárendelése a 4. ábrán látható.

    4. ábra. A jelzõszám-hozzárendelés és a kódolt vezérlési gráf

Mivel a gyakorlatban elõforduló programok vezérlési gráfjaira jellemzõ fokszámok értéke nem nagy, a fenti eljárást követve a kódolásuk elvégezhetõ. A jelzõszám-ellenõrzés egyszerûsége és csekély (aritmetikai) hardver-igénye miatt alkalmas nagysebességû és hatékony megvalósításra.

Fontosabb jellemzõk

A WP által megcélzott személyi számítógép típus a jelenleg rendkívül széleskörûen elterjedt i80486 alapú IBM PC AT, mely processzorszinten támogatja a multitasking üzemmódot. A watchdog processzor tervezésénél elsõdleges szempont volt - a kellõ rugalmasság és konfigurálhatóság mellett - a hatékony, gyors mûködés. Az i486 és a WP közti jelzõszám-továbbításra fordított processzoridõ minimalizálása érdekében a kommunikációs felület a nagysebességû (33 MHz) VESA lokális busz (VLB [3]). A gyorsaság mellett a VESA busz további elõnye, hogy közvetlenül tartalmazza a processzor jeleit, s így a futásidejû monitoring könnyen megvalósítható.

A watchdog processzor memóriába ágyazott periféria-társprocesszorként mûködik, a felügyelt processzorral - kihasználva a VESA busz teljes adatszélességét - 32 bites forgalmat bonyolít le. A lefoglalt memória-címtartomány 16Mbyte, ami a rendszerbeli taskok ill. az operációs rendszer között van felosztva. A felügyelt taskok - melyek maximális száma 256 - mindegyikéhez a WP-címtartomány egy-egy 4Kbyte méretû szegmense tartozik; az egyes szegmensekhez való illegális hozzáférés megakadályozása az i486 memória-kezelõ egységének (MMU - Memory Management Unit) feladata. A jelzõszám-transzfer ill. más WP-utasítás végrehajtása az adott taskhoz tartozó WP-szegmensre vonatkozó memória-hozzáférés során megy végbe.

A WP-utasításkód és a hozzá tartozó adatok kódolása a VLB cím- és adatbusza között oszlik meg, lehetõvé téve hierarchikus utasításkészlet kialakítását. Az utasításkészlet magas prioritású tagjait - melyek a watchdog processzor alapvetõ paramétereit befolyásolják - csak az operációs rendszer tudja használni, a taskok csak jelzõszám-továbbítást hajthatnak végre. Az utasításkészlet pontos specifikációja az 5. ábrán látható.

5. ábra. A watchdog processzor utasításkészlete

Az utasításkészlet alapvetõen három csoportra osztható:

A jelzõszám-továbbító utasítások valósítják meg a watchdog processzor alaptevékenységét. Egy-egy - az 5. ábrán szereplõ bitminta szerinti - memória-írási ciklus egy-egy jelzõszám átvitelét jelenti a felügyelt processzortól a WP felé. A címvonalakon kódolt - az operációs rendszer által az egyes taskokhoz rendelt - task-azonosítók (Task ID) biztosítják, hogy illegális jelzõszám-transzfer ne következhessen be. A jelzõszámot az adatvonalak alsó 24 bitje tartalmazza, ami 3db. 8 bites cimkét (Sublab1, Sublab2, Sublab3) jelent. Valamennyi jelzõszám-átvitelnél lehetõség van a task time-out ellenõrzésének egyedi ki- ill. bekapcsolására (T bit), ugyanis, ha futás közben olyan külsõ függvény hívása történik, melynek a WP-preprocesszorral való feldolgozása - s így jelzõszámok hozzárendelése - nem történt meg, téves hibajelzés (time-out) következhet be.

Mivel a program futása során valamely függvényre való hivatkozás adatfüggõ is lehet (így az elõfeldolgozás során a futási idõben hívott függvény nem azonosítható), a függvények belépési ill. visszatérési pontjaihoz speciális jelzõszámokat kell rendelni: a SOP (Start Of Procedure) típusú jelzõszámok jelentik a belépési pontokat, míg az EOP (End Of Procedure) típusúak jelzik a függvényhívásból való visszatérést. SOP típusú jelzõszámhoz tartozó célállapot esetén az állapotátmenet feltétel nélkül érvényes, míg EOP típusú jelzõszám elõfordulásakor a függvényhíváshoz tartozó jelzõszám jelenti az összehasonlítási alapot (6. ábra.). Szintén speciális azonosítót igényelnek a - kerülendõ, de mégis elõforduló - olyan ugrás jellegû utasítások, amelyeknél fordítási idõben nem dönthetõ el, hogy a program hol folytatódik, s így a vezérlési gráf állapotátmenete sem detektálható. Ilyen utasítások jelölésére szolgál a JMP (Jump) utasítástípus-azonosító. A szokásos szekvenciális ill. a fordítási idõben meghatározható célcímû ugró utasításokat az NRM (Normal) mnemonik jelöli.

6. ábra. Különbözõ típusú jelzõszámok alkalmazása

A függvényhívásokhoz tartozó jelzõszámok mentése ill. visszaállítása a watchdog processzor saját belsõ stackje segítségével történik. A WP az egymásba ágyazott függvény-hívások adminisztrálását taskonként 256 szint mélységig kezeli, ennél nagyobb mélységû egymásba ágyazás ill. rekurzió hatására megszakítást okoz. A megszakítási rutin feladata a lokális jelzõszám-stack kiürítése és tartalmának az operatív memóriában való ideiglenes tárolása.

A watchdog processzor alapvetõen épít a védett (protected) üzemmódban mûködõ i486 védelmi rendszerének lehetõségeire: nemcsak a taskok jelzõszám-transzferei, hanem a WP belsõ állapotát ill. mûködésének fontos paramétereit módosító, ún. operációs rendszer szintû utasítások is az MMU-t használják a biztonság növelésének eszközeként. Megfelelõ szegmenskiosztással és részben a memóriacímbe kódolt utasításokkal elérhetõ, hogy a taskok által nem hozzáférhetõ memóriacímekre való hivatkozás azonosítsa a csak az operációs rendszer által végrehajtható utasításokat (ADR12 címbit).

Tipikusan operációs rendszer szintû WP-utasítás a TCH (Task Change). Taskváltáskor az operációs rendszer feladata - a szokásos kontextusváltás mellett - egy TCH utasítás küldése, melynek címmezõjében a futtatásra kerülõ task azonosítójának kell szerepelnie. Amennyiben egy beérkezett jelzõszám-továbbító utasítás címmezõjében szereplõ task-azonosító nem egyezik meg a a legutolsó TCH utasításkor vett azonosítóval, a watchdog processzor megszakítja a task futását.

A time-out korlátot beállító STP (Set Timer Parameters) és a jelzõszám-ellenõrzést tiltó/engedélyezõ SCE (Set Checking Enable) szintén operációs rendszer szintû utasítások, melyek elõsegítik az inicializálási folyamatot és rugalmasságot biztosítanak a különbözõ feladatokat végrehajtó taskok felügyeletéhez. A jelzõszám-stack inicializálása és tartalmának esetleges mentése, visszaállítása a WPT (Write Pointer) és jelzõszám-továbbító utasítások együttes használatával oldható meg.

Az állapotjelzõ utasítások a WP i486 kommunikációs irányt biztosítják. Az RSS (Read Status) utasítással a watchdog processzor belsõ timer-beállításai, a stack pointer aktuális értéke és egyéb jelzõbitek mellett információ szerezhetõ a legutóbbi WP-megszakítás pontos okáról is. A lokális WP-stack túlcsordulása esetén tartalmának az operatív memóriában való tárolásáról a megszakítási rutin gondoskodik, amihez szükséges a stack tartalmának olvasása az RSK (Read Stack) utasítás segítségével.

Összefoglalás, fejlesztési lehetõségek

Az áramkör FPGA alapú AT bõvítõkártyaként készült el. A sebesség ill. hardver-igény szempontjából kritikus komponeneseket egy Xilinx 3064PC84-70 típusú chip tartalmazza, melynek konfigurációja a PC ISA buszon keresztül történik megfelelõ segédszoftver segítségével. Az illesztést ill. egyéb speciális feladatok megvalósítását kisebb integráltságú PLD eszközök (GAL22v10) végzik. A jelzõszám-stack a sebességi igényeket kielégítõ statikus memóriákból áll.

A watchdog processzor megfelelõ szoftver-támogatás kialakításával nagyban hozzájárulhat megbízható személyi számítógépes rendszerek létrehozásához. A széles körû alkalmazás további elengedhetetlen feltétele a WP hibatûrõ - esetlegesen öntesztelõ - hardver megvalósítása mellett a gazdaságossági szempontokat is hangsúlyozottan figyelembe vevõ integrált kivitel.

Irodalomjegyzék

[1] Mahmood, A.; McCluskey, E. J.: Concurrent Error Detection Using Watchdog Processors
A Survey. IEEE Trans. on Comp., Vol 37/2, pp. 160-174, 1988

[2] Majzik, I.,; Pataricza A. et al.: A High-speed Watchdog Processor for Multitasking Systems. Proceedings of P'94, pp. 65-74.

[3] VESA: VL-Bus 2.0 Standard 1993