Artikli teises osas, mis kĂ€sitleb arvutisĂŒsteemide simulaatoreid, jĂ€tkan arvutisimulaatorite, sealhulgas tĂ€isplatvormilise simulaatori lihtsa ĂŒlevaate andmist, millega tavakasutaja kĂ”ige sagedamini kokku puutub, samuti takti mudelit ja radu, mis on rohkem levinud arendajate seas.

V RÀÀkisin, mis on simulaatorid ĂŒldiselt, ning mudelihierarhiatest. NĂŒĂŒd, tuginedes sellele teadlikkusele, kutsun teid sĂŒgavamale laskuma ja rÀÀkima tĂ€isplatvormilisest simulaatorist, kuidas rajad kokku panna, mida nendega hiljem teha ja taktikalise mikroarhitektuuri emulatsioonist.
TĂ€isplatvormiline simulaator (full platform simulator), vĂ”i "Ăks lahingus ei ole sĂ”dalane".
Kui on vajalik uurida konkreetse seadme, nĂ€iteks vĂ”rgukaardi tööd vĂ”i kirjutada sellele seadmele pĂŒsivara vĂ”i draiver, saab sellist seadet simuleerida eraldi. Siiski on selle kasutamine eraldi ĂŒlejÀÀnud infrastruktuurist ĂŒsna ebamugav. Vastava draiveri kĂ€itamiseks on vajalik keskpink, mĂ€lu, juurdepÀÀs andmeedastuse bussile ja muu. Lisaks vajab draiveri toimimiseks operatsioonisĂŒsteemi (OS) ja vĂ”rguprotokolli. Sellele vĂ”ib lisanduda eraldi pakettide generaator ja vastuste vastuvĂ”tu server.
TĂ€isplatvormiline simulaator loob keskkonna kogu tarkvarakihi kĂ€itamiseks, mis hĂ”lmab kĂ”ike alates BIOS-ist ja laadimisprogrammist kuni operatsioonisĂŒsteemi ja erinevate alamĂŒsteemideni, nagu samuti vĂ”rguprotokoll, draiverid, ja kasutajataseme rakendused. Selleks on selles rakendatud enamik arvuti seadmete tarkvaramudeleid: protsessor ja mĂ€lu, ketas, sisend-vĂ€ljund seadmed (klaviatuur, hiir, ekraan) ning see sama vĂ”rkaart.
Allpool on Intel x58 kiibi plokk-diagramm. TÀisplatvormi arvutisimulaatoris sellel kiibil on vajalik enamik loetletud seadmete rakendusi, sealhulgas neid, mis asuvad IOH (sisendi/vÀljaande keskuses) ja ICH (sisendi/vÀljaande juhtimiskeskuses), mis pole plokk-diagrammil detailidena joonistatud. Kuigi praktika nÀitab, et paljusid seadmeid ei kasutata tarkvara, mida plaanime kÀivitada. Selliste seadmete mudeleid vÔib mitte luua.

Tavaliselt rakendatakse tĂ€isplatvormi simulaatoreid protsessori kĂ€su tasemel (ISA, vt. ). See, it's quite fast and inexpensive to create the simulator itself. The ISA level is also good because it remains more or less constant, unlike the API/ABI level, which changes more frequently. Moreover, the instruction-level implementation allows for the execution of so-called unmodified binary software, meaning that already compiled code can be run without any alterations, just as it is used on real hardware. In other words, it's possible to create a copy (a dump) of the hard drive, specify it as an image for the model in a full-platform simulator, and voilĂ ! â the OS and other programs load in the simulator without any additional actions.
Simulaatorite jÔudlus

