Computersystem-Simulatoren - sehen sie wie die RealitÀt aus?

In einer einfachen und leicht zugĂ€nglichen Sprache ĂŒber grundlegende Begriffe aus dem Bereich der Simulatoren sowie Arten und Detaillierungsgrade von Modellen. Material fĂŒr eine einfache und schnelle Bekanntschaft mit diesem Bereich.

Bild

Wenn ich vor einiger Zeit nach der Simulation gefragt worden wĂ€re, wĂ€re mir als erstes mein Sohn eingefallen, der am Vorabend der Kontrolle in der Schule ĂŒber seinen kranken Magen spricht. In den letzten zehn Jahren habe ich jedoch mit Simulatoren verschiedener Computersysteme gearbeitet, von Telefonen bis zu Servern, die auf Mikroprozessoren, SOCs (System-On-Chip) und ChipsĂ€tzen eines der grĂ¶ĂŸten Hersteller basieren (der Name steht leider unter der NDA), und meine Idee von Die Simulation hat sich geĂ€ndert. Aber das Wichtigste zuerst.

Ich bin sicher, dass viele von Ihnen auf Simulatoren gestoßen sind, die oft als virtuelle Maschinen oder Hypervisoren bezeichnet werden. Jemand installiert Parallels Studio auf seinem Mac, um Windows unter MacOS auszufĂŒhren. Jemand verwendet ein Produkt von VmWare - Workstation, um ein anderes Betriebssystem (OS) zu installieren, das bereits installiert ist. Diejenigen, die mit Linux vertraut sind, bevorzugen KVM und QEMU. Ebenfalls beliebt bei den Menschen ist VirtualBox. Menschen, die professionell FPGA-basierte Hardware (Programmable Logic Integrated Circuits) entwickeln, kennen VCS von Synopsys und Mentor Graphics Questa. Und doch ist dies nur ein kleiner Teil dessen, was man als Simulatoren bezeichnen kann.

Was ist ein Simulator?


Ein Simulator ist ein Modell, normalerweise eine Software, ein reales GerÀt. Dementsprechend ist die Simulation ein Prozess eines solchen Modells, der den Betrieb der Vorrichtung wiederholt.

Im Prinzip können Sie ein Modell fĂŒr jedes GerĂ€t erstellen. Am hĂ€ufigsten werden jedoch Simulatoren von MikroprozessorgerĂ€ten verwendet, d. H. GerĂ€te, deren zentrale Komponente ein Mikroprozessor ist, und der Rest der Logik wird bereits darauf aufgebaut. Eine der Hauptanwendungen des Simulators besteht darin, Programme zu starten, die fĂŒr diesen Mikroprozessor selbst entwickelt wurden. Gleichzeitig ist die Verwendung eines realen GerĂ€ts aus dem einen oder anderen Grund schwierig. Beispielsweise kann es sein, dass es noch nicht existiert, wenn wir ĂŒber die Modellierung der zukĂŒnftigen Generation von Mikroprozessoren sprechen.

Airbnb in der Simulation - Gast und Gastgeber


Der Code, der im Simulator ausgefĂŒhrt wird, wird als "Gastcode" bezeichnet. Es kann sich um ein "Gastprogramm" oder das gesamte "Gastbetriebssystem" handeln. Das simulierte System selbst wird einfach als "Gast" bezeichnet. Das System, der Computer, auf dem der Simulator ausgefĂŒhrt wird, wird wiederum als "Host" (englischer Host) bezeichnet, und das Betriebssystem, das auf dem Host ausgefĂŒhrt wird, auf dem der Simulator ausgefĂŒhrt wird, wird als "Host-Betriebssystem" bezeichnet.

Bild

Wir können also sagen, dass ein Simulator, der einen bestimmten Satz von Gast-Systemanweisungen implementiert, diese mit den verfĂŒgbaren Host-System-Tools simuliert.

Simulation und Emulation - welcher Name ist richtig?


Das Modell kann das GerĂ€t mit unterschiedlicher Genauigkeit und Detailgenauigkeit wiederholen. Oft ist dies eine Simulation nur des externen Verhaltens des Systems, das dem Programmcode zur VerfĂŒgung steht. Dem Code ist es egal, wie genau dieser oder jener Prozessorbefehl im Inneren implementiert ist - Hauptsache, er funktioniert. Diese Version der Simulation ist ĂŒblich, nicht schwer zu entwickeln und recht schnell, verlangsamt sich auch auf normalen Benutzercomputern nicht.

Dies reicht jedoch nicht aus, wenn wir beispielsweise wissen möchten, wie lange das Programm auf echter Hardware ausgefĂŒhrt wird. Dies erfordert nicht nur die Modellierung des externen Verhaltens, sondern auch eine Wiederholung der internen Struktur und Logik der Arbeit. Dies kann auch mit unterschiedlichen Detail- und Genauigkeitsgraden erfolgen. Es ist richtiger, solche Modellemulatoren zu nennen, die das GerĂ€t wirklich emulieren, und die Ergebnisse nicht zu "simulieren".

Das Erstellen von Emulatoren ist aufgrund der grĂ¶ĂŸeren FunktionalitĂ€t, die im Modell implementiert werden muss, viel komplizierter. Sie funktionieren auch viel langsamer als Simulatoren des externen Verhaltens des GerĂ€ts. Bei Emulatoren geht es ĂŒberhaupt nicht darum, Windows zu starten - es kann Jahre dauern. Niemand ist an der Erstellung eines Software-Emulators fĂŒr die gesamte Plattform beteiligt - es ist sehr lang und teuer. Stattdessen werden einzelne Komponenten des Systems emuliert, z. B. derselbe Zentralprozessor, und nur ein Teil des Simulationsprozesses wird darauf gestartet. Verschiedene Hybridschemata sind möglich, wenn ein Teil des Simulators ein Modell auf hoher Ebene ist, ein Teil ein Modell auf niedriger Ebene ist, ein Teil sich in einem FPGA befindet und ein Teil tatsĂ€chlich ein echtes StĂŒck Eisen ist.

Bild

4 Ebenen mit Simulationsdetails


Wie ich oben geschrieben habe, ist die hĂ€ufigste Option die Simulation auf der Ebene der Prozessorbefehle, der sogenannten ISA (Instruction Set Architecture) oder genauer das Ergebnis ihrer AusfĂŒhrung, d.h. ohne die gesamte interne Logik zu emulieren, wie dies in einem realen Prozessor geschieht, und ohne die AusfĂŒhrungszeit verschiedener Anweisungen zu berĂŒcksichtigen. Solche Simulatoren werden auch als funktional bezeichnet. So funktionieren VirtualBox, VMware Workstation, Wind River Simics, KVM und QEMU. Auf diese Weise können Sie bequem und ohne unnötige zusĂ€tzliche Aktionen Programme ausfĂŒhren, die fĂŒr das simulierte GerĂ€t entwickelt wurden. Mit anderen Worten, weder eine Neukompilierung noch andere Manipulationen mit laufenden Programmen sind erforderlich. In solchen FĂ€llen heißt es, dass es möglich ist, unverĂ€nderten BinĂ€rcode auszufĂŒhren.

Wenn wir von einer höheren Abstraktionsebene sprechen, ist dies die Implementierung eines bestimmten ABI (Application Binary Interface). Kurz gesagt, ABI beschreibt eine binĂ€re Schnittstelle fĂŒr die Interaktion zweier Programme - normalerweise eines Benutzerprogramms und einer Bibliothek oder eines Betriebssystems. ABI behandelt Aufrufkonventionen (Übergeben von Parametern und RĂŒckgabewerten), GrĂ¶ĂŸen von Datentypen und Systemaufrufe. Wie es funktioniert? Wenn ein fĂŒr Linux geschriebenes Programm beispielsweise einen zusĂ€tzlichen Thread (aus dem englischen Thread) zur AusfĂŒhrung erstellen muss, wird die Funktion pthread_create () aufgerufen. Was aber, wenn Sie in Windows eine Bibliothek mit einer solchen Funktion erstellen und die erforderlichen Mechanismen zum VerknĂŒpfen der Anwendung und der Bibliothek implementieren (dynamische VerknĂŒpfung)? In diesem Fall können Linux-Anwendungen unter Windows ausgefĂŒhrt werden. Windows "simuliert" Linux.Genau dies wurde im Windows-Subsystem fĂŒr Linux unter Windows 10 getan, mit dem Sie unverĂ€nderte binĂ€re Linux-Anwendungen unter Windows ausfĂŒhren können.

Lassen Sie uns nun sehen, wie die unteren und detaillierten Simulationsebenen aussehen. Dies ist die Mikroarchitektur-Ebene, auf der echte interne Algorithmen und Prozessorblöcke simuliert werden, z. B. ein Befehlsdecoder, Warteschlangen, eine Verarbeitungseinheit außerhalb der Reihenfolge, ein VerzweigungsprĂ€diktor, ein Cache, ein Scheduler und ZĂ€hlgerĂ€te selbst. Eine solche Modellierung ermöglicht es uns, die tatsĂ€chliche Geschwindigkeit der ProgrammausfĂŒhrung zu analysieren und sie beispielsweise fĂŒr vorhandene Architekturen zu optimieren. Bei der Simulation von Prototypen zukĂŒnftiger Mikroprozessoren ist eine Vorhersage und Bewertung der Leistung dieser GerĂ€te möglich.

Unterhalb der Ebene der mikroarchitektonischen Simulation befindet sich die Ebene der Emulation der logischen Elemente, aus denen moderne Chips bestehen. Solche Emulatoren sind sowohl Software als auch Hardware, die FPGAs verwenden. Die FPGA-Logik wird unter Verwendung von RTL (Register Transfer Level) in den Sprachen Verilog, VHDL usw. beschrieben. Nach der Kompilierung wird ein Bild (Bitstream) erhalten, das dann in das FPGA geflasht wird. Und dafĂŒr ist es nicht notwendig, einen Lötkolben zu verwenden und die Elektrotechnik zu verstehen. Die Karte ist beispielsweise ĂŒber eine USB- oder JTAG-Schnittstelle mit einem Computer verbunden, und eine spezielle Software des Herstellers der FPGA-Karte fĂŒhrt die Aufzeichnung durch. Die Kosten fĂŒr solche Boards reichen von zehn Dollar fĂŒr die einfachsten Optionen bis zu Millionen Dollar fĂŒr große FPGA-Boards von der GrĂ¶ĂŸe eines GehĂ€uses, das in großen Chipherstellern verwendet wird.In solchen Unternehmen ist die FPGA-Simulation die letzte Phase, bevor RTL in Produktion geht.

Wenn es sich um einfache GerÀte handelt und Sie das FPGA-Image zur Hand haben, können Sie sich an spezialisierte Unternehmen wenden, die ein echtes GerÀt (kein FPGA) mit programmierter Logik herstellen.

Die folgende Abbildung zeigt die beschriebenen Simulationsstufen.

Bild

ZusĂ€tzlich zu diesen Simulationsstufen musste ich mich auch mit Hybridsimulatoren befassen. TatsĂ€chlich handelt es sich um miteinander verbundene Simulatoren, die verschiedene Teile des Systems auf verschiedenen Ebenen modellieren. Beispielsweise mĂŒssen Sie die Bandbreite einer neuen Netzwerkkarte analysieren, die mit dem Treiber zusammenarbeitet, der fĂŒr ein bestimmtes Betriebssystem entwickelt wird. Ein solches NetzwerkgerĂ€t sowie eine Reihe verwandter GerĂ€te können zuerst auf der Ebene der Mikroarchitektur zur vorlĂ€ufigen Analyse und dann im FPGA auf der Ebene der Logikelemente zur endgĂŒltigen ÜberprĂŒfung implementiert werden. Gleichzeitig wird der Rest des Systems, der nur teilweise beteiligt ist, auf Befehlsebene implementiert. Sie können nicht darauf verzichten, da beispielsweise das Betriebssystem geladen werden muss und es keinen Sinn macht, es auf einer niedrigeren und komplexeren Ebene zu implementieren.

Was ist also mit dem Vergleich von Simulatoren und RealitÀt?

Wie jetzt klar ist, gibt es keine Aufgabe, diesen oder jenen Simulator der RealitĂ€t so Ă€hnlich wie möglich zu machen. Das Unternehmen stellt eine Aufgabe, und die Simulation wird mit dem Grad der „Ähnlichkeit“ mit der RealitĂ€t durchgefĂŒhrt, der minimal ausreicht, um dieses Problem zu lösen, ohne zusĂ€tzliches Geld und Zeit zu verschwenden. In einem Fall kann es sich um eine einfache Bibliothek handeln, die die erforderliche binĂ€re Schnittstelle (ABI) implementiert, und in dem anderen Fall kann auf einen detaillierten Mikroarchitektur-Simulator nicht verzichtet werden.

Dies sind die grundlegendsten Informationen darĂŒber, was Simulatoren sind und was sie sind. Im nĂ€chsten Artikel werde ich die Details der Implementierung von Vollplattform-Simulatoren, Beat-Modellen und der Arbeit mit Tracks beschreiben.

All Articles