Ergebnis 1 bis 3 von 3

Thema: [PCN] Der Prozessor - Tutorialthread

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    [PCN] Der Prozessor - Tutorialthread

    Willkommen im Tutorialthread ueber den Prozessor des Projektes Carpe Noctem.

    Bevor ihr weiter lest, solltet ihr sicher gehen, folgende Posts gelesen zu haben, damit ihr wisst, worum es hier genau geht.

    Was ist das PCN ?
    Wie wird hier diskutiert, was sollen wir machen ?
    Und wo wird nun diskutiert ?

    Dieser Thread dient dazu eine Reihe von selbstgeschriebenen Tutorials zu sammeln, um Neulingen den Einstieg in dieses Projekt sowie in die LowLevel Programmierung zu erleichtern. Schliesslich koennen nur dann alle gescheit diskutieren, wenn auch alle die selben Grundlagen haben. Und genau dazu ist dieser Thread hier da. Die Fortgeschrittenen teilen ihr Wissen mit den Anfaengern, und die Anfaenger koennen Fragen stellen, die beantwortet werden. Eventuell werden einige Fragen entfernt werden, wenn sie beantwortet wurden, bzw zu eingeflochtenen FAQ Bereichen zusammengefasst.

    Wie immer bei diesem Projekt bitte kein Spam, und hier bitte auch keine Diskussionen fuehren. Dazu haben wir ja die Diskussionsthreads.

    *****************************************************************************************************


    Ok, schalten wir mal ein, zwei Stufen niedriger, und fangen mit dem Urschleim der Computertechnik an, damit wir sicher gehen koennen, uns prinzipiell auf einer Stufe zu bewegen. So werden die Fortgeschrittenen gebremst, weil sie sich die zeit nehmen, den Anfaengern etwas zu erklaehren, und die Anfaenger werden beschleunigt und mit den Fortgeschrittenen weitergezogen.

    Als Erstes muss man sich natuerlich einmal fragen, was ein Prozessor eigentlich macht. Diese einfache Frage ist schon kaum zu beantworten, wenn man nicht ein paar Dinge voraussetzt, wie z.B. Speicher, etc. Ueber genau solche Fragen hat sich ein gewisser Herr Turing bereits im letzten Jahrtausend den Kopf zerbrochen. Er postulierte eine sogenannte Turingmaschine, welche nichts weiter tat, als Zahlen von einem unendlich langen Band einzulesen bzw. auszugeben. Hier haben wir schon den ersten externen Teil, den ein Prozessor braucht, damit er ueberhaupt etwas machen kann, den Speicher.

    Wie genau der Speicher (RAM) funktioniert, brauch uns ersteinmal nicht interessieren, genau so wenig, wie es ersteinmal unerheblich ist, zu wissen wie man ihn addressiert, oder was dabei genau passiert. Fuer uns ist der RAM ein Ort, wo Daten an bestimmten Stellen stehen, und wohin man Daten speichern kann. Es gibt für den Prozessor zwei grundverschiedene Arten von Speicher, zum einen die Register und zum anderen den Ram. Die Register sind Speicherbereiche im inneren des Prozessors. Sie sind daher sehr schnell, in ihrer Anzahl begrenzt und brauchen nicht addressiert zu werden. Sie zaehlen daher nicht zum RAM. Der Ram hingegen ist ein Speicherbereich ausserhalb des Prozessors und mit ihm ueber Datenleitungen verbunden. Damit der Prozessor Daten aus dem RAM verarbeiten kann, muss er sie zuerst in eines seiner Register laden. Der Prozessor kann ausschliesslich mit seinen Registern rechnen.

    Jetzt wissen wir zwar, was der Speicher ist, aber haben immer noch keine Vorstellung davon, was ein Prozessor genau macht. Ein Prozessor ist dazu da, eine Folge von einzelnen Befehlen auszufuehren. Da ein Prozessor ausschliesslich Zahlen lesen, verarbeiten und schreiben kann, ist jedem Befehl eine eindeutige Nummer zugeordnet, der sogenannte Maschinencode*. Ein weiterer wichtiger Punkt, den man verstehen muss, ist, dass der Prozessor nicht zwischen Daten und Programm unterscheiden kann. Schliesslich sind alles nur Zahlen. Auch weiss der Prozessor nichts darueber, wie die Daten im RAM angeordnet sind. Der Text "HALLO" (Text besteht auch nur aus Buchstaben, indem jedem Buchstaben genau eine Zahl zugeordnet ist, siehe ASCII) koennte genau so gut 4 einzelne Zahlen zwischen 0 und 256, 4 einzelne Zahlen zwischen -128 und 127, eine Zahl zwischen 0 und 2^32-1, eine zahl zwischen -2^31 und 2^31-1, der Anfang einer Gleitkommazahl oder eine Befehlsfolge sein. Für den Prozessor spielt das keine Rolle. Ueber Sinn und Unsinn einer Zahlenfolge entscheidet einzig und allein das Programm, das er abarbeitet.

    Was ist nun dieses Ominoese Programm ? Ganz genau, auch nur eine Zahlenfolge. In einem speziellen Register (das man im Normalfall nicht beschreiben kann), dem sogenannten Instruction Pointer IP, hat der Prozessor die Addresse (was das genau ist, erklaehren wir irgendwann, jetzt sei nur gesagt, dass eine Addresse eine Zahl ist, die eine Position im RAM eindeutig beschreibt) gespeichert, wo der Maschinencode steht, der als naechstes ausgeführt werden soll. Im Normalfall funktioniert ein Prozessor also nach folgendem Schema:

    Code:
    1. Lese Maschinencode(Zahl) an der Addresse, auf die der IP zeigt
    2. Fuehre den Befehl aus, den der Maschinencode beschreibt
    3. Ruecke den IP um die Anzahl an Stellen vor, die der Befehl verlangt
    4. Gehe zu 1.
    Die Befehle, die der Prozessor dabei versteht, sind dabei sehr spezifisch und meist ausserordentlich beschraenkt.
    Ein entsprechender befehl koennte z.B. heissen: "Addiere 1 zu der Zahl im ersten Register."
    Oder: "Lade Daten von der im ersten Register gespeicherten Addresse in das zweite Register."
    Selbst eine so einfache Operation, wie z.B. "Speichere die Summe aus 5 und dem Inhalt des ersten Registers im zweiten Register" ist fuer den Prozessor idR nicht in einem Befehl machbar. Die Operation muss in zwei elementarere Befehle zerlegt werden:
    1. Speichere 5 im zweiten Register
    2. Addiere den Inhalt des ersten Registers zum zweiten Register

    Ein Prozessor macht also nichts weiter, als einfachste elementare Befehle auszuführen. Die Kunst liegt nur darin, diese einfachen Befehle so aneinander zu reihen, dass etwas komplexes und nuetzliches dabei entsteht.

    Nun ist es an der Zeit uns zu fragen, was fuer Befehle ein Prozessor mindestens koennen muss, damit man mit ihm komplexe Aufgaben durchfuehren kann. Ein Prozessor, der nur den einen Befehl kennt, 1 zu seinem ersten Register zu addieren, wird uns auf Dauer keine Freude machen.


    PS: Es ist schwer die Grundlagen zu erklaehren, ohne dass sich viele langweilen. Trotzdem wuerde ich Vorschlagen, dass wir vorerst dieses Niveau halten, und erst langsam anziehen, damit auch alle etwas davon haben. Immerhin gibt es hier einige, die sich noch nie mit Maschinencode oder aehnlichem beschaeftigt haben. Waere schoen, wenn auch der eine oder andere weiter machen koennte. Noetige Befehle, bedingte Spruenge und Programmverzweigung, Was sind Bits Bytes, Hex- und Binaerzahlen, FLAGS, Besonderheiten der Arithmetik von Zahlen mit begrenzter Bitbreite, Wie stelle ich ein Vorzeichen dar, RISC vs CISC, usw sind sicherlich sehr gutmuetige Themen.


    * Eigentlich sind die als Zahlen codierten Prozessorbefehle nicht der Maschinencode, sondern die OpCodes. Der Maschinencode ist die Gesamtheit aus OpCodes und statischen Daten. Diese Unterscheidung ist allerdings fuer diese Einfuehrung unerheblich und wird erst im Kapitel ueber den Maschinencode relevant.

    Geändert von Ineluki (26.04.2006 um 15:50 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •