Bloc de control al proceselor

Cunoașterea sistemului de operare

Cunoașterea sistemului de operare Simics este un modul Simics care înțelege structurile de date și abstracțiile sistemului de operare care rulează pe sistemul țintă Simics. Cu OS awareness, Simics și debuggerul Simics știu despre spațiul kernel, spațiul utilizator, procese, fire de execuție și sarcini.

Fundamental, OS awareness îndeplinește două sarcini: urmărirea în direct a evenimentelor pe măsură ce acestea se produc și investigarea stării instantanee a sistemului de operare. Urmărirea în direct a evenimentelor înseamnă că conștientizarea sistemului de operare detectează când sistemul de operare efectuează o schimbare de sarcină, când software-ul face un apel de sistem sau când apar întreruperi. Într-adevăr, cel mai comun mod de a detecta astfel de evenimente este de a aștepta întreruperi în sistemul țintă – atâta timp cât nu apar întreruperi, același software la nivel de utilizator rulează. Atunci când apare o întrerupere, sistemul de operare preia controlul și se consideră că procesul în curs de execuție a fost eliminat. Atunci când sistemul de operare se întoarce înapoi în spațiul utilizatorului, se consideră că un anumit proces a fost comutat.

Căutarea în direct determină când se întâmplă ceva, dar determinarea a ceea ce s-a întâmplat necesită investigarea stării instantanee a sistemului de operare. De exemplu, atunci când se declanșează o întrerupere, care sunt firele active pe procesorul care a primit întreruperea? Pentru a determina acest lucru, conștientizarea sistemului de operare trebuie să cunoască structura cozilor sistemului de operare a proceselor în execuție și în așteptare, conținutul structurilor de sarcini sau al blocurilor de control al proceselor, precum și alte structuri de date. Cu condiția ca acest lucru să fi fost configurat corect, conștientizarea sistemului de operare poate apoi să parcurgă listele din memoria țintă și să determine numele procesului activ în acel moment pe un anumit procesor, toate procesele existente, modulele software încărcate dinamic și adresele de relocare ale acestora, precum și orice altceva de interes.

Pentru că conținutul exact al structurilor de sarcini și decalajele anumitor câmpuri pot varia de la o versiune la alta a sistemului de operare, conștientizarea sistemului de operare trebuie să fie configurată înainte de a putea fi utilizată. De cele mai multe ori, este posibil să se determine parametrii pentru conștientizarea sistemului de operare prin examinarea unui tabel de simboluri sau a unui fișier kernel cu informații de depanare din compilarea sistemului de operare. Cu toate acestea, există sisteme de operare în care parametrii exacți nu pot fi determinați până la momentul execuției și, în astfel de cazuri, configurarea va trebui să aștepte până când sistemul țintă va fi pornit. În orice caz, odată determinat, setul de parametri poate fi salvat și utilizat data viitoare când se execută aceeași configurare a sistemului țintă.

Utilizarea fișierelor de parametri face posibilă distribuirea configurațiilor de conștientizare a sistemului de operare împreună cu imaginile sistemului de operare la care se referă. Acest lucru înseamnă că o echipă de platformă poate construi o imagine de sistem de operare, poate configura conștientizarea sistemului de operare pentru aceasta, poate salva parametrii și poate furniza utilizatorilor săi sistemul de operare și parametrii săi de conștientizare a sistemului de operare fără a fi nevoie să furnizeze fișiere de simboluri sau informații de depanare. Fișierul de parametri de conștientizare a sistemului de operare face pur și simplu parte din stiva de software furnizată și este activat în scripturile de pornire utilizate pentru a porni Simics. Utilizatorii sistemului nu trebuie să știe cum să configureze conștientizarea sistemului de operare – ei pur și simplu îl pun în funcțiune imediat ce pornesc configurațiile sistemului țintă furnizate. Parametrii de conștientizare a sistemului de operare sunt, de asemenea, salvați în interiorul fișierelor de puncte de control Simics, astfel încât conștientizarea sistemului de operare continuă să funcționeze în timpul operațiilor de salvare și restaurare a punctelor de control.

