Process Control Block

OS Awareness

Simics OS awareness on Simics-moduuli, joka ymmärtää Simics-kohdejärjestelmässä olevan käyttöjärjestelmän tietorakenteita ja abstraktioita. OS-tietoisuuden avulla Simics ja Simicsin debuggeri tietävät ydinavaruudesta, käyttäjäavaruudesta, prosesseista, säikeistä ja tehtävistä.

Periaatteessa OS-tietoisuus suorittaa kaksi tehtävää: tapahtumien reaaliaikainen seuranta niiden tapahtuessa ja käyttöjärjestelmän hetkellisen tilan tutkiminen. Tapahtumien live-seuranta tarkoittaa sitä, että OS-tietoisuus havaitsee, kun käyttöjärjestelmä suorittaa tehtävänvaihdon, kun ohjelmisto tekee järjestelmäkutsun tai kun keskeytyksiä tapahtuu. Yleisin tapa havaita tällaiset tapahtumat onkin odottaa keskeytyksiä kohdejärjestelmässä – niin kauan kuin keskeytyksiä ei tapahdu, sama käyttäjätason ohjelmisto on käynnissä. Kun keskeytys tapahtuu, käyttöjärjestelmä ottaa ohjat käsiinsä, ja käynnissä olevan prosessin katsotaan poistuneen käytöstä. Kun käyttöjärjestelmä palaa takaisin käyttäjäavaruuteen, jonkin prosessin katsotaan vaihtuneen sisään.

Live-seuranta määrittää, milloin jotain tapahtuu, mutta sen määrittäminen, mitä tapahtui, edellyttää käyttöjärjestelmän hetkellisen tilan tutkimista. Kun esimerkiksi keskeytys laukeaa, mitkä ovat keskeytyksen vastaanottaneen prosessorin aktiiviset säikeet? Tämän määrittämiseksi käyttöjärjestelmän tietoisuuden on tunnettava käynnissä olevien ja odottavien prosessien käyttöjärjestelmän jonojen rakenne, task-rakenteiden tai prosessien ohjauslohkojen sisältö ja muut tietorakenteet. Edellyttäen, että tämä on konfiguroitu oikein, OS-tietoisuus voi sen jälkeen käydä läpi kohdemuistissa olevat luettelot ja määrittää tietyllä prosessorilla tällä hetkellä aktiivisen prosessin nimen, kaikki olemassa olevat prosessit, dynaamisesti ladatut ohjelmistomoduulit ja niiden uudelleensijoitusosoitteet sekä kaiken muun mielenkiintoisen.

Koska task structs -rakenteiden täsmällinen sisältö ja yksittäisten kenttien offsetit voivat vaihdella käyttöjärjestelmän eri versioiden välillä, OS-tietoisuus on konfiguroitava, ennen kuin sitä voidaan käyttää. Useimmiten OS-tietoisuuden parametrit on mahdollista määrittää tarkastelemalla symbolitaulukkoa tai ytimen tiedostoa, jossa on debug-tietoja käyttöjärjestelmän rakennuksesta. On kuitenkin olemassa käyttöjärjestelmiä, joissa tarkkoja parametreja ei voida määrittää ennen ajoaikaa, ja tällaisissa tapauksissa konfiguroinnin on odotettava, kunnes kohdejärjestelmä on käynnistetty. Joka tapauksessa, kun parametrit on määritetty, ne voidaan tallentaa ja käyttää seuraavalla kerralla, kun sama kohdeasetus ajetaan.

Parametritiedostojen käyttö mahdollistaa sen, että käyttöjärjestelmätietoisuuskonfiguraatiot voidaan jakaa yhdessä niiden käyttöjärjestelmäkuvien kanssa, joihin ne viittaavat. Tämä tarkoittaa, että alustaryhmä voi rakentaa käyttöjärjestelmäkuvan, konfiguroida sitä varten OS-tietoisuuden, tallentaa parametrit ja toimittaa käyttäjilleen käyttöjärjestelmän ja sen OS-tietoisuusparametrit ilman, että sen tarvitsee toimittaa symbolitiedostoja tai debugitietoja. OS-tietoisuusparametritiedosto on yksinkertaisesti osa toimitettua ohjelmistopinoa, ja se aktivoidaan Simicsin käynnistysskripteissä, joita käytetään Simicsin käynnistämiseen. Järjestelmän käyttäjien ei tarvitse osata konfiguroida OS-tietoisuutta – he vain saavat sen toimimaan heti, kun he käynnistävät tarjotut kohdejärjestelmäasetukset. OS-tietoisuuden parametrit tallennetaan myös Simicsin tarkistuspistetiedostoihin, joten OS-tietoisuus toimii tarkistuspisteiden tallennus- ja palautusoperaatioiden aikana.

