Frage

Wo trifft in einem Computer das Abstrakte (Buchstaben auf dem Bildschirm) auf das Reale (elektrischer Strom, der durch Schaltkreise im Speicher und in Prozessoren fließt)?Wie kam es zu dieser Entwicklung?

Ich spreche hier tiefer als Assembler, denke ich.Vielleicht eine Ebene tiefer als Prozessoranweisungen?Irgendwann werden Befehle tatsächlich von der Hardware interpretiert, aber ich verstehe nicht, wo/wie das passiert.

Ich habe keine Universität besucht und daher auch keinen Informatikkurs oder ähnliches belegt.Wie viele andere bin ich ein Bastler, der zum „Profi“ geworden ist.Daher gibt es viele Teile des Puzzles, von denen ich glaube, dass sie mir fehlen.Ich kenne ein wenig C++ und verstehe das Konzept von Zeigern usw. (obwohl ich sie nicht oft im Zorn verwendet habe), habe jedoch immer nur auf einem hohen Niveau gearbeitet.Ich bin mir nicht sicher, ob mir das Wissen über solche Dinge helfen wird oder nicht, aber es ist auf jeden Fall interessant.

War es hilfreich?

Lösung

Ein Prozessor führt einen sogenannten Fetch-Decode-Execute-Zyklus durch.Maschinencode-Anweisungen sind relativ niedrig (d. h.sie erledigen nicht allzu viel in einer einzigen Anweisung).Das Addieren zweier Zahlen würde beispielsweise eine Folge von Anweisungen mit einer Semantik wie der folgenden ergeben:

  • Laden Sie einen Zeiger auf die Adresse von Operand 1 in Register 1
  • Laden Sie den an der in Register 1 gespeicherten Adresse gespeicherten Wert in Register 2
  • Laden Sie einen Zeiger auf die Adresse von Operand 2 in Register 1
  • Laden Sie den an der Adresse in Register 1 gespeicherten Wert in Register 3
  • Addieren Sie den Inhalt von Register 2 und Register 3 und speichern Sie ihn in Register 4
  • Laden Sie einen Zeiger auf das Ziel in Register 1
  • Speichern Sie den Inhalt von Register 4 unter der in Register 1 angegebenen Adresse

Im Prozessor befindet sich ein spezieller Satz schnellen Speichers, der als „Registerdatei“ bekannt ist und den Speicher enthält, den der Prozessor zum Speichern der Daten verwendet, an denen er gerade arbeitet.Die Registerdatei verfügt über mehrere Register, die eindeutig identifiziert sind.Anweisungen funktionieren normalerweise auf Registern, insbesondere auf RISC-Architekturen;Obwohl dies nicht immer der Fall ist, ist es für den Moment eine ausreichend gute Abstraktion.

Normalerweise muss ein Prozessor Daten in ein Register laden oder speichern, um etwas damit zu tun.Operationen wie arithmetische Arbeiten an Registern, Übernahme der Operanden aus zwei Registern und Platzierung des Ergebnisses in einem dritten (zu Gunsten der Erdnussgalerie, I haben Ich habe einen 6502 verwendet - lassen Sie uns das Problem nicht verwirren ;-).Der Prozessor verfügt über spezielle Anweisungen zum Laden oder Speichern von Daten aus Registern in den Hauptspeicher der Maschine.

Ein Prozessor verfügt über ein spezielles Register namens „Programmzähler“, das die Adresse der nächsten auszuführenden Operation speichert.Somit sieht die Reihenfolge zur Ausführung einer Anweisung ungefähr so ​​aus:

  • Rufen Sie den Befehl ab, der an der aktuellen Adresse im Programmzähler gespeichert ist.
  • Dekodieren Sie den Befehl, indem Sie die eigentliche Operation, die verwendeten Register, den „Adressierungsmodus“ (wie ermittelt wird, wo Daten abgerufen oder gespeichert werden sollen) und einige andere Kleinigkeiten auseinandernehmen.
  • Führen Sie die Anweisung aus.

Durch die Ausführung des Befehls werden die Werte in verschiedenen Registern geändert.Beispielsweise kopiert ein „Lade“-Befehl einen Wert in ein Register.Eine arithmetische oder logische Funktion (Und, Oder, Xor) nimmt zwei Werte an und berechnet einen dritten.Ein Sprung- oder Verzweigungsbefehl ändert die Adresse am Programmzähler, sodass der Prozessor beginnt, Befehle von einem anderen Ort abzurufen.

Der Prozessor kann über spezielle Register verfügen.Ein Beispiel hierfür ist der oben beschriebene Programmzähler.Ein weiteres typisches Register ist ein Bedingungsflagregister.Dies wird mehrere Bits mit besonderer Bedeutung haben.Beispielsweise kann es ein Flag geben, das gesetzt wird, wenn das Ergebnis der letzten arithmetischen Operation Null war.Dies ist nützlich für bedingte Operationen.Sie können zwei Zahlen vergleichen.Wenn sie gleich sind, wird das Flag „Null“ gesetzt.Der Prozessor kann einen bedingten Befehl haben, der nur ausgeführt wird, wenn dieses Flag gesetzt ist.

In diesem Fall könnten Sie einen Zähler in einem Register dekrementieren und wenn dieser Null wäre, wird ein Bedingungsflag gesetzt.Eine Bedingung (Verzweigung auf Null) kann für eine Schleife verwendet werden, in der Sie einen Zähler dekrementieren und die Schleife verlassen, wenn das Ergebnis der Dekrementierungsanweisung Null ist.Auf manchen Prozessoren (z.B.der ARM-Familie) sind alle Anweisungen bedingt, mit einer speziellen „Immer ausführen“-Bedingung für nicht bedingte Anweisungen.

Einige Beispiele für typische Prozessoranweisungen sind:

  • Erhöhen oder dekrementieren Sie ein Register
  • Laden oder speichern Sie den Inhalt eines Registers in den Speicher.Sie können die zu ladende oder zu speichernde Adresse auch durch den Inhalt eines anderen Registers versetzen.Dadurch können Sie ganz einfach eine Schleife über ein Datenarray durchführen, indem Sie das andere Register inkrementieren.
  • Addition, Subtraktion, Multiplikation, logische Operationen zur Berechnung von Werten.Diese übernehmen Operanden aus zwei Registern und legen das Ergebnis in einem dritten ab.
  • Zu einem anderen Speicherort springen – Dadurch werden die Inhalte des Speicherorts in den Programmzähler verschoben und mit dem Abrufen von Anweisungen vom neuen Speicherort begonnen.
  • Schieben oder platzieren Sie Werte auf einem Stapel.

Dieser Stackoverflow-Beitrag enthält ein Beispiel für einen kleinen Ausschnitt kompilierten C-Codes und die Assembler-Ausgabe dieses Ausschnitts.Es sollte Ihnen ein Beispiel für die Art der Beziehung zwischen einer Hochsprache und der Maschinencode-Ausgabe geben, zu der sie kompiliert wird.

Der beste Weg, dies zu lernen, besteht darin, sich einen Assembler zu besorgen und es auszuprobieren.Dies war früher auf älteren, einfacheren Computern wie den 8-Bit-Mikros der 1980er Jahre viel einfacher.Am nächsten an dieser heute verfügbaren Architektur sind eingebettete Systeme.Sie können ein Entwicklungsboard für einen eingebetteten Prozessor wie einen Microchip PIC relativ günstig erwerben.Da diese Art von Architektur weniger Aufwand mit sich bringt als ein modernes Betriebssystem, gibt es weniger I-Punkte und T-Kreuzungen bei der Verwendung von Systemaufrufen.Dadurch wird es einfacher, ein Assembler-Programm auf dieser Art von Architektur zu booten.die einfachere Architektur ist auch leichter zu verstehen.

Eine andere Möglichkeit besteht darin, sich einen Emulator zu besorgen, z SPIM.Dadurch wird eine CPU emuliert und Sie können darauf Programme zusammenstellen und ausführen.Der Vorteil eines solchen Emulators besteht darin, dass er auch über die Möglichkeit verfügt, Programme in Einzelschritten auszuführen (ähnlich einem Debugger) und den Inhalt der Registerdatei anzuzeigen.Dies kann hilfreich sein, um Erkenntnisse darüber zu gewinnen, was tatsächlich vor sich geht.

Andere Tipps

Ich würde sehr empfehlen, dass Sie das Buch lesen Code-, es gibt eine detaillierte Geschichte, wie der Computer aus verschiedenen Systemen entwickelt.

Es ist sehr ansprechend und wird Ihnen, wie die Dinge entwickelten sich aus Morse-Code durch eine einfache Rechenmaschine erklären und dann auf bis zu einem gewissen Montage. Es sollte Ihnen ein Bild davon, wie genau Maschinenbefehle interpretted sind und durch die Hardware einer CPU verwendet, Speicher, etc.

Es ist eigentlich eine weitere Schicht unter Maschinensprache, die ich vor kurzem von einem Freund herausgefunden habe. Es heißt Microcode.

Sehen Sie diesen Wikipedia-Artikel für Details: http://en.wikipedia.org/wiki/Microcode

Nehmen wir an, dass die meisten real Strom und Spannung (wenn man tiefer gehen, können Sie feststellen, dass auch ein Elektron ist eine Abstraktion). Der erste Schritt der Abstraktion ist zu berücksichtigen, dass ein + 5V ein Bit auf ‚1‘ und eine Spannung 0 V repräsentiert ein Bit auf ‚0‘ repräsentieren Spannung. Mit einem Schalter können Sie den Wert Ihres Drahtes entscheiden.

Mit einem zweiten Draht und einem zweiten Schalter, erhalten Sie zwei binäre Werte. Das interessanteste, mit ihnen zu tun ist, um ihre binären Werte mit Operationen wie AND, OR und NOT zu kombinieren. Zwei Konzepte beteiligt sind hier: Transistor für die realen und Logik für die Abstraktion. Damit können Sie Addition, Subtraktion und viele andere Operationen auf zwei binäre Eingänge führen. Sie können mehrere Drähte hinzufügen andere Werte als ‚0‘ und ‚1‘ darzustellen. Gehen diese Weise Sie erhalten eine ALU .

Jetzt ist es Zeit zu Zeit umfassen. Wenn Sie mehrere Ergebnisse aus Ihrer ALU wollen, müssen Sie Eingangsdaten einen nach dem anderen zur Verfügung zu stellen, damit eine Uhr und eine Steuereinheit für die Sequenzierung Operationen benötigen. Sie müssen auch Speichereingabewerte für die Speicherung und Ergebnisse, sowie Eingabe- und Ausgabeeinrichtungen zum Befehlen und beobachtet. Gehen auf diese Weise erhalten Sie eine Von-Neumann-Architektur , die die Grundlage für fast alle Computer-Architekturen .

Als nächstes Abstraktionsebene ist, wenn Sie sich entscheiden, mit entsprechender Elektronik, dass diese besondere Bit im Speicher, dass bestimmte Pixel des LCD-Display anregen wird.

Sie könnten Charles Petzold-Code eine interessante Lektüre finden:
http://www.amazon.co. uk / Code-Sprache-DV-undefined-Charles-Petzold / dp / 0735611319

Die Prämisse Ihrer Frage ist falsch. Es gibt keine Kluft. Software eingegeben und elektronisch gespeichert. Es ist nur, dass die Software zu Ihnen in einem Englisch wie Sprache angezeigt wird, so dass die Menschen es leicht folgen können.

So zum Beispiel, wenn Sie auf „Ändern Sie meinen Desktop-Bildschirm auf Grün,“ über die Tastatur eingeben, wird es elektronisch direkt auf Metall geht (lesen Sie, wie Tastatur / Maus / Touchscreen) zu arbeiten. Es ist nur, dass Sie es als Englisch Text auf dem Bildschirm zu sehen. Nehmen Sie noch einen Schritt weiter, der eingegebene Text in Hochsprache ist, bekommen es in Maschinencode umgewandelt, so dass die CPU-Logik auf sie ausführen kann. Der Maschinencode ist auch in elektronischer Form. Zum Beispiel erhält der Text in Opcodes usw. umgewandelt, aber die OP-Codes sind in elektronischer Form und CPU können diejenigen verarbeiten.

Das Endergebnis ist, dass alles, was im Innern des Computers in elektronischer Form von dem Moment an ist es eingegeben wird. Es ist entweder auf der Festplatte oder Speicher (Transistoren, etc.). Es ist nur, dass Sie es in Text auf dem Bildschirm zu sehen.

Auch hier gibt es keine Trennung. Software im Speicher gespeichert (Transistoren etc.) oder Festplatte ist bereits dort auf elektronischen Weg. Hardware (Fest Logik - Gates) benötigt wird, um Software auszuführen (was Sie Hardware wollen mit der Software zu tun). Sie können nicht alles in Computern in nicht elektronischer Form eingeben.

Ich hoffe, das macht Sinn.

Nun, die eigentliche Punkt, wo Sie Hardware erfüllen, hängt von was Sie tun, natürlich. Aber nehmen Sie Ihr (sehr zufrieden) Beispiel für „Anzeigen von Text“:

Von abstrakter zu Hardware:

  • Benutzertypen Buchstaben in ihrem Textverarbeitungsprogramm (wp)
  • wp Software speichert zuerst die Buchstaben im Speicher als Teil des Dokuments bearbeitet
  • wp Software sagt dann die Benutzeroberfläche Bibliothek nutzt, dass er will, um den Text anzuzeigen in einem Fenster bearbeitet wird (dies geschieht ständig, natürlich). Die UI-Bibliothek wird systemabhängig (das Windows API für MS Windows, X-Windows oder QT usw. auf Linux, AWT / Swing auf Java etc.)
  • Die UI-Bibliothek werden die Daten durch ein paar weitere Abstraktionsschichten bestehen. Insbesondere wird es Rasterung (wandelt die Informationen „zeigen eine A“ in das Pixelraster, das ein A) durchführt
  • Schließlich wird die Information an den Gerätetreiber der Grafikkarte übergeben werden. Dies ist, wo wir „echte“ Hardware :-) treffen. Normalerweise wird die Grafikkarte macht „Videospeicher“, das heißt Speicher auf der Karte, dass die CPU zu schreiben. Der Grafikkartentreiber (die auf der CPU läuft) werden die Pixel für einen A-Videospeicher schreiben.
  • Die Schaltungen der Grafikkarte wird den Videospeicher lesen und die Daten dort in ein Videosignal umwandeln, das Video-Anschluss auf der Karte erlischt und auf dem Monitor an.
  • Der Monitor wird angezeigt, was hoffentlich sieht aus wie ein A: -)

Diese Erklärung kann nicht zu akademisch, aber das ist, wie ich es verstehen (auch nicht zur Universität gehen haben).

Der erste Schritt beinhaltet Boole 'Algebra s, die im 19'th Jahrhundert bewiesen, dass jede mathematische Operation kann unter Verwendung einer Reihe von Symbolen und einigen assoziierten Operatoren ausgedrückt werden. So ist die Basis 10 Arithmetik mit dem Gemeinsamen +, -, *, / Betreiber kann sie mit nur zwei Symbolen (0, 1 / true, false) und logische Operatoren (AND, OR usw.), die zu der Booleschen Logik ausgedrückt werden, die ist mathematische Grundlage der digitalen Datenverarbeitung.