Nagu eespool mainitud, on kogu sĂŒsteemi, sealhulgas kĂ”igi selle seadmete simuleerimise protsess ĂŒsna aeglane. Kui seda teostatakse veel vĂ€ga detailsel tasemel, nĂ€iteks mikroarhitektuurses vĂ”i loogilises, siis tĂ€itmine muutub ÀÀrmiselt aeglaseks. KĂŒll aga on kĂ€sutuste tase sobiv valik ja vĂ”imaldab operatsioonisĂŒsteemil ja programmide kĂ€ivitamisel töötada kiirusel, mis on piisav kasutajale mugavaks suhtlemiseks nendega.
Siin on paslik puudutada simulaatorite toimivuse teemat. Tavaliselt mÔÔdetakse seda IPS-is (instructions per second), tĂ€psemalt MIPS-is (millions IPS), mis tĂ€histab protsessori poolt simulaatori poolt ĂŒhe sekundi jooksul tĂ€idetud kĂ€skude arvu. Samuti sĂ”ltub simuleerimise kiirus sĂŒsteemi jĂ”udlusest, millel simuleerimine toimub. SeetĂ”ttu on vĂ”ib-olla Ă”igem rÀÀkida simulaatori 'aeglustumisest' (slowdown) vĂ”rreldes originaalsĂŒsteemiga.
Turul turul olevad tĂ€islahendusega simulaatorid, nagu QEMU, VirtualBox vĂ”i VmWare Workstation, pakuvad head jĂ”udlust. Kasutaja ei pruugi isegi mĂ€rgata, et töö toimub simulaatoris. See juhtub tĂ€nu protsessorites rakendatud virtualiseerimisele, binaarsele tĂ”lkele ja teistele huvitavatele elementidele. See on kĂ”ik teema eraldi artiklile, kuid lĂŒhidalt öeldes, virtualiseerimine on kaasaegsete protsessorite riistvaraline vĂ”imalus, mis vĂ”imaldab simulaatoritel mitte simuleerida kĂ€ske, vaid edastada need otse reaalsesse protsessorisse, kui simulaatori ja protsessori arhitektuur on sarnased. Binaarne tĂ”lge on kĂŒlalistemĂŒĂŒrikoodi tĂ”lkimine host-koodi ja selle jĂ€rgnevalt sooritamine reaalses protsessoris. Tulemuseks on, et simuleerimine on vaid veidi aeglasem, 5â10 korda, ja tihti töötab see ĂŒldse sama kiiresti kui reaalne sĂŒsteem. Kuigi sellele mĂ”jutab palju tegureid. NĂ€iteks, kui soovime simuleerida sĂŒsteemi, millel on mĂ”ned tosinad protsessorit, siis kiirus kukub kohe mitmekĂŒmne korra vĂ”rra. Teiselt poolt toetavad Simicsi tĂŒĂŒpi simulaatorid viimastes versioonides mitme protsessoriga host-seadmeid ja tĂ”husalt jaotavad simuleeritud tuumad uute protsessori tuumadele.
Kui rÀÀkida mikroarhitektuuri simuleerimise kiirusest, siis on see tavaliselt mitme jĂ€rgu vĂ”rra, umbes 1000â10000 korda, aeglasem kui tavalise arvuti töötlemine ilma simulatsioonita. Ja rakendused, mis toimivad loogikasĂŒsteemide tasemel, on veel aeglasemad. SeetĂ”ttu kasutatakse sellel tasemel emulaatorina FPGA-sid, mis vĂ”imaldab oluliselt suurendada jĂ”udlust.
Allolev graafik illustreerib simulatsiooni kiiruse sÔltuvust mudeli detailsusest.

SĂŒdametoonide simulatsioon
Hoolimata madalast töötlemise kiirusest on mikroarhitektuuri simulaatorid ĂŒsna levinud. Protsessori sisemiste plokkide modelleerimine on vajalik, et tĂ€pselt simuleerida iga kĂ€su tĂ€itmise aega. Siin vĂ”ib tekkida arusaamatus â miks mitte vĂ”tta ja programmeerida iga kĂ€su tĂ€itmise aeg? Kuid selline simulaator töötaks vĂ€ga ebatĂ€pselt, kuna ĂŒhe ja sama kĂ€su tĂ€itmise aeg vĂ”ib varieeruda sĂ”ltuvalt kutsest.
Lihtne nĂ€ide â mĂ€lu pĂ€ringu juhend. Kui kĂŒsitud mĂ€lurakk on vahemĂ€lus saadaval, siis tĂ€itmise aeg on minimaalne. Kui selles vahemĂ€lus ei ole vajalikku teavet ("vahemĂ€lu tabamine", cache miss), siis see oluliselt pikendab kĂ€skluse tĂ€itmise aega. SeetĂ”ttu on tĂ€pseks simuleerimiseks vajalik vahemĂ€lu mudel. Siiski ei piirdu asi vaid vahemĂ€lu mudeliga. Protsessor ei hakka lihtsalt ootama andmete saamist mĂ€lust, kui need pole vahemĂ€lus saadaval. Selle asemel alustab ta jĂ€rgmiste kĂ€skluste tĂ€itmist, valides need, mis ei sĂ”ltu mĂ€lu lugemise tulemusest. See on nii-öelda âjĂ€rjestusest kĂ”rvalekaldumineâ (Out Of Order Execution, OOO), mis on vajalik protsessori seiskamisaja minimeerimiseks. KĂ”igi nende aspektide arvestamine kĂ€skluste tĂ€itmise aja arvutamisel aitab simuleerida vastavaid protsessoriblokke. Nende kĂ€skluste seas, mis tĂ€idetakse, kuni oodatakse mĂ€lu lugemise tulemust, vĂ”ib esineda tingimusliku hĂŒppe operatsioon. Kui tingimuse tĂ€itmise tulemus ei ole hetkel teada, siis protsessor ei peatu tĂ€itmist, vaid teeb âeeldamiseâ, aitab vastavat hĂŒpet ja jĂ€tkab ennetavalt kĂ€skluste tĂ€itmist hĂŒppe asukohast. Selline plokk, mida nimetatakse haruhalduriks (branch predictor), peab samuti olema mikroarhitektuurisimulaatoris rakendatud.
Allpool nÀidatud pilt nÀitab protsessori pÔhibloke, mille tundmine pole hÀdavajalik; see on esitatud ainult mikroarhitektuurilise teostuse keerukuse nÀitamiseks.

