Kompüter sistemi simulyatorları: tanış tam platforma simulyatoru və naməlum bar və iz

Kompüter sistem simulyatorları haqqında məqalənin ikinci hissəsində mən kompüter simulyatorları haqqında sadə bir giriş şəklində danışmağa davam edəcəyəm, yəni orta istifadəçinin ən çox qarşılaşdığı tam platforma simulyasiyası, eləcə də saatdan asılı olaraq. -developer dairələrində daha çox rast gəlinən saat modeli və izlər.

Kompüter sistemi simulyatorları: tanış tam platforma simulyatoru və naməlum bar və iz

В birinci hissəsində Ümumilikdə simulyatorların nə olduğu, eləcə də simulyasiya səviyyələri haqqında danışdım. İndi həmin biliklərə əsaslanaraq bir az daha dərinə getməyi və tam platforma simulyasiyası, izləri necə toplamaq, onlarla sonra nə etmək, eləcə də saat-saat mikroarxitektura emulyasiyası haqqında danışmağı təklif edirəm.

Tam platforma simulyatoru və ya "Sahədə tək döyüşçü deyil"

Bir xüsusi cihazın, məsələn, şəbəkə kartının işini öyrənmək və ya bu cihaz üçün proqram təminatı və ya sürücü yazmaq istəyirsinizsə, belə bir cihaz ayrıca simulyasiya edilə bilər. Bununla belə, onu infrastrukturun qalan hissəsindən təcrid olunmuş halda istifadə etmək çox rahat deyil. Müvafiq sürücünü işə salmaq üçün sizə mərkəzi prosessor, yaddaş, məlumat avtobusuna giriş və s. Bundan əlavə, sürücünün işləməsi üçün əməliyyat sistemi (OS) və şəbəkə yığını tələb olunur. Bundan əlavə, ayrıca paket generatoru və cavab serveri tələb oluna bilər.

Tam platformalı simulyator BIOS və yükləyicidən tutmuş ƏS-in özünə və onun müxtəlif alt sistemlərinə, məsələn, eyni şəbəkə yığını, drayverlər və istifadəçi səviyyəli proqramlar kimi hər şeyi özündə cəmləşdirən tam proqram yığınını işə salmaq üçün mühit yaradır. Bunun üçün o, əksər kompüter qurğularının proqram modellərini həyata keçirir: prosessor və yaddaş, disk, giriş/çıxış qurğuları (klaviatura, siçan, displey), həmçinin eyni şəbəkə kartı.

Aşağıda Intel-dən x58 çipsetinin blok diaqramı verilmişdir. Bu çipsetdə tam platformalı kompüter simulyatoru sadalanan cihazların əksəriyyətinin, o cümlədən blok diaqramda ətraflı təsvir olunmayan IOH (Giriş/Çıxış Qovşağı) və ICH (Giriş/Çıxış Nəzarətçi Qovşağı) daxilində olanların həyata keçirilməsini tələb edir. . Baxmayaraq ki, təcrübədən göründüyü kimi, işə salacağımız proqram tərəfindən istifadə edilməyən çoxlu cihaz yoxdur. Belə cihazların modellərinin yaradılmasına ehtiyac yoxdur.

Kompüter sistemi simulyatorları: tanış tam platforma simulyatoru və naməlum bar və iz

Çox vaxt tam platformalı simulyatorlar prosessor təlimatı səviyyəsində həyata keçirilir (ISA, aşağıya baxın). əvvəlki məqalə). Bu, simulyatorun özünü nisbətən tez və ucuz yaratmağa imkan verir. ISA səviyyəsi də yaxşıdır, çünki məsələn, daha tez-tez dəyişən API/ABI səviyyəsindən fərqli olaraq az və ya çox sabit qalır. Bundan əlavə, təlimat səviyyəsində həyata keçirmək, dəyişdirilməmiş ikili proqram təminatını işə salmağa imkan verir, yəni artıq tərtib edilmiş kodu heç bir dəyişiklik etmədən, tam olaraq real aparatda istifadə edildiyi kimi işlətməyə imkan verir. Başqa sözlə, siz sabit diskinizin bir nüsxəsini (“zibil”) çıxara, onu tam platformalı simulyatorda model üçün şəkil kimi göstərə bilərsiniz və voila! – ƏS və digər proqramlar heç bir əlavə hərəkət etmədən simulyatora yüklənir.

Simulyator performansı

Kompüter sistemi simulyatorları: tanış tam platforma simulyatoru və naməlum bar və iz

Yuxarıda qeyd edildiyi kimi, bütün sistemin, yəni bütün cihazlarının simulyasiyası prosesi olduqca yavaş bir işdir. Bütün bunları çox təfərrüatlı səviyyədə, məsələn, mikroarxitektura və ya məntiqi şəkildə həyata keçirsəniz, icra çox yavaş olacaq. Lakin təlimat səviyyəsi uyğun seçimdir və OS və proqramların istifadəçinin onlarla rahat şəkildə qarşılıqlı əlaqədə olması üçün kifayət qədər sürətlə icrasına imkan verir.

Burada simulyatorun performansı mövzusuna toxunmaq yerinə düşərdi. O, adətən IPS (saniyədə təlimat), daha dəqiq desək, MIPS (milyonlarla IPS), yəni simulyatorun bir saniyə ərzində yerinə yetirdiyi prosessor təlimatlarının sayı ilə ölçülür. Eyni zamanda, simulyasiyanın sürəti həm də simulyasiyanın özünün işlədiyi sistemin performansından asılıdır. Buna görə də, orijinal sistemlə müqayisədə simulyatorun "yavaşlaması" haqqında danışmaq daha düzgün ola bilər.

QEMU, VirtualBox və ya VmWare Workstation kimi bazarda ən çox yayılmış tam platformalı simulyatorlar yaxşı performansa malikdir. Simulyatorda işin getdiyi istifadəçiyə belə hiss olunmaya bilər. Bu prosessorlarda tətbiq edilən xüsusi virtuallaşdırma imkanları, ikili tərcümə alqoritmləri və digər maraqlı şeylər sayəsində baş verir. Bütün bunlar ayrıca məqalənin mövzusudur, lakin bir sözlə, virtuallaşdırma müasir prosessorların aparat xüsusiyyətidir ki, bu da simulyatorlara təlimatları simulyasiya etməyə deyil, onları icra üçün birbaşa real prosessora göndərməyə imkan verir, əgər əlbəttə ki, arxitektura simulyator və prosessor oxşardır. İkili tərcümə qonaq maşın kodunun host koduna tərcüməsi və sonradan real prosessorda icrasıdır. Nəticədə, simulyasiya yalnız bir qədər yavaş, 5-10 dəfə və çox vaxt hətta real sistemlə eyni sürətlə işləyir. Baxmayaraq ki, buna bir çox amillər təsir edir. Məsələn, bir neçə onlarla prosessoru olan bir sistemi simulyasiya etmək istəsək, sürət dərhal bu bir neçə dəfə azalacaq. Digər tərəfdən, ən son versiyalarda Simics kimi simulyatorlar çoxprosessorlu host avadanlığını dəstəkləyir və simulyasiya edilmiş nüvələri real prosessorun nüvələrinə effektiv şəkildə paralelləşdirir.

Mikroarxitektura simulyasiyasının sürətindən danışırıqsa, o, adətən simulyasiya olmadan adi bir kompüterdə icradan təxminən 1000-10000 dəfə yavaş olan bir neçə böyüklük əmridir. Və məntiqi elementlər səviyyəsində tətbiqlər bir neçə miqyasda daha yavaş olur. Buna görə də, bu səviyyədə emulyator kimi bir FPGA istifadə olunur ki, bu da performansı əhəmiyyətli dərəcədə artıra bilər.

Aşağıdakı qrafik simulyasiya sürətinin model detalından təxmini asılılığını göstərir.

Kompüter sistemi simulyatorları: tanış tam platforma simulyatoru və naməlum bar və iz

Beat-by-beat simulyasiyası

Aşağı icra sürətinə baxmayaraq, mikroarxitektura simulyatorları olduqca yaygındır. Prosessorun daxili bloklarının simulyasiyası hər bir təlimatın icra müddətini dəqiq şəkildə simulyasiya etmək üçün lazımdır. Burada anlaşılmazlıq yarana bilər - axı, belə görünür ki, niyə hər bir təlimat üçün icra müddətini proqramlaşdırmırıq. Ancaq belə bir simulyator çox qeyri-dəqiq olacaq, çünki eyni təlimatın icra müddəti zəngdən zəngə fərqli ola bilər.

Ən sadə nümunə yaddaşa giriş təlimatıdır. Əgər tələb olunan yaddaş yeri keşdə mövcuddursa, o zaman icra müddəti minimal olacaq. Bu məlumat önbellekdə deyilsə (“cache miss”), onda bu, təlimatın icra müddətini xeyli artıracaq. Beləliklə, dəqiq simulyasiya üçün bir önbellek modeli tələb olunur. Bununla belə, məsələ keş modeli ilə məhdudlaşmır. Prosessor sadəcə yaddaşda olmayan məlumatların yaddaşdan çıxarılmasını gözləməyəcək. Bunun əvəzinə o, yaddaşdan oxuma nəticəsindən asılı olmayanları seçərək növbəti təlimatları yerinə yetirməyə başlayacaq. Bu, prosessorun boş vaxtını minimuma endirmək üçün lazım olan "sifarişsiz" icra (OOO, sıradan icra) adlanan icraatdır. Müvafiq prosessor bloklarının modelləşdirilməsi təlimatların icra müddətini hesablayarkən bütün bunları nəzərə almağa kömək edəcəkdir. Yaddaşdan oxuma nəticəsi gözlənildiyi müddətdə yerinə yetirilən bu təlimatlar arasında şərti keçid əməliyyatı baş verə bilər. Əgər şərtin nəticəsi hazırda məlum deyilsə, onda yenidən prosessor icranı dayandırmır, lakin “təxmin edir”, müvafiq şöbəni yerinə yetirir və keçid nöqtəsindən təlimatları fəal şəkildə yerinə yetirməyə davam edir. Budaq proqnozlaşdırıcısı adlanan belə bir blok mikroarxitektura simulyatorunda da həyata keçirilməlidir.

Aşağıdakı şəkil prosessorun əsas bloklarını göstərir, onu bilmək lazım deyil, yalnız mikroarxitekturanın həyata keçirilməsinin mürəkkəbliyini göstərmək üçün göstərilir.

Kompüter sistemi simulyatorları: tanış tam platforma simulyatoru və naməlum bar və iz

Bütün bu blokların real prosessorda işləməsi xüsusi saat siqnalları ilə sinxronlaşdırılır və eyni şey modeldə də baş verir. Belə bir mikroarxitektura simulyatoru dəqiq dövr adlanır. Onun əsas məqsədi işlənən prosessorun işini dəqiq proqnozlaşdırmaq və/və ya konkret proqramın, məsələn, etalonun icra müddətini hesablamaqdır. Dəyərlər tələb olunandan aşağı olarsa, alqoritmləri və prosessor bloklarını dəyişdirmək və ya proqramı optimallaşdırmaq lazımdır.

Yuxarıda göstərildiyi kimi, saat-saat simulyasiyası çox yavaşdır, ona görə də o, yalnız proqramın işinin müəyyən anlarını öyrənərkən istifadə olunur, burada proqramın icrasının real sürətini tapmaq və cihazın gələcək fəaliyyətini qiymətləndirmək lazımdır. prototip simulyasiya edilir.

Bu halda, proqramın qalan işləmə müddətini simulyasiya etmək üçün funksional simulyatordan istifadə olunur. Bu istifadənin birləşməsi reallıqda necə baş verir? Əvvəlcə funksional simulyator işə salınır, ona ƏS və öyrənilən proqramı işə salmaq üçün lazım olan hər şey yüklənir. Axı bizi nə ƏS-nin özü, nə də proqramı işə salmağın ilkin mərhələləri, onun konfiqurasiyası və s. Bununla belə, biz də bu hissələri atlaya bilmərik və dərhal proqramı ortadan icra etməyə keçə bilərik. Buna görə də, bütün bu ilkin addımlar funksional simulyatorda həyata keçirilir. Proqram bizi maraqlandıran ana qədər icra edildikdən sonra iki seçim mümkündür. Siz modeli saat-by-cycle modeli ilə əvəz edə və icraya davam edə bilərsiniz. İcra edilə bilən koddan istifadə edən simulyasiya rejimi (yəni adi tərtib edilmiş proqram faylları) icraya əsaslanan simulyasiya adlanır. Bu ən çox yayılmış simulyasiya variantıdır. Başqa bir yanaşma da mümkündür - iz əsaslı simulyasiya.

İz əsaslı simulyasiya

İki addımdan ibarətdir. Funksional simulyatordan və ya real sistemdən istifadə edərək proqram hərəkətlərinin jurnalı toplanır və fayla yazılır. Bu log iz adlanır. Tədqiq olunandan asılı olaraq, iz icra edilə bilən təlimatları, yaddaş ünvanlarını, port nömrələrini və kəsmə məlumatlarını ehtiva edə bilər.

Növbəti addım saat-saat simulyatoru izi oxuduqda və orada yazılmış bütün təlimatları yerinə yetirdikdə izi "oynamaq"dır. Sonda biz proqramın bu hissəsinin icra müddətini, həmçinin bu prosesin müxtəlif xüsusiyyətlərini, məsələn, önbellekdəki hitlərin faizini alırıq.

İzlərlə işləməyin vacib bir xüsusiyyəti determinizmdir, yəni simulyasiyanı yuxarıda təsvir olunan şəkildə həyata keçirərək, eyni hərəkət ardıcıllığını təkrar-təkrar təkrar edirik. Bu, model parametrlərini (keş, bufer və növbə ölçüləri) dəyişdirməklə və müxtəlif daxili alqoritmlərdən istifadə etməklə və ya onları sazlamaqla müəyyən parametrin sistem performansına necə təsir etdiyini və hansı variantın ən yaxşı nəticələri verdiyini öyrənməyə imkan verir. Bütün bunlar faktiki aparat prototipi yaratmazdan əvvəl prototip cihaz modeli ilə edilə bilər.

Bu yanaşmanın mürəkkəbliyi əvvəlcə tətbiqi işə salmaq və izi toplamaq ehtiyacı, həmçinin iz faylının böyük ölçüsündədir. Üstünlüklərə cihazın və ya maraq platformasının yalnız bir hissəsini simulyasiya etmək kifayətdir, icra yolu ilə simulyasiya adətən tam model tələb edir.

Beləliklə, bu məqalədə tam platformalı simulyasiyanın xüsusiyyətlərinə baxdıq, müxtəlif səviyyələrdə həyata keçirmə sürəti, saatdan dövr simulyasiyası və izlər haqqında danışdıq. Növbəti məqalədə həm şəxsi məqsədlər üçün, həm də böyük şirkətlərdə inkişaf baxımından simulyatorlardan istifadənin əsas ssenarilərini təsvir edəcəyəm.

Mənbə: www.habr.com

Добавить комментарий