Klimawandel

 


Das können Sie schon mit einem einfachen Kommando wie ls ausprobieren. Dieser eigentümliche Lebenslauf der modernen Industrie, der uns in keinem frühern Zeitalter der Menschheit begegnet, war auch in der Kindheitsperiode der kapitalistischen Produktion unmöglich. Anfangs kosteten sie über DM. Was kann ich Ihnen empfehlen?

Hat Ihnen dieser Vergleich gefallen?


Während aber hinter if nur eine Anweisung stehen darf mehrere Anweisungen hinter if erfordern die Zusammenfassung zu einem Block , sind bei case beliebig viele erlaubt.

Eine Klammerung ist nicht zwingend erforderlich, in einigen Fällen indes sinnvoll. Die Abarbeitung der Anweisungen endet nicht automatisch beim folgenden case -Befehl.

Sie wird so lange fortgesetzt, bis der switch -Block zu Ende ist oder eine break -Anweisung auftritt. Falls der Ausdruck bei switch ein Ergebnis liefert, das mit keiner der angegebenen Konstanten übereinstimmt, wird die Standardanweisung ausgeführt, die hinter default steht. Prinzipiell können Sie den default -Teil auch weglassen.

Ich empfehle Ihnen aber nachdrücklich, bei jeder switch -Konstruktion einen solchen Anweisungsteil anzugeben. Selbst wenn Sie nicht erwarten, dass jemals der Ausdruck einen anderen als die vorgesehenen Werte annimmt, ist er Ihre Absicherung dafür, wenn es doch einmal passieren sollte.

An dieser Stelle bietet sich dann die Ausgabe einer Fehlermeldung an, damit Sie gleich sehen, dass etwas mit Ihrem Programm nicht in Ordnung ist. Generell gilt, dass sich switch -Anweisungen auch in geschachtelte if -Anweisungen umformen lassen.

Umgekehrt ist dies natürlich nicht immer möglich, da bei switch ja nur Vergleiche mit ganzzahligen Ausdrücken erlaubt sind. Wenn Ihr Ausdruck also eine andere Form hat, zum Beispiel ein Textstring, dann müssen Sie doch geschachtelte if -Anweisungen verwenden.

Der Nachteil an diesen ist, dass dabei unter Umständen sehr viele Vergleiche durchzuführen sind, was sich bei häufigerem Durchlauf durch diesen Programmteil negativ auf die Laufzeit der Anwendungen auswirken kann. Suchen Sie beispielsweise einen Namen, kann es beispielsweise zu folgenden Code kommen: Auslesen von Kommandozeilenparametern BereitsSec: Kommandozeile haben wir die Parameter, die der Anwender über die Kommandozeile an ein Programm übergeben kann, ausgewertet und angezeigt.

Die Funktion main kann über die Argumente argc und argv verfügen, wobei argc die Anzahl der Parameter ist der Programmname zählt als erster Parameter und argv ein Feld mit den eigentlichen Angaben.

Nun wollen wir noch einen Schritt weiter gehen und Optionen berücksichtigen, die aus einem Strich und einem Buchstaben, eventuell mit einem Argument dahinter, bestehen -- wie etwa -o beim GCC.

Diese ist ein sehr praktisches und elegantes Hilfsmittel, um Kommandozeilenoptionen auszuwerten zu parsen, wie der Fachmann sagt. Man übergibt ihr die beiden Parameter der main -Funktion, also argc und argv , sowie eine Zeichenkette, in der die Buchstaben, die als Optionen erkannt werden sollen, aufgelistet sind.

Falls hinter einer Option noch ein Argument folgen soll, muss hinter dem Buchstaben in der Zeichenkette ein Doppelpunkt stehen. Über den Aufruf von getopt wird immer ein Parameter ausgelesen und in der Variablen opt gespeichert. Darin steht entweder das Zeichen, das die Funktion gefunden hat, also der Buchstabe hinter dem Strich etwa das d bei der Option -d , oder? Normalerweise lassen sich Programme über Kommandozeilenoptionen konfigurieren oder zu einem bestimmten Verhalten veranlassen.

Hier wollen wir jedoch nur ein Übungsbeispiel erstellen. Darin soll ein Text ausgegeben werden, den der Benutzer hinter der Option -d für description oder -t für text angeben kann. Der Aufruf von getopt lautet damit: Für diese Aufgabe eine eigene Klasse einzusetzen, hat mehrere Vorteile: Zum einen sind damit die Parameter zusammengefasst, so dass ihre Zusammengehörigkeit sofort deutlich wird. Zum anderen bietet ein Standardkonstruktor die Möglichkeit, die Elemente automatisch mit Vorgabewerten zu belegen.

Der Entwickler, der die Klasse benutzt, muss dann nicht mehr alle Variablen einzeln initialisieren, sondern kann sich darauf beschränken, die davon abweichenden Werte zu setzen.

Darüber hinaus können Sie durch Ableitungen ganze Konfigurationsbäume aufbauen, mit denen sich Ihre Daten hierarchisch gliedern lassen. Wie erwähnt steht nach dem Aufruf von getopt der ausgelesene Parameter in der Variablen opt. Der zugewiesene Wert gilt gleichzeitig als Ergebnis dieses Ausdrucks, so dass die Schleifenbedingung darauf warten kann, dass sich dabei eine -1 ergibt, was das Ende der Kommandozeile signalisiert.

In der switch -Anweisung Zeile , um die es uns hier ja eigentlich geht, kommen gleich mehrere Varianten vor, wie sich die Fallunterscheidung realisieren lässt. Den Standardfall sehen Sie in den Zeilen 38 bis 41 für das Argument s: Auf die case -Anweisung folgen ein paar Befehle und dann sofort das break. Damit ist die Abarbeitung in diesem Fall hier beendet und das Programm fährt mit Zeile 53, also mit der Schleife fort.

In diesem Fall wird zwar auch der Text Argument d gegeben! Somit erscheint zusätzlich die Ausgabe Argument t gegeben! Beachten Sie, dass es sich hierbei um ein erwünschtes Verhalten handelt. In Zeile 43 haben wir dann den Fall, dass nach einer case -Anweisung überhaupt keine weiteren Befehle, sondern gleich das nächste case folgt.

Testen Sie doch ein paar Aufrufvarianten, um zu sehen, wie sich die Fallunterscheidung in verschiedenen Situationen verhält. Hintergrund Wenn Sie es irgendwann einmal mit Richtlinien zu tun bekommen, die Ihnen Vorschriften hinsichtlich des Designs Ihrer Programme machen, finden Sie darin eventuell auch den Hinweis, dass verschachtelte if -Anweisungen oder gar switch -Anweisungen vermieden werden sollten, da sie auf ein prozedurales also nicht objektorientiertes Denken hindeuten.

Können Sie sich vorstellen, was damit gemeint sein könnte? Betrachten wir als Beispiel eine Klasse Printer , die natürlich über eine virtuelle Methode print verfügt.

Zusätzlich habe sie ein Attribut typeId , mit der sich die Bauart bestimmen lässt. Eine andere Klasse, etwa Document , will nun darüber einen Ausdruck vornehmen. Obiges Beispiel zeigt die so genannte Polymorphismus-Angst, die viele Einsteiger in die objektorientierte Programmierung haben.

Wie Sie an der zweiten Version sehen, ist diese nicht nur unberechtigt, sondern auch hinderlich, da sie komplizierte Konstruktionen anstelle kurzer Aufrufe für erforderlich hält.

Unser getopt -Beispiel von vorhin beweist sicherlich das Gegenteil. Schleifen Neben Bedingungen sind Schleifen die am häufigsten anzutreffenden Kontrollelemente für den Programmfluss. Immer wieder gibt es Aufgaben, die wiederholt werden müssen, bis eine bestimmte Bedingung erfüllt oder eine Höchstzahl an Wiederholungen erreicht ist.

Schleife mit Anfangsüberprüfung Bei der ersten Form wird die Abbruchbedingung zuerst überprüft, bevor der Schleifenblock betreten wird. Ebenso wie bei if darf auch hinter while nicht unmittelbar ein Semikolon folgen -- sonst erkennt dies der Compiler als leere Anweisung und stürzt in eine Endlos-Schleife, wenn die Bedingung erfüllt ist und sich nicht selbst modifiziert etwa durch einen Inkrementoperator.

Ein einfaches Beispiel ist der euklidische Algorithmus. Eine Anwendung ist das Kürzen in der Bruchrechung; dort ist es genau der ggT von Zähler und Nenner, mit dem man einen vollständig gekürzten Bruch erhält, indem man nämlich sowohl Zähler als auch Nenner durch den ggT dividiert.

Als Beispiel betrachten wir die Berechnung der Fläche unter einer Parabel. Diese lässt sich näherungsweise als Summe von Rechteckflächen auffassen, wobei die Höhen der Rechtecke vom Funktionswert abhängen, die Breite aber konstant sein soll. Streng mathematisch ausgedrückt, berechnen wir also eine Näherung des bestimmten Integrals. Das ist zwar mit for genauso möglich; sie arbeitet aber viel allgemeiner und kann daher noch für viele andere Zwecke eingesetzt werden.

Dieser Teil wird nur einmal zu Beginn abgearbeitet. Nach jeder Ausführung des Anweisungsblocks können Sie hier Schleifenparameter anpassen erhöhen, vermindern und so weiter. Beachten Sie aber, dass keiner dieser drei Teile zwingend ist. Jeder davon kann auch leer bleiben. Im Extremfall auch alle drei -- dann haben Sie eine Endlos-Schleife!

Nehmen wir an, wir hätten eine Klasse vector , die einen Vektor mit gleichartigen der Einfachheit halber ganzzahligen Elementen repräsentiert, eine Zugriffsmethode vector:: Dann können wir die Summe aller Elemente unter anderem wie folgt berechnen: Viele Anweisungen können Sie auf viele verschiedene Arten benutzen, von übersichtlich bis unleserlich. Auch dieser Code ist syntaktisch durchaus korrekt, wenngleich es ein schwer verständlicher Stil ist.

Um Ihrer eigenen und der Nerven Ihrer Kollegen willen: Achten Sie stets darauf, lesbaren Code zu schreiben, den Sie und andere auch noch nach einiger Zeit verstehen können.

Im Streben nach Eleganz und Kompaktheit geht die Lesbarkeit leider zu häufig unter. Doch zurück zu den for -Schleifen: Sicher ist Ihnen mittlerweile klar, dass es sich bei diesen auch nur um Spezialfälle der while -Schleifen handelt; das bedeutet, beide Formen sind äquivalent und können stets ineinander umgewandelt werden.

Im Allgemeinen hängt es daher vom Kontext ab, welche Form man wählt. Ist die Anzahl der Wiederholungen bekannt, greift man lieber zu for ; ist die Abbruchbedingung nicht unmittelbar an die Zahl der Durchläufe gekoppelt, verwendet man eher while.

Versuchen Sie doch mal, obige Beispiele als while -Schleifen zu schreiben. Ein Beispiel für while-Schleifen: Nachrichtenübermittlung zwischen zwei Prozessen Eine häufige Anwendung von while -Schleifen ist die Behandlung von Ereignissen. Wenn ein Programm nicht sequenziell eine Aufgabe zu erfüllen hat, sondern mit einem anderen Programm oder einem Benutzer interagieren soll, muss es auf Ereignisse reagieren können, die der Partner auslöst.

Die Behandlung der verschiedenen Ereignisse findet dabei üblicherweise in einer while -Schleife statt. Solange kein Ende oder Abbruch signalisiert wurde, soll das Programm auf eine Nachricht des Partners warten, diese dann in Abhängigkeit vom Inhalt der Nachricht bearbeiten und wieder auf die nächste Nachricht warten.

Vielleicht erinnern Sie sich: In der Folgezeit haben wir zwar immer Nachrichten in Form von Methodenaufrufen verschickt. Jetzt nehmen wir das Konzept aber mal wörtlich.