Der zweite Schritt ist Alan Turing 's Arbeit, die ein mathematisches Modell eines imaginären konstruiert Maschine, die Symbole verarbeiten konnten. Die naive Beschreibung einer Turing Maschine würde jeder Automat sein, die Speicher (sein Zustand zu speichern) hat, arbeitet mit einer Reihe von Symbolen, dass es dem Zustand dar und deutet eine andere Reihe von Symbolen, die den Übergang von einem Zustand zu einem anderen zu definieren.

Der moderne Digitalprozessor ist eine Implementierung einer Turing-Maschine, die Booles logische Algebra als Symbol und Betreiberbasis verwendet (werfen Sie einen Blick auf einem How Stuff Works

Maschinencode, wie ich glaube, als Low-Level, wie man gehen kann. Es wird direkt durch den Prozessor und ausgeführt zu verstehen, ohne einen Dolmetscher. Der Prozessor mit einem bestimmten Satz von Befehlen aufgebaut ist, die den Maschinencode für eine gegebene Architektur (x86, PPC, ARM, etc.) Zu definieren.

Alles aus Buchstaben auf dem Bildschirm zeichnet pi Berechnung ist, auf seiner Basis-Ebene, in Maschinencode auszuführen. Buchstaben auf dem Bildschirm Zeichnung ist nur eine Frage einig Maschinencodes zu schaffen, die Buchstabenhöhe, Farbe und Pixelpositionen berechnet und zeichnet sie auf einem Bildschirm eine Videoausgabegerät verwendet wird.

Nun, wenn Sie wissen, wie der Prozessor greift auf den Speicher dann wissen Sie die Antwort bereits. Speicher und andere Hardware sind in (fast) die gleiche Art und Weise zugegriffen wird, je nachdem, ob der Prozessor verwendet „Memory Mapped IO“ oder „IO abgebildet IO“. Im ersten Fall versucht der Prozessor nur zu lesen und auf eine Speicheradresse schreiben - aber es gibt keine Erinnerung gibt - stattdessen ist es ein anderes Hardware-Gerät, aber der Prozessor wirklich kann dem Unterschied nicht sagen. Der letztere Fall ist sehr ähnlich.

Auf der anderen Seite, wenn Sie keine Ahnung haben, wie der Prozessor auf den Speicher zugreift, sollten Sie sehen, was ein „Adressbus“ und eine „Datenbus“ zu bekommen, ist Sie begonnen haben.

Sie bekommen es falsch.

Alles, was der Computer nicht, sei es Buchstaben auf dem Bildschirm oder tut einige Berechnung zeigt, kann aus dem elektrischen Strom auf die Manipulation von abstrakten Begriffen wie Geld auf einem Bankkonto bei verschiedenen (viele) Abstraktionsebenen betrachtet werden.

Das heißt, die Schaltung für einen einfachen Mikroprozessor Gebäude ist nicht so schwer, eine ALU, einige Register und einige Steuerlogik. Altera hat dies als erweiterte Tutorials für die Cyclone II-Starter Bord, aber ich kann es nicht im Web finden.

Hier ist die eigentliche Behandlung. Mein Ausgangspunkt. Alles, was benötigt Energie zu betreiben. Die Ein / Aus wird innerhalb einer Grenze definiert. wenn beispielsweise zwischen 3 und 5 V auf, wenn es weniger als 3 Volt seiner AUS. Ein Morse-Code-Konzept. Ich arbeite an einem Thermometer so muss ich machen oder einen Sensor zu kaufen. Dann muss ich es kalibrieren. Übersetzen der Signale aus dem Signal kein Signals oder die Stärke des Signals auf eine Temperatur. Dies ist, wo ich jetzt bin.

Das ist nicht einfach in einem Satz zu beantworten. Lesen Sie ein Buch über Computer-Architektur, lernen einige Montage und ich bin sicher, Sie werden verstehen, wie dies geschieht.

Wenn wir eine beliebige Taste eingeben oder einen Befehl geben dann kleine elektrische Wellen durch Drücken der Taste fällig geworden ist, dass wir die Schaltung tatsächlich vervollständigen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top