Wie funktioniert ein Computer?


40

Ich bin seit vielen, vielen Jahren ein Computer-Nerd. Ich kann in einigen Sprachen programmieren und sie sogar erstellen. Ich habe mich neulich mit einem Kumpel zusammengesetzt und gefragt, wie ein Computer tatsächlich Strom verbraucht und etwas damit macht, und wir konnten es einfach nicht herausfinden, und Google hat auch nicht viel geholfen.

Ich meine, wie nimmt ein Computer einen konstanten Stromfluss auf und wandelt ihn in Einsen und Nullen um und macht dann tatsächlich etwas mit diesen Einsen und Nullen, wie ein Licht für 15 Sekunden anzuschalten?

Ich verstehe Gates (AND, OR, NOR, NAND, NOT) und ein wenig über Dioden , Widerstände und Transistoren , aber ich dachte, dies wäre der perfekte Ort, um es in wahren Laienbegriffen erklären zu lassen!

Kann jemand mich in die richtige Richtung weisen oder mir eine kurze Erklärung geben?


8
Sie könnten genauso gut fragen "Wie wirken Bakterien?". Dies ist eine unglaublich breite Frage. Ich schlage vor, Sie schauen sich eine einfache Prozessorarchitektur an (z. B. MIPS ; diese wurde uns im Unterricht beigebracht) und arbeiten von dort abwärts und aufwärts. Die Fragen, mit denen Sie unterwegs konfrontiert sind, eignen sich wahrscheinlich viel besser für Stack Exchange als diese.
Raphael

3
Ich weiß, wie Bakterien funktionieren, es ist der Computer, den ich nicht bekomme
Christian

14
Elfen. Winzige Zauberelfen.
JeffE


1
Der beste Weg, um zu lernen, wie ein Computer wirklich auf der untersten Ebene funktioniert, ist das Entwerfen eines simplen Mikrocontrollers auf einer FPGA oder manuell über Nand-Gates. Ich habe es in einer "Computer Architectures" -Klasse gemacht und es war wirklich ein Augenöffner. Es ist nicht einmal schwer, alles auf ein Minimum zu beschränken und einen 4-Bit-Controller mit Addition, Bit-Manipulation und bedingtem Sprung zu entwerfen. Oder noch einfacher, eine Hardware, die eine vereinfachte Turing-Maschine implementiert. Hm, das hat mir eine Idee gegeben: Erfahren Sie, wie eine Turing-Maschine funktioniert. Es wird Ihnen einen guten Einblick geben.
vsz

Antworten:


47

Dies ist eine weit gefasste Frage, auf die es keine einfache Antwort gibt. Es ist ein langer Weg von Elektronen, die über Kupferdrähte huschen, bis zum Rendern einer Website in Firefox. Ich werde versuchen, Ihnen einen Überblick von unten nach oben zu geben und Sie auf die richtigen Dinge hinzuweisen, um nachzuschlagen.

Zahlen kodieren

Die grundlegende Motivation besteht darin, Dinge wie beim Rechnen zu berechnen¹. Das erste, was man sich ansehen muss, ist, wie man Zahlen darstellt. Es gab viele Ansätze, die Dezimal- oder Dreistellensysteme verwendeten, und ich denke sogar Oktalsysteme, aber am Ende setzte sich die Binärfunktion durch. Jetzt wissen wir, dass wir Geräte bauen müssen, die mit zwei Werten umgehen - nennen wir sie und .101

Beachten Sie, dass es auch mehrere Möglichkeiten gibt, Zahlen in Binärform zu codieren. Nachdem Sie Ihren ersten Prozessor aufgebaut haben, erkennen Sie die Vorteile einer bestimmten Vorgehensweise. Beliebte Beispiele sind die Floats mit zwei Komplementen und IEEE . Beschränken Sie sich zunächst auf natürliche Zahlen.

Tore

Angenommen, wir verwenden eine binäre Codierung. Stellen Sie sich vor, wie Sie in der Grundschule das Hinzufügen gelernt haben, und schreiben Sie dasselbe für Binärzahlen auf. Wie sich herausstellt, sind die Bausteine ​​der Booleschen Algebra bereits für Sie da; Es ist einfach, einen Basisaddierer (und andere arithmetische Funktionen) unter Verwendung von Logikgattern zu erstellen .

Wie solche Tore gebaut werden, liegt außerhalb des Rahmens der Informatik. Die Elektrotechnik hat mehrere Lösungen unter Verwendung von z . B. Röhren oder Transistoren bereitgestellt . Bei Fragen hierzu wenden Sie sich bitte an Electrical Engineering Stack Exchange .

Uhr und Zustand

Nicht alle Gates sind gleich schnell und nicht alle Teile einer Berechnung haben die gleiche Anzahl von Gates. Deshalb müssen wir besonders darauf achten, dass sich einzelne Vorgänge nicht gegenseitig überholen. Es hat sich als nützlich erwiesen, eine globale Uhr zu verwenden . Das Ergebnis eines gegebenen Netzwerks von Gattern ist der Zustand der Ausgangsdrähte am Ende des Zyklus (der sich wild ändern kann, während die Gatter in Richtung ihrer individuellen Endzustände kaskadieren).

Das bedeutet, dass die Ergebnisse eines Zyklus möglicherweise gespeichert werden müssen, bis der nächste Zyklus beginnt, z. B. wenn Sie Schleifen verkabeln. Es gibt eine Reihe grundlegender Elemente, die Sie mit unterschiedlichen Effekten verwenden können und die sich alle aus Toren zusammensetzen. Einige werden Flip-Flops genannt . Diese werden auch verwendet, um Register zu erstellen , Elemente, die Zahlen für beliebig viele Taktzyklen speichern.

Architektur und Befehle

Jetzt haben Sie eine Vielzahl von Design-Entscheidungen zu treffen. Welche Rechenoperationen bietet Ihr Prozessor? Wie sehen Ihre Befehle aus? Es mag lehrreich sein, sich die MIPS-Architektur anzuschauen, deren frühe Formen im Vergleich zu anderen Designs einfach sind. Schauen Sie sich die Pläne an :

MIPS einstufig
Original von http://ube.ege.edu.tr/~erciyes/CENG311

Im Wesentlichen geht es um das Abrufen und Zerlegen von Befehlen, eine Reihe von Registern, eine ALU und eine Steuerung. Befehle codieren, welche ALU-Operation an welchen Operanden ausgeführt werden soll (anhand der Nummer des Registers, in dem sie gespeichert sind), wie der Programmzähler² manipuliert wird oder welches Register aus dem / in den Speicher³ geladen / gespeichert wird.

Weitere Überlegungen

Inzwischen haben Sie einen funktionierenden Prozessor im modernen Sinne, vorausgesetzt, Sie haben herausgefunden, wie Sie einen Speicher aufbauen und wie Sie ihn mit Befehlen versorgen können. Auf dem Weg zu einer modernen Maschine müssen viele Entscheidungen getroffen werden. Hier sind einige:

Alternativen

Das Obige ist stark von der Entwicklung der Geschichte beeinflusst. In einer anderen Welt mit anderen Köpfen funktionieren Computer möglicherweise anders. Tatsächlich gibt es eine Vielzahl von Berechnungsmodellen , von denen einige Vorteile haben, die sie in vielen Fällen als Abstraktion für reale Maschinen nützlich machen. Es gibt auch Versuche, die Funktionsweise unseres Gehirns nachzuahmen, dh das neuronale Rechnen zu ermöglichen oder allgemein Strategien zur Problemlösung und Informationsspeicherung zu nutzen, die in der Natur zu beobachten sind , insbesondere DNA- und Quantencomputer .

Vielleicht (hoffentlich?) Handelt es sich bei den obigen Informationen um die gesamte alte Geschichte in 50 oder 100 Jahren.


  1. All die ausgefallenen Dinge, die wir heute mit Computern tun, sind in viele kleine Rechenaufgaben unterteilt, die der Prozessor nacheinander ausführt.
  2. Wenn Ihr Modell zulässt, dass das Programm den Steuerungsfluss manipuliert, ist dies die Speicheradresse, von der der Prozessor den nächsten Befehl erhält. Sie können sich auch Maschinen vorstellen, die nur einen festgelegten Befehlssatz, beispielsweise von einem Band, lesen. Tatsächlich haben frühe Implementierungen dies getan. Keine Sprünge bedeuteten keine Schleifen; Ein Programm war eine vollständig abgewickelte / abgewickelte Folge von Anweisungen, die von den Daten abhing. Offensichtlich ist es leistungsfähiger, dasselbe Programm für mehrere Eingabedaten verwenden zu können.
  3. Angenommen, Sie haben Gedächtnis; Ihr Prozessor funktioniert ohne, kann dann aber nur mit so vielen Werten gleichzeitig umgehen. Frühe Computer haben alle ihre Daten von Bändern eingelesen und in Registern geführt. Es gab keine Erinnerung, geschweige denn eine beschreibbare, dauerhafte Speicherung, wie wir sie heute kennen.

Beeindruckend! Das verdient einen Klatsch. Das war eine großartige Lektüre. Ich danke Ihnen für das Teilen. Ich habe bestimmt etwas gelernt. Nachdem ich das gelesen habe, denke ich, dass ich mehr über die Grundlagen der Elektrotechnik in Bezug auf die physikalische Steuerung des Stroms wissen möchte. Ich werde die gleiche Frage etwas später an diese Gruppe senden. Danke!
Christian

1
Mir ist aufgefallen, dass ich wohl das "Sprechen mit dem Maschinenteil" hätte einbauen sollen. Das bedeutet, dass Menschen eine Sprache entwickeln können, mit der sie effizient arbeiten und diese (mit einem Compiler) in den von Ihnen angegebenen Befehlssatz übersetzen können. Dies sind Kernthemen der Informatik , während das Material in meiner Antwort hauptsächlich die Computertechnik ist .
Raphael

Ich stelle mir vor, das ist keine schnelle Antwort. Eines Tages bezahle ich einen Computeringenieur, der Motherboards oder Mobiltelefone herstellt, wie die Grundlagen funktionieren. Das heißt, wie ein Computer tatsächlich berechnet oder ein Licht für 5 Sekunden einschaltet und dann ausschaltet. Ich stelle mir vor, es hat viel mit Schaltern und Kondensatoren zu tun.
Christian

@Christian Wenn Sie etwas Geld sparen möchten, sollten Sie eine EE-Experimentierbox (wie die für Kinder) mit Transistoren kaufen. Das Schalten von Lichtern oder das Bauen eines kleinen Addierers ist typischerweise enthalten. (Wieder wissen die Elektrotechniker wahrscheinlich mehr.)
Raphael

25

Das Gesamtbild ist ziemlich kompliziert. Es sind viele Schichten übereinander aufgebaut, die zusammen Abstraktionen auf hoher Ebene über elektrische Spannungen implementieren. Es gibt keine einfache Erklärung dafür, wie alles zusammengesetzt ist, zumal sich Computerhardware und -software in den letzten fünfzig Jahren dramatisch entwickelt haben.

Wenn Sie wissen möchten, wie sich alles zusammensetzt, sollten Sie sich The Elements of Computing Systems ansehen , ein Buch, das mit NAND-Gattern beginnt und schrittweise eine funktionsfähige Implementierung von Tetris auf der Basis eines Compilers und Betriebssystems aufbaut Sie bauen auch. Jeder Teil des Computers baut auf dem vorherigen auf, sodass Sie möglicherweise sehen können, wie alles funktioniert.


Das klingt nach einem perfekten Startplatz. Ich werde dort anfangen. Vielen Dank :)
Christian

2
Ich empfehle auch CODE von Charles Petzold zu lesen.
Ybakos

7

Die Podcast-Sicherheit jetzt! habe eine Reihe darüber gemacht, wie Computer funktionieren, angefangen mit Grundprinzipien.

  • 233 - Lassen Sie uns einen Computer entwerfen (Teil 1)
  • 235 - Maschinensprache
  • 237 - Indirektion: Die Kraft der Zeiger (technisch nicht Teil der Serie)
  • 239 - Stapel, Register und Rekursion
  • 241 - Hardware-Interrupts
  • 247 - Die "Multi" -Verse
  • 250 - Betriebssysteme
  • 252 - RISIKOBETRIEB
  • 254 - Was wir für die Geschwindigkeit tun werden

Die Lücken in den Zahlen bestehen darin, dass jede zweite Episode eine Listener-Feedback-Episode ist. Vielleicht möchten Sie sich diese auch ansehen. Ebenfalls zwischen 241 und 247 führten sie einige Episoden über SSL durch, da zu dieser Zeit die neuesten Nachrichten über Länder kamen, die CA dazu zwangen, Root-Zertifikate an sie zu vergeben.

Auch EP. 248 ist der "Portable Dog Killer", der keine Hunde tötet, sondern eine Schallstrahlwaffe, die Steve als Kind selbst hergestellt hat, um einem Nachbarhund beizubringen, nicht an die Zaunlinie zu rennen und Menschen auf dem Bürgersteig anzugreifen .


interessant! Ich danke Ihnen für das Teilen. Ich werde nachsehen.
Christian

4

Ein Computer manipuliert Energieverläufe (die wir dann als Einsen und Nullen interpretieren) auf konsistente , definierte Weise. Es ist die Konsistenz, die einen Computer definiert, während es die Definition ist, die die verschiedenen Prozessoren trennt.

Erfahren Sie auch, wie zwei logische Gatter (ODER und UND) ausreichen, um einen Universalcomputer aufzubauen. Siehe auch Danny Hillis und der Tinkertoy-Computer.


