Facebook Pixel
Searching...
Deutsch
EnglishEnglish
EspañolSpanish
简体中文Chinese
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
Computer Systems

Computer Systems

A Programmer's Perspective
von Randal E. Bryant 2002 978 Seiten
4.46
1k+ Bewertungen
Hören
Listen to Summary

Wichtige Erkenntnisse

1. Informationen bestehen grundlegend aus Bits und Kontext.

Das einzige, was verschiedene Datenobjekte unterscheidet, ist der Kontext, in dem wir sie betrachten.

Bits benötigen eine Interpretation. Im Kern wird alle Daten innerhalb eines Computersystems – von Dateien auf der Festplatte bis zu Programmen im Speicher – als Bits (0 und 1) dargestellt. Die Bedeutung dieser Bits ergibt sich vollständig aus dem Kontext, in dem sie interpretiert werden. Die gleiche Byte-Sequenz könnte eine Ganzzahl, eine Fließkommazahl, eine Zeichenkette oder sogar einen Maschinenbefehl darstellen.

Der Kontext ist entscheidend. Dieses Konzept ist für Programmierer von großer Bedeutung. Beispielsweise könnte eine Byte-Sequenz, die eine Zahl darstellt, als vorzeichenbehaftet oder vorzeichenlos behandelt werden, was zu völlig unterschiedlichen Interpretationen führt. Ebenso hängt die Art und Weise, wie ein Programm Daten verarbeitet, von ihrem Typ ab, den der Compiler verwendet, um entsprechenden Maschinencode zu generieren.

Verständnis der Darstellungen. Durch das Verständnis, wie verschiedene Datentypen auf Bit-Ebene dargestellt werden, können Programmierer zuverlässiger und effizienter Code schreiben. Dieses Wissen hilft, häufige Fallstricke wie Überläufe bei Ganzzahlen, Ungenauigkeiten bei Fließkommazahlen und Sicherheitsanfälligkeiten wie Pufferüberläufe zu vermeiden.

2. Kompilierungssysteme übersetzen menschenlesbare Programme in ausführbaren Maschinencode.

Auf einem Unix-System erfolgt die Übersetzung von Quellcode zu Objektdatei durch einen Compiler-Driver.

Von der Quelle zur Ausführung. Der Weg eines C-Programms von seinem Quellcode bis zur Ausführung umfasst eine Reihe von Transformationen, die vom Kompilierungssystem durchgeführt werden. Dieses System besteht typischerweise aus einem Präprozessor, Compiler, Assembler und Linker, die jeweils eine entscheidende Rolle bei der Umwandlung des hochgradigen Codes in niedergradige Maschinenanweisungen spielen.

Phasen der Kompilierung. Der Präprozessor verarbeitet Direktiven wie #include, der Compiler übersetzt C-Code in Assemblersprache, der Assembler wandelt Assemblercode in relocatable Objektcode um, und der Linker kombiniert Objektdateien und Bibliotheken, um eine ausführbare Datei zu erzeugen. Jede Phase fügt Komplexität und Detail hinzu und bewegt sich näher an das Verständnis der Maschine.

Ausführbare Objektdateien. Das endgültige Ergebnis des Kompilierungssystems ist eine ausführbare Objektdatei, die die Maschinenanweisungen, Daten und Symbolinformationen enthält, die benötigt werden, um das Programm auszuführen. Diese Datei wird dann vom Betriebssystem in den Speicher geladen und vom Prozessor ausgeführt.

3. Das Verständnis von Kompilierungssystemen hilft, die Leistung zu optimieren und Fehler zu vermeiden.

Bei einfachen Programmen wie hello.c können wir uns darauf verlassen, dass das Kompilierungssystem korrekten und effizienten Maschinencode erzeugt.

Einschränkungen des Compilers. Obwohl moderne Compiler ausgeklügelt sind, haben sie Einschränkungen. Programmierer benötigen ein grundlegendes Verständnis von Maschinenebene, um gute Programmierentscheidungen zu treffen, wie die Wahl effizienter Datenstrukturen und Algorithmen.

Link-Zeit-Fehler. Einige der verwirrendsten Programmierfehler stehen im Zusammenhang mit dem Linker, insbesondere in großen Softwaresystemen. Das Verständnis, wie Linker Referenzen auflösen, statische und dynamische Bibliotheken handhaben und positionsunabhängigen Code erstellen, ist entscheidend, um diese Fehler zu vermeiden.

Sicherheitsanfälligkeiten. Sicherheitsanfälligkeiten durch Pufferüberläufe, eine häufige Quelle von Sicherheitslücken, entstehen aus einem Mangel an Verständnis darüber, wie Daten und Steuerinformationen im Programm-Stack gespeichert werden. Programmierer müssen diese Konzepte verstehen, um sicheren Code zu schreiben.

4. Prozessoren führen Anweisungen aus, die im Speicher gespeichert sind und vom Betriebssystem verwaltet werden.

Im Kern befindet sich ein speichergerät (oder Register) mit Wortgröße, das als Programmzähler (PC) bezeichnet wird.

Die Rolle der CPU. Die zentrale Verarbeitungseinheit (CPU) ist der Motor, der Anweisungen interpretiert und ausführt, die im Hauptspeicher gespeichert sind. Sie arbeitet, indem sie wiederholt Anweisungen abruft, sie interpretiert und einfache Operationen auf Daten ausführt.

Hardware-Organisation. Die CPU interagiert mit dem Hauptspeicher, I/O-Geräten und anderen Komponenten über ein Bussystem. Die Registerdatei, ein kleines Speichermedium innerhalb der CPU, hält häufig abgerufene Daten. Die arithmetisch-logische Einheit (ALU) führt arithmetische und logische Operationen aus.

Ausführung von Anweisungen. Die CPU folgt einem einfachen Modell zur Ausführung von Anweisungen, das durch ihre Befehlssatzarchitektur (ISA) definiert ist. Anweisungen werden in strikter Reihenfolge ausgeführt, wobei Schritte wie das Laden von Daten, das Speichern von Daten, das Bearbeiten von Daten und das Springen zu anderen Anweisungen beteiligt sind.

5. Cache-Speicher sind entscheidend, um die Geschwindigkeitslücke zwischen Prozessor und Speicher zu überbrücken.

Um mit der Geschwindigkeitslücke zwischen Prozessor und Speicher umzugehen, integrieren Systemdesigner kleinere, schnellere Speichermedien, die als Cache-Speicher (oder einfach Caches) bezeichnet werden und als temporäre Puffer für Informationen dienen, die der Prozessor in naher Zukunft wahrscheinlich benötigt.

Die Prozessor-Speicher-Lücke. Aufgrund physikalischer Gesetze sind größere Speichermedien langsamer als kleinere. Schnellere Geräte sind teurer in der Herstellung als ihre langsameren Pendants. Dies schafft eine erhebliche Lücke zwischen der Geschwindigkeit des Prozessors und der Zugriffszeit auf den Speicher.

Cache-Hierarchie. Um diese Lücke zu überbrücken, verwenden Systemdesigner eine Hierarchie von Speichermedien, die als Cache-Speicher bezeichnet wird. Kleinere, schnellere Caches (L1, L2, L3) speichern häufig abgerufene Daten, sodass der Prozessor schnell auf sie zugreifen kann.

Lokalität. Caching wird durch Lokalität ermöglicht, die Tendenz von Programmen, Daten und Code in lokalisierten Regionen abzurufen. Durch die Ausnutzung der zeitlichen und räumlichen Lokalität können Caches die Programmleistung erheblich verbessern.

6. Speichermedien sind in einer Hierarchie basierend auf Geschwindigkeit, Kosten und Kapazität organisiert.

Wenn wir von der Spitze der Hierarchie zur Basis übergehen, werden die Geräte langsamer, größer und kostengünstiger pro Byte.

Die Speicherhierarchie. Computersysteme organisieren Speichermedien in einer Hierarchie, wobei schnellere, kleinere und teurere Geräte oben und langsamere, größere und kostengünstigere Geräte unten stehen. Diese Hierarchie umfasst Register, Caches, Hauptspeicher, Solid-State-Laufwerke und rotierende Festplatten.

Caching auf jeder Ebene. Jede Ebene in der Hierarchie dient als Cache für die nächstniedrigere Ebene. Die Registerdatei cached Daten aus dem L1-Cache, der L1-Cache cached Daten aus dem L2-Cache und so weiter.

Ausnutzung der Hierarchie. Programmierer können die Leistung verbessern, indem sie die Speicherhierarchie verstehen und ausnutzen. Dies beinhaltet das Schreiben von Code, der gute Lokalität aufweist und die Anzahl der Zugriffe auf langsamere Speichermedien minimiert.

7. Das Betriebssystem verwaltet Hardware-Ressourcen durch Abstraktionen wie Prozesse, virtuellen Speicher und Dateien.

Wir können das Betriebssystem als eine Schicht von Software betrachten, die zwischen dem Anwendungsprogramm und der Hardware vermittelt.

Abstraktionsschicht. Das Betriebssystem (OS) fungiert als Vermittler zwischen Anwendungsprogrammen und der Hardware. Es schützt die Hardware vor Missbrauch und bietet Anwendungen einfache, einheitliche Mechanismen zur Manipulation komplexer Hardwaregeräte.

Wesentliche Abstraktionen. Das OS erreicht seine Ziele durch drei grundlegende Abstraktionen: Prozesse, virtueller Speicher und Dateien. Prozesse vermitteln die Illusion der exklusiven Nutzung des Prozessors, des Hauptspeichers und der I/O-Geräte. Virtueller Speicher vermittelt die Illusion der exklusiven Nutzung des Hauptspeichers. Dateien bieten eine einheitliche Sicht auf alle I/O-Geräte.

Die Rolle des Kernels. Der Kernel des OS verwaltet diese Abstraktionen, indem er Kontextwechsel zwischen Prozessen handhabt, virtuelle Adressen in physische Adressen übersetzt und eine einheitliche Schnittstelle für den Zugriff auf I/O-Geräte bereitstellt.

8. Systeme kommunizieren mit anderen Systemen über Netzwerke, die als I/O-Geräte betrachtet werden.

Wenn das System eine Byte-Sequenz vom Hauptspeicher zum Netzwerkadapter kopiert, fließt die Datenübertragung über das Netzwerk zu einer anderen Maschine, anstatt beispielsweise zu einem lokalen Festplattenlaufwerk.

Netzwerke als I/O-Geräte. Aus der Perspektive eines einzelnen Systems kann ein Netzwerk einfach als ein weiteres I/O-Gerät betrachtet werden. Daten können vom Hauptspeicher zum Netzwerkadapter kopiert werden, um an andere Maschinen übertragen zu werden.

Client-Server-Modell. Netzwerk-Anwendungen basieren auf dem Client-Server-Modell, bei dem Clients Dienste von Servern anfordern. Dieses Modell beruht auf der Fähigkeit, Informationen über ein Netzwerk zu kopieren.

Beispiel Telnet. Die Anwendung telnet zeigt, wie ein Netzwerk verwendet werden kann, um Programme aus der Ferne auszuführen. Der Telnet-Client sendet Befehle an den Telnet-Server, der die Befehle ausführt und die Ausgabe an den Client zurücksendet.

9. Amdahls Gesetz bestimmt die Grenzen der Leistungsverbesserung durch die Optimierung eines einzelnen Bauteils.

Die Hauptidee ist, dass die Beschleunigung eines Teils eines Systems die Auswirkungen auf die Gesamtleistung des Systems davon abhängt, wie signifikant dieser Teil war und wie stark er beschleunigt wurde.

Abnehmende Erträge. Amdahls Gesetz besagt, dass die Gesamtbeschleunigung eines Systems durch den Anteil der Zeit, die das verbesserte Bauteil genutzt wird, begrenzt ist. Selbst wenn wir eine signifikante Verbesserung eines wichtigen Teils des Systems vornehmen, wird die Netto-Beschleunigung geringer sein als die Beschleunigung für den einen Teil.

Fokus auf das große Ganze. Um das gesamte System erheblich zu beschleunigen, müssen wir die Geschwindigkeit eines sehr großen Anteils des Gesamtsystems verbessern. Dies erfordert die Identifizierung und Optimierung der zeitaufwändigsten Komponenten.

Allgemeines Prinzip. Amdahls Gesetz ist ein allgemeines Prinzip zur Verbesserung jedes Prozesses, nicht nur von Computersystemen. Es kann als Leitfaden für Bemühungen zur Senkung der Produktionskosten oder zur Verbesserung der akademischen Leistung dienen.

10. Nebenläufigkeit und Parallelität verbessern die Systemleistung auf mehreren Ebenen.

Wir verwenden den Begriff Nebenläufigkeit, um das allgemeine Konzept eines Systems mit mehreren gleichzeitigen Aktivitäten zu beschreiben, und den Begriff Parallelität, um die Nutzung von Nebenläufigkeit zur Beschleunigung eines Systems zu bezeichnen.

Nebenläufigkeit vs. Parallelität. Nebenläufigkeit bezieht sich auf das allgemeine Konzept mehrerer gleichzeitiger Aktivitäten in einem System. Parallelität bezieht sich auf die Nutzung von Nebenläufigkeit, um ein System schneller zu machen.

Ebenen der Parallelität:

  • Thread-Level-Nebenläufigkeit: Erreicht durch mehrere Prozesse oder Threads, die es mehreren Benutzern oder Aufgaben ermöglichen, gleichzeitig zu laufen.
  • Instruction-Level-Parallelität: Moderne Prozessoren führen mehrere Anweisungen gleichzeitig aus, was die Leistung verbessert.
  • SIMD-Parallelität: Einzelne Anweisungen arbeiten gleichzeitig an mehreren Datenpunkten, was die Verarbeitung von Bildern, Ton und Video beschleunigt.

Multiprozessorsysteme. Multiprozessorsysteme, einschließlich Multi-Core-Prozessoren und Hyperthreading, ermöglichen eine echte parallele Ausführung und verbessern die Systemleistung, indem sie die Notwendigkeit zur Simulation von Nebenläufigkeit verringern.

11. Abstraktionen sind entscheidend für das Management der Komplexität in Computersystemen.

Der Einsatz von Abstraktionen ist eines der wichtigsten Konzepte in der Informatik.

Komplexität vereinfachen. Abstraktionen bieten vereinfachte Ansichten komplexer Systeme, die es Programmierern ermöglichen, Code zu verwenden, ohne in dessen innere Funktionsweise einzutauchen. Dies ist ein wesentlicher Aspekt guter Programmierpraxis.

Beispiele für Abstraktionen:

  • Befehlssatzarchitektur (ISA): Bietet eine Abstraktion der Prozessorhardware.
  • Betriebssystem: Bietet Abstraktionen für I/O-Geräte (Dateien), Programmspeicher (virtueller Speicher) und laufende Programme (Prozesse).
  • Virtuelle Maschinen: Bieten eine Abstraktion des gesamten Computers, einschließlich des OS, des Prozessors und der Programme.

Vorteile von Abstraktionen. Abstraktionen ermöglichen es Programmierern, Code zu schreiben, der portabel, zuverlässig und effizient ist, ohne die zugrunde liegende Hardware und Software im Detail verstehen zu müssen.

12. Die Zahlendarstellung beeinflusst die Zuverlässigkeit und Sicherheit von Programmen.

Ein solides Verständnis der Computerarithmetik ist entscheidend für das Schreiben zuverlässiger Programme.

Endliche Annäherungen. Die computerseitigen Darstellungen von Zahlen sind endliche Annäherungen an Ganzzahlen und reelle Zahlen. Dies kann zu unerwartetem Verhalten führen, wie z.B. Überläufen bei der Arithmetik und Ungenauigkeiten bei Fließkommazahlen.

Darstellungen von Ganzzahlen. Vorzeichenlose Kodierungen repräsentieren nichtnegative Zahlen, während Zweierkomplementkodierungen vorzeichenbehaftete Ganzzahlen darstellen. Das Verständnis der Eigenschaften dieser Darstellungen ist entscheidend für das Schreiben zuverlässigen Codes.

Darstellungen von Fließkommazahlen. Das IEEE-Fließkommaformat ist eine Basis-2-Version der wissenschaftlichen Notation zur Darstellung reeller Zahlen. Das Verständnis, wie Fließkommazahlen dargestellt und manipuliert werden, ist unerlässlich, um Fehler in numerischen Berechnungen zu vermeiden.

Zuletzt aktualisiert:

Rezensionen

4.46 von 5
Durchschnitt von 1k+ Bewertungen von Goodreads und Amazon.

Computer-Systeme: Die Perspektive eines Programmierers wird hoch geschätzt für seine umfassenden und klaren Erklärungen der Konzepte von Computersystemen. Leser loben den praktischen Ansatz, die Verwendung von C-Beispielen und die Behandlung von Themen wie Speicherhierarchie und virtueller Speicher. Viele betrachten es als unverzichtbare Lektüre für Studierende der Informatik und Fachleute. Das Buch wird für seine Fähigkeit gelobt, theoretische Konzepte mit praktischen Anwendungen zu verknüpfen. Während einige es als herausfordernd empfinden, schätzen die meisten Rezensenten die Tiefe und Klarheit. Einige Kritiken erwähnen veraltete Informationen und potenzielle Probleme mit undefiniertem Verhalten in den Codebeispielen.

Über den Autor

Randal E. Bryant ist ein renommierter Informatiker und Pädagoge. Als Mitautor von Randal E. Bryant und David R. O'Hallaron's "Computer Systems: A Programmer's Perspective" hat er bedeutende Beiträge zur Informatikbildung geleistet. Bryant ist bekannt für seine Expertise in Computersystemen, insbesondere in Bereichen wie Computerarchitektur, Betriebssysteme und Low-Level-Programmierung. Seine Arbeit hat maßgeblich dazu beigetragen, wie Konzepte von Computersystemen sowohl Studierenden als auch Fachleuten vermittelt werden. Bryants Fähigkeit, komplexe Themen klar und präzise zu erklären, hat das Buch zu einem unverzichtbaren Bestandteil der Informatik-Lehrpläne weltweit gemacht.

0:00
-0:00
1x
Dan
Andrew
Michelle
Lauren
Select Speed
1.0×
+
200 words per minute
Home
Library
Get App
Create a free account to unlock:
Requests: Request new book summaries
Bookmarks: Save your favorite books
History: Revisit books later
Recommendations: Get personalized suggestions
Ratings: Rate books & see your ratings
Try Full Access for 7 Days
Listen, bookmark, and more
Compare Features Free Pro
📖 Read Summaries
All summaries are free to read in 40 languages
🎧 Listen to Summaries
Listen to unlimited summaries in 40 languages
❤️ Unlimited Bookmarks
Free users are limited to 10
📜 Unlimited History
Free users are limited to 10
Risk-Free Timeline
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 4: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on Apr 8,
cancel anytime before.
Consume 2.8x More Books
2.8x more books Listening Reading
Our users love us
100,000+ readers
"...I can 10x the number of books I can read..."
"...exceptionally accurate, engaging, and beautifully presented..."
"...better than any amazon review when I'm making a book-buying decision..."
Save 62%
Yearly
$119.88 $44.99/year
$3.75/mo
Monthly
$9.99/mo
Try Free & Unlock
7 days free, then $44.99/year. Cancel anytime.
Scanner
Find a barcode to scan

Settings
General
Widget
Appearance
Loading...
Black Friday Sale 🎉
$20 off Lifetime Access
$79.99 $59.99
Upgrade Now →