TĂ”elise protsessori kĂ”igi nende blokki töö sĂŒnkroniseeritakse spetsiaalsete taktsignaalidega, nagu toimub ka mudelis. Sellist mikroarhitektuurilist simulaatorit nimetatakse taktsimulaatoriks (cycle accurate). Selle peamine eesmĂ€rk on tĂ€pselt prognoosida arendatava protsessori jĂ”udlust ja/vĂ”i arvutada konkreetse programmi, nĂ€iteks mingisuguse testprogrammi, tĂ€itmise aega. Kui vÀÀrtused on madalamad kui vajalikud, tuleb töötada vĂ€lja algoritme ja protsessori bloke vĂ”i optimeerida programmi.
Nagu ĂŒlal nĂ€idatud, on taktsimuleerimine vĂ€ga aeglane, seetĂ”ttu kasutatakse seda ainult teatud programmide töö uurimiseks, kus on vajalik teada programmide tegelikku tĂ€itmise kiirus ja hinnata seadme tulevast jĂ”udlust, mille prototĂŒĂŒp on simuleeritud.
Samuti kasutatakse programmide töötamise ĂŒlejÀÀnud aja simuleerimiseks funktsionaalset simulaatorit. Kuidas selline kombineeritud kasutamine tegelikult toimub? Esiteks kĂ€ivitatakse funktsionaalne simulaator, kus laaditakse operatsioonisĂŒsteem ja kĂ”ik vajalik uuritava programmi kĂ€ivitamiseks. Meid ei huvita ei operatsioonisĂŒsteem ise, ei programmi kĂ€ivitamise algstaadiumid, selle seadistamine jne. Kuid me ei saa need osad vahele jĂ€tta ja kohe programmi tĂ€itmise keskele minna. Seega kĂ”ik need eelnevad etapid lĂ€bivad funktsionaalset simulaatorit. PĂ€rast seda, kui programm on tĂ€idetud meie huvipakkuva hetkeni, on kaks vĂ”imalust. Saame mudeli asendada taktisĂŒsteemiga ja jĂ€tkata tĂ€itmist. TĂ€itmisreĆŸiimi, kus kasutatakse tĂ€idetavat koodi (st tavalisi kompileeritud programmifaile), nimetatakse tĂ€itmisjuhtimise simuleerimiseks (execution driven simulation). See on kĂ”ige levinum simuleerimise variant. Samuti on vĂ”imalik teine lĂ€henemisviis â jĂ€lgede pĂ”hine simuleerimine (trace driven simulation).
JÀlgede pÔhine simuleerimine
See koosneb kahest sammust. Funktsionaalse simulaatori abil vĂ”i reaalsetes sĂŒsteemides kogutakse ja salvestatakse programmitegevuse logi faili. Sellist logi nimetatakse jĂ€ljendiks (trace). SĂ”ltuvalt uuritavast sisust vĂ”ib jĂ€ljend sisaldada teostatavaid instruktsioone, mĂ€luaadresse, portide numbreid ja katkestuste teavet.
JĂ€rgmine samm on jĂ€ljendi «mĂ€ngimine», kui taktsimulaator loeb jĂ€ljendi ja tĂ€idab kĂ”ik seal kirja pandud instruktsioonid. LĂ”puks saame selle programmi tĂŒkikese töötamise aja ning erinevaid selle protsessi omadusi, nĂ€iteks vahemĂ€lu tabamuse protsendi.
TĂ€htis aspekt jĂ€lgimise juures on determinismi olemasolu, see tĂ€hendab, et kĂ€ivitades simulatsiooni eelpool kirjeldatud viisil, kulgeb iga kord sama sĂŒndmuste jada. See vĂ”imaldab mudeli parameetreid (vahemĂ€lu, puhver ja jĂ€rjekorrad) muutuvaid ja kasutades erinevaid sisemisi algoritme vĂ”i neid kohandades uurida, kuidas teatud parameeter mĂ”jutab sĂŒsteemi jĂ”udlust ning milline variant annab parimaid tulemusi. KĂ”ike seda saab teha seadme prototĂŒĂŒbi mudeliga enne reaalse riistvara prototĂŒĂŒbi loomist.
Selle lÀhenemise keerukus seisneb rakenduse eelneva lÀbimise ja jÀlje kogumise vajaduses ning jÀlje faili tohutu suuruses. Plusside seas on see, et piisab vaid huvipakkuva osa modelleerimisest seadmest vÔi platvormist, samas kui tÀitmise simulatsioon nÔuab tavaliselt kogu mudelit.
Nii, selles artiklis arutame pÔhjalikult platvormipÔhise simulatsiooni omadusi, rÀÀgime erinevatel tasanditel jÔudluse kiirusest, takti simulatsioonist ja radadest. JÀrgmises artiklis kirjeldan peamisi kasutusvÔimalusi simulaatorite jaoks, olgu need isiklikuks otstarbeks vÔi suurte ettevÔtete arendustegevuses.
Allikas: habr.com
