Computergrundlagen für C-Newbies
Wer heute einen Computer kauft steht vor einem gigantischen Angebot an Systemen und Komponenten. Die Auswahl ist riesig. Und die technische Beschreibung eines Systems liest sich für Nichteingeweihte wie eine Liste vom Mars. Jeder Drucker, jedes Laufwerk und jeder Monitor ist für sich genommen ein komplexes Hightech-Gebilde. Abschrecken lässt sich davon allerdings kaum jemand. Warum? Weil die Bedienung eines Windows-Rechners, dessen Betriebssystem vorinstalliert ist, mit Verlaub gesagt ein Kinderspiel ist.
Moderne Anwendungsprogramme sind so gestaltet, dass man das Handbuch getrost vergessen kann. Doppelklick auf das Programm und einfach Ausprobieren heißt die Devise. Und das funktioniert immer häufiger. Alles was kompliziert ist und wozu erst irgendwelche Anleitungen gelesen werden müssen, fällt beim durchschnittlichen Computerbenutzer durch. Der Computer ist ähnlich wie ein Auto. Das System ist unter der Haube gigantisch kompliziert. Von außen betrachtet lässt es sich allerdings bequem bedienen und steuern. Doppelklick hier, Mausauswahl da, und schon macht die Maschine (hoffentlich) alles, was in einem Anwendungsprogramm möglich ist.
Jeder, der einen Computer bedienen kann, ist auch dazu in der Lage, ein Programm für seinen Rechner zu schreiben. Er muss es nur wollen und die Methoden und Begriffe kennenlernen, mit denen Programmierer tagtäglich umgehen. Oftmals hört sich das Fachvokabular abschreckend, ja geradezu unerhört schwierig an. Schaut man sich jedoch das Konzept ganz dicht aus der Nähe an und versteht das Prinzip dahinter, dann wird das zuvor so Unverständliche klar und einleuchtend. Wer Programmieren lernen will, muss Verstehen lernen, wie etwas geht. Alles andere ist völlig nutzlos und Zeitverschwendung. Die Mühe am Anfang lohnt sich, denn das Erlernte geht später in Fleisch und Blut über und mit zusätzlich gewonnener Erfahrung kann jeder vom Newbie zum Profi werden.
Für das Programmieren in der Computersprache C ist es sinnvoll einige der Konzepte zu kennen, mit denen ein Computer arbeitet. Technisches Detailwissen rund um die Hardware ist nicht notwendig. Wichtig ist hingegen zu verstehen wie der Computer mit einem Programm grundsätzlich umgeht. Was geschieht beispielsweise während der Laufzeit eines Programmes? Wo werden die Bestandteile eines Programmes im Rechner abgelegt? Wie wird aus den Zeilen einer Codedatei die ausführbare Programmdatei erzeugt? Was ist ein Crash?
Zu den Begriffen und Konzepten, die jeder C-Programmierer kennen sollte, gehören:
- Prozessor (CPU, Central Processing Unit)
- Register
- Cache
- Arbeitsspeicher (RAM, Random Access Memory)
- Bit
- Byte
- Word (Maschinenwort)
Ohne zu Jieffeln arbeitet die Maschine Computer jedes Programm ab. Gerade darin besteht der Reiz des Programmierens. Immer neue Möglichkeiten können erkundet werden. Der Entwicklung von Anwendungen sind keine Grenzen gesetzt. Was der Computer macht, hängt nur vom menschlichen Vorstellungsvermögen ab. Ist das Programm fehlerfrei und nach den Regeln der Kunst erstellt worden, dann entfaltet sich alles, was der Programmierer sich erträumt hat.
Ein Computerprogramm besteht am Ende der Entwicklung aus einer Abfolge von Anweisungen, mit denen der Rechner auf seiner untersten Ebene - der digitalen Logikebene - etwas anfangen kann. Befehle des primitiven Maschinencodes sind einfache Instruktionen, wie etwa: "kopiere ein Datensegment xy aus dem Speicher xy ins Register xy", "kopiere ein Datensegment aus dem Register xy in den Speicher xy", "kopiere ein Datensegment xy von dem Speicherplatz x in den Speicherplatz y" oder "addiere die Zahl aus dem Speicherplatz x und lege das Ergebnis in den Speicherplatz y".
Computer sind in der weitaus überwiegenden Zahl auch heute noch durch das klassische Design der von-Neumann-Architektur von 1945 gekennzeichnet. Eine von-Neumann-Architektur besteht aus fünf Komponenten: Arbeitsspeicher, arithmetisch-logische Einheit (Rechenwerk, ALU Arithmetic Logic Unit), Steuereinheit (Control Unit), Verbindungssystem (Bus) sowie Ein- und Ausgabeeinheit. Rechenwerk und Steuereinheit bilden zusammen den Prozessor des Systems. Als CPU, Central Processing Unit, wird die zusammengefasste Einheit von Logikchip und Steuerwerk bezeichnet. Die CPU ist das Gehirn jedes Computers. Eine typische CPU enthält neben dem Logikchip und der Steuereinheit auch noch die internen Register. Diese bieten einen vorübergehenden Speicherplatz für Daten, mit denen die Recheninstanz arbeiten soll.
John von Neumann realisierte mit diesem Rechnerdesign ein geniales Konzept: Programme, Daten, Ergebnisse und Zwischenergebnisse der Berechnungen werden alle in einem Arbeitsspeicher abgelegt. Die Basiseinheit für den Speicher ist das Bit (Binary Digit). Ein Bit repräsentiert immer entweder eine 0 oder eine 1. Es ist die kleinstmögliche Informationseinheit, die uns beim Programmieren begegnen kann. Der Arbeitsspeicher im Rechner ist aus aufeinanderfolgenden Speicherzellen aufgebaut. In diesen Zellen werden die Informationen für ein Programm und für die zugehörigen Daten abgelegt. Jede Zelle hat eine Adresse in Form einer binären Zahl. Binär bedeutet, dass die Zahl durch eine Folge von Nullen und Einsen codiert ist. Computer nutzen intern grundsätzlich das duale Zahlensystem, denn die zwei Zustände 0 und 1 lassen sich leicht durch die Schaltungszustände AN und AUS beziehungsweise Stromspannung HOCH und NIEDRIG umsetzen. Binäre Zahlen unterscheiden sich nicht von unseren gewohnten Zahlen im Zehnersystem (Dezimalsystem). Man kann mit ihnen genauso zählen, rechnen und die Zahlen in mathematischen Formeln einsetzen. Binäre Zahlen sehen nur anders aus, sie sind nach einem anderen System codiert.
Ein Byte pro Speicherzelle - vier Bytes pro Wort
Die Speicherzelle ist die kleinste adressierbare Einheit, in der wir Informationen ablegen und abrufen können. Die Kapazität einer Speicherzelle kann je nach Computersystem unterschiedlich sein. Als Standard für Personal Computer hat sich in den vergangenen Jahren eine Größe von 8 Bit pro Speicherzelle etabliert. Diese Einheit wird als Byte bezeichnet. Eine Speicherzelle entspricht also einem Byte beziehungsweise 8 Bit. Die Bytes im Speicher sind wiederum gruppiert zu so genannenten Maschinenworten (Words). Typisch und weit verbreitet sind heute Computer mit 32-Bit-Worten, also 4 Byte pro Maschinenwort. Bei einem Rechner mit 64-Bit-Worten passen 8 Bytes in ein Maschinenwort. Instruktionen, die intern im System verarbeitet werden, arbeiten mit ganzen Worten. So verfügen 32-Bit-Rechner beispielsweise über 32-Bit-Register, und es werden pro Maschinenbefehl immer die kompletten 32 Bit in einem Rutsch zum Logikchip transportiert. 4 Byte oder 32 Bit werden jeweils aus dem Speicher ins Register und weiter zum Rechenwerk befördert.
Einem C-Programmierer werden über kurz oder lang auch die Fachbegriffe
Big Endian und
Little Endian über den Weg laufen. Dabei geht es um die Adressierung der Bytes innerhalb eines Maschinenwortes. Bei 32-Bit-Computern, die auf Basis von Big Endian arbeiten, werden die 4 Bytes in einem Maschinenwort von links nach rechts gezählt. Bei Little-Endian-Rechnern ist es genau umgekehrt, die 4 Bytes werden von rechts nach links gezählt. Viele Großrechner verfügen über eine Big-Endian-Architektur, während viele Personal Computer mit Little-Endian arbeiten. Die Bezeichnung hat ihren Ursprung in der Erzählung Gullivers Reisen von Jonathan Swift. Dort gibt es unter den Lilliputanern zwei Parteien: Die Big Endians, die ein weich gekochtes Ei am dicken Ende öffnen und die Little Endians, die das Ei lieber am kleineren Ende aufklopfen. Über diese Frage entbrennt ein heftiger Streit. In ähnlichem Sinne ist es wohl auch eine eher politische Entscheidung, ob ein Computer die eine oder die andere Zählweise innerhalb des Speichers nutzt.
Ein Computerprogramm ist ein Rezept, das in einer Textdatei erfasst wird. Der PC nimmt das Rezept und arbeitet es Schritt für Schritt ab. An bestimmten Stellen kann es sein, dass außer dem Programmcode selbst weitere Zutaten notwendig sind. Das sind die Daten, die sich der Rechner eventuell vom Benutzer direkt per Tastatureingabe oder Mausbefehl holt oder die er von anderen Dateien oder aus Datenbanken ausliest und dem Programm je nach Rezeptanweisung beimischt. Das Ergebnis ist eine Kombination aus Daten und Programm-Befehlsstrukturen, die als fertige Anwendung auf dem Desktop zu sehen ist. Ohne Rezept und ohne Daten kann der Computer nichts fertig bringen.
Der Mensch kommuniziert unter anderem in schriftlicher Form; Gedanken, die er in Worte fasst und zu Papier bringt, heißen Text. Wer mit einem Computer reden will, muss in einer Datei Befehle aus dem Wortschatz der Sprache C korrekt kombinieren, das nennt man dann Code.
Die Dateien mit den Codezeilen des C-Programmes heißen Quellcodedateien, ihr Inhalt ist der Quellcode.
Während der C-Quellcode für Kenner der Sprache leicht zugänglich ist, arbeiten alle Rechner intern ausschließlich mit binärem Code aus Nullen und Einsen.
Der Computer versteht nur Maschinencode in binärer Form:
0001110001111000001010101010010101
0001110001111000001010101010010101
0001110001111000001010101010010101
0001110001111000001010101010010101
0001110001111000001010101010010101
Jedes lauffähige C-Programm ist ein binäres Muster aus Null und Eins, Strom und Nicht-Strom, Sein und Nichtsein. Nur diesen Code versteht die Zentraleinheit im Rechner. Das Gehirn jedes Computers ist vereinfacht dargestellt der Mikroprozessor. Je nach Hersteller und Typ wird der Prozessor über unterschiedliche Maschinensprache-Befehle gesteuert. Der Befehlssatz eines Prozessors ist der Maschinencode, nur dieser treibt den Computer direkt zur Arbeit an. Jeder Rechnertyp verfügt damit über eine Muttersprache auf Prozessorebene. Eine Folge von Bits im Maschinencode wie sie oben zu sehen ist, bildet ein interessantes Muster aus Nullen und Einsen. Das Lesen und Schreiben dieses Codes ist für Menschen nicht empfehlenswert. Maschinensprache ist aus unserer Sicht eine niedere Sprache.
Eine höhere Computersprache wie C besteht nicht mehr aus einem reinen Bitmuster. C stellt einen Wortschatz zur Verfügung, mit dem alle Befehle und Anweisungen an den Rechner so formuliert werden können, dass sie ein C-Kundiger auf den ersten Blick versteht. Damit ein C-Programm irgendetwas im Rechner in Bewegung setzt, muss es in den Maschinencode des Prozessors umwandelt werden. Die Übersetzungs-Software, die das macht, heißt Compiler. Es ist ein Programm, das nichts anderes leistet, als jeden C-Befehl eins zu eins in Maschinencode zu übersetzen.
C ist eine Compiler-Sprache. Das bedeutet, dass aus einer Quellcodedatei, in der die C-Befehle stehen, in mehreren kleineren Arbeitsschritten das lauffähige Programm erzeugt wird.
CategoryC
There are no comments on this page. [Add comment]