OS Awareness
A Simics OS awareness egy olyan Simics modul, amely megérti a Simics célrendszerén futó operációs rendszer adatstruktúráit és absztrakcióit. Az OS awareness segítségével a Simics és a Simics debugger ismeri a kernelteret, a felhasználói teret, a folyamatokat, a szálakat és a feladatokat.
Az OS awareness alapvetően két feladatot lát el: élőben követi az eseményeket, amint azok megtörténnek, és vizsgálja az operációs rendszer pillanatnyi állapotát. Az események élő nyomon követése azt jelenti, hogy az OS awareness érzékeli, amikor az operációs rendszer feladatváltást hajt végre, amikor a szoftver rendszerhívást hajt végre, vagy amikor megszakítások történnek. Valójában az ilyen események észlelésének leggyakoribb módja az, hogy a célrendszerben megszakításokra várunk – amíg nem történik megszakítás, addig ugyanaz a felhasználói szintű szoftver fut. Ha megszakítás történik, az operációs rendszer átveszi az irányítást, és a futó folyamatot kikapcsoltnak tekintjük. Amikor az operációs rendszer visszatér a felhasználói térbe, valamelyik folyamatot úgy tekintjük, hogy bekapcsolódott.
Az élő követés meghatározza, hogy mikor történik valami, de annak meghatározása, hogy mi történt, az operációs rendszer pillanatnyi állapotának vizsgálatát igényli. Például, amikor egy megszakítás kivált, milyen aktív szálak vannak a megszakítást fogadó processzoron? Ennek meghatározásához az operációs rendszer tudatosságának ismernie kell a futó és várakozó folyamatok operációs rendszerbeli várólistáinak szerkezetét, a task-struktúrák vagy folyamatvezérlő blokkok tartalmát és egyéb adatstruktúrákat. Feltéve, hogy mindezt megfelelően konfigurálták, az OS awareness ezután végigjárhatja a célmemóriában lévő listákat, és meghatározhatja az adott processzoron jelenleg aktív folyamat nevét, az összes létező folyamatot, a dinamikusan betöltött szoftvermodulokat és azok áthelyezési címeit, valamint minden egyéb érdekes dolgot.
Mivel a task structs pontos tartalma és az egyes mezők eltolásai operációs rendszer-építések és verziók között változhatnak, az OS awareness-t használat előtt konfigurálni kell. Leggyakrabban úgy lehet meghatározni az OS awareness paramétereit, hogy megnézzük a szimbólumtáblázatot vagy a kernel fájlt az OS build hibakeresési információival. Vannak azonban olyan operációs rendszerek, ahol a pontos paraméterek csak futásidőben határozhatók meg, és ilyen esetekben a konfigurációval meg kell várni, amíg a célrendszer elindul. Mindenesetre, ha egyszer már meghatározták, a paraméterkészlet elmenthető és felhasználható ugyanannak a célrendszer-összeállításnak a következő futtatásakor.
A paraméterfájlok használata lehetővé teszi, hogy az OS-tudatossági konfigurációkat az általuk hivatkozott OS-képekkel együtt terjesszék. Ez azt jelenti, hogy egy platformcsapat létrehozhat egy OS-képet, konfigurálhatja hozzá az OS-tudatosságot, elmentheti a paramétereket, és a felhasználóinak rendelkezésére bocsáthatja az OS-t és annak OS-tudatossági paramétereit anélkül, hogy szimbólumfájlokat vagy hibakeresési információkat kellene biztosítania. Az OS awareness paraméterfájl egyszerűen a rendelkezésre bocsátott szoftver stack része, és a Simics indításához használt indítószkriptekben aktiválódik. A rendszer felhasználóinak nem kell tudniuk, hogyan kell konfigurálni az OS-tudatosságot – egyszerűen csak működésbe hozzák, amint elindítják a biztosított célrendszer-összeállításokat. Az OS awareness paraméterei a Simics ellenőrzőpontfájljaiban is elmentésre kerülnek, így az OS awareness az ellenőrzőpontok mentési és visszaállítási műveletei során is működik.
Az OS awareness lehetővé teszi, hogy a Simics funkciói csak a szoftverhalmaz egy bizonyos részhalmazán működjenek, például a töréspontok csak egy bizonyos folyamaton belül legyenek beállítva, vagy csak a kernel által végrehajtott memóriaeléréseket lehessen nyomon követni, a felhasználói szintű feladatokét nem. Egy felhasználó által írt Simics-bővítmény vagy szkript képes figyelni az operációs rendszer tudatosságából származó eseményeket, és a célrendszerben éppen futó szoftverek alapján lépéseket tenni. Lehetőség van arra, hogy az OS awareness rendszertől csak egy bizonyos folyamatra vonatkozó értesítéseket kérjünk, vagy hogy az összes folyamat összes műveletét lássuk.
A Simics OS awareness rendszere a csomópontfa fogalmával működik. A fa minden egyes csomópontja az operációs rendszer folyamatmodelljének egy absztrakciós szintjét képviseli. Tipikusan a legfelső csomópont maga az operációs rendszer, amely aztán kernel- és felhasználói szintű feladatokra oszlik. Egy olyan operációs rendszerben, mint a Linux, minden felhasználói szintű feladat egy vagy több szálat tartalmaz. A rendszermagban az operációs rendszer tudatossága általában megkülönbözteti a kernelszálakat az üresjárati feladattól, mert ez segít a cél végrehajtási idejének elszámolásában. A 3.3. ábra egy példa egy csomópontfára egy csupasz Linux rendszerből.
A Simics CLI-ben és a debugger GUI-ban a folyamatlekérdezéseket használjuk az érdekes folyamatok megtalálására. Ezek a lekérdezések megfelelhetnek folyamatneveknek, folyamatazonosító számoknak vagy más, az OS awareness által elérhetővé tett tulajdonságoknak. A legtöbb esetben a folyamat neve elegendő a folyamat azonosításához, de összetett rendszerekben összetettebb egyezésekre van szükség, mint például “a foo nevű folyamat a bar nevű táblán”. Egy hosszú futású rendszerben, ahol egy bizonyos program sokszor fut, a folyamat azonosítója felhasználható a folyamat egy adott indításának azonosítására.
Az OS awareness támogatja az egymásba ágyazott operációs rendszereket a hypervisor-alapú rendszerek OS awareness kezeléséhez. Egy hipervizorral rendelkező rendszerben nyomon kell követni a vendég operációs rendszerek ütemezését a célprocesszormagokon. Miután meghatározták az aktív operációs rendszert egy magon, lehetséges az OS awareness alkalmazása az adott operációs rendszerre az aktív folyamat vagy szál meghatározásához. Így egyetlen fát használunk az egész rendszerre, amelynek gyökere a hypervisorban van.
Az, hogy az OS awareness milyen részleteket tud nyomon követni és felfedezni a célszoftver stackről, a vendég operációs rendszertől és attól függően változik, hogy mennyi munkát fordítottak az OS awareness kiépítésére.
A hardveralapú (JTAG) hibakeresőkkel használt OS awareness rendszerekhez képest a szimulátornak a feladatváltások pontos követésére vonatkozó képessége egyedülálló. Az ilyen funkciók megvalósítása a hardveralapú hibakeresőkben kivitelezhetetlennek bizonyult, mivel jelentős többletköltséggel járna, és túlterhelné a hardveres megszakítási pontok elérhetőségét. A pillanatnyi állapot vizsgálata lényegében ugyanaz, mint a hardveres hibakeresőknél a rendszer állapotának vizsgálata a rendszer leállítása után, és valóban ugyanazt a kódot, mint amit a hardveres hibakeresőknél használnak, használták a Simics segítségével olyan tények meghatározására, mint a dinamikusan betöltött modulok áthelyezési címei.
Az ügynökalapú hibakeresőnek nincs szüksége operációs rendszer ismeretére, mivel a célrendszeren belül fut, és az operációs rendszer API-it használhatja a cél operációs rendszertől a futó feladatokról, betöltött modulokról és egyéb információkról való lekérdezésre.