Wie sieht es aus, wenn Maschinencode tatsächlich von Hardware und CPU ausgeführt wird?
Würde es wie binär aussehen, wenn Anweisungen durch Einsen und Nullen dargestellt werden, oder bestünde es aus hexadezimalen Ziffern, bei denen Opcodes Bytes sind, die als Hexadezimalzahlen dargestellt werden und in Binärzahlen wie Bytecode zerlegt werden können?
computer-architecture
cpu
Tim Kaum
quelle
quelle
Antworten:
Die beste Antwort, die ich geben kann, ist, dass es nicht wirklich wie irgendetwas "aussieht". Der Befehl, der gegenwärtig von der CPU ausgeführt wird, wird durch eine Reihe von Drähten dargestellt, von denen einige eine hohe Spannung haben, von denen einige eine niedrige Spannung haben.
Sie können die hohen und niedrigen Spannungen als Nullen und Einsen interpretieren, aber Sie können Gruppen von hohen und niedrigen Spannungen genauso gut als hexadezimale Ziffern interpretieren oder als Montageanweisung
ADD $0 $1
(die der Interpretation durch die CPU am nächsten kommt). Diese Zahlen und Mnemoniken sind für den Menschen einfach zu lesen. Intern sind es nur Spannungen an den Drähten.Von diesen Optionen ist Binär "dem Metall am nächsten", da die Nullen und Einsen direkt den hohen und niedrigen Spannungen an den Drähten zugeordnet werden. Aber keiner der anderen ist falsch und sie sind häufig nützlicher: Es gibt einen Grund, warum die Leute Hex-Dumps von ausführbaren Dateien betrachten, aber fast nie Binär-Dumps.
quelle
"Look like" impliziert eine Metapher. Wenn wir "wie wird es aussehen" wörtlich nehmen, wird es aussehen wie ein ausgefallenes geätztes Stück Silikon, das auf seiner Hauptplatine sitzt. Offensichtlich war Metapher das Ziel. Um die Metapher zu erstellen, müssen wir uns zuerst ansehen, was es wirklich ist. Dann können wir eine Metapher aufbauen, die akzeptabel ist. Das ist ein bisschen lang, aber zum Glück, es endet mit einem Video Metapher für Sie.
Der Maschinencode wird tatsächlich als Bits gespeichert. Speicherchips sind typischerweise DRAMs , die diese Bits als Spannungen über einem Kondensator und Elektronen speichern. Die beiden sind verbunden - es ist schwer, über die Spannungen ohne die Elektronen zu sprechen. Manchmal ist es praktisch, über das eine oder andere zu sprechen, aber verstehen Sie, dass das andere folgt, wohin es geht.
Die Reise des Maschinencodes beginnt mit einem "Abruf". An die Drähte des RAM-Chips wird ein bestimmtes Spannungsmuster angelegt, das angibt, dass dieser bestimmte Satz von Bits an die CPU gesendet werden soll. Warum? Weiß nicht, ist mir egal. In der Regel wird dieses Signal gesendet, weil die CPU die letzte Anweisung beendet hat und instinktiv nach einer neuen Anweisung fragt, wie z. B. ein Hund, der nach der ersten Anweisung nach einer zweiten Behandlung fragt. Dieser Prozess beginnt mit einem anfänglichen Tritt in die Hose, der durch eine natürliche Instabilität der CPU verursacht wird. Wenn ein Netzteil eine konstante Spannung an den Chip anlegt, führt der Spannungsanstieg schließlich dazu, dass die CPU die richtigen Spannungen an die RAM-Chips anlegt, um die ersten Anweisungen zu erhalten (ich bewege die BIOS-Ebene ein wenig mit der Hand, da dies nicht wichtig ist zur Geschichte.
In modernen Speichern werden Daten parallel übertragen. Dies bedeutet, dass die Bits, aus denen der Maschinencode besteht, in "Lanes" aufgeteilt werden (32 oder 64 sind gemeinsam). Dies ist die logische Art und Weise, die 32/64-Drähte vom RAM zur CPU auszudrücken. Die Spannung auf diesen Leitungen wird nach Bedarf angehoben und abgesenkt, um sie in die CPU zu übertragen.
Sobald es in der CPU ist, kann es seine Arbeit machen. Dies ist der Bereich der Mikroarchitektur , und es kann kompliziert werden, da dies buchstäblich eine Milliarden-Dollar-Industrie ist. Diese Spannungen beeinflussen Transistoren, die andere Spannungen beeinflussen, auf eine Weise, die wir als "Addieren von Bits" oder "Multiplizieren" bezeichnen könnten. Das sind eigentlich alles nur Spannungen, die diese Bits repräsentieren, genauso wie wir die 5-stellige Zeichenfolge "2 + 2 = 4" auf ein Blatt Papier schreiben und sagen, wir hätten Mathematik gemacht. Der Bleistift Graphit ist nicht die Nummer zwei. Es ist nur die physikalische Darstellung, die wir für diese Nummer verwenden.
Genau das leistet das reale System auf enorm hohem Niveau. Ich habe gut übersprungen ... so ziemlich alles ... aber es ist anständig genug, um auf deine eigentliche Frage zurückkommen zu können. Wie würde es [metaphorisch] aussehen?
Ich glaube, Martin Molin hat mit seiner Marble Machine die beste Metapher geschaffen . Der Maschinencode wird (von Hand) auf einige Lego Technics-Streifen in der Mitte als Stifte codiert, nicht auf Spannungen an einem Kondensator. Dies ähnelt eher einem EPROM als einem DRAM, jedoch enthalten beide Daten. Die Murmeln sind wie die Elektronen, die durch Spannungen (oder im Fall von Murmeln durch die Schwerkraft) bewegt werden. Und während sich die Elektronen bewegen, üben sie Kraft auf Tore aus, die Dinge tun.
Seine Maschine ist einfach im Vergleich zu einer modernen CPU, aber es ist nicht so schlimm, was Metaphern angeht. Und es ist eingängig!
quelle
Schauen Sie sich dieses Video an , insbesondere 1:00 bis 1:17. Genau so sieht es aus, wenn ein Programm auf einem Computer ausgeführt wird. Die beiden Leuchtzeilen zeigen den aktuellen Inhalt des Adressregisters und des Datenregisters. Der PDP-11 hat kein Anweisungsregister, aber wenn es eines gäbe und es auf der Vorderseite Lichter gäbe, die den Inhalt anzeigen, würde es ziemlich gleich aussehen. 16 Lichter - einige an, einige aus.
Wenn Sie Blinklichter wirklich mögen, könnten Sie mehr Lichter haben, um den aktuellen Inhalt der sechs Register, des Stapelzeigers, des Programmzählers ... für weitere 32768 Lichter könnten Sie ein Licht für jedes Bit des Cache haben. Sie könnten sogar ein Licht für jedes bisschen Gedächtnis haben ... aber das wäre wirklich eine Menge Licht.
Dies ist ein PDP11-70, der mit 15,2 MHz ausgeführt wird. Die Ausführung jedes Befehls dauert etwa 1,5 Mikrosekunden. Das menschliche Auge kann Änderungen bis zu 1/10 Sekunde erkennen, und in dieser Zeit kann der PDP-11 60.000 Anweisungen ausführen. Grundsätzlich ist alles eine Unschärfe.
quelle
Die Hardware-Designer, die den Prozessor implementieren und testen (und testen und testen), verwenden tatsächlich visuelle Modelle, um zu sehen, was ihre Designs tun. Die meisten (wenn nicht alle) HDL-Simulationstools geben Wave-Ansichten aller Register und Drähte aus, um ein einfaches Debuggen zu ermöglichen. Der folgende Screenshot (von hier aus aufgenommen ) zeigt diese Wellen des VCS-Simulators für einen RISC-V-Prozessor, auf dem einige Anweisungen ausgeführt werden.
Dies ist ein recht einfaches Beispiel, das einen kleinen Teil der Logik eines vollständigen Prozessordesigns zeigt. Sie können diese Ansichten für den gesamten Prozessor öffnen und beobachten, wie sich die Daten durch die Logik ausbreiten. Wenn Sie möchten, dass der Maschinencode wie erwähnt ausgeführt wird, können Sie in den Wellen nach dem Befehlsregister oder dem Bus suchen, mit dem der Prozessor die Befehle aus dem Speicher liest. Die meisten Wave-Viewer verfügen über flexible Anzeigeoptionen für Busse und Register, mit denen Sie ihre Werte als binäre, hexadezimale, oktale und sogar als Aufzählungsbezeichnungen anzeigen können. In einigen Fällen können Sie sogar Ihre eigenen Funktionen für die Zuordnung von Bitmustern zu angezeigten Werten definieren.
Es ist erwähnenswert, dass dies nur eine Darstellung einer Simulation des Prozessors ist. Es gibt keine Möglichkeit, diese Art von Ansichten für einen bereits hergestellten Prozessorchip zu erhalten.
quelle
Stellen Sie sich einen blinden Mann vor, der in einer im Bau befindlichen Gasse stolpert. Überall gibt es Löcher und Risse, also sollte er natürlich fallen. Nicht dieser Blinde, denn er hat eine Schriftrolle mit Anweisungen, wann er warten muss, wann er sich bewegen muss, wohin er sich bewegen muss und wie er seine Umgebung manipulieren muss, um das Ende der Straße zu erreichen. Das ist, was Versammlung ist, eine blind befolgte Liste von Anweisungen - sie sind nur für diese Gasse und für diesen blinden Mann sinnvoll. Sie können theoretisch sogar ein 3D-Modell allein aus den Anweisungen rekonstruieren (Dekompilieren).
Bei jeder Änderung der Plattform müssen die Anweisungen für den Blinden neu kompiliert werden. Sie müssen die Hardware (das Layout der Baustelle), die vom Menschen eingegebenen Absichtsanweisungen (High Level Code) wie "Ich möchte, dass Sie über alle Zäune springen, denen Sie hintereinander begegnen, bis Sie 12 Zäune hinter sich haben" und den Code kennen Fähigkeiten der Blinden (CPU). Hat er Kurzzeitgedächtnis, die Fähigkeit, mehrere Dinge gleichzeitig zu tun?
Alle diese Informationen zu sammeln und eine zusammenhängende Anweisungsliste zu erstellen, ist Aufgabe des Compilers.
Kann ich beschreiben, wie ein Programm aussieht? Aber können wir beschreiben, wie es sich anfühlt, es auszuführen? Ja, es würde sich wie ein Sprung anfühlen, wie ein Spiegel, ohne etwas zu sehen, und einer genauen Liste von Anweisungen folgen, wohin es Sie auch führen mag.
quelle