Nachrichten messages stellen unter Linux eine Möglichkeit dar, Informationen zwischen zwei Prozessen auszutauschen also so genannte inter process communication , IPC, zu betreiben. Sie werden dabei in Nachrichtenschlangen message queues verwaltet. Der Absender stellt seine Nachricht in die Schlange, der Empfänger holt sie von dort ab. Unter einem anderen Unix können diese aber auch abweichende Werte haben. Die Funktionen, die wir zur Nachrichtenübermittlung verwenden, stellt das Betriebssystem zur Verfügung.

Sie sind in C geschrieben und haben mit Objektorientierung nichts am Hut. Der Aufruf wirkt daher auf den ersten Blick vielleicht etwas kryptisch. Wir werden folgende Funktionen einsetzen für mehr Details ziehen Sie bitte die Linux-Dokumentation zu Rate; auch wenn die Schnittstellen dieser Funktionen noch etwas verwirrend aussehen, wird ihre Anwendung sicher an nachfolgendem Beispiel gleich klarer: Damit öffnen Sie eine Nachrichtenschlange für den Zugriff.

Der erste Parameter ist dabei eine Identifikationsnummer, da es im System gleichzeitig verschiedene Schlangen dieser Art geben kann. Der zweite Parameter steht für die Zugriffsrechte auf die Schlange.

Seine ersten neun Bits entsprechen dabei den Zugriffsrechten im Dateisystem, wie sie etwa bei chmod verwendet werden. Mit dieser Funktion verschicken Sie eine Nachricht. Der erste Parameter ist der Rückgabewert von msgget ; mit diesem wird die Nachrichtenschlange identifiziert.

Der zweite gibt die Speicherstelle an, unter der die Nachricht abgelegt ist. Dabei ist neben der Höchstgrenze noch zu beachten, dass das erste Datenelement der Nachricht immer eine long -Zahl sein muss, die dann vom Empfänger als Typ der Nachricht ausgewertet wird. An Ende steht noch ein Flag, das wir im Augenblick bei Null belassen.

Diese Funktion empfängt die Nachricht. Die ersten drei Argumente haben dieselbe Bedeutung wie bei msgsnd. Der vierte Parameter ist eine Art Priorität der Nachricht. Das Flag am Ende können wir wieder ignorieren. Wir müssen allerdings noch darauf achten, dass nur einer der beteiligten Prozesse die Schlange wieder zerstören kann, nämlich entweder der Absender oder der Empfänger.

Anders als die Erzeugungsfunktion bringt diese Funktion nämlich bei zweimaligem Aufruf eine Fehlermeldung. Ich habe diese Aufgabe dem Empfänger zugewiesen. Gegeben sind dabei drei Stangen auf einem Brett. Auf einer der Stangen stecken mehrere Scheiben, deren Durchmesser von oben nach unten zunimmt.

Die Aufgabe besteht nun darin, die Scheiben auf einen der anderen Stäbe zu versetzen. Das wäre aber zu einfach, so dass noch zwei schikanöse Regeln zu beachten sind: Abbildung zeigt die Beteiligten.

Wir trennen die einzelnen Funktionsbereiche voneinander, indem wir für jeden eine eigene Klasse bilden. Sowohl RobotController als auch Robot sind wiederum von der Klasse KommunikationsController abgeleitet, in der Erzeugung und Beendigung von Nachrichtenschlangen realisiert sind. Abbildung zeigt die Beziehungen zwischen den Klassen.

Die gestrichelte Linie soll andeuten, dass diese Klasse von Befehl abhängig ist, sprich: In derTat ist Befehl genau die Nachricht, die zwischen den Prozessen ausgetauscht wird.

Sie enthält aber nur wenige Daten. Daher kann sich die entsprechende Klasse auch auf Konstruktoren und ein paar öffentliche Attribute beschränken. Die Funktion sizeof hat den Zweck, den Speicherverbrauch eines Datentyps oder einer Variablen zu bestimmen. Damit wird das Problem, Scheiben zu verlagern, auf die Verlagerung von Scheiben reduziert, und zwar zunächst vom ersten auf den zweiten und den dritten Stab.

Am Ende befinden sich alle Scheiben auf dem zweiten Stab. Sie stellt nämlich die klassische Verarbeitungsroutine eines ereignisgesteuerten Programms dar. Die Struktur ist letztlich immer die gleiche: Danach steht eine Mehrfachauswahl mit switch , über die die passende Reaktion auf das Ereignis ausgelöst wird. Die main -Funktion des Empfängerprogramms ist der des Senderprogramms so ähnlich, dass ich mir hier das Abdrucken spare.

Der einzige Unterschied ist, dass am Ende noch mit einem Aufruf von kappeVerbindung die Nachrichtenschlange gelöscht wird. Setzen wir die Anzahl der Scheiben auf drei, so erhalten wir folgende Ausgabe unseres Empfängerprogramms: Versuchen Sie am besten, sich eine ähnliche Aufgabestellung auszudenken etwa ein Fütterungsautomat für Ihr Aquarium oder ein Werkzeug zur Systemverwaltung und nach diesem Muster eigene Programme zu erstellen.

Schleifenkontrolle Manchmal werden Sie verhindern wollen, dass tatsächlich jede Iteration einer Schleife durchlaufen wird. Das kann zum einen der Fall sein, wenn eine Abfrage zwischendrin ergibt, dass ein weiterer Durchlauf nicht mehr möglich ist oder keinen Sinn mehr machen würde; dann wollen Sie die Wiederholung ganz abbrechen.

Eine andere Möglichkeit besteht darin, dass Sie bei einem Durchlauf feststellen, dass Sie den Rest des Schleifenkörpers gar nicht mehr abarbeiten können oder wollen, aber trotzdem mit der nächsten Iteration fortfahren möchten. Für die erste Aufgabe gibt es die break -Anweisung, die wir schon bei der Mehrfachauswahl kennen gelernt haben. Innerhalb einer Schleife bewirkt sie, dass die Abarbeitung des Schleifenkörpers unmittelbar abgebrochen wird und das Programm beim nächsten Befehl hinter der Schleife fortfährt.

Natürlich werden Sie nie diese Anweisung in Ihr Programm schreiben, ohne sie von einer Bedingung abhängig zu machen. Zuweilen will man etwa eine bestimmte Anzahl von Objekten auf eine Eigenschaft durchsuchen und schreibt dazu eine for -Schleife; wenn ein Objekt mit der gewünschten Eigenschaft gefunden wurde, kann die Suche abbrechen -- denn warum sollte man noch weitere Iterationen durchlaufen, wenn das Ziel schon erreicht wurde?

Dazu ein einfaches Beispiel: Sie wissen, dass irgendeine Zahl unter zwanzig als dritte Potenz ergibt. Sobald die gesuchte Zahl ermittelt wurde, darf die Suche abbrechen. Die andere Variante erreichen Sie mit der continue -Anweisung. Sie bewirkt, dass der Rest des Schleifenkörpers übersprungen und die Ausführung mit der nächsten Iteration fortgesetzt wird. Auch diese Anweisung werden Sie stets in Abhängigkeit von einer Bedingung verwenden. Sie bietet sich beispielsweise an, wenn Sie mit allen Elementen einer Menge eine bestimmte Operation durchführen wollen, nur mit einem nicht.

Wenn Sie etwa die Funktion im Bereich von bis 10 mit Schrittweite 1 ausgeben wollen, können Sie schreiben: Beide Anweisungen zur Schleifenkontrolle können Sie bei allen drei oben besprochenen Typen verwenden. Zusammenfassung Aus diesem Abschnitt sollten Sie sich Folgendes merken: Hinter dieser folgt eine einzelne Anweisung oder ein Block. Anweisungen für den Fall, dass die Bedingung nicht erfüllt ist, können in einem else -Teil angegeben werden. Auch sind Verschachtelungen von Bedingungen möglich.

In der Bedingung müssen Sie die Überprüfung auf true beziehungsweise ungleich 0 nicht explizit hinschreiben. Eine Formulierung in der Form if variable Durch die switch -Anweisung kann eine Auswahl unter mehreren getroffen werden. Dabei muss allerdings der Ausdruck ein Ergebnis haben, das nach int umwandelbar ist. Sein Resultat wird dann mit den bei case angegebenen Konstanten verglichen.

Eine Fall default ist zwar optional, sollte aber immer angegeben werden. Fehlt die break -Anweisung, mit der der switch -Block verlassen wird, werden alle weiteren Anweisungen bis zum nächsten break oder dem Ende des Blocks ausgeführt. Mit while erstellen Sie eine Schleife, in der die Bedingung zu Beginn jedes Durchlaufs überprüft wird. Ist sie schon beim ersten nicht erfüllt, wird der Schleifenkörper erst gar nicht betreten.

Von diesen darf aber auch jeder Teil leer bleiben. Diese Schleifen lassen sich stets auch in while -Schleifen umformulieren. Die break -Anweisung in einer Schleife bewirkt, dass diese bei Erreichen abgebrochen wird. Dagegen sorgt die continue -Anweisung dafür, dass der Rest des Schleifenkörpers übersprungen und die Ausführung bei der nächsten Iteration fortgesetzt wird.

Übungsaufgaben Welche Ausgabe hat folgender Programmausschnitt: Dateien und Ströme Eine der wichtigsten Möglichkeiten, um Daten auch über das Ende eines Programms hinaus zu erhalten oder mit anderen auszutauschen, sind Dateien. Standardein- und -ausgabe An vielen Stellen in diesem Buch habe ich bereits die Standardkanäle für die Ein- und Ausgabe verwendet. Daher wird es Zeit, dass Sie verstehen, um was es sich dabei eigentlich handelt.

Dazu müssen wir uns aber zunächst anschauen, woher unsere Daten eigentlich kommen und wohin wir sie schicken. Das ist im Normalfall die Tastatur. Wenn Sie das Programm aus der Shell aufrufen, können Sie aber auch die Standardeingabe umlenken und alles aus einer anderen Datei holen, was sonst ein Benutzer eingeben müsste.

Nennen wir diese mal kennung. Auch hier können Sie sich vorstellen, dass der Operator in die Richtung zeigt, in die die Bytes geschickt werden sollen. Das Besondere an diesem Operator ist zum einen, dass er für alle Standardtypen definiert ist und Sie damit sich nicht darum kümmern müssen, die Daten für die Ausgabe zu formatieren. Zum anderen ist es sehr praktisch, dass mehrere Ausgaben unterschiedlichen Typs miteinander verkettet werden können, wie wir es ja bereits mehrfach verwendet haben, etwa zuletzt auf Seite.

Wenn Sie die Ausgabe so verketten, werden alle auszugebenden Zeichen hintereinander gefügt; um trennende Leerzeichen und so weiter müssen Sie sich natürlich selbst kümmern.

Um einen Zeilenumbruch einzufügen, schicken Sie endl in den Stream, einen so genannten Manipulator , der kein Zeichen im eigentlich Sinn ist, sondern nur auf das Format der Ausgabe Einfluss nimmt. Der Stream für die Standardausgabe hat übrigens den Namen cout. Damit erreichen Sie, dass die Standardausgabe des ersten in die Standardeingabe des zweiten Programms umgeleitet wird.

Eine häufige Anwendung ist das Zusammenspiel von cat , das einfach eine Datei auf die Standardausgabe schickt, und grep , das aus der Standardeingabe alle Zeilen herausfiltert, die ein bestimmtes Muster oder einen Suchbegriff enthalten. Suchen Sie in Ihrem Quelltext-File prog. Wenn Programme im Hintergrund oder im Batch-Betrieb laufen, ist eine Bildschirmausgabe meist nicht sinnvoll, oft sogar unmöglich.

Daher sollten Sie in einer solchen Situation beide Ausgabekanäle umleiten. Für den Programmierer besonders relevant sind dabei: Damit der Compiler die Klassen auch kennt, binden Sie die Header-Dateien iostream und fstream ein, etwa: Öffnen der Datei Zum Öffnen gibt es zwei Möglichkeiten.

Zur Identifikation dient in beiden Fällen der Dateiname. Entweder Sie geben den Namen gleich als Argument des Konstruktors an.

Zuweilen müssen Sie auch angeben, was Sie mit der Datei vorhaben. Denn davon hängt es ab, wo der Dateizeiger positioniert wird. Daneben gibt es noch ein paar weitere Modi, in denen Sie Dateien bearbeiten können. Um einen solchen festzulegen, können Sie dem Konstruktor oder der open -Methode noch ein zusätzliches Argument mitgeben. Unter anderem können Sie folgende Spezifizierer verwenden: Wenn Sie einen neueren Compiler verwenden, kann es sein, dass in diesem die Umstellung bereits erfolgt ist.

Bei Ausgabedateien ist die Voreinstellung so festgelegt, dass sie geöffnet werden und ihr eventuell schon vorhandener Inhalt gelöscht wird. Wenn Sie also an das Bestehende anhängen möchten, müssen Sie ios:: Ein Beispiel dazu finden Sie auf Seite. Generell können Sie mehrere Operatoren hintereinander hängen und die Ausgabe durch Kontrollstrukturen steuern. Sie empfiehlt sich vor allem bei binären Dateien, da Sie damit auf jedes Byte einzeln zugreifen können, da sie auch Trennzeichen liest.

Fehlerbehandlung Die Arbeit mit Dateien ist ein sensibler Bereich, der für die Robustheit eines Programms ausschlaggebend sein kann und in dem Sie daher keinesfalls auf Fehlerabfragen verzichten sollten. Zu viel kann schief gehen: Die Datei, die Sie öffnen möchten, kann nicht vorhanden sein, das Verzeichnis, in das Sie schreiben wollen, ebenso wenig und so weiter.

Der Fall, dass ein Verzeichnis zwar existiert, der Prozess dort jedoch nicht schreiben darf, ist gar nicht so selten. Es liefert nämlich 0 zurück, wenn ein Fehler aufgetreten ist.

Die wichtigsten davon sind: Fehlt in der Kommandozeile eine Angabe, so brechen wir gleich ab Zeilen Ebenso verfahren wir, wenn sich eine Datei mit diesem Namen nicht finden beziehungsweise öffnen lässt Zeilen Da wir auf diese Weise eine Zeile zu viel zählen wissen Sie, warum? Positionierung des Dateizeigers Wenn Sie eine Datei öffnen und kein zusätzliches Argument dabei angegeben haben , steht der Dateizeiger ganz am Anfang.

Besonders bei binären Dateien, in denen die Daten Byte für Byte unmittelbar hintereinander kommen und die für uns nicht ohne weiteres lesbar sind, kann es wichtig sein, den Dateizeiger an eine andere Stelle zu versetzen. Aber auch bei Textdateien, die im ASCII-Code gespeichert sind und die wir daher lesen können, will man manchmal an eine bestimmte Stelle springen -- und sei es nur an den Anfang oder das Ende. Um in einer Datei an eine bestimmte Position zu gelangen, verwenden Sie die Methoden ostream:: Die aktuelle Position des Dateizeigers können Sie mit Hilfe von ostream:: Deren Ergebnisse können Sie später als Sprungadressen verwenden.

Die seek -Methoden benötigen folgende Parameter: Die Anzahl an Bytes, um die der Dateizeiger verschoben werden soll; eine positive Zahl verschiebt dabei in Richtung des Dateiendes, eine negative zum Dateianfang. Die Startposition der Positionierung; für diesen Offset gibt es drei symbolische Konstanten: Der Grund, dass wir so leicht zwischen verschiedenen Positionen einer Datei hin- und herspringen können, liegt darin, dass der Zugriff intern zwischengepuffert wird.

Bei Ausgabedateien werden die Zeichen zunächst nur in den Puffer geschrieben. Erst wenn er voll ist oder der Stream geschlossen wird, erfolgt das tatsächliche Schreiben in die Datei. Dieses Verhalten zeigen übrigens auch die Standardstreams wie cout und clog. Das kann manchmal unerwünschte Nebeneffekte haben.

Aufgrund der Pufferung kann es dabei jedoch vorkommen, dass die letzten Ausgaben vor dem Absturz gar nicht mehr auf dem Bildschirm erscheinen, da sie nur im Puffer standen und noch nicht rausgeschrieben wurden. Somit sucht man zuweilen den Fehler an einer völlig falschen Stelle.

Um das zu verhinden, sollten Sie bei solchen Ausgaben stets das sofortige Leeren des Puffers erzwingen. Dazu dienen sowohl der Manipulator flush als auch die Methode flush. Ersterer ist meist eleganter, da er sich nahtlos in die übrigen Ausgaben einreiht. Ausgabeformatierung Vielfach wird Ihnen die Form, in der die eingebauten Operatoren Ihre Daten ausgeben, unbefriedigend erscheinen. Einige der wichtigsten Formatierungsbefehle will ich Ihnen im Folgenden vorstellen.

Falls also die Ausgabe weniger Zeichen liefert als angegeben, werden die übrigen Plätze durch Leerzeichen aufgefüllt.

Wenn Ihnen das Leerzeichen nicht gefällt, können Sie mit fill andere Füllzeichen festlegen. Dasselbe Resultat können Sie übrigens auch mit Manipulatoren erreichen. Dann können Sie die Breite der folgenden Ausgabe mit setw von set width bestimmen. Das ist dann keine Methode der Klasse ostream , sondern wird unmittelbar zwischen zwei Ausgabeoperatoren eingefügt. Analog dazu gibt es den Manipulator setfill , um das Füllzeichen zu ändern.

Genauigkeit von Gleitkommazahlen Die Anzahl der Ziffern von Gleitkommazahlen wird mit precision gesteuert. Wenn die interne Darstellung mehr Ziffern enthält, wird die Ausgabe passend gerundet. Auch hier haben Sie die Möglichkeit, die Einstellung der Ziffern über einen Manipulator vorzunehmen, genauer gesagt über setprecision.

Da dieser intern auf die gerade beschriebene Methode zurückgeführt wird, gelten auch dessen Einstellungen bis auf weiteres. Die folgende Tabelle zeigt entsprechende Flags: Ein Löschen eines oder mehrerer Flags ist mit unsetf möglich. Unsere Tabelle soll dabei von 1 bis reichen, wobei in jeder Zehnerpotenz immer nur die ersten fünf ganzen Vielfachen ausgegeben werden soll, also 1, 2, 3, 4, 5, 10, 20 und so weiter -- die Beschreibung ist komplizierter als das Programm Bevor Sie nun die nachfolgende Musterlösung durchgehen, sollten Sie versuchen, selbst ein Programm zu schreiben, das diese Aufgabe erfüllt.

Das zweite Argument von setf gibt lediglich die Menge aller Bits an, unter denen wir etwas verändern können, damit mit diesem Befehl nicht in einen völlig falschen Bereich etwas eingetragen wird. Als Ausgabe erhalten wir die nachstehende Tabelle.

Sie hat zwar alle gewünschten Inhalte und ist im Rahmen der Anforderungen und Möglichkeiten formatiert -- aber mal ehrlich: In diesem Programm dürften gleich einige Dinge für Sie neu sein. Betrachten wir es also etwas genauer. String-Streams Jeder Stream verfügt über einen Puffer im Speicher, vom dem er erst einmal liest beziehungsweise in den er erst einmal schreibt, bevor ein Zugriff auf die Festplatte erfolgt.

Da liegt es nahe, Streams zu definieren, die nur aus diesem Puffer bestehen. Solche bezeichnet man als String-Streams. Um sie zu verwenden, müssen Sie die Datei strstream in Ihren Code einbinden. Wie Sie sehen, schreiben Sie dort genauso hinein wie in einen anderen Ausgabestream vgl. Auch das hat mit einem Relikt aus C zu tun: Zeichenketten müssen immer mit einem Byte vom Wert 0 abgeschlossen sein man spricht auch von 0-terminiert.

Bei String-Streams sorgt besagter Manipulator dafür, dass sich Ihr String nicht in unabsehbarer Länge über den Speicher erstreckt, sondern dort aufhört, wo auch Ihre Ausgaben beendet sind.

Wenn Sie den Inhalt des String-Streams an anderer Stelle verwenden wollen, etwa als Dateiname wie in Zeile 16 oder als Aufrufargument wie in Zeile 42, müssen Sie ihn in einen normalen String umwandeln. Was das genau ist, werden wir im nächsten Abschnitt besprechen; momentan können Sie mir glauben, dass die Methode str genau das bewerkstelligt, was wir beabsichtigen. Sie sind über die Header-Datei sstream nutzbar zu machen. Wenn Sie mittlerweile über eine neuere Version des Compilers verfügen, sehen Sie doch einfach mal nach, ob es diese Header-Datei mit den Klassen istringstream , ostringstream etc.

Bei einfachen Tools macht man sich meist nicht die Mühe, diesen Fall zu berücksichtigen, sondern vertraut darauf, dass die Anwendung ohnehin stets in getrennten Verzeichnissen ausgeführt wird. Wie aber könnte man das Problem doch in den Griff bekommen? Haben Sie schon eine Idee? Der Standardweg ist, den Dateinamen so zu ergänzen, dass er eindeutig wird. Da liegt es nahe, diesen Wert für eine ähnliche Aufgabe ebenfalls einzusetzen.

In diesem Zusammenhang stellt sich natürlich die Frage: Was ist ein Prozess? Auch wenn Sie keine systemnahe Programmierung machen wollen, sollten Sie eine ungefähre Vorstellung davon haben. Auf einem Linux-Recher können jederzeit mehrere unabhängige Programme von verschiedenen Benutzern laufen; auch das Betriebssystem startet und unterhält mehrere solcher Programme, um die Benutzer und die Systemressourcen zu verwalten.

Ein Prozess ist eines dieser Programme. Er läuft in einem eigenen Adressraum, kann also nicht auf den Speicherbereich zugreifen, den andere Programme verwenden. Es ist allerdings möglich, dass Programmcode in Form von dynamischen Bibliotheken in mehreren Prozessen gleichzeitig verwendet wird siehe auch Seite.

Zur Verwaltung aller Prozesse legt Unix eine Prozesstabelle an. Dort sind alle notwendigen Informationen über die gerade laufenden Prozesse hinterlegt. Um die Prozesse eindeutig unterscheiden zu können, vergibt Linux bei deren Start eine Prozessnummer.

Das ps -Kommando listet Ihnen alle Prozesse zu den angegebenen Kriterien auf Näheres etwa unter man ps. Diese Liste ist zudem nach dieser Eigenschaft absteigend sortiert und wird fortlaufend in bestimmten Intervallen aktualisiert.

Denn Multitasking bedeutet auf Rechnern mit einer CPU auch unter Unix lediglich, dass immer nur ein Prozess gleichzeitig die CPU verwendet, aber sehr oft zwischen den verschiedenen Prozessen umgeschaltet wird, so dass der Eindruck der Gleichzeitigkeit entsteht. Tiefer kann ich in diesem Rahmen leider nicht auf dieses Thema eingehen. Nun zurück zu unserem Beispiel: Wir verwenden sie beispielsweise in Zeile 13, wo sie Bestandteil des Namens der Ausgabedatei wird.

Ist die ID etwa , so erhalten wir hier den Namen euro. Auf diese Weise erzeugt so ziemlich jeder Lauf der Programms eine eigene Ausgabedatei -- auf alle Fälle aber jeder gleichzeitige Lauf. Solche rufen wir normalerweise aus einer Shell auf. Natürlich ist es aber auch möglich, aus einer Anwendung heraus einen anderen Prozess zu starten.

Dazu dient die Systemfunktion system , die als Argument einen String mit genau den Angaben erwartet, die Sie auch in der Shell eingeben würden. Ihr Rückgabewert entspricht im Allgemeinen dem Rückgabewert der main -Funktion des anderen Programms; nur wenn keine Shell gestartet werden kann, in der der Befehl laufen soll, wird zurückgegeben und bei allen anderen Fehlern Eventuelle Bildschirmausgaben dieses Programms erscheinen in derselben Shell, in dem Sie auch den übergeordneten Prozess gestartet haben.

Dateiname zusammen und rufen in Zeile 42 system. Wenn diese Funktion 0 zurückgibt, die Abarbeitung also fehlerfrei war, können wir in Zeile 46 mit dvips wird in Zeile 44 zusammengestellt das nächste Tool aufrufen. Fazit Auch dieses Beispiel enthielt einige Zusatzinformationen über die Anwendung der Streams hinaus.

Sie haben gelernt, wie man strstream -Objekte zum Aufbau von Strings im Speicher einzusetzt, wie man mit der Funktion getpid die ID des Prozesses bestimmt, wie man diese ID verwendet, um Dateinamen eindeutig zu machen, und wie man andere Prozesse mittels system aus dem eigenen starten kann.

Sicher sind Ihnen jetzt schon einige Ideen gekommen, wie Sie diese Techniken selbst einsetzen können. Also lassen Sie sich nicht aufhalten und gehen Sie an die Arbeit. Alle Standardkanäle können auch umgeleitet werden. Es werden so lange Zeichen akzeptiert, bis der Benutzer die Eingabetaste drückt.

Mehrere Ausgaben unterschiedlichen Typs können darüber miteinander verkettet werden. Es werden alle auszugebenden Zeichen hintereinander gefügt; der Ausdruck endl sorgt für einen Zeilenumbruch.

Um Zugriff auf eine Datei zu haben, muss man ein Objekt einer dieser Klassen anlegen. Dazu ist das Einbinden der Header-Dateien iostream und fstream notwendig.

Zum Öffnen gibt man entweder den Namen der Datei im Konstruktor an oder man erzeugt zunächst ein Objekt mit Standardkonstruktor und ruft dann die Methode open auf.

Zur Abfrage des aktuellen Status eines Datei-Streams kann man das Objekt direkt verwenden oder die Methoden fail beziehungsweise eof aufrufen. Um in einer Datei an eine bestimmte Position zu springen, verwendet man die Methode seekp für einen ostream und seekg für einen istream. Um eine Position zu bestimmen, stehen die Methoden tellp beziehungsweise tellg zur Verfügung. Die Methode width oder der Manipulator setw bestimmen die Breite der unmittelbar folgenden Ausgabe. Die Anzahl der Ziffern von Gleitkommazahlen wird mit der Methode precision oder dem Manipulator setprecision gesteuert.

Eine Festlegung ist bis zum nächsten Aufruf von precision gültig. Weitere Ausgabeflags können über die Methode setf gesetzt werden. Übungsaufgaben Beantworten Sie folgende Fragen: Was ist der Unterschied zwischen Standardausgabe und Standardfehlerausgabe? Wie macht sich dieser bemerkbar? Wie kann man den Dateizeiger in die Mitte der Datei setzen?

Schreiben Sie ein Programm, das die Werte der Sinus-Funktionen an den Vielfachen von zwischen 0 und formatiert ausgibt. Felder, Zeiger und dynamische Speicherverwaltung Bisher haben wir alle Variablen und Objekte nur eindimensional verwendet.

Von jedem Objekt hatten wir immer nur ein Exemplar -- und wenn es mal zwei waren, hatten diese unterschiedliche Namen. Dieses Defizit ist aber auf Dauer nicht tragbar. Sie können von jedem elementaren und von jedem selbst definierten Datentyp Felder bilden.

Für ein Feld von Ganzzahlen mit 10 Elementen etwa schreiben Sie: Dazu gibt es den Indizierungsoperator , der aus einem Paar eckiger Klammern [] besteht. Die Indizierung eines Feldes mit Elementen läuft grundsätzlich von 0 bis. Allerdings verhindern weder Compiler noch Laufzeitumgebung, dass Sie auch auf Speicherstellen mit höheren Indizes zugreifen, also etwa in a[10] einen Wert schreiben.

Achten Sie also immer darauf, dass Ihre Indizes den zulässigen Bereich nicht verlassen. Das Programm legt zumeist seine Variablen hintereinander an, nach Möglichkeit ohne Lücken.

Wenn Sie also beispielsweise nur zehn Elemente reserviert haben und auf ein elftes zugreifen, ändern Sie damit den Wert einer anderen Variablen. Im schlimmsten Fall stehen dort aber Variablen eines anderen Prozesses oder gar Programmanweisungen. Entsprechend unvorhersehbar sind die Folgen. Meist führen solche Fehler leider nicht sofort zu Abstürzen, sondern erst einige Zeit später, an einer Stelle mit völlig korrektem Code, der eben auf den zerstörten Speicherbereich zugreifen will.

Ihr Programm endet dann abrupt mit der Meldung: Bei einem solchen Fehler sollten Sie daher immer zuerst an unerlaubte Speicherzugriffe denken. Ich habe Sie schon bei einfachen Variablen gewarnt, dass diese nach einer Deklaration völlig undefinierte Werte haben können und Sie daher stets so früh wie möglich für eine Initialisierung sorgen sollten.

Bei Feldern vervielfacht sich Ihr Problem lediglich. Aber auch hier können Sie gleichzeitig mit der Deklaration das Feld initialisieren. Wenn Sie jetzt besonders ökonomisch denken, werden Sie sagen: Der Compiler unterstützt solche Überlegungen sehr wohl: Felder können auch mehrere Dimensionen haben. Eine -Matrix etwa können Sie deklarieren als: Der Wert muss dabei auf alle Fälle eine Konstante sein, die während des Kompilierens bestimmbar ist. Der traditionelle Weg, Zeichenketten zu speichern, ist der von C übernommene: Eigentlich bräuchte man sich heute damit gar nicht mehr zu beschäftigen, wenn es nicht viele Systemfunktionen gäbe, die als Argumente oder Rückgabewerte gerade ein solches Zeichen-Array haben.

Und da diese Funktionen sämtlich in C geschrieben sind, wird das auch noch länger so bleiben. Da selten auf einzelne Elemente zuzugreifen ist, wird dieser Weg relativ häufig eingesetzt: Letzterer Fall kommt zwar nicht allzu häufig vor, kann aber dann ziemlich unerwartete Ausgaben hervorrufen. Dabei ist allerdings die begrenzte Länge zu beachten: Wenn Sie auf diese Weise ein Zeichenfeld definiert haben, dürfen Sie ihm nicht als Ganzes ein anderes zuweisen.

Diese Vorgehensweise möchte ich Ihnen auch ganz allgemein empfehlen -- noch bevor Sie überhaupt wissen, von was da eigentlich die Rede ist. Was ist ein Zeiger? Dass wir bislang überhaupt keine Zeiger benötigten, stimmt auch nicht so ganz.

Bei einigen Aufrufen von Systemfunktionen habe ich mich nur etwas vor dem Begriff gedrückt und von Speicherstellen oder Ähnlichem gesprochen, Sie aber gleichzeitig mit der Syntax etwas im Unklaren gelassen. Wobei die Vorstellung einer Speicherstelle dem eigentlichen Begriff aber schon recht nahe kommt. Ein Zeiger ist eine Variable, die die Speicheradresse einer anderen Variablen beziehungsweise eines Objekts enthält.

Sie erfahren über den Zeiger also, an welcher Stelle im Hauptspeicher sich die Variable befindet. Obgleich ein Zeiger immer einen bestimmten Typ haben muss, ist es nicht absolut zwingend, dass der Speicherbereich, auf den er zeigt, ein existierendes Objekt ist.

Über den Zeiger kann der Bereich erst als solches interpretiert werden. Bei Zeigern auf Objekte müssen Sie beachten, dass der. Wenn Sie also ein Element verändern möchten, müssen Sie die Indirektion klammern. Damit können Sie ein Feld problemlos einem Zeiger zuweisen: Nullzeiger Zeiger sollten ebenso wie alle anderen Variablen unmittelbar bei oder nach der Deklaration initialisiert werden.

Ein spezieller Zeigerwert, der für diesen Zweck genutzt werden kann, ist. Ein mit belegter Zeiger zeigt definitiv auf nichts. Ebenso sollten Sie einen Zeiger, den Sie momentan nicht benötigen, weil er auf ein noch nicht oder nicht mehr existierendes Objekt verweist, mit belegen. Wenn Sie dafür einfach die Zahl benutzen, sind Sie immer auf der sicheren Seite und bekommen zudem mit der Typprüfung weniger Ärger. Hintergrund Sie können Zeiger nicht nur statisch verwenden, sondern mit diesen auch rechnen.

Der Zeiger wird um so viele Byte verändert, wie ein Objekt des Basistyps beansprucht. Und das kann für ein und denselben Typ sogar von der Architektur des Rechners abhängen. Versuchen Sie es mit folgendem Beispiel: Sie sehen daran schon, dass Zeigerarithmetik zur systemnahen Programmierung gehört und als solches eine Spezialität der Programmiersprache C darstellt.

Ein beliebtes Beispiel für eine Anwendung der Zeigerarithmetik ist das Umkopieren eines Zeichenfeldes. Es belegt aber gleich von Anfang an noch zusätzlichen Hauptspeicher.

Neben dem Code werden zwei weitere Bereiche reserviert: Wenn der Stack schon nicht mehr hergibt, wie kommen wir sonst an den Rest des Hauptspeichers heran? Aus Sicht des Programms bezeichnet man den gesamten restlichen freien Speicher der Maschine als Heap. Halten wir also fest: Der Stack ist der Teil des Arbeitsspeichers, der beim Start des Programms dafür frei gehalten wird und der alle lokalen Variablen sowie die Funktionsparameter enthält.

Die Vor- und Nachteile sind dabei: Das Anlegen von Objekten auf dem Heap hat aber auch noch einen weiteren Vorteil: Sie können Objekte über den Gültigkeitsbereich einer Funktion oder Klasse hinaus weiterleben lassen. Wann sollte man also was nehmen? Dann bleibt Ihnen nichts anderes übrig, als Ihr Array auf dem Heap anzulegen.

Dasselbe gilt, wenn es sich um sehr viele Elemente handelt. Es ist jedoch sinnvoll, den Umgang mit Feldern in Klassen zu kapseln, damit nicht jeder Programmabschnitt mit dynamischem Speicher hantieren muss, sondern das von den Methoden der entsprechenden Klasse komplett erledigt wird. Dynamisches Reservieren von Speicher mit new Um Speicher auf dem Heap zu reservieren zu allozieren , wie man sagt , gibt es den Operator new.

Dieser belegt genau so viel Speicher, wie das Objekt tatsächlich benötigt. Die Syntax lautet allgemein: Sie können mit new sowohl Variablen von einfachen Datentypen als auch von selbst definierten Strukturen und Klassen anlegen. Einzelne Variablen vom Typ int oder float dynamisch anzulegen, ist jedoch ziemlich unüblich. Bei Objekten kommt noch eine Besonderheit hinzu: Das ist bei new genauso möglich.

Freigeben von dynamisch angelegten Objekten mit delete Alle Objekte, die Sie mit new angelegt haben, müssen Sie auch selbst wieder freigeben! So simpel diese Regel klingt, so wichtig ist es doch, sie zu beherzigen. Denn einige Probleme, die Programme mit dynamischer Speicherverwaltung immer wieder haben, sind verwaiste Speicherbereiche, also allozierter Speicher, auf den keiner mehr zugreifen kann.

Als Argument dahinter müssen Sie einen Zeiger auf den reservierten Bereich angeben also genau die Adresse, die Sie von new als Rückgabewert bekommen haben. Ebenso wie bei new ein Konstruktor aufgerufen wird, findet bei delete ein Aufruf des Destruktors statt. Im Folgenden will ich Ihnen einige neuralgische Punkte vorstellen, auf die Sie bei der Programmierung besonders achten sollten.

Zunächst ist zu bedenken, dass es auch bei new selbst Probleme geben kann. Jetzt wird es gefährlich. Zweierlei kann jetzt passieren:. Wir erwarten von der Halbleiterindustrie, dass unsere Computer leistungsfähiger werden. Welche Wege gibt es, um dieses Ziel zu erreichen? Jahrzehntelang bestand sie aus Siliziumdioxid.

Mit der Verwendung von Hafnium als Isoliermaterial konnten trotz dünnerer Isolierung die Leckstrom-Verluste auf ein Fünftel reduziert werden. Als Strukturbreite wird der halbe Abstand zweier Leiterbahnen bezeichnet.

Kleinere Strukturen bringen drei Vorteile:. Im November hat Intel begonnen, Prozessoren mit 22 nm Strukturbreite herzustellen [2]. Was kann man mit so vielen Transistoren anfangen? Er wird in nm-Struktur gefertigt, soll die nm-Version folgen.

Es gibt neue Stromsparfunktionen. Je nach Auslastung kann für jeden Kern die Versorgungsspannung erhöht oder verringert werden. Zeitweilig unbenutzte Kerne können sogar komplett abgeschaltet werden, um Strom zu sparen und die Wärmeentwicklung zu verringern.

Sie begrenzen die Taktfrequenz, denn je höher der Takt, desto mehr Wärme entsteht. Heutige Prozessoren schalten ungenutzte Funktionsgruppen ab und reduzieren den Stromverbrauch bei geringer Auslastung. Es gibt eine weitere Möglichkeit. Die gewaltige Rechenleistung heutiger CPUs wird nicht immer gebraucht.

Noch kleinere Strukturen als 32 Nanometer sind problematisch [5]. Wenn die Leitungen noch schmaler sind, wird der Elektronentransport zu langsam. Optische Datenleitungen wären der Ausweg: Die Informationen werden mit Lichtblitzen übertragen. Die Lichtblitze sollen mit Miniaturlasern erzeugt werden. Auf der Oberfläche der Platte sind Leiterzüge aus Kupfer angeordnet. Zur besseren Leitfähigkeit wird das Kupfer meist versilbert oder vergoldet. Wenn die Trägerplatte auf beiden Seiten Leiterzüge hat, wird die Leiterplatte zweilagig genannt.

Für komplexe Schaltungen werden mehrere Leiterplatten aufeinandergeklebt, was vier- und sechslagige Leiterplatten ergibt. Die Platte wird gebohrt und die Bohrlöcher werden innen verzinnt, um die Leiterebenen miteinander zu verbinden.

Zum Abschluss werden Widerstände, Kondensatoren und elektronische Bauelemente in die Bohrungen gesteckt und verlötet. Damit ist eine Platine englisch: Meist ist sie achtlagig, um mehr Leiterzüge auf der Fläche unterzubringen.

Die Schaltkreise können zusammenrücken, was einen Geschwindigkeitsvorteil ergibt: Die Hauptplatine wird mit Abstandsbolzen im Gehäuse befestigt. Die Position der Befestigungspunkte ist durch den so genannten Formfaktor definiert. Die Hauptplatine ist Träger für zahlreiche Steckplätze, Schaltkreisfassungen, externe und interne Anschlüsse und elektronische Baugruppen. Auf der Hauptplatine befindet sich ein Schaltkreis-Sockel englisch: Socket , in den der Prozessor gesteckt wird.

Null-Kraft-Sockel verwendet, die mit einem Schwenkhebel im Bild: Weil die Prozessoren immer mehr Anschlusskontakte brauchen, gibt es zahlreiche Sockeltypen. Die Andruckplatte ist hochgeklappt im Bild: Einige hier vorkommende Fachbegriffe und Abkürzungen werden erst in späteren Kapiteln ausführlich erläutert. Manchmal ist eine einfache Grafikkarte in die Northbridge integriert. Sie ist nicht direkt mit der CPU verbunden, sondern kommuniziert mit der Northbridge. Manchmal kommt sie ohne Kühlkörper aus.

Die beiden hochintegrierten Bausteine zusammen werden als Chipsatz bezeichnet. Die Erweiterungskarten stecken senkrecht auf der Hauptplatine. Eine typische Hauptplatine hat drei bis sieben Steckplätze Slots für Erweiterungskarten. Auf aktuellen Hauptplatinen gibt es zwei Arten von Steckplätzen: PCI-Express gibt es seit Das ist für Netzwerkkarten, USB 2. PCIe x16 bündelt 16 Kanäle und und wird vor allem für Grafikkarten verwendet.

Man kann kürzere Karten in längere Slots stecken. Direkt auf der Hauptplatine sind der Taktgeber, die Uhr, der Chipsatz und andere Bauteile aufgelötet. Dass die Festplatte, die Grafikkarte und der Brenner einen solchen Festwertspeicher benötigen, ist wenig bekannt.

Der PC startet nach dem Einschalten mit dem darin gespeicherten Programm. Aus solchen Bausteinen wird die Computeruhr und ein kleiner Speicher gefertigt. Uhr und Speicher befinden sich im gleichen Chip.

Das Betriebssystem und andere Software fragt bei Bedarf diese Daten ab. Bei ausgeschaltetem PC übernimmt das eine Batterie. Diese reicht etwa drei bis fünf Jahre. Wenn der PC Datum und Uhrzeit vergisst, wenn er ausgeschaltet ist, muss vermutlich die Batterie gewechselt werden. Am hinteren Rand der Hauptplatine befinden sich die Anschlüsse für die Peripherie: Anzahl und Typ der Anschlüsse sind bei jeder Hauptplatine anders. Deshalb liegt jeder Hauptplatine eine Blende mit passenden Öffnungen für die rückwärtigen Anschlüsse bei.

Neuere Hauptplatinen haben meist mehr Anschlüsse, als sich in der rückwärtigen Blende unterbringen lassen. Zusätzliche Anschlüsse werden an der Frontseite oder an der Rückseite herausgeführt und mit der Hauptplatine verbunden. Diese Anschlüsse sind nicht verwechslungssicher!

Wenn Sie die Beschriftung und die Farbmarkierung beachten Tastatur violett, Maus grün , kann nichts schief gehen. Wenn keine Markierung zu finden ist: Der Anschluss, welcher der Hauptplatine näher liegt, ist der Tastaturanschluss. Wenn Sie die Stecker trotz allem verwechseln, brennt zumindest nichts durch. Sie müssen Tastatur und Maus vor dem Einschalten des Computers angesteckt haben, sonst erkennt und benutzt er sie nicht. Parallel bedeutet, dass alle Bits eines Zeichens gleichzeitig über ein dickes Kabel übertragen werden.

Dieser Anschluss wurde und wird hauptsächlich für Drucker verwendet. Weil die polige Buchse viel Platz benötigt, wird bei Notebooks immer häufiger auf den Parallelport verzichtet. Diese Schnittstellen wurden für langsame Geräte verwendet, wie zum Beispiel Maus, externes Modem, Rechnerkopplung und für die Programmierung von Telefonanlagen und anderen Geräten. Zunehmend werden Geräte, die früher mit seriellen Anschlüssen ausgestattet waren, auf USB umgestellt. Neuere PC haben oft noch einen seriellen Anschluss.

Bei neueren Notebooks fehlen die seriellen Anschlüsse meist ganz. Um den schnellen internen SATA-Anschluss auch für externe Festplatten nutzen zu können, gibt es auf manchen Hauptplatinen einen speziell abgeschirmten d.

USB in der Version 2. Ab Windows sind Treiber im Betriebssystem enthalten. Die USB-Kabel sind nicht symmetrisch: Bei stationären PCs ist das kaum ein Problem, aber einige Notebooks haben Probleme, diesen Maximalstrom zu liefern und sie schalten wegen Überlastung des Anschlusses sicherheitshalber ab.

Günstigstenfalls schaltet der PC ab. In extremen Fällen kann ein minderwertiges PC-Netzteil überlastet und sogar zerstört werden! Sie sollten unbedingt beide Stecker einstecken, sonst kann es zu Fehlfunktionen kommen. Bei externen Festplatten kann eine mangelhafte Stromversorgung zu totalem Datenverlust führen. Im Jahr wurde USB 3. Alte und neue Stecker und Buchsen sind kompatibel: Man kann USB 2. Man erkennt Superspeed-fähige Stecker und Buchsen daran, dass innen blaue Plaste verwendet wird.

Die hohe Geschwindigkeit macht USB 3. Dieser Anschluss wurde ursprünglich vorzugsweise für den Anschluss von Filmkameras verwendet. Mittlerweile gibt es viele externe Geräte mit diesem Anschluss, z. Die maximalen Übertragungsraten sind in der Tabelle aufgeführt. Die Geräte wählen automatisch diejenige Übertragungsrate aus, die von allen angeschlossenen Geräten beherrscht wird. Donnerkeil wurde gemeinsam von Intel und Apple als Nachfolger von Firewire entwickelt. Die elektrischen Kabel dürfen drei Meter lang sein.

Wenn in beiden Steckern eine Konvertierung der elektrischen in Lichtsignale erfolgt, können die Stecker mit Glasfaserleitung verbunden werden.

Diese optischen Kabel dürfen zehn Meter lang sein. Peripheriegeräte können bis zu 2 Ampere abfordern. Es gibt erste Geräte mit Thunderbolt-Schnittstelle, z. Rechts ist eine alte Netzwerkkarte abgebildet. Bei den vielen roten Vierecken handelt es sich um Steckbrücken, sogenannte Jumper. Sie können sich bestimmt vorstellen, wie kompliziert und fehleranfällig es war, ein halbes Dutzend Komponenten auf diese Art zu konfigurieren.

Windows 95 brachte eine Neuerung: Bei diesem Verfahren hat jede nichttriviale Komponente einen eigenen Speicher, in dem deren Anforderungen und Möglichkeiten abgelegt sind. Mittlerweile funktioniert PnP gut und erspart eine Menge Stress. Bei Stromausfall gehen die gespeicherten Bits nicht verloren. Es stellt einfache Treiber für die wichtigsten PC-Komponenten bereit.

Diese Speicherbausteine können ohne Spezialgeräte gelöscht und neu beschrieben werden, dadurch kann der Benutzer ein sogenanntes BIOS-Update selbst durchführen. Das Betriebssystem liest diese Daten vor allem beim Hochfahren.

Meist wird die Taste Del bzw. Entf oder F2 dafür verwendet. Beobachten Sie den PC beim Booten genau. Wenn Sie den Moment verpasst haben, müssen Sie Windows herunterfahren und es erneut versuchen. Das Anschauen der Einstellungen ist völlig ungefährlich, aber bitte nicht planlos die Einstellungen verändern und dann speichern, denn falsche Einstellungen können den PC ausbremsen oder stilllegen.

Wenn das Booten mehrmals nicht gelingt weil Sie den Startvorgang absichtlich unterbrochen haben oder weil einer der eingestellten Parameter nicht funktioniert , werden Sie beim Start gefragt, ob Sie die Standardeinstellungen zurückhaben möchten.

Meist müssen Sie dann die Taste F1 drücken. Das Betrachten der Einstellungen ist ungefährlich, aber bitte nicht planlos die Einstellungen verändern, denn falsche Einstellungen können den PC ausbremsen oder stilllegen.

Am rechten oder unteren Bildrand finden sie eine Erläuterung, mit welchen Tasten Sie Einstellungen vornehmen können. Ein Bit ist Speicherplatz für die kleinstmögliche Informationsmenge: Jedes weitere Bit verdoppelt die Zahl der Kombinationen. Eine Gruppierung von acht Bit nennt man ein Byte. Man kann in einem Byte also eine Zahl zwischen Null und oder ein Zeichen einen Buchstaben des Alphabets oder ein Sonderzeichen speichern.

Da der PC im Binärsystem rechnet, werden auch die Speichereinheiten binär adressiert. Jeder Speicherchip und jeder Speichermodul hat eine Kapazität, die eine Zweierpotenz ist: Eine Speicherkapazität von z. Dann entstünden aber ungenutzte Bereiche, die aber natürlich dennoch hergestellt werden müssen; ein Byte-Chip würde genausoviel kosten wie ein Byte-Chip. Den kleinen Unterschied nahm man in Kauf.

Beim magnetischen und optischen Speicher gibt es dagegen keine fertigungsbedingten Einschränkungen auf Zweierpotenzen. Der Anwender ohne das Wissen aus diesem Artikel meint nun, zwar eine 1 Terabyte-Festplatte gekauft zu haben, aber davon nur 0, Terabyte nutzen zu können. Gern wird dabei dem Hersteller aufgrund dieser schon beträchtlichen Differenz Betrug unterstellt.

Darüber hinaus sollten gespeicherte Informationen bei Bedarf jahrzehntelang verlustfrei haltbar sein. Leider gibt es keine Speichertechnologie, welche diese Anforderungen auch nur näherungsweise erfüllt. Daher gibt es in einem PC mehrere Arten von Speicher, die abgestimmt zusammenarbeiten.

Deshalb werden gleichartige Daten zu Blöcken zusammengefasst. Mehrere Cluster hintereinander bilden eine Spur der Festplatte. Nehmen wir an, eine Spur enthält Sektoren zu je Byte, das ergibt gerundet Byte. Das zeigt aber auch, dass die Reihenfolge der Daten auf einem Massenspeicher optimiert werden sollte, um bessere Geschwindigkeiten zu erzielen. Windows bemüht sich, alle für eine Anwendung benötigten Programmteile und Daten im Arbeitsspeicher bereitzuhalten.

Wenn der Arbeitsspeicher nicht ausreicht, muss Windows Teile des Arbeitsspeichers auf die viel langsamere Festplatte auslagern. Die Festplatten, Diskettenlaufwerke, Flash-Speicher und optischen Speicher werden etwas später behandelt.

ROM verliert die Daten nicht, wenn der Strom abgeschaltet wird. Mit speziellen Mitteln, Geräten oder Programmen ist das möglich. Leider ist RAM ein flüchtiger Speicher. Strom weg - Daten weg. Vor dem Ausschalten des PC müssen die veränderten Daten auf Festplatte zurückgeschrieben gespeichert werden, sonst gehen sie verloren. Der Arbeitsspeicher ist eine Baugruppe auf der Hauptplatine, die über schnelle Datenwege mit dem Prozessor verbunden ist. Der Prozessor benutzt den Arbeitsspeicher als Ablage für operative Daten, Zwischenergebnisse und auch für die Liste der nächsten Befehle.

Die RAM-Speicherbausteine lassen sich in zwei Arten unterteilen, die auf ganz unterschiedlichen Technologien beruhen und dementsprechend in allen Kenndaten sehr unterschiedlich sind.

Jede Speicherzelle besteht aus einem Kondensator das ist ein Kurzzeitspeicher für Elektrizität und einem Transistor. Wenn die CPU wissen will, was gespeichert ist das nennt man eine Leseanforderung , gibt der Transistor die elektrische Ladung frei.

Deshalb muss in einem zweiten Schritt der frühere Speicherinhalt wiederhergestellt werden. Das Lesen der Daten beansprucht etwa die Hälfte dieser Zeit, die andere Hälfte wird für das Zurückschreiben Wiederherstellen gebraucht.

Halbleitermaterial ist kein perfekter Isolator. Wie der Name sagt, leitet es elektrischen Strom, wenn auch wenig. Darum muss die Ladung der winzigen Kondensatoren einige tausend Male in der Sekunde aufgefrischt nachgeladen werden.

DRAM ist wegen des simplen Funktionsprinzips günstig zu produzieren, wobei man hohe Packungsdichten erreicht. Stellen Sie sich den Aufwand vor, wenn einer davon defekt war und man durch Auswechseln ermitteln muss, welcher der defekte ist! Pro Speichertakt werden viermal Daten übertragen. Dadurch verdoppelt sich die Datenübertragungsrate erneut: Die Datenübertragungsrate verdoppelt sich zum dritten Mal: Pro Takt werden achtmal Daten übertragen.

Bei niedriger Temperatur verlieren die Speicherzellen weniger Elektronen und die Refresh-Häufigkeit kann verringert werden. Im Jahr soll die Spezifikation fertig sein: DDR4-Speicher haben eine wesentlich verbesserte und schnellere Fehlerkorrektur. Wozu ist das nötig? Es gibt zufällige Störungen, z. Überall auf der Erde gibt es eine natürliche Radioaktivität. Dazu ein interessantes Fundstück aus den 70er Jahren:.

Dazu muss man wissen, dass Los Alamos auf ca. In Los Alamos ist die kosmische Neutronenstrahlung fünfmal stärker als auf Meereshöhe. Einzelbitfehler führen nur selten zu Abstürzen: Meist trifft es ungenutzte Programmteile oder Massendaten. Wenn in einer Video- oder Audiodatei ein Bit falsch ist, können Sie das unmöglich sehen oder hören.

Sehen Sie im Handbuch nach, welcher Typ passt. Meist ist die schnellste der gängigen Geschwindigkeiten gleichzeitig die beliebteste und aufgrund der hohen Verkaufszahlen auch die günstigste. Damit verbunden ist bei kompletter Neubestückung ein messbarer, aber kaum spürbarer Geschwindigkeitsvorteil.

Läuft ein neues Modul im Verbund mit einem älteren, so wird es automatisch auf dessen Takt gebremst, um einen stabilen Betrieb zu gewährleisten. Schnellere Speichertypen als in der Tabelle gelistet benötigen manuelle Einstellungen, da sonst nur der vom Hauptplatinen-Hersteller freigegebene Maximaltakt benutzt wird. Wenn der Arbeitsspeicher knapp wird, muss das Betriebssystem prognostizieren, welche Programmkomponenten demnächst vermutlich nicht benötigt werden, und diese auf die vieltausendmal langsamere Festplatte auslagern.

Wenn Sie einen vom Betriebssystem nicht vorausgeahnten Klick machen, muss das Betriebssystem ganz schnell irgendein ungenutztes Programmteil auslagern, um das von Ihnen gewünschte Programmteil laden zu können. Zu wenig Arbeitsspeicher bremst deshalb auch den schnellsten PC aus.

Komplettsysteme sind mit RAM eher knapp ausgestattet, um einen günstigen Preis zu erreichen. Für ein wenig Surfen, Musik hören und Videos betrachten reicht das auch. Windows muss zunehmend oft ungenutzte Programmteile auslagern. Doch das gilt nur für die jeweils neueste Technologie. Veraltete Technologien werden nicht mehr weiterentwickelt und die Produktionsmengen sinken, deshalb bleiben die Preise für ältere RAM-Typen auf hohem Niveau. Wesentlich länger als zwei Jahre mit dem Nachkauf zu warten kann riskant sein, weil dann die passende RAM-Sorte möglicherweise nicht mehr hergestellt wird oder in so geringer Menge, dass wegen andauernder Nachfrage die Preise nicht sinken.

Aber so eine Investition ist teuer weil Sie die ausgebaute CPU nicht weiterverwenden können und bringt vermutlich ein bescheidenes Resultat. Dieser hohe Schaltungsaufwand bringt einen deutlichen Geschwindigkeitsvorteil:. Je schneller der Prozessor ist, desto öfter muss er auf Daten warten. Schnellerer Speicher wäre wunderbar. Es wird intensiv nach alternativen Technologien gesucht, aber bisher ist keine der neuen Erfindungen in Massenproduktion gegangen.

Die benötigte Leiterplattenfläche wäre riesig und die Datenwege würden zu lang werden. Um eine Strecke von 30 cm zu durchlaufen, braucht ein Lichtstrahl eine Nanosekunde. Elektrische Signale sind geringfügig langsamer als das Licht.

Darüber hinaus hat es sich für viele Verwendungen als nützlich erwiesen, die Daten in ROM-Bausteinen nachträglich ändern zu können. Der Rohling wird zum Beschreiben in ein sogenanntes Programmiergerät gesteckt. Man kann übrigens den Chip etappenweise brennen: Zuerst einen Adressbereich, dann den nächsten Bereich. Wie erfolgt das Löschen? Ultraviolettlicht ist sehr energiereich. Nun hat man nur selten einige Wochen Zeit.

Leider muss der Chip zum Löschen und Beschreiben ausgebaut werden. Man kann in den Chip hineinsehen. Weil die aggressive UV-Strahlung entfällt, halten diese Chips mehr als Die weitere Beschleunigung des Schreibvorganges führte zu den sogenannten Flash-Speichern. Die Leitfähigkeit des Control Gate hängt davon ab, ob sich in der Speicherzelle eine Ladung befindet oder nicht.

Man kann den Speicherinhalt beliebig oft lesen, ohne dass sich die Ladung der Speicherzelle dabei verändert. Es gibt dabei zwei Probleme: Das Schreiben dauert deutlich länger als das Lesen. Schlimmer ist, dass die Isolierschicht dabei Schaden nimmt. Nach einigen hunderttausend Schreib- oder Löschvorgängen ist die Speicherzelle kaputt.

Deshalb muss die Anzahl der Schreibvorgänge durch geeignete Software und die Ansteuerlogik minimiert werden. Das wird auf mehreren Wegen erreicht. Lässt sich ein Stick wegen "Abnutzung" nicht mehr beschreiben, kann er zumindest noch gelesen werden.

Lesen und Schreiben kann dadurch nur in ganzen Blöcken erfolgen, wie z. Die geringere Zahl von Datenleitungen spart Platz auf dem Chip. Der technologische Aufwand ist höher, doch die Zugriffszeit ist erheblich kürzer. Leider herrscht bei den Bauformen der Speicherkarten ein unglaubliches Chaos. Es fehlt ein Standard. UFS ist schnell und stromsparend.

Leider stemmte sich die Firma Sandisk gegen den Standard: Sandisk wollte das hauseigene Format nicht aufgeben. Das sind Speicherzellen, in denen mehr als ein Bit pro Zelle gespeichert wird. Erinnern Sie sich an die Erklärung, dass das Dezimalsystem für Computer ungeeignet ist, weil es schwer ist, zehn verschiedene Spannungen präzise zu unterscheiden?

Je mehr Ladungszustände pro Zelle unterschieden werden müssen, desto wahrscheinlicher ist das Auftreten von Bitfehlern. Der Aufwand für Fehlerkorrekturschaltungen steigt. MLC sind zu empfehlen, wenn Daten nur selten geschrieben werden, z. Kontaktprobleme am Stecker können ebenfalls zu Datenverlusten führen.

Manchmal genügt ein Wackeln am eingesteckten Stick. Nur wenn Sie Windows von Ihrer Absicht informieren, den Stick zu entfernen, können Sie sicher sein, dass alle zu schreibenden Daten tatsächlich auf dem Stick ankommen. Gleiches gilt für Linux. Andernfalls können die zuletzt geschriebenen Daten oder der ganze Inhalt des Speichersticks verloren gehen.

Warum das so gefährlich ist, können Sie am Ende des Kapitels über externe Festplatten genauer nachlesen. Wie lange bleiben die gespeicherten Daten erhalten, wenn keiner dieser Unfälle geschieht? Sie sind langlebiger und haben kürzere Zugriffszeiten. Es gibt sie in zwei Bauformen: In hochwertigen Notebooks sind sie häufig anzutreffen. Vor mehr als 50 Jahren, am Die Festplatte war ein echtes Erfolgsmodell: Das Laufwerk wurde nicht verkauft, sondern für ca.

Kleiner wurden die Abmessungen. Gleichzeitig fiel der Preis: Der Festplatte und ihrem Inhalt drohen zahlreiche Gefahren. Die meisten dieser Fehler führen nur zu kleineren Schäden. Hardwarefehler sind vergleichsweise sehr selten, aber wenn sie auftreten, sind die Folgen verheerend. Kein anderer Schaden verursacht so viel Stress wie ein Totalausfall der Festplatte. Die Schäden sind vielfältig:.

Es folgt ein Abschnitt über Pflege und Wartung der Festplatte. Für weitergehende Informationen gibt es einen Anhang. In der heute meistverwendeten Unicode-Darstellung werden zwei Byte pro Zeichen benötigt. Diese Zahlen gelten für Text ohne Illustrationen. Bilder benötigen - je nach Qualität - zehn- bis hundertfach mehr an Speicherplatz als Text. Das reicht für eine drei Jahre dauernde Stunden Beschallung. Auch Glas wird manchmal als Trägermaterial verwendet, weil eine Glasoberfläche glatter poliert werden kann als Metall.

Man kann sich das wie einen flachen Stabmagneten vorstellen. Ein Spindelantriebsmotor sorgt für eine hohe konstante Drehzahl. Das verringert ein wenig den Strombedarf, den Geräuschpegel und den Datendurchsatz.

Teure Profi-Festplatten bringen es auf Je dichter die Spuren beieinander liegen, desto mehr Daten passen auf die Platte. Aktuelle Festplatten haben Die Schwenkarme sind untereinander starr verbunden und bewegen sich stets gemeinsam zur gewünschten Spur. So sind stets mehrere Spuren gleichzeitig verfügbar, ohne dass die Köpfe weiterbewegt werden müssen. Das Betriebssystem speichert umfangreichere zusammenhängende Informationen nach Möglichkeit in den Spuren eines Zylinders, um die Anzahl der Kopfbewegungen zu minimieren.

In der Mathematik ist ein Sektor ein tortenähnlicher Ausschnitt aus einem Kreis, auf der Festplatte sind damit gebogene Linien gemeint.

Jede Spur ist in einige Tausend Sektoren Bogenstücke geteilt. Die dadurch entstehenden Datenblöcke sind die kleinste adressierbare Datenmenge. Bei der schnellen Rotation wird die Luft über den Scheiben mitgerissen. Mit der Zugriffszeit wird angegeben, wie schnell eine Festplatte arbeitet.

Die Zugriffszeit setzt sich aus folgenden Faktoren zusammen:. Nicht nur der Prozessor benutzt einen Cache-Speicher, auch die Festplatte hat einen.

Das ist mehr, als die ersten Festplatten als Gesamtkapazität hatten. Der Cache wird auf drei Arten genutzt:. Allerdings hat diese Zwischenspeicherung einen gefährlichen Nachteil. Wenn Sie den PC versehentlich ausschalten, ohne ihn herunterzufahren, verlieren Sie möglicherweise Daten.

Oft sind die Verwaltungstabellen betroffen, das bedeutet: Der gesamte Inhalt der Festplatte kann weg sein. Besonders gefährlich ist es in der ersten Minute nach dem Ende eines Schreibvorgangs. Sie verlieren merklich Geschwindigkeit, aber Sie verlieren Ihre Daten nicht.

Sie haben vorhin gelesen, wie gering der Abstand der Magnetköpfe von der Festplatte ist. Das ist fache Schallgeschwindigkeit! Sie sollten besser nicht einsteigen: Sie würden mit einer Beschleunigung von Angenommen, der leere Sitz wiegt 4 Kilogramm. Er könnte innerhalb einer Stunde die Erde umrunden oder - wenn die Geschwindigkeit konstant bleiben würde - in neun Stunden den Mond erreichen.

Haben Sie nun eine Vorstellung davon, warum Erschütterungen so gefährlich für die Festplatte sind? Kopfaufsetzer können Ihre Festplatte in Sekundenbruchteilen zerstören.

Wenn der Kopf bei einem stärkeren Aufsetzer die Schutzschicht verdampft oder durchdringt, wird die Magnetschicht beschädigt und der Kopf vielleicht gleich mit.

Die Daten, die sich dort befunden haben, sind weg. Den Datenverlust bemerkt man meist erst später. Wenn irgendwann ein Programm diesen beschädigten Bereich zu lesen oder zu beschreiben versucht und das nicht gelingt, wird der Bereich automatisch für die weitere Benutzung gesperrt.

Wie nennt man es, wenn bei voller Drehzahl ein Kopf die Oberfläche der Scheibe berührt? Auch kleinste Schäden addieren sich und verringern die Lebensdauer. Darüber hinaus wird hierdurch die Wahrscheinlichkeit eines plötzlichen Totalausfalls gesteigert. Es handelt sich dabei um einen Durchschnittswert. Eine 3,5"-Festplatte ist vermutlich kaputt.

Holz oder Beton federn erheblich weniger, was die Überlebenswahrscheinlichkeit minimiert. Das ist das Drei- bis Vierfache der üblichen 3,5"-Laufwerke. Solange die Festplatte dreht, darf sie keinesfalls bewegt werden! Bewegt man das Gehäuse der Festplatte, versucht die Scheibe, ihre Lage im Raum beizubehalten, und verformt sich dabei. Es kann zu Kopfaufsetzern kommen. Und wenn Sie einmal auf einer alten Festplatte die Daten vernichten wollen — stecken Sie ein Stromversorgungskabel an und drehen Sie die Festplatte zügig auf den Rücken.

Das Kreischen ist gut zu hören Beim Ausströmen des für die Feuerlöschung benutzten Halongases entstanden laute Geräusche, welche die Festplatten ruinierten [16]. Gaslöschanlagen können einen Schalldruck von dB verursachen. Bereits eine Lautstärke von dB kann zu Datenverlusten führen. Da haben Sie Glück gehabt. Die Festplatten werden jedes Jahr empfindlicher. Der Schwenkarm ist etwa 2,5 Millionen mal länger als der Abstand des Magnetkopfes von der Festplatte. Was glauben Sie wohl, wie stark sich dieser lange Arm bei Erschütterungen durchbiegt?

Haben Sie eine externe Festplatte? Gehören Sie zu den Leuten, welche die Festplatte hochheben, um das Kabel vom Netzteil leichter einstecken zu können? Oder um sie bequemer einschalten zu können? Der Energiebedarf moderner 3,5"-Festplatten liegt durchschnittlich bei 5 bis 10 Watt, unter hoher Last und beim Anlaufen dreimal mehr.

Im Ruhezustand sinkt der Bedarf auf ein Watt. Die kleineren 2,5"-Platten brauchen etwa die Hälfte davon. Der Strom wird von der Elektronik und den Antrieben in Wärme umgewandelt.

Die meiste Wärme entsteht an der Unterseite. Die Wärme steigt auf. In der Mitte der Platte geht das kaum: Also kann die Wärme nur über die Seitenwände der Festplatte abgeleitet werden. Festplatten werden so konstruiert, dass sie bei einer normalen Betriebstemperatur die maximale Lebensdauer erreichen.

Die Oberfläche der Magnetscheiben ist mit einem speziellen Polymer beschichtet. Diese hauchdünne Schicht etwa 1 nm schützt die darunterliegende Magnetschicht vor Beschädigungen, falls doch einmal ein Kopf aufschlägt, z. Leider verdunstet dieses Polymer bei dauerhaft höheren Temperaturen [19]. Jedes Grad Celsius über der zulässigen Betriebstemperatur erhöht die Wahrscheinlichkeit eines Ausfalls um zwei bis drei Prozent.

Es ist also recht schwierig, die Wärme zu beseitigen. Daraus sind die folgenden Empfehlungen abgeleitet:. Andere Festplatten sollten zusätzlich gekühlt werden. Sie können selbst prüfen, ob eine Zusatzkühlung nötig ist. Fühlt sich die Oberfläche deutlich wärmer an als Ihr Finger? Dann ist Zusatzkühlung ratsam. Sie können auch ein Diagnoseprogramm installieren, z. Zwei Arten der Kühlung haben sich bewährt: Ein Lüfter an der Stirnseite oder an der Unterseite der Festplatte.

Ein Festplatten-Zusatzlüfter kostet 10 bis 15 Euro. Lüfter mit einem Durchmesser unter 3 cm sollten Sie nicht mal geschenkt nehmen. Sie sind laut und halten nicht lange. Ein Lüfter mit 6 cm Durchmesser hat die vierfache Lüfterfläche und befördert etwa die dreifache Luftmenge.

Das erlaubt die Verringerung der Lüfterdrehzahl auf ein Drittel, wodurch sich die Lebensdauer der Lager verdreifacht. Durch die geringere Drehzahl ändert sich das Geräusch von einem lauten, unangenehmen hohen Sirren zu einem viel leiserem Ton in einer angenehmeren Tonlage.

Die Strömungsgeräusche der Luft werden praktisch unhörbar. Achten Sie beim Kauf eines Lüfters auf die Lager. Viele Festplattenlüfter haben leider ein Gleitlager um es deutlich zu sagen: Lange hält das nicht. Kaufen Sie nur Lüfter mit Kugellager, auch wenn sie ein wenig teurer sind. Sie gewinnen Laufruhe und eine längere Lebensdauer. Die Festplatte muss so eingebaut sein, dass die erwärmte Luft wegströmen kann.

Insbesondere muss über und unter der Festplatte genügend Platz sein! Das verringert die mittlere Positionierzeit und erlaubt es, die Drehzahl zu verdoppeln. Serverplatten sind für Dauerbetrieb zugelassen und haben fünf Jahre Garantie. Allerdings kosten sie das fünf- bis zehnfache einer Desktop-Festplatte und haben eine relativ geringe Kapazität. Gönnen Sie Ihrer Festplatte Pausen! Lassen Sie die Festplatte in längeren Pausen automatisch abschalten!

Das Problem hierbei ist die Wärmeentwicklung. Wenn diese Betriebsbedingungen eingehalten werden, erreichen viele Festplatten eine Lebensdauer von mehr als fünf Jahren. Der Zusatzlüfter, falls vorhanden, sollte aber überwacht und bei Bedarf gewechselt werden, damit die Temperatur der Festplatte niedrig bleibt.

Das ist natürlich ein Scherz! Wie geht das ohne Head-Crash ab? Aber auch wenn der Strom unvermittelt ausfällt, gibt es keinen Headcrash.

Der Antriebsmotor wird zu einem Dynamo umgeschaltet. Mit der Schwungmasse der Spindel wird Strom erzeugt, um die Köpfe in die Parkposition in der innersten Spur zu bewegen. Sobald sich die Köpfe über der Landeposition befinden, erfolgt die nächste Umschaltung: Der Spindelmotor arbeitet jetzt als Generatorbremse [20] und bremst die Scheiben sehr schnell ab.

Renommierte Hersteller geben an, dass die Köpfe Bei normaler Nutzung sollte das ausreichen. Kommen Sie aber bitte nicht auf die Idee, nach jeweils drei Minuten Leerlauf die Festplatte abzuschalten, um Strom zu sparen!

Dann haben Sie Ihre Festplatte möglicherweise schon nach einem Jahr kaputtgespart. Wenn die Festplatte nicht innerhalb von etwa drei Sekunden ihre Normdrehzahl erreicht, schaltet der Antrieb sicherheitshalber ab. Manchmal läuft sie nach mehreren Einschaltversuchen doch noch an. Das sollte Sie aber nicht beruhigen. Reagieren Sie umgehend — ein verschlissenes Lager repariert sich nicht von allein!

Eins der Anzeigelämpchen am Gehäuse, meist ist es gelb oder rot, zeigt die Aktivität der Festplatte an. Während der normalen Nutzung flackert die Anzeige. Wenn die Festplatte die gesuchten Daten nicht findet, fahren die Köpfe mehrmals an den Plattenrand zurück und zählen die Spuren neu ab.

Wenn Sie dieses rhythmische Klacken hören, steht eventuell das Lebensende der Festplatte sehr dicht bevor. Wenn das Klacken lauter wird oder sie gar ein Kreischen oder Kratzen hören, müssen Sie sich sehr schnell entscheiden:. Für Festplattenausfälle gibt es fast immer Warnzeichen — achten Sie stets auf Auffälligkeiten und zögern Sie nicht, umgehend um Rat zu fragen!

Bei den Einstellungen des Bildschirmschoners finden Sie die Energieverwaltung. Stellen Sie zeitweilig ein, dass die Festplatte nach einer Minute Nichtbenutzung abschaltet. Wenn Sie dann die Maus loslassen, bleibt die Festplatte nach einer Minute stehen. Ist der PC immer noch laut? Dann wird es wohl ein Lüfter sein.

Stellen Sie sich vor, Ihre Festplatte würde jetzt, in diesem Moment kaputtgehen. In der Mehrzahl der Fälle ist eine professionelle Datenrettung möglich, aber diese kann mehrere tausend Euro kosten! Dieses Diagnoseprogramm wacht ununterbrochen über Ihre Festplatte. Es erkennt beschädigte Blöcke, sperrt sie und ersetzt sie durch Reserveblöcke.

Das bedeutet im Umkehrschluss, dass kleine Schäden recht häufig sind. Den Inhalt einer intakten Festplatte auf eine neue zu kopieren ist mit einem geeigneten Image-Programm leicht möglich: Wenn jedoch die ersten Schäden aufgetreten sind, kann es aufwändig, sehr, sehr teuer oder unmöglich werden. Wechseln Sie deshalb eine alte Festplatte aus, bevor sie versagt!

Sie haben von einigen Merkmalen gelesen, die auf einen möglicherweise bevorstehenden Ausfall hinweisen. Alle Festplatten sind für eine endliche Betriebszeit projektiert.

Wie kann der Hersteller bei einer neuen Serie, deren Produktion gerade beginnt, ernsthaft behaupten zu wissen, wie langlebig seine Festplatten sein werden? Es ist ratsam, beim Kauf einer neuen Festplatte die Kapazität überreichlich zu wählen.

Beim Preisvergleich werden Sie feststellen, dass die Kapazität viel schneller wächst als der Preis. Eine Kapazität von bis GB ist nicht unangemessen. Aber Vorsicht beim Aufrüsten älterer PCs: Je kleiner der Anteil der Festplatte ist, den Sie benutzen werden, desto kürzer sind die Wege für die Magnetköpfe und desto kürzer sind die mittleren Zugriffszeiten. Statt einer mittleren Positionierzeit von 9 ms erreichen Sie etwa 5 ms im Durchschnitt. Es gibt einen weiteren Grund, auf die Nutzung des inneren Bereichs der Festplatte zu verzichten.

Bei gleichem Abstand zwischen den Bits passen dreimal weniger Bits auf die innere Spur. Machen wir ein Gedankenexperiment. Die Bits müssen dichter zusammenrücken. Allerdings sind diese rein elektronischen Festplatten noch recht teuer. Das Betriebssystem führt eine Liste, welche Programmteile und -bibliotheken wann zuletzt benötigt worden sind.

Dieses ständige Auslagern und Zurückholen führt zu einer merklichen Festplattenaktivität. Der Swap-Bereich ist der am häufigsten benutzte Bereich der Festplatte. Führen Sie gelegentlich einen Oberflächentest durch — einmal im Vierteljahr genügt.

Dazu klicken Sie unter Windows im Arbeitsplatz oder im Explorer mit der rechten Maustaste auf das zu prüfende Laufwerk, dann links auf Eigenschaften. Unter Extras finden Sie die Fehlerüberprüfung und die Optimierung.

Unter Extras finden Sie zwei wichtige Buttons: Die Fehlerüberprüfung und die Defragmentierung. Bei der Defragmentierung werden die Dateien besser angeordnet, so dass zukünftige Zugriffe mit weniger Bewegungen der Magnetköpfe und somit auch schneller ausgeführt werden.

Ob sich eine Defragmentierung lohnt, hängt vom verwendeten Dateisystem ab. Wie macht man das? Die Defragmentierung beginnt jedesmal von vorn, wenn ein Programm auf die Festplatte zugreift.

Schuld sind meist die Programme, die in der Taskleiste links von der Uhrzeit aufgeführt sind. Einige von ihnen können vielleicht zeitweise gestoppt werden. Im abgesicherten Modus werden nur die unentbehrlichsten Treiber und Programme gestartet, und normalerweise stört dann nichts mehr bei der Defragmentierung.

Wenn eine begonnene Defragmentierung nicht zum Ende kommt, sollte sie bald fortgesetzt werden. Die Festplatte wird langsamer statt schneller! Führen Sie die Defragmentierung deshalb möglichst bald bis zum Ende durch! Hersteller arbeiten an Helium-gefüllten Festplatten. Helium hat eine siebenmal geringere Dichte als Luft. Deshalb haben die Köpfe bei der Positionierung einen geringeren Widerstand zu überwinden und die Positionierung würde etwas schneller erfolgen.

Die Wärme wird also besser abgeleitet. Dadurch können mehr Scheiben und Köpfe im Gehäuse untergebracht werden. Doch die Helium-Idee erwies sich als schwieriger als erwartet. Die leichten Heliumatome sind derart diffusionsfreudig, dass sie allmählich Dichtungen und sogar Metallwände durchdringen.

Der Energiebedarf ist um die Hälfte geringer als bei vergleichbaren Festplatten mit Luftfüllung. Die japanische Firma Hoya Corp. Das Glas sei steifer, wodurch die Scheiben dünner werden können. Statt maximal acht Alu-Scheiben in einem Standardgehäuse würden 12 Glasscheiben hineinpassen. Die Serienfertigung ist für das Jahr geplant.

Die Erhöhung der Aufzeichnungsdichte erfolgte in der Vergangenheit hauptsächlich durch schmalere Spuren. Weil die Leseköpfe schmaler gemacht werden können als Schreibköpfe, ist die Spurbreite gleich der Lesekopfbreite.

Da der Schreibkopf breiter als die Lesespur ist, werden beim Schreiben einer Spur die beiden Nachbarspuren beschädigt, sie müssen nach jedem Schreibvorgang repariert werden. Daher sind SMR-Platten nur für Anwendungsfälle zu empfehlen, wo wenig geschrieben und hauptsächlich gelesen wird. Für das Jahr sind Festplatten bis 20 GB geplant.

Ein Schreibkopf kann die Magnetscheibe nur dort magnetisieren, wo sie von einem Laser erhitzt worden ist. Ein Laser lässt sich viel feiner fokussieren als ein Magnetfeld. Ende sollen erste Modelle an Pilotkunden ausgeliefert werden.

Die Elementarmagnete einer Domäne können in verschiedenen Richtungen magnetisiert werden. Wenn jedoch benachbarte Elementarmagnete eine verschiedene magnetische Ausrichtung haben, versuchen sie, sich gegenseitig umzumagnetisieren.

Im Ergebnis sind stets alle Elementarmagnete einer Domäne in der gleichen Richtung magnetisiert. Ob eine Domäne aus einigen hundert oder tausend Atomen besteht, ist materialabhängig. Für Festplatten werden Materialien bevorzugt, die möglichst kleine Domänen bilden.

Wenn die Datendichte steigen soll, steht weniger Fläche pro Bit zur Verfügung. Bisher sind die Domänen flächenhaft angeordnet.

Es wird daran gearbeitet, die nötige Zahl Domänen als halbkugelförmige Erhebung auf der Scheibe anzuordnen, damit sie eine kleinere Fläche benötigen. Allerdings müssten die Erhebungen in einem sehr aufwändigen Verfahren auf die Magnetscheiben aufgebracht werden, was den Preis möglicherweise unattraktiv machen wird. Nur 12 Atome wurden benötigt, um ein Bit zu speichern.

Falls das Verfahren die Praxisreife erreicht, würde die Kapazität der Festplatten um das Tausendfache wachsen können. Leider dauert es meist Jahrzehnte von der Grundlagenforschung bis zur Serienproduktion. Forscher der Universität Hamburg haben einen anderen Weg entdeckt. Sie haben einen Iridium-Kristall mit einem zwei Atomlagen dicken Film aus Palladium und Eisen beschichtet und darin winzige magnetische Wirbel, sogenannte Skyrmionen, erzeugt.

In diesen Wirbeln konnten sie Bits speichern. Das zugrunde liegende Prinzip wurde bereits vor 80 Jahren entdeckt. In einigen Jahrzehnten könnte das zu superkleinen Datenspeichern führen. Der geringe Stromverbrauch macht sie besonders für Notebooks attraktiv. Weil die SSD-Technologie noch relativ neu ist, gibt es keine gesicherten Daten über ihre Lebensdauer, aber vermutlich halten sie mindestens so lange, wie mechanische Festplatten.

Es reduziert die Lebensdauer, denn die Anzahl der Schreibvorgänge ist begrenzt. Sie sind nicht ganz so teuer wie SSD, aber schneller und stromsparender als herkömmliche Festplatten. Bei den gegenwärtig erhältlichen Exemplaren sind diese Vorteile allerdings so gering, dass sich die Anschaffung angesichts des hohen Preises kaum lohnt. SSD brauchen nur wenig Strom, was sie besonders für Notebooks attraktiv macht.

Allerdings sind sie überaus teuer. Flash-Speicher kann man beliebig oft lesen, doch beim Schreiben haben sie einen schweren grundsätzlichen Mangel: Wenn ein Speicherblock ausgefallen ist, wird er von einem intelligenten Controller genau wie bei heutigen Magnetfestplatten durch einen Block aus einem Reservekontingent ersetzt.

Niemand schafft es, den Stick so oft zu beschreiben und zu einem anderen Computer zu tragen. Für die Verwendung als Arbeitsspeicher ist das jedoch zu wenig, denn eine CPU, die mehr als zwei Milliarden Befehle pro Sekunde ausführt, könnte einzelne Speicherbereiche Millionen mal pro Sekunde mit Zwischenergebnissen beschreiben. Es gibt aber ein Problem: Nach jedem Schreibvorgang jeder Datei müssen die Verwaltungstabellen des Dateisystems geändert werden. Diese befinden sich am Anfang des Datenträgers.

Folglich geht der Speicher dort zuerst kaputt. Das wird auf mehreren Wegen erreicht:. Beobachten Sie doch einmal die Festplattenaktivität, während Sie eine Pause machen. Windows, besonders in der Version 7, entwickelt eine nennenswerte Aktivität. Firefox beispielsweise sichert jede Sekunde die offenen Fenster, um sie nach einem Absturz wiederherstellen zu können. Da kommen eine Menge Schreib- zugriffe zusammen, selbst wenn Sie meinen, eigentlich nichts gespeichert zu haben.

Wieviel halten die Festplatten tatsächlich aus? Der Unsicherheitsfaktor dabei ist: Wie viel Daten schreibt ein durchschnittlicher PC pro Tag? Stammt diese Zahl von Umfragen unter Lesern von Computerzeitschriften, die ihren PC bestimmt viel intensiver nutzen als durchschnittliche Nichtleser?

Arbeitet der PC intensiv mit Datenbanken auf seiner eigenen Fest- platte oder speichert er Daten in der Cloud oder auf einem zentralen Server? Für Ihren eigenen PC können Sie das leicht ermitteln: Die Steuerelektronik und deren Algorithmen sind hoch komplex, um das Wear Leveling und andere Verwaltungsfunktionen zu realisieren. Fachhändler und Datenrettungsunternehmen berichten über einen hohen Anteil an Controllerfehlern. Ein Wunder ist das nicht, die Algorithmen sind noch lange nicht ausgereift.

Es gab schon Rückrufaktionen der Hersteller. Eine Datenrettung von einer defekten SSD ist generell schwieriger als bei einer defekten Magnetfestplatte.

Doch auch hier gibt es Unterschiede. Der Controller wird in aktuellen SSD nicht mehr verwendet. Windows merkt sich, welche Daten Sie häufig verwenden. Bei einer SSD bringt das keinen Zeitvorteil. Wenn man eine Datei löscht, werden die Daten nicht sofort überschrieben, es wird nur der freiwerdende Speicherbereich in der Belegungstabelle als verfügbar gekennzeichnet.