Wie funktioniert eine CPU? Wie arbeitet eine Programmiersprache?

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Das sind sehr viele komplexe Fragen. Hoffentlich liest du das alles, was ich jetzt schreibe. Eigentlich wird das meiste davon sogar schon an Gymnasien im Informatik-Unterricht gelehrt und entspricht einem ganzen Semester...

Logikgatter
Ich weiß dass eine CPU aus unzählig vielen Transistoren besteht. Somit ein Binärsystem besitzt (1;0).

Allein mit dem Prinzip der Transistoren kommt man nicht weiter, das ist zu nah an der wirklichen Hardware. Um etwas Komplexes wie einen Computer zu entwickeln, ist stets Abstraktion erforderlich. Die erste Abstraktionsebene stellen dabei die sogenannten Logikgatter dar. Diese basieren auf dem EVA-Prinzip: Binäre Eingaben werden durch eine Schaltung (bestehend aus Transistoren) in binäre Ausgaben umgewandelt. Dabei existieren drei Grundgatter:

Bild zum Beitrag

Es gibt AND-, OR- und NOT-Gatter. Hier findest du zugehörige Symbole und Tabellen detailliert erklärt.

Das UND-Gatter liefert am Ausgang nur eine 1, sofern beide Eingaben 1 sind. Das ODER-Gatter liefert am Ausgang eine 1, sofern mindestens eine der beiden Eingaben 1 ist. Das NICHT-Gatter liefert am Ausgang eine 1, sofern die Eingabe 0 ist, ansonsten liefert es eine 0. Diese Gatter basieren auf bestimmten elektrischen Schaltungen, welche aber im weiteren Verlauf nicht mehr relevant sind. Es ist wichtig, dass man das Prinzip der Gatter verinnerlicht hat, bevor man sich Gedanken über eine CPU machen kann.

In der Praxis werden zwar die drei Grundgatter oft alle durch NAND-Gatter umgesetzt, aber das vernachlässigen wir der Einfachheit halber mal.

Zum Ausprobieren eignet sich das Programm LogicSIM.

JKMS-Flip-Flop

Die Grundgatter lassen sich zu komplexeren Schaltungen zusammenschließen, sodass wir beispielsweise sogar Daten speichern können. Wichtig sind noch die sogenannten JK-Flip-Flops sowie Multiplexer. Ein JKMS-Flip-Flop sieht so aus:

Bild zum Beitrag

Der mittlere Eingang dient für ein Taktsignal, d. h. eine regelmäßige Abfolge von Einsen und Nullen:

Bild zum Beitrag

Bei einer steigenden Taktflanke werden die Eingaben eingelesen, bei der nächsten fallenden Taktflanke ausgegeben. Sofern der obere Eingang beim Einlesen gesetzt ist, wird eine 1 gespeichert. Ist dagegen der untere Eingang beim Einlesen gesetzt, wird eine 0 gespeichert. Der gespeicherte Wert liegt am Ausgang an. Der untere Ausgang ist dasselbe, nur negiert. Ein JKMS-Flip-Flop ist eigentlich eine Zusammensetzung aus zwei JK-Flip-Flops. Ein JK-Flip-Flop wiederum ist aus einem RS-Flip-Flop zusammengesetzt. Dieses sieht mit den Grundgattern so aus, damit du dir vorstellen kannst, wie das überhaupt funktionieren kann:

Bild zum Beitrag

Geschickt, oder? Jedenfalls werde ich jetzt nicht erklären, wie man davon zum JK-Flip-Flop und letztendlich zum JSMS-Flip-Flop kommt. Das ist auch gar nicht so relevant. Baue das mal in LogicSIM nach und spiele ein bisschen herum, schaue dir an, wie das reagiert.

Multiplexer

Ein Multiplexer wählt aus einer Reihe von Eingaben eine aus und schaltet diese an den Ausgang durch. Hier die Schaltung für einen 1-MUX:

Bild zum Beitrag

s ist quasi ein Schalter. Ist s 0, so wird der obere Ausgang durchgeschaltet, ansonsten der untere. Ebenso gibt es auch einen 2-MUX, welcher zwei Schalteingänge besitzt und somit vier verschiedene Eingaben durchschalten kann.

Das reicht erst einmal an Grundlagen. Das waren nur mal ein paar Beispiele. Die weiteren Grundlagen musst du für ein tieferes Verständnis recherchieren und dir erarbeiten.

Von-Neumann-Architektur

Die Von-Neumann-Architektur bildet die Grundlage für den Aufbau heutiger Computer:

Bild zum Beitrag

Quelle: Lukas Grossar, Von-Neumann Architektur, CC0, Wikimedia Commons

Die CPU ist dabei aus Rechenwerk (ALU) und Steuerwerk zusammengesetzt. Über ein Bus-System können diese mit dem Ein-/Ausgabewerk sowie dem Speicherwerk kommunizieren. Nur in diesem Verbund ergeben die einzelnen Komponenten überhaupt Sinn. Wenn du die Funktionsweise einer CPU klären möchtest, musst du immer alle weiteren Komponenten in die Überlegungen hinzuziehen.

Ein Modellrechner

Der Aufbau heutiger Prozessoren ist sehr komplex. Daher ist es fast unmöglich, anhand der Struktur einen Einblick in Aufbau und Funktionsweise eines Computers zu bekommen. Aus diesem Grund wird oftmals ein Modellrechner zur Rate gezogen, dessen Struktur vereinfacht ist. Der grobe Aufbau des im Folgenden betrachteten Modellrechners ist in der folgenden Abbildung dargestellt:

Bild zum Beitrag

Wie aus der Abbildung hervorgeht, ist ein Computer modular aufgebaut. Deshalb ist es sinnvoll, die Funktion jeder Komponente im Einzelnen zu beschreiben:

  1. Der Taktgeber: Aus einem Dauertaktsignal werden fünf Taktimpulse generiert: Die ersten vier Takte dienen der Rechnung, der fünfte Takt dient der Erhöhung des Befehlszählers um eins und dem Übertragen des aktuellen Befehls aus dem RAM in das Befehlsregister.
  2. Der Befehlszähler: Legt fest, welcher Befehl aus dem RAM ausgelesen wird, indem er die jeweilige Speicherzelle adressiert.
  3. Der RAM: Hier werden alle Befehle gespeichert.
  4. Das Befehlsregister: Das Befehlsregister erhält aus dem RAM mithilfe der Adressierung durch den Befehlszähler den aktuell durchzuführenden Befehl und speichert diesen.
  5. Das Steuerwerk: Das Steuerwerk gibt je nach Belegung des Befehlsregisters unterschiedliche Signale an die Bauteile ab.
  6. Das Eingaberegister: Das Eingaberegister speichert eine Zahl, welche beim nächsten Taktsignal an das Rechenwerk übergeben wird.
  7. Das Rechenwerk (ALU): Hier wird die Zahl aus dem Eingaberegister mit der Zahl aus dem Akkumulator verrechnet. Das Ergebnis wird wiederum im Akkumulator gespeichert, sodass damit weiter gerechnet werden kann.
  8. Ausgaberegister: Bei einem bestimmten Befehlscode wird der Wert des Akkumulators in das Ausgaberegister geschoben und dort als Ausgabe zwischengespeichert.

Eine solche Schaltung kann konkret folgendermaßen realisiert werden:

Bild zum Beitrag

Programmierung des Modellrechners

Damit kannst du beispielsweise 2+2 rechnen. Der obige Rechner ist wenig flexibel – du musst alles von Hand machen. Daher verlinke ich einfach mal eine 4-Bit-CPU:

https://simulator.io/board/AWZpw7Fy3I/2

Das ist letztendlich die praktische Umsetzung obiger Überlegungen. Der Befehlssatz der CPU ist dort ebenfalls aufgeführt:

https://imgur.com/a/zuRd1ZP

Nehmen wir als Beispiel mal kein Videospiel sondern eine Matheaufgabe: Wenn ich 2+2 rechnen will, wird dann einfach ein Code aus mehreren 1 und 0 abgerufen oder wie darf ich das verstehen?

Um also zwei Zahlen zu addieren, würde sich folgendes Programm eignen:

IN
SWP
IN
ADD
OUT

Binär:

0000
0011
0000
0100
0001

Das kannst du auf der Website direkt oben links im ROM per Edit eintragen und die Simulation per Klick auf das dritte Taktsignal starten. So sollte es aussehen:

https://imgur.com/a/UFwdGLj

Nun kannst du damit zwei Zahlen addieren. Nun probieren wir mal etwas Komplizierteres: Wir addieren zwei Zahlen und, sofern die Summe 8 ist, geben wir 5 aus. Ansonsten fragen wir wieder zwei neue Zahlen ab – so lange, bis irgendwann die Summe 8 ist. Das würde so aussehen:

IN
SWP
IN
ADD
SWP
MOV
8
SUB
JZ
12
JMP
0
MOV
5
OUT

Binär:

0000
0011
0000
0100
0011
0010
1000
0101
1011
1100
1010
0000
0010
0101
0001
Und dann zum 2. Teil der Frage: Wie arbeitet eine Programmiersprache? Wie wird es bewerkstelligt dass der PC auf die eingegebenen Zeilen reagiert?

Das geschieht genauso, wie eben beschrieben. Nun handelt es sich dabei um Maschinencode, Einsen und Nullen. Das kann man sich kaum merken, daher gibt es Programmiersprachen der zweiten Generation, sogenannte Assemblersprachen. Diese nutzen, wie man oben sieht, Symbole in Textform (z. B. IN, SWP, ADD, MOV).

 - (Computer, PC, CPU)  - (Computer, PC, CPU)  - (Computer, PC, CPU)  - (Computer, PC, CPU)  - (Computer, PC, CPU)  - (Computer, PC, CPU)  - (Computer, PC, CPU)  - (Computer, PC, CPU)
AKA77 
Fragesteller
 20.01.2019, 21:23

Oke, danke.

Respekt dafür, dass du dir die Zeit für diesen Text genommen hast.

1
KSiiX  07.01.2020, 23:09

Du hast mir damit extrem weitergeholfen :) Danke für diesen ausführlichen Beitrag 👌

0

Das kann man nicht so einfach erklären. Da kannst du ganze Bücher zu lesen.

Ganz einfach gesagt: Aus Transistoren kann man scgahltungen bauen, zB UND, ODER, NICHT etc. Daraus kann man dann Schaltungen bauen, die zB zwe Binärzahlen addieren. Des weiteren kann man dann auch andere Schaltungen einbauen und einen Befehlsdecoder, sodass man nicht nur die beiden Zahlen als Eingabe hat sondern auch, was damit gemacht werden soll.

Eine Programmiersprache funktioniert im Wesentlichen dadurch, dass man diese Eingaben und den Befehl an die CPU gibt - und davon natürlich ganz viele. Vereinfacht gesagt wird aus zB C-Code einfach das gemacht was der Prozessor lesen/ausführen kann.

Besuche einen Kurs.

Kaufe Dir ein Buch.

Schau ein Video:

https://www.youtube.com/watch?v=ergYcSJ3Zns

Kurzantwort:

In der CPU gibt es einen Teil, der

  • Zahlen berechnen kann (+ - * /)
  • mathematische Entscheidungen treffen kann (= < >)
  • den Programmablauf ändern kann
  • ...

Dieser Teil benötigt dazu Anweisungen (Befehle, Code ...) und Zahlen (Daten).

Alle Daten (Buchstaben, Farben usw.) werden als Zahlen dargestellt.

Neben der Rechen-Einheit gibt es also noch einen Teil, der Anweisungen verarbeiten kann.

Mann deine Fragen berühren ja die kompletten Basics der Digitaltechnik, deine Fragen berühren ein Thema das den Umfang in diesem Forum sprengt, denn um diese Fragen umfassend zu beantworten müsste ich dir ein paar Seiten Text schreiben.

Daher nur verkürzt ein paar Links:

Erst einmal solltest du dich mit den Basics der Digitaltechnik auseinander setzen:

http://www.elektronik-kompendium.de/sites/dig/index.htm

Die Transistoren werden zu FLIP-FLOPS zusammengeschaltet die dann die entsprechenden Digitalbausteine ergeben (AND / OR usw.)

Wie dann diese Schaltungen Rechnen findest du hier:

http://www.elektronik-kompendium.de/sites/dig/0209031.htm

Jetzt zu den Programmiersprachen.

Programmiersprachen sind nicht anderes als Übersetzungsprogramme die das geschriebene in einen digitalen MaschinenCode überführen der dafür sorgt das die entsprechende Rechenschaltung in einer CPU angesprochen wird. Und ja auch die Programmiersprachen müssen erst für die jeweilige CPU geschrieben werden (Allerdings dann natürlich direkt als Maschinencode).

Das ist jetzt gang ganz stark verkürzt. In der Techniker Schule haben wir uns mit diesen Grundlagen schon ein paar Wochen beschäftigt.

SchakKlusoh  20.01.2019, 10:45
Die Transistoren werden zu FLIP-FLOPS zusammengeschaltet die dann die entsprechenden Digitalbausteine ergeben (AND / OR usw.)

Das ist falsch. AND und OR sind digitale Grundbausteine. Ein Flip-Flop besteht aus Grundbausteinen. Zum Beispiel aus zwei NAND-Gattern.

Programmiersprachen müssen auch nicht für bestimmte CPUs geschrieben werden.

Man benötigt auch nicht unbedingt Transistoren. Man kann auch aus Dioden/Widerstand-Kombinationen AND- und OR-Gatter bauen.

--|>---+

       |

--|>---+----C
       |
      | |
      | |
      | |
       |
       |
      ===
1
AKA77 
Fragesteller
 20.01.2019, 13:49

Ich weiß, dass meine Fragen den Umfang schon sprengen. Aber da ich nach meinem Realschulabschluss in die IT gehen möchte, will ich mich auch schon vorher damit intensiver beschäftigen.

1
SchakKlusoh  20.01.2019, 17:44
@AKA77

Deine Fragen (es sind mehrere) kann man nur mit mehreren Lehrstunden bzw. mit mehreren Büchern erschöpfend beantworten.

Gute Frage ist dafür das falsche Medium.

0