Wie funktionieren Computer? [geschlossen]


59

Das ist fast peinlich zu fragen ... Ich habe einen Abschluss in Informatik (und einen zweiten in Arbeit). Ich habe fast fünf Jahre als Vollzeit-.NET-Entwickler gearbeitet. Ich scheine im Allgemeinen kompetent in dem, was ich tue.

Aber ich weiß nicht, wie Computer funktionieren!

Bitte, bleib für eine Sekunde bei mir. Eine schnelle Google-Suche nach "Wie ein Computer funktioniert" wird viele, viele Ergebnisse liefern, aber ich hatte Mühe, eine zu finden, die wirklich die gewünschten Antworten lieferte. Mir ist klar, dass dies eine sehr große Frage ist, also wirklich, wenn Sie mir nur einige Schlüsselwörter oder eine Richtung geben können.

Ich weiß, dass es Komponenten gibt ... das Netzteil, das Motherboard, den Arbeitsspeicher, die CPU usw. ... und ich bekomme eine allgemeine Vorstellung davon, was sie tun. Aber ich verstehe wirklich nicht , wie Sie aus einer Codezeile gehen wie Console.Readline()in .NET (oder Java oder C ++) und haben es tatsächlich tut Sachen.

Klar, mir ist MSIL (im Fall von .NET) vage bewusst und es passiert etwas Magie mit dem JIT-Compiler und es verwandelt sich in nativen Code (glaube ich). Mir wurde gesagt, Java ist ähnlich und C ++ schneidet den mittleren Schritt aus.

Ich habe einige Großrechner zusammengebaut, das war vor ein paar Jahren. Ich erinnere mich, dass es einige Anweisungen und einige CPU-Register gab und ich Code schrieb ... und dann passierte etwas Magie ... und mein Programm würde funktionieren (oder abstürzen). Soweit ich weiß, würde ein 'Emulator' simulieren, was passiert, wenn Sie eine Anweisung aufrufen, und die CPU-Register aktualisieren. Aber warum funktionieren diese Anweisungen so?

Wird dies zu einer Elektronikfrage und nicht zu einer Computerfrage? Ich schätze, es gibt keinen praktischen Grund für mich, dies zu verstehen, aber ich habe das Gefühl, dass ich es tun sollte.

(Ja, dies passiert, wenn Sie einen Tag mit einem kleinen Kind verbringen. Es dauert ungefähr 10 Minuten und fünf Iterationen, bis Sie wissen, wie viel Sie nicht wissen, warum?)



20
Ich würde empfehlen, Code von Charles Petzold

Es ist kein Emulator. Es ist ein Haufen realer Halbleiterschaltungen mit Hunderten (Tausenden) von Eingangs- und Ausgangsleitungen und Milliarden von Logikgattern. Die Emulatorwurde nur zu Unterrichtszwecken verwendet.
Rwong

1
Ich denke, der Titel sollte geändert werden, um spezifischer / informativer zu sein. Das ist eigentlich eine ziemlich nützliche Frage, aber auf den ersten Blick sieht es total lächerlich aus, wie das, was das kleine Kind ursprünglich gefragt hat. Ändern Sie die Einstellung in "Wie werden High-Level-Softwarebefehle mit Low-Level-Hardwareantworten verbunden?".
jhocking

2
Hallo Rob, wie im Moment formuliert, ist dies hoffnungslos weit gefasst und hat sich schnell zu einer Buchempfehlungsfrage und einer erweiterten Diskussion entwickelt. Beides wollen wir hier nicht. Wenn Sie Ihre Aufmerksamkeit schärfen und etwas Bestimmtes über ein aktuelles Problem fragen können, können Sie sich gerne danach erkundigen .

Antworten:


139

Ich werde von der untersten Ebene beginnen, die relevant sein könnte (ich kann von einer noch niedrigeren Ebene aus beginnen, aber sie sind wahrscheinlich viel zu irrelevant), angefangen von Atom über Elektrizität zu Transistoren zu Logikgattern zu integrierten Schaltkreisen (Chip / CPU) ) und endet bei der Vollversammlung (ich nehme an, dass Sie mit den höheren Ebenen vertraut sind).

Am Anfang

Atom

Atom ist eine Struktur aus Elektronen, Protonen und Neutronen (die selbst aus Elementarteilchen bestehen ). Der interessanteste Teil des Atoms für Computer und Elektronik sind die Elektronen, da Elektronen beweglich sind (dh sie können sich im Gegensatz zu schwer zu bewegenden Protonen und Neutronen relativ leicht bewegen) und sich von selbst frei bewegen können, ohne im Inneren festgehalten zu werden ein Atom.

Normalerweise hat jedes Atom die gleiche Anzahl von Protonen und Elektronen, wir nennen diesen "neutralen" Zustand. Es ist möglich, dass ein Atom zusätzliche Elektronen verliert oder gewinnt. Atome in diesem unausgeglichenen Zustand sollen "positiv geladene" Atome (mehr Protonen als Elektronen) bzw. "negativ geladene" Atome (mehr Elektronen als Protonen) sein.

Elektronen sind unkonstruierbar und unzerstörbar (nicht so in der Quantenmechanik, aber das ist für unseren Zweck irrelevant); Wenn also ein Atom ein Elektron verliert, muss ein anderes Atom in der Nähe die zusätzlichen Elektronen aufnehmen oder das Elektron muss in ein frei schwebendes Elektron freigesetzt werden. Da das Elektron unkonstruierbar ist, muss es von einem Atom abgesaugt werden, um zusätzliche Elektronen zu gewinnen oder von einem frei schwebenden Elektron. Die Mechanik der Elektronen ist so, dass, wenn sich ein negativ geladenes Atom in der Nähe eines positiv geladenen Atoms befindet, einige Elektronen wandern, bis beide Atome die gleiche Ladung haben.

Elektrizität

Elektrizität ist nur ein Elektronenfluss von einem Gebiet mit sehr vielen negativ geladenen Atomen zu einem Gebiet mit sehr vielen positiv geladenen Atomen. Bestimmte chemische Reaktionen können dazu führen, dass wir einen Knoten mit vielen negativ geladenen Atomen (als "Anode" bezeichnet) und einen anderen Knoten mit vielen positiv geladenen Atomen (als "Kathode" bezeichnet) haben. Wenn wir zwei entgegengesetzt geladene Knoten mit einem Draht verbinden, fließen Elektronenmassen von der Anode zur Kathode, und dieser Fluss wird als "elektrischer Strom" bezeichnet.

Nicht alle Drähte können Elektronen gleich leicht übertragen, Elektronen fließen viel leichter in "leitenden" Materialien als in "resistenten" Materialien. Ein "leitendes" Material hat einen geringen elektrischen Widerstand (z. B. Kupferdrähte in Kabeln) und ein "widerstandsfähiges" Material einen hohen elektrischen Widerstand (z. B. Gummikabelisolierung). Einige interessante Materialien werden als Halbleiter (z. B. Silikone) bezeichnet, da sie ihren Widerstand leicht ändern können. Unter bestimmten Bedingungen kann ein Halbleiter als Leiter fungieren und unter anderen Bedingungen kann er sich in einen Widerstand verwandeln.

Elektrizität zieht es immer vor, das Material mit dem geringsten Widerstand zu durchfließen. Wenn also eine Kathode und eine Anode mit zwei Drähten verbunden sind, von denen einer einen sehr hohen Widerstand und der andere einen sehr geringen Widerstand aufweist, fließt der größte Teil der Elektronen durch das Kabel mit geringem Widerstand und nahezu Keiner fließt durch das hochohmige Material.

Das Mittelalter

Schalter und Transistoren

Schalter / Flip-Flops sind wie normale Lichtschalter, ein Schalter kann zwischen zwei Drahtstücken platziert werden, um den Stromfluss zu unterbrechen und / oder wiederherzustellen. Transistoren funktionieren genauso wie Lichtschalter, mit dem Unterschied, dass ein Transistor anstelle des physischen Verbindens und Trennens von Drähten den Stromfluss verbindet / trennt, indem er seinen Widerstand ändert, abhängig davon, ob sich im Basisknoten Strom befindet, und wie Sie vielleicht bereits vermutet haben Ich weiß, Transistoren bestehen aus Halbleitern, weil wir den Halbleiter entweder in einen Widerstand oder in einen Leiter umwandeln können, um elektrische Ströme zu verbinden oder zu trennen.

Ein üblicher Transistortyp, der NPN Bipolar Junction Transistor (BJT), hat drei Knoten: "Basis", "Kollektor" und "Emitter". In einem NPN-BJT kann Elektrizität nur dann vom "Emitter" -Knoten zum "Kollektor" -Knoten fließen, wenn der "Basis" -Knoten aufgeladen ist. Wenn der Basisknoten nicht geladen ist, kann praktisch kein Elektron durchfließen, und wenn der Basisknoten geladen ist, können Elektronen zwischen dem Emitter und dem Kollektor fließen.

Das Verhalten eines Transistors

(Ich schlage vor , Sie sehr durch lesen diese , bevor Sie fortfahren, da es besser ist als ich mit interaktiven Grafiken erklären kann)

Nehmen wir an, wir haben einen Transistor an der Basis und am Kollektor an eine Stromquelle angeschlossen und verdrahten dann ein Ausgangskabel in der Nähe des Kollektors (siehe Abbildung 3 in http://www.spsu.edu/cs/faculty/bbrown/web_lectures) / transistoren / ).

Wenn wir weder Basis noch Kollektor mit Elektrizität versorgen, kann überhaupt keine Elektrizität fließen, da es keine Elektrizität gibt, über die man sprechen kann:

B   C  |  E   O
0   0  |  0   0

Wenn wir den Kollektor mit Strom versorgen, aber nicht die Basis, kann der Strom nicht zum Emitter fließen, da die Basis zu einem Material mit hohem Widerstand wird, sodass der Strom zum Ausgangsdraht entweicht:

B   C  |  E   O
0   1  |  0   1

Wenn wir den Sockel mit Strom versorgen, aber nicht den Kollektor, kann auch kein Strom fließen, da kein Ladungsunterschied zwischen Kollektor und Emitter besteht:

B   C  |  E   O
1   0  |  0   0

Wenn wir sowohl die Basis als auch den Kollektor mit Elektrizität versorgen, fließt Elektrizität durch den Transistor. Da der Transistor jetzt einen niedrigeren Widerstand als das Ausgangskabel hat, fließt nahezu keine Elektrizität durch das Ausgangskabel:

B   C  |  E   O
1   1  |  1   O

Logikgatter

Wenn wir den Emitter eines Transistors (E1) mit dem Kollektor eines anderen Transistors (C2) verbinden und dann einen Ausgang in der Nähe der Basis des ersten Transistors (O) anschließen (siehe Abbildung 4 in http://www.spsu.edu) / cs / faculty / bbrown / web_lectures / transistoren / ), dann passiert etwas Interessantes. Nehmen wir auch an, wir legen immer Strom an den Kollektor des ersten Transistors (C1) und spielen nur mit den Basisknoten der Transistoren (B1, B2) herum:

B1   B2   C1   E1/C2  |  E2   O
----------------------+----------
0    0    1    0      |  0    1
0    1    1    0      |  0    1
1    0    1    0      |  0    1
1    1    1    1      |  1    0

Fassen wir die Tabelle so zusammen, dass nur B1, B2 und O angezeigt werden:

B1   B2  |  O
---------+-----
0    0   |  1
0    1   |  1
1    0   |  1
1    1   |  0

Und siehe da , wenn du mit Boolesche Logik und / oder Logikgatter vertraut sind, sollten Sie feststellen , dass dies genau das NAND - Gatter ist. Und wenn Sie mit Boolescher Logik und / oder Logikgattern vertraut sind, wissen Sie möglicherweise auch, dass ein NAND (und auch ein NOR) funktional vollständig ist , dh wenn Sie nur NAND verwenden, können Sie alle anderen Logikgatter und den Rest der Wahrheit konstruieren Tabellen. Mit anderen Worten, Sie können einen ganzen Computerchip nur mit NAND-Gattern entwerfen.

Tatsächlich werden die meisten CPUs (oder wurde es früher verwendet?) Nur mit NAND entwickelt, da die Herstellung billiger ist als die Verwendung einer Kombination aus NAND, NOR, AND, OR usw.

Ableiten der anderen Booleschen Operatoren von NAND

Ich würde nicht beschreiben, wie man alle booleschen Operatoren, nur das NOT- und das AND-Gatter macht, den Rest findet man woanders.

Wenn ein NAND-Operator gegeben ist, können wir ein NOT-Gatter konstruieren:

Given one input B
O = NAND(B, B)
Output O

Wenn ein NAND- und ein NOT-Operator gegeben sind, können wir ein AND-Gatter konstruieren:

Given two inputs B1, B2
C = NAND(B1, B2)
O = NOT(C) // or NAND(C,C)
Output O

Wir können andere Logikgatter auf ähnliche Weise konstruieren. Da das NAND-Gatter funktional vollständig ist , ist es auch möglich, Logikgatter mit mehr als 2 Eingängen und mehr als 1 Ausgang zu konstruieren. Ich werde hier nicht diskutieren, wie solche Logikgatter konstruiert werden.

Aufklärungszeitalter

Aufbau einer Turingmaschine aus Booleschen Toren

Eine CPU ist nur eine kompliziertere Version einer Turing-Maschine. Die CPU-Register sind der interne Zustand der Turing-Maschine, und der RAM ist ein Band der Turing-Maschine.

Eine Turing-Maschine (CPU) kann drei Dinge tun:

  • lese eine 0 oder 1 vom Band (lese eine Speicherzelle aus dem RAM)
  • seinen internen Zustand ändern (seine Register ändern)
  • nach links oder rechts bewegen (mehrere Positionen aus dem RAM lesen)
  • Schreibe eine 0 oder 1 auf das Band (schreibe in eine Speicherzelle in den RAM)

Für unseren Zweck bauen wir Wolframs 2-Zustands-3-Symbol-Turing-Maschine mit kombinatorischer Logik (moderne CPUs würden Mikrocode verwenden, aber sie sind komplexer als für unseren Zweck erforderlich).

Die Zustandstabelle der Wolfram (2,3) Turingmaschine lautet wie folgt:

    A       B
0   P1,R,B  P2,L,A
1   P2,L,A  P2,R,B
2   P1,L,A  P0,R,A

Wir wollen die obige Zustandstabelle als Wahrheitstabelle umcodieren:

Let I1,I2 be the input from the tape reader (0 = (0,0), 1 = (0,1), 2 = (1,0))
Let O1,O2 be the tape writer (symbol encoding same as I1,I2)
Let M be connected to the machine's motor (0 = move left, 1 = move right)
Let R be the machine's internal state (A = 0, B = 1)
(R(t) is the machine's internal state at timestep t, R(t+1) at timestep t+1)
(Note that we used two input and two outputs since this is a 3-symbol Turing machine.)

      R  0          1
I1,I2
(0,0)    (0,1),1,1  (1,0),0,0
(0,1)    (1,0),0,0  (1,0),1,1
(1,0)    (0,1),0,0  (0,0),1,0

The truth table for the state table above:

I1  I2  R(t) | O1  O2  M   R(t+1)
-------------+--------------------
0   0   0    | 0   1   1   1
0   0   1    | 1   0   0   0
0   1   0    | 1   0   0   0
0   1   1    | 1   0   1   1
1   0   0    | 0   1   0   0
1   0   1    | 0   0   1   0

Ich werde ein solches Logikgatter nicht wirklich konstruieren (ich bin mir nicht sicher, wie ich es in SE zeichnen soll, und es wird wahrscheinlich ziemlich umfangreich sein), aber da wir wissen, dass das NAND-Gatter funktionsfähig ist , haben wir einen Weg um eine Reihe von NAND-Gattern zu finden, die diese Wahrheitstabelle implementieren.

Eine wichtige Eigenschaft von Turing Machine ist, dass es möglich ist, einen Computer mit gespeicherten Programmen unter Verwendung einer Turing-Maschine zu emulieren , die nur eine Tabelle mit festen Zuständen aufweist. Daher kann jede Universal Turing-Maschine ihr Programm vom Band (RAM) lesen, anstatt ihre Anweisung in die interne Statustabelle fest einprogrammieren zu müssen. Mit anderen Worten, unsere (2,3) Turing-Maschine kann ihre Anweisungen von den I1-, I2-Pins (als Software) lesen, anstatt in der Logikgatter-Implementierung (als Hardware) fest codiert zu sein.

Mikrocodes

Aufgrund der zunehmenden Komplexität moderner CPUs wird es unerschwinglich schwierig, die kombinatorische Logik allein zum Entwerfen einer gesamten CPU zu verwenden. Moderne CPUs sind in der Regel als Interpreter für Mikrocodebefehle konzipiert. Ein Mikrocode ist ein kleines Programm, das in die CPU eingebettet ist und von der CPU zur Interpretation des tatsächlichen Maschinencodes verwendet wird. Diese Mikrocode-Interpreter selbst werden im Allgemeinen mit kombinatorischer Logik entworfen.

Registrieren, Cache und RAM

Wir haben oben etwas vergessen. Wie erinnern wir uns an etwas? Wie implementieren wir das Band und den RAM? Die Antwort liegt in einer elektronischen Komponente namens Kondensator. Ein Kondensator ist wie eine wiederaufladbare Batterie. Wenn ein Kondensator aufgeladen wird, werden zusätzliche Elektronen gespeichert und es können auch Elektronen an die Schaltung zurückgegeben werden.

Um in einen Kondensator zu schreiben, füllen wir den Kondensator mit Elektronen (schreibe 1) oder entleeren alle Elektronen im Kondensator, bis er leer ist (schreibe 0). Um den Wert eines Kondensators abzulesen, versuchen wir ihn zu entladen. Wenn beim Entladen kein Strom fließt, ist der Kondensator leer (Anzeige 0). Wenn jedoch Strom erkannt wird, muss der Kondensator aufgeladen werden (Anzeige 1). Sie werden vielleicht bemerken, dass das Lesen eines Kondensators seinen Elektronenspeicher entleert. Moderne RAMs verfügen über die Schaltung, um den Kondensator regelmäßig aufzuladen, so dass sie ihren Speicher behalten können, solange Strom vorhanden ist.

In einer CPU werden mehrere Kondensatortypen verwendet, die CPU-Register und die übergeordneten CPU-Caches werden mit sehr schnellen "Kondensatoren" erstellt, die eigentlich aus Transistoren bestehen (daher gibt es fast keine "Verzögerung" zum Lesen / Schreiben diese werden statisches RAM (SRAM) genannt; Während der Hauptspeicher RAM mit geringerer Leistung, aber langsameren und viel billigeren Kondensatoren hergestellt wird, werden diese als dynamischer RAM (DRAM) bezeichnet.

Uhr

Ein sehr wichtiger Bestandteil einer CPU ist die Uhr. Eine Uhr ist eine Komponente, die regelmäßig "tickt", um die Verarbeitung zu synchronisieren. Eine Uhr enthält typischerweise einen Quarz oder andere Materialien mit bekannter und relativ konstanter Schwingungsperiode, und die Uhrschaltung hält diese Schwingung aufrecht und mißt sie, um ihren Zeitsinn aufrechtzuerhalten.

CPU-Operationen werden zwischen Takt-Ticks ausgeführt und Lese- / Schreibvorgänge werden in den Ticks ausgeführt, um sicherzustellen, dass sich alle Komponenten synchron bewegen und nicht ineinander treten, während sie sich in Zwischenzuständen befinden. In unserer (2,3) Turing-Maschine fließt zwischen den Takten Elektrizität durch die Logikgatter, um die Ausgabe von der Eingabe (I1, I2, R (t)) zu berechnen. und in den Takt-Ticks schreibt der Bandschreiber O1, O2 auf das Band, der Motor bewegt sich abhängig vom Wert von M und das interne Register wird vom Wert von R (t + 1) und dann vom Bandleser geschrieben liest das aktuelle Band und lädt es in I1, I2 und das interne Register wird auf R (t) zurückgelesen.

Mit Peripheriegeräten sprechen

Beachten Sie, wie die (2,3) Turing-Maschine mit ihrem Motor verbunden ist. Dies ist eine sehr vereinfachte Ansicht, wie eine CPU mit einer beliebigen Hardware verbunden werden kann. Beliebige Hardware kann eine bestimmte Leitung für Ein- / Ausgänge abhören oder beschreiben. Bei der (2,3) Turing-Maschine besteht die Schnittstelle zum Motor nur aus einem einzigen Draht, der den Motor anweist, sich im oder gegen den Uhrzeigersinn zu drehen.

Was bei dieser Maschine nicht gesagt wird, ist, dass der Motor eine andere "Uhr" haben muss, die synchron mit der internen "Uhr" der Maschine läuft, um zu wissen, wann der Betrieb gestartet und gestoppt werden muss. Dies ist also ein Beispiel für eine synchrone Datenübertragung . Die andere häufig verwendete alternative asynchrone Übertragung verwendet eine andere Leitung, die als Interrupt-Leitung bezeichnet wird, um Synchronisationspunkte zwischen der CPU und dem asynchronen Gerät zu kommunizieren.

Digitales Zeitalter

Maschinencode und Montage

Assemblersprache ist eine vom Menschen lesbare Mnemonik für Maschinencodes. Im einfachsten Fall gibt es eine Eins-zu-Eins-Zuordnung zwischen Assembly und Maschinencode. Obwohl in modernen Assemblersprachen einige Anweisungen möglicherweise mehreren Opcodes zugeordnet sind.

Programmiersprache

Das ist uns allen bekannt, nicht wahr?


Puh, endlich fertig, ich habe das alles in nur 4 Stunden getippt, also bin ich sicher, dass es irgendwo einen Fehler gibt (ich bin in erster Linie ein Programmierer, kein Elektrotechniker oder Physiker, also gibt es möglicherweise einige Dinge, die offensichtlich falsch sind). Wenn Sie einen Fehler gefunden haben, zögern Sie bitte nicht, ein @yell zu geben oder es selbst zu beheben, wenn Sie den Repräsentanten haben oder eine ergänzende Antwort erstellen.


37
" awesome " wird dem nicht gerecht. Diese Antwort ist positiv heroisch .
5.

1
Sind die Atome nicht falsch? Im Allgemeinen sie werden ionisieren geladene Atom zu bilden , anstatt neutral zu bleiben, um einen vollständigen äußereen Subshell zu haben.
Alternative

3
+1, +1000 wenn ich könnte. Was mich wirklich erstaunt und warum ich dieses Gebiet liebe , ist, dass die große Informationsbreite in dieser Antwort die erstaunliche Tiefe der Technologie, die einen modernen PC zum Funktionieren bringt, nicht einmal kratzt.
Quentin-Starin

Heiliger Strohsack. Das ist großartig. Ich wünschte, ich könnte mehr tun, als nur einmal zu voten.
Rob P.

3
+1 obwohl ich denke, ich sollte beachten, dass moderne Hardware nicht genau über NAND-Gatter erfolgt. Es gibt Tore, ja, aber sie sind wirklich recht komplex und nur (normalerweise) annähernd NAND-Logik. Die Einschränkungen sind ziemlich physisch. Die physikalischen Gatter werden zuerst zu Logikmodulen zusammengesetzt, die ein klassisches NAND sein könnten, aber normalerweise eher mehr sind (z. B. Flip-Flop oder Halbaddierer). Die genaue Anzahl der zulässigen Tore hängt vom verwendeten Logikstil und den Einschränkungen der Fertigungsanlage ab. Nicht jede Fabrik kann alles bauen. (Aaargh! Ich beginne mich an Details zu erinnern! Hilfe!)
Donal Fellows

12

In 12 Schritten von Nand zu Tetris

Ich denke, das wird absolut perfekt für Sie sein:

Von Nands zu Tetris in 12 Schritten


danke für den Link und schau ihn dir jetzt an. Gibt es einen zentralen Index dieser Gespräche, oder haben Sie diesen gerade irgendwo in einem Blog gesehen?
jhocking

Ich bin mir nicht sicher, was genau dabei herauskam, als ich eines Tages surfte
Darknight,

Er hat einen 13. Schritt verpasst - Silizium-Wafer.
Job

danke fürs posten! Dies ist im Grunde genommen die Zusammenfassung des Lehrplans des Kurses, den der Autor der Vorträge in den Videovorträgen bei IDC in Israel gehalten hat, und basiert auf seinem Buch - ich habe in meiner Antwort einen Link zu dem Buch gepostet.
Littleadv

Handelt es sich bei dieser Site um dasselbe Material? Weil es so aussieht, als wäre es viel besser organisiert als nur ein großes Video. Nand2tetris.org
jhocking

10

Wenn Sie die Montage durchgeführt haben, müssen Sie nur noch zwei oder drei Ebenen verstehen:

  • Logikgatter , so wird Logik über bewegte Elektronen realisiert - hier wird sie zur Elektronikfrage
  • CPU- und Systemdesign: So werden Logikgatter zu einer CPU zusammengesetzt und mit RAM und Peripheriegeräten verbunden. Moderne CPUs sind extrem komplex, aber um zu verstehen, wie die Dinge im Grunde funktionieren, sollte es ausreichen, sich eine klassische einfache CPU wie die Z80 anzuschauen .
  • Microcode , mit dem Assembler-Anweisungen interpretiert und in Hardware-Aktionen von Registern und Logikschaltungen umgewandelt werden.

Der letzte (Microcode) hat es für mich zum "Klicken" gebracht, weil er die Lücke zwischen Elektronik und Code füllte.


Vielleicht fehlt mir der Mikrocode. Ich habe Kurse in Logikgattern und CPU / System-Design belegt, in Assembler programmiert und alles über Binärbefehle gelernt (und in all diesen Klassen gut abgeschnitten), aber ich konnte Ihnen immer noch nicht sagen, wie zum Teufel das alles zusammenpasst. Ich muss Mikrocode erforschen.
Casey Patton

@Casey: es ist gut möglich, dass das tatsächlich das ist, was du vermisst. Für mich war das Erlernen (und Schreiben einiger) von Mikrocodes genau der Punkt, an dem ich dachte: OK, jetzt verstehe ich, wie Computer funktionieren. Sicher, sie sind so komplex geworden, dass Sie immer noch leicht in Situationen geraten können, die unmöglich zu verstehen scheinen, aber ich bin überzeugt, dass eine solche Situation verstanden werden kann, wenn Sie kompetent, ausdauernd und ausreichend Zeit investieren.
Michael Borgwardt

7

Ein Beispiel für einen Lehrplan für ein CS-Grundstudium, der genau erklärt, was Sie gefragt haben, finden Sie hier (IDC.AC.IL-Kurs CS101) . Es basiert auf dem MIT-Pressebuch: " Die Elemente von Computersystemen: Aufbau eines modernen Computers aus ersten Prinzipien ".


1
+1 für die Erwähnung von "The Elements of Computing Systems". Es ist ein großartiges Buch und sollte genau die Frage "Wie funktionieren Computer?" Beantworten.
Cedric

Würde es Ihnen etwas ausmachen, näher zu erläutern, was diese Ressourcen bewirken und warum Sie diese zur Beantwortung der gestellten Frage empfehlen? "Nur-Link-Antworten" sind bei Stack Exchange
gnat


4

Ich kann Code von Charles Petzold nur empfehlen . Das Buch ist sowohl eine Geschichtsstunde als auch ein technischer Überblick über den Bau eines Computers. Beginnend mit der Erläuterung einfacher Telegraphenschalter zeigt das Buch, wie Transistoren funktionieren, und anschließend mit Logikgattern, programmierbaren Computern und komplexeren Dingen. Es ist auch sehr gut geschrieben und könnte wahrscheinlich von jedem mit genügend Neugier erfasst werden.


3

Es wird viel zu schwierig (und zu lang!) Sein, alles aufzulisten, was Sie wissen müssen, um ein ausreichendes Verständnis für das zu erlangen, was Sie wissen müssen. Ein berühmtes Buch, das all diese Fragen beantwortet, stammt von Andrew Tanenbaum: Structured Computer Organization .

Dieses Buch führt Sie vom physischen Computer auf Ihrem Schreibtisch bis hinunter zu logischen Gattern und zur Booleschen Algebra und zeigt Ihnen anhand einer Beispielarchitektur, wie alles in einem solchen System tatsächlich abläuft.

(Eine Anmerkung: Es ist sehr teuer, da es ~ 800 Seiten umfasst. Es ist wahrscheinlich gut, nur eine gebrauchte Version oder eine ältere Ausgabe zu erhalten. Die Konzepte haben sich nicht geändert.)


2

Nun, es braucht eine Menge Eier, um das zu sagen und zu fragen, denke ich.

Der Code wird so ziemlich immer weiter auf einen komplizierteren Code niedrigerer Ebene reduziert. Code auf Baugruppenebene mit Schieberegistern .. etc ...

Dann nimmt die Hardware diesen Code und reagiert darauf. In den meisten Fällen verfügt die Hardware über eigene Anweisungen zur Vorgehensweise. Es kann also eine einfache Anweisung wie PUSH geben, bei der ein Register (Speicherort) einen Wert wie 1 oder 2 oder was auch immer erhält.

Es ist definitiv eine Computerfrage. Und auch eine Programmierung. Einige Programmierer programmieren die Hardware, die Ihren Code aufnimmt und dazu bringt, etwas zu tun, wenn auch auf einem sehr niedrigen Niveau. Es ist auch eine Elektronikfrage.


1

Es gibt Geräte.

Dann gibt es Gerätetreiber, die mit diesen Geräten interagieren. Teil in C geschrieben, Teil in der Regel in der Baugruppe.

Das Betriebssystem interagiert auf der einen Seite mit der Anwendungssoftware und auf der anderen Seite mit den Gerätetreibern, um mit der eigentlichen Hardware zu kommunizieren.

Wenn Sie wirklich interessiert sind, warum nicht einen Linux-Kernel hacken, um mehr zu erfahren?


Vielen Dank für Ihre Antwort und Ihren Vorschlag. Das hört sich nach einer guten Idee an!
Rob P.

1

Im Kern handelt es sich hierbei um eine Elektronikfrage, deren Grundlagen jedoch für jeden CS-Abschluss im Studiengang behandelt werden sollten. Alle Hardware-Aktionen basieren auf Gattern, die auf Komponentenebene darin programmiert sind. Dies sind die grundlegendsten logischen Operationen: NOT, AND, OR, XOR, NAND, NOR. Jedes Tor hat eine bestimmte Funktion:

Das NICHT- Gatter nimmt einen Eingangswert und erzeugt einen Ausgangswert, es erhält eine 0 oder 1 und gibt das Gegenteil aus.

Das UND- Gatter nimmt zwei Eingangswerte an und erzeugt einen Ausgangswert. Es erhält eine beliebige Kombination von 0 und 1 und gibt 0 für eine beliebige Kombination mit Ausnahme von zwei aus, für die es eine 1 ausgibt.

Das ODER- Gatter funktioniert ähnlich wie das UND-Gatter, erzeugt jedoch eine 1 für jede Kombination von 0 und 1, die es erhält, mit Ausnahme von zwei Nullen, für die es eine 0 ausgibt.

Das XOR- Gatter ähnelt wieder sowohl dem AND- als auch dem OR-Gatter, erzeugt jedoch eine 0, wenn beide Eingänge identisch sind, und eine 1, wenn beide Eingänge unterschiedlich sind.

Das NAND- Gatter ist das logische Gegenteil des UND-Gatters und das NOR- Gatter ist das logische Gegenteil des ODER-Gatters.

Mit anderen Worten, auf der Hardwareebene kommt es auf die grundlegendsten binären logischen Ausdrücke an. Alles andere ist nur ein Übergang von einer höheren Programmierebene zu einer niedrigeren, bis diese letzte Ebene erreicht ist.


+1 Die nächste Stufe ist das Erstellen eines sequentiellen Verhaltens mit diesen Logikgattern. Die Schlüsselkomponente ist das Flip-Flop . Bauen Sie logische Gatter zusammen, um eine ALU, ein Flip-Flop für Register, eine Uhr und eine CPU zu bilden.
mouviciel

@mouviciel Du hast die Multiplexer vergessen.
Starblue


1

Obwohl es für mich erstaunlich ist, dass jemand einen Kurs in CS absolvieren kann, ohne die Hardware zu verstehen, ist es durchaus möglich, dass sich ein Kurs nur auf die Theorie als Teilgebiet der Mathematik und nicht auf die Details der Technik und Implementierung konzentriert. Die ehrwürdigen SICP- Vorlesungen (wie sie in den 1980er Jahren gehalten wurden) schienen so zu sein.

Auf meinem CS-Kurs musste vor zwei Jahrzehnten eine frühere Ausgabe von Computers: from Logic to Architecture im ersten Jahr gelesen werden.
So etwas sollte die Lücken füllen.

Alternativ sollte die Open Courseware des MIT etwas enthalten, das hilft.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.