Computersysteme: Eine Programmiererperspektive
1120 Seiten
German
PDF
4.5

Computersysteme: Eine Programmiererperspektive

Computersysteme: Eine Programmiererperspektive

Autor:

Jahr:

Zusammenfassung:

Einleitung

Das Buch „Computersysteme: Eine Programmiererperspektive“ (Originaltitel Computer Systems: A Programmer's Perspective) ist ein grundlegendes Werk, das seit über einem Jahrzehnt der Goldstandard für alle ist, die verstehen wollen, wie moderne Computer tatsächlich funktionieren. Geschrieben von den Professoren der Carnegie Mellon University, Randal Bryant und David O'Hallaron, erklärt dieses Buch nicht nur die Theorie – es vermittelt dem Programmierer ein tiefes praktisches Verständnis dafür, wie Hardware und Software miteinander interagieren.

Obwohl in der Beschreibung die Sprache C++ genannt wird, konzentriert sich das Buch tatsächlich auf die Sprachen C und Assembler (x86-64). Es ist kein Lehrbuch für eine bestimmte Sprache, sondern ein Leitfaden für die innere Funktionsweise von Computersystemen. Für die Bildungswebsite PythonLib ist dieses Buch besonders wertvoll, da es Entwicklern in jeder Sprache (einschließlich Python) hilft, effizienteren und zuverlässigeren Code zu schreiben, indem sie verstehen, was „unter der Haube“ passiert.

Worum geht es in diesem Buch?

Das Buch deckt alle wichtigen Aspekte von Computersystemen ab, von Bits und Bytes bis hin zur Netzwerkprogrammierung. Zu den Hauptthemen gehören:

  • Datendarstellung: wie Zahlen, Text und andere Daten im Speicher gespeichert werden (Binärsystem, Zweierkomplement, Gleitkommazahlen).
  • Maschinencode und Assembler: wie der Compiler C-Code in Prozessorbefehle übersetzt, wie Register, Stack und Funktionsaufrufe funktionieren.
  • Prozessorarchitektur: Pipelining, Sprungvorhersage, Superskalarität – warum ein Code schneller läuft als ein anderer.
  • Speicherhierarchie: Cache-Speicher, Arbeitsspeicher, Festplatten – wie man Latenzen minimiert und den Durchsatz maximiert.
  • Linken und Laden: wie aus Objektdateien ein ausführbares Programm erstellt wird, wie dynamisches Linken funktioniert.
  • Prozess- und Threadverwaltung: Systemaufrufe, Parallelität, Synchronisation, Probleme mit Deadlocks.
  • Leistungsmessung: Profiling, Benchmarking, Code-Optimierung.
  • Netzwerke und Client-Server-Anwendungen: Grundlagen von Sockets, TCP/IP-Protokolle.

Für wen ist dieses Buch?

Dieses Buch richtet sich an Programmierer mit mittleren und fortgeschrittenen Kenntnissen, die vom Schreiben von „einfach funktionierendem Code“ zum Schreiben von effizientem, zuverlässigem und sicherem Code übergehen möchten. Es ist nützlich für:

  • C- und C++-Entwickler, die verstehen möchten, wie ihr Code auf echter Hardware ausgeführt wird.
  • Programmierer in Python, Java oder anderen Hochsprachen, die „unter die Haube“ schauen und die Ursachen von Verlangsamungen oder Speicherlecks verstehen möchten.
  • Studenten technischer Fachrichtungen, die Rechnerarchitektur, Betriebssysteme oder Compiler studieren.
  • Ingenieure, die an eingebetteten Systemen, Treibern oder hochbelasteten Diensten arbeiten.

Was wird der Leser lernen?

Nach dem Studium dieses Buches wird der Leser in der Lage sein:

  • x86-64-Assemblercode zu lesen und zu analysieren.
  • Zu verstehen, warum bestimmte Operationen (z. B. Division oder Gleitkommaoperationen) langsamer sind als andere.
  • Programme unter Berücksichtigung der Speicherhierarchie zu optimieren (Cache-Fehltreffer sind der Hauptfeind der Leistung).
  • Typische Fehler im Zusammenhang mit Pufferüberläufen, Speicherlecks und Datenrennen zu vermeiden.
  • Profiling-Tools (gprof, perf, Valgrind) zu verwenden, um Engpässe zu finden.
  • Sicheren Multithread-Code mit Mutexen, Semaphoren und Bedingungsvariablen zu schreiben.
  • Zu verstehen, wie dynamisches Linken und Laden von Bibliotheken funktioniert.
  • Einfache Netzwerkanwendungen mit Sockets zu erstellen.

Stärken des Buches

Der erste und wichtigste Vorteil ist die praktische Ausrichtung. Jedes Kapitel enthält

Empfehlungen