OS-tietoisuuden avulla Simicsin ominaisuudet voidaan saada toimimaan vain tiettyyn osajoukkoon ohjelmistopinosta, kuten esimerkiksi asettamalla katkaisupisteet vain tietyn prosessin sisälle tai jäljittämällä vain ytimen suorittamat muistin käyttökerrat, mutta ei käyttäjätason tehtäviä. Käyttäjän kirjoittama Simics-laajennus tai -skripti voi kuunnella käyttöjärjestelmätietoisuuden tapahtumia ja ryhtyä toimiin sen perusteella, mikä ohjelmisto on parhaillaan käynnissä kohdejärjestelmässä. On mahdollista pyytää OS-tietoisuusjärjestelmältä ilmoituksia vain tietystä prosessista tai nähdä kaikkien prosessien kaikki toimenpiteet.

Simicsin OS-tietoisuusjärjestelmä toimii solmupuun käsitteellä. Jokainen puun solmu edustaa abstraktiotasoa käyttöjärjestelmän prosessimallissa. Tyypillisesti ylin solmu on itse käyttöjärjestelmä, joka sitten jaetaan ytimen ja käyttäjätason tehtäviin. Linuxin kaltaisessa käyttöjärjestelmässä kukin käyttäjätason tehtävä sisältää yhden tai useamman säikeen. Ytimessä käyttöjärjestelmän tietoisuus erottaa yleensä ytimen säikeet tyhjäkäynnillä olevasta tehtävästä, koska se auttaa ottamaan huomioon kohteen suoritusajan. Kuvassa 3.3 on esimerkki solmupuusta pelkistetystä Linux-järjestelmästä.

Kuva 3.3. Solmupuu. Käyttöjärjestelmän tietoisuuspuu.

Simics CLI:ssä ja debuggerin graafisessa käyttöliittymässä käytetään prosessikyselyjä kiinnostavien prosessien löytämiseen. Nämä kyselyt voivat vastata prosessien nimiä, prosessien ID-numeroita tai muita OS-tietoisuuden tarjoamia ominaisuuksia. Useimmissa tapauksissa prosessin nimi riittää sen tunnistamiseen, mutta monimutkaisissa järjestelmissä tarvitaan monimutkaisempia vastaavuuksia, kuten ”prosessi nimeltä foo levyllä nimeltä bar”. Pitkäkestoisessa järjestelmässä, jossa tiettyä ohjelmaa ajetaan monta kertaa, prosessin ID:tä voidaan käyttää prosessin tietyn käynnistyksen tunnistamiseen.

Simics OS-tietoisuus tukee sisäkkäisiä käyttöjärjestelmiä hypervisor-pohjaisten järjestelmien OS-tietoisuuden käsittelemiseksi. Hypervisorilla varustetussa järjestelmässä on tarpeen seurata vieraskäyttöjärjestelmien aikataulutusta kohdeprosessoriytimissä. Kun ytimen aktiivinen käyttöjärjestelmä on määritetty, on mahdollista soveltaa OS-tietoisuutta kyseiseen käyttöjärjestelmään aktiivisen prosessin tai säikeen määrittämiseksi. Näin koko järjestelmää varten käytetään yhtä ainoaa puuta, jonka juuret ovat hypervisorissa.

Mitä yksityiskohtia OS-tietoisuus pystyy seuraamaan ja havaitsemaan kohdeohjelmistopinosta, riippuu vieraskäyttöjärjestelmästä ja siitä, kuinka paljon työtä on tehty sen OS-tietoisuuden rakentamiseksi.

Vertailtuna laitteistopohjaisten (JTAG-) virheenkorjauslaitteistojen kanssa käytettäviin OS-tietoisuuteen perustuviin järjestelmiin, simulaattorilla on ainutlaatuiset valmiudet seurata tarkkaan tehtävänvaihtoja. Tällaisia ominaisuuksia on osoittautunut epäkäytännölliseksi toteuttaa laitteistopohjaisissa virheenkorjausohjelmissa, koska ne aiheuttaisivat huomattavia yleiskustannuksia ja hukuttaisivat laitteiston taukopisteiden saatavuuden. Hetkellisen tilan tarkastelu on pohjimmiltaan sama kuin laitteistodebuggerin suorittama järjestelmän tilan tarkastelu järjestelmän pysäyttämisen jälkeen, ja samaa koodia, jota käytetään laitteistodebuggereissa, on käytetty Simicsin kanssa esimerkiksi dynaamisesti ladattujen moduulien uudelleensijoitusosoitteiden kaltaisten tosiseikkojen selvittämiseen.

Agenttipohjainen debuggeri ei tarvitse käyttöjärjestelmätietoisuutta, koska se suoritetaan kohdejärjestelmän sisällä ja se voi käyttöjärjestelmän API:iden avulla kysyä kohdejärjestelmän käyttöjärjestelmältä käynnissä olevista tehtävistä, ladatuista moduuleista ja muusta tiedosta.

Vastaa

Sähköpostiosoitettasi ei julkaista.