Kapitelklicken springt direkt hin
Shownotes
<p>Nach einem glorreichen Intro mit perfekter Vorbereitung befassen Xyrill und ttimeless sich mit Speicherschutz.
Wie und warum und welchen Speicher überhaupt? Hört selbst.</p><h2>Shownotes</h2><ul>
<li>
<p>"Welchen Speicher müssen wir eigentlich schützen?"</p>
<ul>
<li>hier nur Arbeitsspeicher und Gerätespeicher</li>
<li>andere Speicherarten (z.B. Festplatten) geschützt durch die Betriebssystem-Abstraktionen, siehe zukünftige Folge zu Privilegienkontrolle</li>
</ul>
</li>
<li>
<p>Aufgaben des Betriebssystems: Prozessisolation und Vermittlung des Hardwarezugriffs</p>
<ul>
<li>Problem: das Betriebssystem ist auch nur "ein Programm"</li>
<li>Frage 1: Wie wird sichergestellt, dass das Betriebssystem die finale Kontrolle über Hardwarezugriffe hat?</li>
<li>Frage 2: Wie wird verhindert, dass ein Speicherbereich, den Prozess A verwendet, von Prozess B überschrieben (oder unberechtigterweise ausgelesen) wird?</li>
</ul>
</li>
<li>
<p>Antwort auf Frage 1: <a href="de.wikipedia.org/wiki/Ring_(CPU)">Prozessor-Ringe</a></p>
<ul>
<li>Standardfunktion auf allen CPUs, die auf Mehrprozess-Betrieb ausgelegt sind (nicht immer im Embedded-Bereich)</li>
<li>zu jedem Zeitpunkt läuft der Prozess in einem von mehreren Ringen</li>
<li>sensible Operationen (v.a. Hardwarezugriff) sind nur in den höheren Ringen erlaubt und damit den Betriebssystemprozessen vorbehalten</li>
<li>Wechsel in einen niedrigeren Ring jederzeit möglich (z.B. Aktivierung eines Userspace-Prozesses durch das Betriebssystem)</li>
</ul>
</li>
<li>
<p>Wie kommen wir von einem niedrigeren Ring wieder in einen höheren Ring?</p>
<ul>
<li>Interrupts (siehe STP015): Eintreten eines Hardware-Ereignisses (z.B. ankommendes Netzwerk-Paket oder abgelaufener Hardware-Timer), das durch das Betriebssystem behandelt werden muss</li>
<li><strong>Syscalls</strong>: niedrigprivilegierter Prozess fragt eine definierte Schnittstelle des Betriebssystems an, um eine höherprivilegierte Operation auszuführen</li>
<li>z.B. Dateisystem-Zugriff, Hardware-Zugriff, Ändern der Betriebssystem-Konfiguration, Starten von neuen Prozessen, Nachrichtenübermittlung an andere Prozesse</li>
<li>dadurch Realisierung der Prozessisolation, weil das Betriebssystem die Kontrolle über alle privilegierten Operationen hat</li>
</ul>
</li>
<li>
<p>Antwort auf Frage 2: <a href="de.wikipedia.org/wiki/Virtuelle_Speicherverwal… Speicherverwaltung</a></p>
<ul>
<li>wenn Prozesse auf Speicher zugreifen, verwenden sie nur "virtuelle" Speicheradressen: z.B. Adresse 0x42 für Prozess A ist nicht unbedingt derselbe Speicher wie Adresse 0x42 für Prozess B</li>
<li>Abbildung auf physische Speicheradressen innerhalb der CPU durch eine <strong>Memory Management Unit</strong> (MMU)</li>
<li>Konfiguration der MMU durch das Betriebssystem immer kurz vor der Übergabe der CPU an einen anderen Prozess</li>
<li>Aufteilung des physischen/virtuellen Speichers in Seiten (<strong>Pages</strong>), z.B. bei x86-64 wahlweise 4 KiB oder 2 MiB oder 1 GiB</li>
<li>pro Page verschiedene Zugriffsberechtigungen möglich, z.B. zur Verhinderung des Schreibens in ausführbare Programmteile, oder für <strong>Shared Memory</strong> als Kommunikationsweg zwischen Prozessen</li>
</ul>
</li>
<li>
<p>Paging der MMU ermöglicht <strong>Swapping</strong></p>
<ul>
<li>Pages müssen nicht unbedingt im tatsächlichen Arbeitsspeicher gehalten werden, sondern können bei Nichtverwendung in eine Swap-Datei auf der Festplatte ausgelagert werden</li>
<li>dadurch über alle Programme summiert meist deutlich mehr virtueller Speicher zugewiesen, als tatsächlich physischer Speicher vorhanden ist</li>
<li>wenn ein Programm auf eine im Arbeitsspeicher fehlende Seite zugreift, erzeugt die MMU einen Interrupt (<strong>Page Fault</strong>), sodass das Betriebssystem die fehlende Seite transparent nachladen kann</li>
<li>analog dazu: <strong>Memory-Mapping</strong> von Dateiinhalten direkt in den Arbeitsspeicher</li>
</ul>
</li>
<li>
<p>wenn wir schon mal über Speicheradressen reden: <a href="de.wikipedia.org/wiki/Direct_Memory_Access&quo… Memory Access</a></p>
<ul>
<li>Abbildung eines Arbeitsspeicher-Addressbereiches auf einen Speicher eines angeschlossenen Gerätes, zum Beispiel den Arbeitsspeicher der Grafikkarte oder eines Netzwerkadapters</li>
<li>dadurch direkter Transfer von Daten zwischen niedrigprivilegierten Prozessen und Hardware möglich, z.B. schnelles Hochladen von Texturen in die Grafikkarte durch ein 3D-Spiel</li>
<li>DMA braucht nicht unbedingt eine MMU (siehe <a href="wiki.osdev.org/Printing_to_Screen">VGA… bei <code>0xB8000</code></a> in DOS-Ära-Betriebssystemen)</li>
</ul>
</li>
</ul>