Компьютерийн системийн симуляторууд: танил бүрэн платформ симулятор ба цагийн зүүний дагуу үл мэдэгдэх, ул мөр.

Компьютерийн системийн симуляторуудын тухай өгүүллийн хоёр дахь хэсэгт би компьютерийн симуляторуудын тухай энгийн танилцуулга хэлбэрээр, тухайлбал энгийн хэрэглэгчдэд ихэвчлэн тулгардаг бүрэн платформын симуляцийн тухай, мөн цагийн давтамжийн талаар үргэлжлүүлэн ярих болно. -хөгжүүлэгчдийн хүрээлэлд илүү түгээмэл байдаг цагны загвар ба мөрүүд.

Компьютерийн системийн симуляторууд: танил бүрэн платформ симулятор ба цагийн зүүний дагуу үл мэдэгдэх, ул мөр.

В эхний хэсэг Би симулятор гэж юу болох, мөн симуляцийн түвшний талаар ярьсан. Одоо энэ мэдлэг дээр үндэслэн би бага зэрэг гүнзгийрч, бүрэн платформ симуляци, ул мөрийг хэрхэн цуглуулах, дараа нь юу хийх, мөн цаг тутамд микроархитектурын эмуляцийн талаар ярихыг санал болгож байна.

Бүрэн платформ симулятор буюу "Талбайд ганцаараа бол дайчин биш"

Хэрэв та тодорхой нэг төхөөрөмжийн ажиллагааг судлах, жишээлбэл сүлжээний карт эсвэл энэ төхөөрөмжийн програм хангамж эсвэл драйвер бичихийг хүсвэл ийм төхөөрөмжийг тусад нь дуурайж болно. Гэсэн хэдий ч бусад дэд бүтцээс тусад нь ашиглах нь тийм ч тохиромжтой биш юм. Холбогдох драйверийг ажиллуулахын тулд танд төв процессор, санах ой, өгөгдлийн автобус руу нэвтрэх гэх мэт хэрэгтэй болно. Нэмж дурдахад драйвер ажиллахын тулд үйлдлийн систем (OS) болон сүлжээний стек шаардлагатай. Үүнээс гадна тусдаа пакет үүсгэгч болон хариу өгөх сервер шаардлагатай байж болно.

Бүрэн платформ симулятор нь BIOS болон ачаалагчаас эхлээд үйлдлийн систем болон түүний төрөл бүрийн дэд системүүд, тухайлбал ижил сүлжээний стек, драйверууд, хэрэглэгчийн түвшний программуудыг багтаасан програм хангамжийн бүрэн стекийг ажиллуулах орчныг бүрдүүлдэг. Үүнийг хийхийн тулд ихэнх компьютерийн төхөөрөмжүүдийн програм хангамжийн загваруудыг хэрэгжүүлдэг: процессор ба санах ой, диск, оролт/гаралтын төхөөрөмж (гар, хулгана, дэлгэц), мөн ижил сүлжээний карт.

Intel-ийн x58 чипсетийн блок диаграммыг доор харуулав. Энэхүү чипсет дээрх бүрэн платформ компьютерийн симулятор нь блок диаграмм дээр нарийвчлан дүрслэгдээгүй IOH (Оролт/Гаралтын төв) ба ICH (Оролт/Гаралтын хянагч төв) дотор байгаа ихэнх төхөөрөмжүүдийг хэрэгжүүлэхийг шаарддаг. . Хэдийгээр практикээс харахад бидний ажиллуулах гэж буй програм хангамжид ашиглагдаагүй олон төхөөрөмж байдаггүй. Ийм төхөөрөмжүүдийн загварыг бий болгох шаардлагагүй.

Компьютерийн системийн симуляторууд: танил бүрэн платформ симулятор ба цагийн зүүний дагуу үл мэдэгдэх, ул мөр.

Ихэнх тохиолдолд бүрэн платформ симуляторуудыг процессорын зааврын түвшинд хэрэгжүүлдэг (ISA, доороос үзнэ үү). өмнөх нийтлэл). Энэ нь симуляторыг харьцангуй хурдан бөгөөд хямдхан үүсгэх боломжийг танд олгоно. ISA түвшин нь бас сайн байдаг, учир нь энэ нь тогтмол өөрчлөгддөг API/ABI түвшингээс ялгаатай нь тогтмол хэвээр байна. Нэмж дурдахад, зааврын түвшинд хэрэгжүүлэх нь өөрчлөгдөөгүй хоёртын програм хангамжийг ажиллуулах боломжийг олгодог, өөрөөр хэлбэл аль хэдийн хөрвүүлсэн кодыг бодит техник хангамжид ашигладаг шиг ямар ч өөрчлөлтгүйгээр ажиллуулах боломжийг олгодог. Өөрөөр хэлбэл, та хатуу дискнийхээ хуулбарыг ("хогийн") хийж, үүнийг бүрэн платформын симулятор дахь загварт зориулсан зураг болгон зааж өгч болно. – Үйлдлийн систем болон бусад программуудыг нэмэлт үйлдэлгүйгээр симулятор дээр ачаалдаг.

