pc/cpu.rs
1//! Hier liegt die Dokumentation über CPUs.
2//!
3//! Unter [CPU] findest Du eine generelle Übersicht über CPUs. [Architektur] gibt
4//! einen groben Überblick über die Bedeutung der Architektur eines Prozessors.
5//! Ebenfalls relevant aber stark im Vergleich zur Präsentation stark gekürzt sind
6//! die Abschnitte zu [Endianness] sowie [Features].
7
8use beispiele::Instructions;
9
10pub mod beispiele;
11
12/// Eine CPU ist das Herzstück eines Computers. Sie führt letztendlich die Befehle
13/// aus und ist dazu da, die Hardware zentral zu verwalten, daher auch der Name:
14/// "Central Processing Unit", zu Deutsch "Zentrale Verarbeitungseinheit".
15///
16/// # Was gibt es und wo findet man sie?
17/// Mittlerweile finden sich Prozessoren an allen möglichen Stellen und in einigen
18/// Formen, vom Kleinstprozessor für Smarthome zu Handy- und Tabletprozessoren bis
19/// hin zum Desktop- und Serverprozessor.
20///
21/// # Wie funktioniert ein Prozessor?
22///
23/// ## Befehlszyklus
24/// Der Befehlszyklus besagt, dass ein Prozessor jede [Instruction](Instructions) in
25/// vier Schritten ausführt:
26/// 1. Fetch: Einholen einer neuen Instruction (von der Stelle, die der Instruction
27/// Pointer vorgibt).
28/// 2. Decode: Entschlüsseln der Instruction auf die spezifische Plattform.
29/// 3. Execute: Ausführen der gegebenen Instruction
30/// 4. Save: Das Ergebnis abspeichern.
31///
32/// Für ein Beispiel eines solchen Zyklus, siehe
33/// [beispiele::BeispielCPU].
34///
35/// ## Prozessorarchitekturen
36/// Siehe [Architekturen](Architektur)
37///
38/// ## Takt
39/// Der Prozessortakt sagt aus, wie häufig ein Prozessor einen Zyklus durchführt.
40/// Ein hoher Takt bedeutet bei zwei Prozessoren **mit der gleichen
41/// Mikroprozessorarchitektur** bessere Performance, aber auch höheren
42/// Stromverbrauch und höhere Abwärme.
43///
44/// # Aber welcher Prozessor ist der richtige?
45/// Das hängt von einer Reihe von Faktoren ab. Das wichtigste ist dabei zum einen
46/// die Arbeit, die dieser verrichten soll, aber auch vom zur Verfügung stehenden
47/// Budget. Als Privatkunde ist es am einfachsten, Benchmarks zu Verfolgen und dann
48/// abzuwägen, was am sinnvollsten ist. Obacht: Sollte der Fokus auf grafisch etwas
49/// anspruchsvolleren Spielen liegen, ist die CPU deutlich weniger für die Leistung
50/// relevant als die Grafikkarte. Im Unternehmenskontext gerade bei recht ähnlichen
51/// Workloads kann es sogar Sinn ergeben, mehrere Alternativen testweise parallel zu
52/// betreiben und dabei die Performance zu beobachten.
53///
54/// Der Markt entwickelt sich stetig, weswegen eine Aussage zu der Qualität einer
55/// bestimmten Marke schon sehr bald nicht mehr aktuell sein kann. Informiert euch
56/// also um die **aktuelle** Situation.
57pub trait CPU {
58 /// Die Architektur, zu der dieser Prozessor gehört.
59 fn architektur(&self) -> Architektur;
60 /// Wie viele **logische** Kerne der Prozessor besitzt.
61 fn kerne(&self) -> u8;
62 /// Der Standard-Takt der CPU
63 fn basis_takt(&self) -> u64;
64 /// Der Turbo-Takt ist der Takt, mit dem die CPU arbeitet, wenn diese erhöhte
65 /// Last sowie eine ausreichend niedrige Temperatur besitzt.
66 fn turbo_takt(&self) -> Option<u64> {
67 None
68 }
69 /// Zusätzliche CPU-Features.
70 fn features(&self) -> Vec<Features>;
71
72 /// Diese Funktion ruft eine Iteration des Befehlszyklus auf und bewegt somit
73 /// den Instruction-Pointer um eine Stelle weiter.
74 fn eins_ausführen(&mut self) -> Result<u64, ()>;
75
76 fn alles_ausführen(&mut self) -> Result<Vec<u64>, ()> {
77 let mut res = Vec::new();
78 while let Ok(val) = self.eins_ausführen() {
79 res.push(val);
80 }
81 Ok(res)
82 }
83}
84
85/// Die Architektur eines Prozessors beschreibt den grundsätzlichen Aufbau, legt
86/// also das Fundament für die Funktionsweise sowie Kompatibilität mit Programmen.
87#[allow(non_camel_case_types)]
88#[non_exhaustive]
89pub enum Architektur {
90 /// Wurde 1985 auf die "moderne" Interpretation von 32-Bit gebracht.
91 /// Hat einige Grundsteine der modernen CPUs gesetzt, wie etwa eine
92 /// [Memory Management Unit](Features::MemoryManagementUnit) oder
93 /// [Paging](Features::Paging). Wird heutzutage aber durch den auf maximal 4 GiB
94 /// (bzw 64 GiB mit etwas getrickse) beschränkten Arbeitsspeicher kaum noch
95 /// eingesetzt.
96 x86,
97 /// Bildet aktuell den allergrößten Teil von Desktop-PCs sowie Laptops. Dabei
98 /// wird enorm stark auf [x86](Architektur::x86) aufgebaut, aber die Zahl der
99 /// Register verdoppelt und die Standardzahlenbreite von 32 auf 64 Bits
100 /// angehoben, wodurch der Adressierbare Arbeitsspeicher enorm erhöht wurde.
101 x86_64,
102 /// Ist primär in mobilen sowie auf Energieeffizienz bedachten Geräten
103 /// verbaut, da es im bei ähnlicher Leistung zu [x86_64](Architektur::x86_64)
104 /// weniger Strom verbraucht.
105 arm64,
106}
107
108/// Beschreibt verschiedene CPU-Features, die von bestimmten CPUs implementiert
109/// werden.
110#[non_exhaustive]
111pub enum Features {
112 /// Übernimmt das Verwalten von Arbeitsspeicher und ermöglicht somit
113 /// performanten virtuellen Arbeitsspeicher.
114 MemoryManagementUnit,
115 /// Vereinfacht virtuellen Arbeitsspeicher durch die Einteilung des
116 /// Arbeitsspeichers in gleich große Bereiche (in der Regel 4 KiB).
117 Paging,
118}
119
120/// Besagt die Anordnung der Übertragung von digitalem Adressraum in physischen
121/// Adressraum, oder einfacher ausgedrückt: Wo ist auf dem physischen RAM-Stick die
122/// Adresse 0?
123pub enum Endianness {
124 /// Die Adresse 0 ist am Ende.
125 LittleEndian,
126 /// 0 ist am Anfang.
127 BigEndian,
128}