Conștientizarea sistemului de operare face posibilă ca funcțiile Simics să funcționeze numai pe un anumit subset al stivei software, cum ar fi să aveți puncte de întrerupere setate numai în interiorul unui anumit proces sau să urmăriți numai accesările de memorie efectuate de kernel și nu de sarcini la nivel de utilizator. O extensie sau un script Simics scris de utilizator poate asculta evenimentele de conștientizare a sistemului de operare și poate întreprinde acțiuni în funcție de software-ul care rulează în acel moment în sistemul țintă. Este posibil să se ceară sistemului de conștientizare a sistemului de operare notificări numai pentru un anumit proces sau să se vadă toate acțiunile pentru toate procesele.

Sistemul de conștientizare a sistemului de operare din Simics funcționează cu conceptul de arbore de noduri. Fiecare nod din arbore reprezintă un nivel de abstractizare în modelul de proces al sistemului de operare. În mod obișnuit, nodul superior este sistemul de operare în sine, care este apoi împărțit în sarcini la nivel de nucleu și la nivel de utilizator. Într-un sistem de operare precum Linux, fiecare sarcină la nivel de utilizator conține unul sau mai multe fire de execuție. În nucleu, conștientizarea sistemului de operare distinge în mod normal firele din nucleu de sarcina inactivă, deoarece acest lucru ajută la explicarea timpului de execuție a obiectivelor. Figura 3.3 prezintă un exemplu de arbore de noduri dintr-un sistem Linux de tip barebones.

Figura 3.3. Arborele de conștientizare a sistemului de operare.

În Simics CLI și în GUI-ul de depanare, interogările de procese sunt utilizate pentru a găsi procesele de interes. Aceste interogări se pot potrivi cu numele proceselor, numerele de identificare a proceselor sau alte proprietăți puse la dispoziție de conștientizarea sistemului de operare. În cele mai multe cazuri, numele unui proces este suficient pentru a-l identifica, dar în sistemele complexe sunt necesare potriviri mai complexe, cum ar fi „procesul numit foo pe placa numită bar”. Într-un sistem cu funcționare îndelungată, în care un anumit program este rulat de mai multe ori, ID-ul procesului poate fi utilizat pentru a identifica o anumită pornire a unui proces.

Simics OS awareness suportă sisteme de operare imbricate pentru a gestiona OS awareness pentru sistemele bazate pe hipervizor. Într-un sistem cu un hipervizor, este necesar să se urmărească programarea sistemelor de operare invitate pe nucleele procesorului țintă. Odată ce sistemul de operare activ pe un nucleu a fost determinat, este posibilă aplicarea sistemului de operare pentru acest sistem de operare pentru a determina procesul sau firul activ. Astfel, se utilizează un singur arbore pentru întregul sistem, care își are rădăcina în hipervizor.

Detalii a ceea ce poate urmări și descoperi conștientizarea sistemului de operare (OS awareness) cu privire la stiva de software țintă variază în funcție de sistemul de operare invitat și de cât de mult s-a lucrat pentru a construi OS awareness pentru acesta.

În comparație cu sistemele de conștientizare a sistemului de operare utilizate cu depanatoarele bazate pe hardware (JTAG), capacitatea unui simulator de a urmări cu precizie comutarea sarcinilor este unică. Astfel de caracteristici s-au dovedit a fi imposibil de implementat în depanatoarele bazate pe hardware, deoarece ar genera o suprasolicitare semnificativă și ar copleși disponibilitatea punctelor de întrerupere hardware. Inspecția stării instantanee este, în esență, aceeași ca și inspecția de către un depanator hardware a stării sistemului după oprirea sistemului și, într-adevăr, același cod utilizat pentru depanatoarele hardware a fost utilizat cu Simics pentru a determina fapte precum adresele de relocare pentru modulele încărcate dinamic.

Un depanator bazat pe agent nu are nevoie de conștientizarea sistemului de operare, deoarece rulează în interiorul sistemului țintă și poate utiliza API-urile sistemului de operare pentru a întreba sistemul de operare țintă despre sarcinile în execuție, modulele încărcate și alte informații.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.