Das war eine interessante Lektüre über das TinkerToy, insbesondere die Tatsache, dass es immer gewinnt! ( Science20.com/brain_candyfeed_your_mind/… )
Christian

Obwohl es mir einen guten Einblick in das Denken eines Computers gibt, dh indem ich ihm jede Kombination und die Mechanik gebe, um die nächste Antwort zu finden, beantwortet es nicht meine ursprüngliche Frage, wie man einen Computer tatsächlich baut. Angenommen, ich gehe zu meinem örtlichen Elektrogeschäft (das alles hat), um die grundlegenden Teile (Transistoren, Widerstände, Kondensatoren, Tore usw.) zu kaufen und sie so zu konfigurieren, dass ich einen äußerst einfachen Computer habe. Was würde ich brauchen? Immerhin hatte der erste Computer die Größe eines Lagers mit Bits und Drähten, also muss es möglich sein!
Christian

@Christian: haha, okay, bauen Sie einige grundlegende Logikgatter (UND / ODER / NICHT), einige Flip-Flops für die grundlegende Speicherung des Speichers, und Sie können möglicherweise zwei 4-Bit-Zahlen hinzufügen.

Ich habe ein paar Flip-Flops! Tatsächlich zwei Paare.
Christian

3

Ein Computer ist ein großes synchrones logisches System , was bedeutet , dass

  • 0/1
  • Es arbeitet mit einer (sehr schnellen) Uhr, so dass alle Signale zu diskreten Zeitpunkten abgetastet werden, um Kohärenz zu gewährleisten.

0/1

Es hat spezielle Schaltkreise, um Informationen zu speichern, solange der Computer mit Strom versorgt wird (RAM, in großen Mengen). Es verfügt über spezielle Schaltkreise für die Ausführung von Binärarithmetik (tatsächlich werden die Bits in Gruppen behandelt - typischerweise in Vielfachen von 8 -, die zusammen eine ganze Zahl darstellen). Und es verfügt über spezielle Routing-Funktionen, die auf Speicheradressen basieren, die nichts anderes als ganze Zahlen sind.

Last but not least verfügt ein moderner Computer über ein Programm, das ebenfalls im RAM gespeichert ist. Hierbei handelt es sich um eine Liste von Anweisungen, die als Ganzzahlen codiert sind. Diese werden nacheinander ausgeführt, wobei normalerweise Daten aus dem Speicher abgerufen, arithmetisch verarbeitet und die Ergebnisse zurück in den Speicher gesendet werden.

In Ihrem Szenario könnte man sich eine Implementierung vorstellen, bei der die verstrichene Zeit irgendwo im RAM gespeichert wird und das Programm dazu auffordert

  • den Wert der abgelaufenen Zeit abrufen,
  • Erhöhen Sie es mit einem Addierer,
  • vergleiche es mit einer vorgegebenen Verzögerung mit einem Komparator,
  • Rückkehr zur Startprogrammadresse bei Ungleichheit (zB "Schleifen"),
  • Andernfalls legen Sie ein spezielles Signal fest, das an einen externen Switch und nicht an den RAM geht.

Beachten Sie, dass alle diese Elemente heute ein hohes Maß an Raffinesse erreichen, und jeden Satz in diesem sehr kurzen Überblick verdient mehrere Bücher von Erklärungen.


-1

Es gibt verschiedene Möglichkeiten, eine Verzögerungsfunktion auszuführen oder die Binärdaten in Dezimaldaten oder Signalstärke umzuwandeln. Wenn Sie den Wert "15" eingeben, zeigt der Computer ein Bitmap-Bild mit der Nummer 15 auf dem Bildschirm an. Dies ist eigentlich der Binärwert, momentan wird der Binärcode Ihrer Tastatur auch an die CPU gesendet. Es analysiert die Daten und wandelt dann den Code in eine ALU-Verarbeitungseinheit (Arithmetic Logic Unit) um, um ihn in einen Impuls in einen DAC-Chip umzuwandeln. Das analoge Signal steuert jetzt die Frequenz (die Frequenz von khz bis hz) einer Flip-Flop-Schaltung. Jetzt wird die Frequenzausgabe an den RAM geleitet und der CPU-Lese-RAM wird angepasst, wenn die Daten "1111" sind. Das sind also 4 Sekunden.


Ich bin nicht sicher, wie dies die Frage beantwortet.
Yuval Filmus

Sie können sehen, dass er gefragt hat, wie das Blinken des Computers für 15 Sekunden geführt hat, und ich erkläre, wie der Computer den zweiten Wert erstellt, der in der Schleife verwendet wird.
Lan ...
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.