Симуляторын гүйцэтгэл

Компьютерийн системийн симуляторууд: танил бүрэн платформ симулятор ба цагийн зүүний дагуу үл мэдэгдэх, ул мөр.

Дээр дурдсанчлан бүхэл бүтэн системийг, өөрөөр хэлбэл түүний бүх төхөөрөмжийг дуурайх үйл явц нь нэлээд удаан ажил юм. Хэрэв та энэ бүгдийг маш нарийн түвшинд, жишээлбэл, микроархитектур эсвэл логик байдлаар хэрэгжүүлбэл гүйцэтгэл маш удаан болно. Гэхдээ зааварчилгааны түвшин нь хамгийн тохиромжтой сонголт бөгөөд үйлдлийн систем болон программуудыг хэрэглэгчтэй тухтай харьцахад хангалттай хурдаар ажиллуулах боломжийг олгодог.

Энд симуляторын гүйцэтгэлийн сэдвийг хөндөх нь зүйтэй болов уу. Энэ нь ихэвчлэн IPS (секундэд заавар), илүү нарийвчлалтай MIPS (сая IPS), өөрөөр хэлбэл симуляторын нэг секундэд гүйцэтгэсэн процессорын зааврын тоогоор хэмжигддэг. Үүний зэрэгцээ симуляцийн хурд нь загварчлал өөрөө ажиллаж буй системийн гүйцэтгэлээс хамаарна. Тиймээс анхны системтэй харьцуулахад симуляторын "удаашрал" талаар ярих нь илүү зөв байж болох юм.

QEMU, VirtualBox эсвэл VmWare Workstation зэрэг зах зээл дээрх хамгийн түгээмэл бүрэн платформ симуляторууд сайн гүйцэтгэлтэй байдаг. Симулятор дээр ажил явагдаж байгаа нь хэрэглэгчдэд мэдэгдэхгүй байж магадгүй юм. Энэ нь процессоруудад хэрэгжсэн виртуалчлалын тусгай чадварууд, хоёртын орчуулгын алгоритмууд болон бусад сонирхолтой зүйлсийн ачаар тохиолддог. Энэ бол тусдаа өгүүллийн сэдэв боловч товчхондоо виртуалчлал нь орчин үеийн процессоруудын техник хангамжийн онцлог бөгөөд симуляторуудад зааврыг дуурайх биш харин тэдгээрийг шууд бодит процессор руу илгээх боломжийг олгодог. симулятор болон процессор нь ижил төстэй. Хоёртын орчуулга гэдэг нь зочны машины кодыг хост код руу хөрвүүлж, дараа нь бодит процессор дээр гүйцэтгэх явдал юм. Үүний үр дүнд симуляци нь зөвхөн бага зэрэг удааширч, 5-10 удаа, тэр ч байтугай бодит системтэй ижил хурдаар ажилладаг. Хэдийгээр үүнд олон хүчин зүйл нөлөөлдөг. Жишээлбэл, хэрэв бид хэдэн арван процессортой системийг дуурайхыг хүсвэл хурд тэр даруй хэдэн арван дахин буурах болно. Нөгөөтэйгүүр, Simics гэх мэт симуляторууд нь хамгийн сүүлийн үеийн хувилбаруудад олон процессорын хостын техник хангамжийг дэмжиж, загварчилсан цөмүүдийг бодит процессорын цөмтэй үр дүнтэй зэрэгцүүлдэг.

Хэрэв бид микроархитектурын симуляцийн хурдны тухай ярих юм бол энэ нь ердийн компьютер дээр гүйцэтгэхээс 1000-10000 дахин удаан, загварчлалгүйгээр хэд хэдэн дарааллаар явагддаг. Логик элементүүдийн түвшний хэрэгжилт нь хэд хэдэн дарааллаар удааширдаг. Тиймээс FPGA-г энэ түвшинд эмулятор болгон ашигладаг бөгөөд энэ нь гүйцэтгэлийг ихээхэн нэмэгдүүлэх боломжтой юм.

