Einstimmung
Eine Instanz ist ein laufendes Programm.
Jede Instanz definiert ihre eigenen Systemfunktionen.
Systemfunktionen sind Instanzen.
Systemfunktionen liegen in der Infrastruktur.
Systemfunktionen werden meist über die Infrastruktur aufgerufen.
Systemfunktionen werden meist über Bibliotheken aufgerufen.
Instanzen können über Systemfunktionen zusammenarbeiten.
Der Programmlader erzeugt Instanzen.
Arten von Segmenten
Der Code enthält verschlüsselte Daten zum Decodieren.
Der Code enthält Befehle, die ein Prozessor ausführen kann.
Die Konstanten enthalten schreibbare Daten konstanter Größe.
Die Konstanten enthalten unveränderliche Daten.
Statische Daten sind schreibbare Daten fester Größe.
Alle statischen Daten werden zur Laufzeit initialisiert.
Die Halde bietet Platz für Daten, die zur Laufzeit angefordert werden.
Ein Stapel bietet Platz für verschachtelte Aufrufe und lokale Variablen.
Nutzung von Segmenten
Vom Prozessor ausführbare Befehle liegen in einem Code–Segment.
Unveränderliche Daten liegen in einem Konstanten–Segment.
Ein statisches Daten–Segment enthält schreibbare Daten fester Größe.
Dynamische Bibliotheken enthalten kein statisches Daten–Segment.
Ein dynamisches Daten–Segment umfasst Halde und Stapel.
Auf einem Stapel landen Stack Frames.
Ein Stapel arbeitet nach dem
LIFO–Prinzip.
Eine Halde arbeitet nach dem
FIFO–Prinzip.
Instanzen und Stapel
Jede laufende Programminstanz benötigt einen Stapel.
Eine Instanz benötigt nur einen Stapel.
Manche Instanzen benötigen nur einen Stapel.
Jeder Prozess (thread)
in einer Instanz benötigt einen eigenen Stapel.
Ausführbare Dateien
Eine ausführbare Datei enthält den Code des Programms.
Eine ausführbare Datei enthält die Konstanten des Programms.
Eine ausführbare Datei enthält die initialen statischen Daten des Programms.
Eine ausführbare Datei enthält die initiale Halde des Programms.
Eine ausführbare Datei enthält den initialen Stapel des Programms.
Eine ausführbare Datei enthält die Einsprungadresse des Programms.
Bibliotheken
Eine Bibliothek enthält Code, Konstanten und statische Daten.
Eine Bibliothek definiert eine Einsprungadresse für den Code.
Eine statische Bibliothek wird zur Laufzeit gebunden.
Eine dynamische Bibliothek wird zur Laufzeit gebunden.
Dynamische Bibliotheken werden beim Start des Programms gebunden.
Eine dynamische Bibliothek kann als Plugin nachgeladen werden.
Jede dynamische Bibliothek braucht eine eigene Halde.
Jede dynamische Bibliothek braucht einen eigenen Stapel.
Format von Übersetzungstabellen(einträgen)
Einträge in der ÜT enthalten eine logische und eine physische Adresse.
Einträge in der ÜT enthalten eine logische und eine physische Seitennummer.
Einträge in der ÜT enthalten einen Offset.
Flags in einem Eintrag
legen die erlaubten Zugriffsarten fest.
Einträge in der ÜT enthalten, für wieviele Seiten sie gelten.
Einträge in der ÜT enthalten, wie groß die Seite ist.
MMUs und Übersetzungstabellen
Jeder Prozessor braucht eine eigene MMU.
Jede aktive MMU braucht eine Übersetzungstabelle.
Jede aktive MMU braucht eine eigene Übersetzungstabelle.
Mehrere MMUs können eine Übersetzungstabelle gleichzeitig verwenden.
Segmente und Übersetzungstabellen
Zu jedem Segment gehört eine Übersetzungstabelle.
Zu jedem Adressraum gehört eine Übersetzungstabelle.
Ein Segment hat eine Basisadresse.
Eine Einblendung hat eine Basisadresse.
Ein Segment hat eine Größe.
Ein Adressraum hat eine Größe.
Einblendungen können sich in einem Adressraum überlappen.
Ein Übersetzungseintrag enthält Daten von Einblendung und Segment.
Prozesszustände
Ein Prozess, der auf eine Nachricht wartet,
ist bereit.
Ein Prozess, der auf einen Prozessor wartet,
ist blockiert.
Ein Prozess, der auf einen Prozessor wartet,
ist inaktiv.
Ein Prozess, der auf einem Prozessor läuft,
ist aktiv.
Ein Prozess, der auf einem Prozessor läuft,
ist rechnend.
Der Aufgreifer ist für die Zustände Bereit
und Rechnend zuständig.
Der Aufgreifer ist für das Deaktivieren
zuständig.
Prozesse im Zustand Bereit
liegen in der Bereitmenge.
Prozesse im Zustand Wartend
liegen in einer Wartemenge.
Prozesse im Zustand Nicht
liegen in der Nichtmenge.
Links in Dateisystemen
Ein symbolischer Link (Symlink) kann auf einen relativen Pfad zeigen.
Ein relativer Symlink ist relativ zum Arbeitsverzeichnis
der zugreifenden Instanz.
Ein relativer Symlink ist relativ zum Verzeichnis, in dem er steht.
Das Ziel eines relativen Symlinks kann sich ändern, wenn man ihn verschiebt.
Das Ziel eines relativen Symlinks kann gleich bleiben, wenn man ihn verschiebt.
Das Ziel eines Hard Links kann sich ändern, wenn man ihn verschiebt.
Das Ziel eines Hard Links kann sich ändern, wenn man das Ziel verschiebt.
Ein Hard Link zeigt auf einen absoluten Pfad.
Ein Hard Link kann auf einen relativen Pfad zeigen.
Ein Hard Link zeigt auf eine interne Dateikennung (Inode).
XXX