OS Awareness
Simics OS awareness je modul Simicsu, který rozumí datovým strukturám a abstrakcím operačního systému běžícího na cílovém systému Simicsu. Díky povědomí o OS ví Simics a ladicí modul Simics o prostoru jádra, uživatelském prostoru, procesech, vláknech a úlohách.
Podstatně povědomí o OS plní dva úkoly: živé sledování událostí v průběhu jejich vzniku a zkoumání okamžitého stavu operačního systému. Živé sledování událostí znamená, že povědomí o OS zjišťuje, kdy operační systém provede přepnutí úlohy, kdy software provede systémové volání nebo kdy dojde k přerušení. Nejběžnějším způsobem detekce takových událostí je totiž čekání na přerušení v cílovém systému – dokud k žádnému přerušení nedojde, běží stejný software na uživatelské úrovni. Jakmile dojde k přerušení, převezme řízení operační systém a spuštěný proces se považuje za vypnutý. Když se operační systém vrátí zpět do uživatelského prostoru, má se za to, že byl nějaký proces přepnut.
Sledování za chodu určuje, kdy se něco stane, ale určení toho, co se stalo, vyžaduje zkoumání okamžitého stavu operačního systému. Například když se spustí přerušení, jaká jsou aktivní vlákna na procesoru, který přerušení přijal? Aby to bylo možné určit, potřebuje povědomí o operačním systému znát strukturu front běžících a čekajících procesů, obsah struktur úloh nebo bloků řízení procesů a dalších datových struktur. Za předpokladu, že toto bylo správně nakonfigurováno, může pak OS awareness procházet seznamy v cílové paměti a určit název aktuálně aktivního procesu na konkrétním procesoru, všechny existující procesy, dynamicky načtené softwarové moduly a jejich relokační adresy a cokoli dalšího zajímavého.
Protože se přesný obsah struktur úloh a offsety jednotlivých polí mohou mezi jednotlivými sestaveními a verzemi operačního systému lišit, musí být OS awareness před použitím nakonfigurován. Nejčastěji je možné určit parametry pro OS awareness nahlédnutím do tabulky symbolů nebo souboru jádra s informacemi o ladění ze sestavení operačního systému. Existují však operační systémy, u nichž nelze přesné parametry určit až za běhu, a v takových případech se musí s konfigurací počkat, dokud cílový systém nenaběhne. V každém případě lze po určení sadu parametrů uložit a použít ji při příštím spuštění stejného cílového nastavení.
Použití souborů parametrů umožňuje, aby byly konfigurace povědomí o OS distribuovány spolu s obrazy OS, na které se vztahují. To znamená, že tým platformy může sestavit obraz OS, nakonfigurovat pro něj povědomí o OS, uložit parametry a poskytnout svým uživatelům OS a jeho parametry povědomí o OS, aniž by musel poskytovat soubory symbolů nebo ladicí informace. Soubor s parametry povědomí o OS je jednoduše součástí poskytnutého softwarového zásobníku a aktivuje se ve spouštěcích skriptech používaných ke spuštění Simicsu. Uživatelé systému nemusí vědět, jak povědomí o OS nakonfigurovat – prostě ho zprovozní, jakmile spustí poskytnuté nastavení cílového systému. Parametry povědomí o OS jsou také uloženy uvnitř souborů kontrolních bodů systému Simics, takže povědomí o OS funguje i při operacích ukládání a obnovování kontrolních bodů.
Povědomí o OS umožňuje, aby funkce systému Simics pracovaly pouze na určité podmnožině softwarového zásobníku, například aby byly body přerušení nastaveny pouze uvnitř určitého procesu nebo aby byly sledovány pouze přístupy do paměti prováděné jádrem, a nikoli úlohami na uživatelské úrovni. Uživatelem napsané rozšíření nebo skript Simics může naslouchat událostem z povědomí operačního systému a provádět akce na základě toho, jaký software je v cílovém systému právě spuštěn. Je možné požádat systém OS awareness o oznámení pouze pro určitý proces nebo zobrazit všechny akce pro všechny procesy.
Systém OS awareness v Simics pracuje s konceptem stromu uzlů. Každý uzel stromu představuje úroveň abstrakce v modelu procesů OS. Typicky je nejvyšším uzlem samotný operační systém, který je pak rozdělen na úlohy na úrovni jádra a uživatele. V operačním systému, jako je Linux, obsahuje každá úloha uživatelské úrovně jedno nebo více vláken. V jádře povědomí OS obvykle rozlišuje vlákna jádra od nečinné úlohy, protože to pomáhá zohlednit cílovou dobu provádění. Obrázek 3.3 ukazuje příklad stromu uzlů z holého systému Linux.
V rozhraní Simics CLI a v grafickém uživatelském rozhraní ladicího programu se k vyhledání zájmových procesů používají dotazy na procesy. Tyto dotazy mohou odpovídat názvům procesů, identifikačním číslům procesů nebo jiným vlastnostem zpřístupněným pomocí povědomí o OS. Ve většině případů stačí k identifikaci procesu jeho název, ale ve složitých systémech jsou potřeba složitější shody, například „proces s názvem foo na desce s názvem bar“. V dlouhodobě běžícím systému, kde je určitý program spuštěn mnohokrát, může být ID procesu použito k identifikaci konkrétního spuštění procesu.
Simics OS awareness podporuje vnořené operační systémy pro zpracování OS awareness pro systémy založené na hypervizoru. V systému s hypervizorem je nutné sledovat plánování hostovaných operačních systémů na cílových procesorových jádrech. Po určení aktivního operačního systému na jádře je pak možné použít povědomí o OS pro tento operační systém k určení aktivního procesu nebo vlákna. Pro celý systém se tak používá jediný strom s kořeny v hypervizoru.
Detaily toho, co může OS awareness sledovat a zjistit o cílovém softwarovém zásobníku, se liší v závislosti na hostovaném operačním systému a na tom, kolik práce bylo vynaloženo na vytvoření OS awareness pro něj.
V porovnání se systémy OS awareness používanými s hardwarovými ladicími programy (JTAG) je schopnost simulátoru přesně sledovat přepínání úloh jedinečná. Ukázalo se, že implementace takových funkcí v hardwarových debuggerech je nepraktická, protože by znamenala značnou režii a zahltila by dostupnost hardwarových breakpointů. Kontrola okamžitého stavu je v podstatě stejná jako kontrola stavu systému hardwarovým debuggerem po zastavení systému a skutečně stejný kód, jaký se používá pro hardwarové debuggery, byl v Simicsu použit k určení skutečností, jako jsou adresy přemístění dynamicky načítaných modulů.
Debugger založený na agentech nepotřebuje povědomí o operačním systému, protože běží uvnitř cílového systému a může používat rozhraní API operačního systému k dotazování cílového operačního systému na běžící úlohy, načtené moduly a další informace.
.