Доорх график нь загварчлалын хурд нь загварын нарийвчилсан хэмжээнээс ойролцоогоор хамааралтай болохыг харуулж байна.

Компьютерийн системийн симуляторууд: танил бүрэн платформ симулятор ба цагийн зүүний дагуу үл мэдэгдэх, ул мөр.

Цохилтын загварчлал

Гүйцэтгэх хурд багатай ч бичил архитектурын симуляторууд нэлээд түгээмэл байдаг. Процессорын дотоод блокуудыг симуляци хийх нь заавар бүрийн гүйцэтгэлийн хугацааг үнэн зөв загварчлахын тулд зайлшгүй шаардлагатай. Энд үл ойлголцол үүсч магадгүй юм - эцэст нь яагаад заавар бүрийн гүйцэтгэлийн цагийг програмчилж болохгүй гэж. Гэхдээ ийм симулятор нь маш буруу байх болно, учир нь ижил зааварчилгааг гүйцэтгэх хугацаа нь дуудлагаас өөр байж болно.

Хамгийн энгийн жишээ бол санах ойд нэвтрэх заавар юм. Хэрэв хүссэн санах ойн байршил кэшэд байгаа бол гүйцэтгэх хугацаа хамгийн бага байх болно. Хэрэв энэ мэдээлэл кэшэд байхгүй бол ("кэш алдах") энэ нь зааврыг гүйцэтгэх хугацааг ихээхэн нэмэгдүүлэх болно. Тиймээс үнэн зөв загварчлал хийхэд кэш загвар шаардлагатай. Гэсэн хэдий ч энэ асуудал зөвхөн кэш загвараар хязгаарлагдахгүй. Процессор нь санах ойн санах ойн санах ойн санах ойд байхгүй үед өгөгдлийг татаж авахыг хүлээхгүй. Үүний оронд санах ойноос уншсан үр дүнгээс үл хамаарах зааврыг сонгон дараагийн зааварчилгааг гүйцэтгэж эхэлнэ. Энэ нь процессорын сул зогсолтыг багасгахад шаардлагатай "зохицуулалтгүй" гүйцэтгэл (OOO, out of order) гэж нэрлэгддэг гүйцэтгэл юм. Холбогдох процессорын блокуудыг загварчлах нь зааврын гүйцэтгэлийн хугацааг тооцоолохдоо энэ бүхнийг харгалзан үзэхэд тусална. Санах ойноос унших үр дүнг хүлээж байх үед гүйцэтгэсэн эдгээр заавруудын дунд нөхцөлт үсрэлт гарч болзошгүй. Хэрэв нөхцөл байдлын үр дүн одоогоор тодорхойгүй бол процессор дахин гүйцэтгэлийг зогсоохгүй, харин "таамаглах" үйлдлийг хийж, зохих салбарыг хийж, шилжилтийн цэгээс зааварчилгааг идэвхтэй гүйцэтгэнэ. Салбарын таамаглагч гэж нэрлэгддэг ийм блокыг микроархитектурын симулятор дээр бас хэрэгжүүлэх ёстой.

Доорх зураг нь процессорын үндсэн блокуудыг харуулсан бөгөөд үүнийг мэдэх шаардлагагүй, зөвхөн микроархитектурын хэрэгжилтийн нарийн төвөгтэй байдлыг харуулахын тулд харуулсан болно.

Компьютерийн системийн симуляторууд: танил бүрэн платформ симулятор ба цагийн зүүний дагуу үл мэдэгдэх, ул мөр.

Жинхэнэ процессор дахь эдгээр бүх блокуудын ажиллагаа нь тусгай цагийн дохиогоор синхрончлогддог бөгөөд загварт ижил зүйл тохиолддог. Ийм бичил архитектурын симуляторыг мөчлөгийн нарийвчлал гэж нэрлэдэг. Үүний гол зорилго нь боловсруулж буй процессорын гүйцэтгэлийг зөв таамаглах ба/эсвэл тодорхой программ, жишээлбэл, жишиг үзүүлэлтийн гүйцэтгэлийн хугацааг тооцоолох явдал юм. Хэрэв утга нь шаардлагатай хэмжээнээс доогуур байвал алгоритм болон процессорын блокуудыг өөрчлөх эсвэл програмыг оновчтой болгох шаардлагатай болно.

Дээр дурдсанчлан цагийн хуваарь нь маш удаан байдаг тул үүнийг зөвхөн програмын гүйцэтгэлийн бодит хурдыг олж мэдэх, төхөөрөмжийн ирээдүйн гүйцэтгэлийг үнэлэх шаардлагатай програмын үйл ажиллагааны тодорхой мөчүүдийг судлахад ашигладаг. прототипийг загварчилж байна.

Энэ тохиолдолд функциональ симулятор нь програмын үлдсэн хугацааг дуурайлган загварчлахад ашиглагддаг. Хэрэглээний энэ хослол бодит байдал дээр хэрхэн тохиолддог вэ? Эхлээд функциональ симуляторыг ажиллуулж, OS болон судалж буй програмыг ажиллуулахад шаардлагатай бүх зүйлийг ачаална. Эцсийн эцэст бид үйлдлийн систем өөрөө, програмыг эхлүүлэх эхний үе шат, түүний тохиргоо гэх мэтийг сонирхдоггүй. Гэсэн хэдий ч бид эдгээр хэсгүүдийг алгасах боломжгүй бөгөөд тэр даруй програмыг дундаас нь гүйцэтгэхэд шилжинэ. Тиймээс эдгээр бүх урьдчилсан алхмуудыг функциональ симулятор дээр гүйцэтгэдэг. Хөтөлбөрийг бидний сонирхож буй мөч хүртэл хэрэгжүүлсний дараа хоёр сонголт хийх боломжтой. Та загварыг цаг тутамд сольж, гүйцэтгэлийг үргэлжлүүлж болно. Гүйцэтгэх кодыг (өөрөөр хэлбэл ердийн хөрвүүлсэн програмын файлууд) ашигладаг симуляцийн горимыг гүйцэтгэлд тулгуурласан симуляци гэж нэрлэдэг. Энэ бол хамгийн түгээмэл симуляцийн сонголт юм. Өөр нэг арга бас боломжтой - ул мөр хөтлөх симуляци.

Мөр дээр суурилсан симуляци

Энэ нь хоёр алхамаас бүрдэнэ. Функциональ симулятор эсвэл бодит систем дээр програмын үйлдлийн бүртгэлийг цуглуулж файлд бичдэг. Энэ бүртгэлийг ул мөр гэж нэрлэдэг. Шалгаж байгаа зүйлээс хамааран мөр нь гүйцэтгэх заавар, санах ойн хаяг, портын дугаар, тасалдлын мэдээллийг агуулж болно.

Дараагийн алхам бол мөрийг "тоглох" бөгөөд цагт цагийн симулятор ул мөрийг уншиж, түүнд бичсэн бүх зааврыг гүйцэтгэх болно. Төгсгөлд нь бид програмын энэ хэсгийг гүйцэтгэх хугацаа, мөн энэ үйл явцын янз бүрийн шинж чанарууд, жишээлбэл, кэш дэх хитүүдийн хувийг авдаг.

Мөртэй ажиллах нэг чухал шинж чанар бол детерминизм юм, өөрөөр хэлбэл дээр дурдсан аргаар симуляцийг ажиллуулснаар бид ижил үйлдлийн дарааллыг дахин дахин гаргадаг. Энэ нь загварын параметрүүдийг (кэш, буфер болон дарааллын хэмжээ) өөрчлөх, өөр өөр дотоод алгоритмуудыг ашиглах эсвэл тааруулах замаар тухайн параметр нь системийн гүйцэтгэлд хэрхэн нөлөөлж, аль сонголт нь хамгийн сайн үр дүнг өгч байгааг судлах боломжтой болгодог. Бодит техник хангамжийн прототипийг бүтээхээс өмнө энэ бүгдийг төхөөрөмжийн прототип загвараар хийж болно.

Энэ аргын нарийн төвөгтэй байдал нь эхлээд програмыг ажиллуулж, ул мөрийг цуглуулах хэрэгцээ, мөн ул мөр файлын асар том хэмжээтэй байдаг. Давуу талууд нь зөвхөн төхөөрөмжийн хэсэг эсвэл сонирхож буй платформыг дуурайлган дуурайхад хангалттай байдаг бол гүйцэтгэх загварчлал нь ихэвчлэн бүрэн загвар шаарддаг.

Тиймээс, энэ нийтлэлд бид бүрэн платформ симуляцийн онцлогуудыг авч үзсэн бөгөөд янз бүрийн түвшний хэрэгжилтийн хурд, цаг тутамд симуляци, ул мөрийн талаар ярилцсан. Дараагийн нийтлэлд би симуляторуудыг хувийн зорилгоор болон томоохон компаниудын хөгжлийн үүднээс ашиглах үндсэн хувилбаруудыг тайлбарлах болно.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх