Lösungsvorschlag Operating Systems FS07

Aus VISki
Wechseln zu: Navigation, Suche


1) Bootviren

a)
Wenn sowhol X als auch Y den originalen MBR bei Infizierung die selbe Adresse kopieren geschieht folgendes:
Infizierung mit X: Der MBR wird an die neue Stelle kopiert und an der alten Stelle durch X ersetzt. Das System würde nun noch booten.
Infizierung mit Y: X wird als MBR erkannt und folglich an die Stelle kopiert, wo der original MBR liegt. Folglich wird der original MBR durch X ersetzt und die Stelle wo X war durch Y ersetzt.

Also wird beim Booten nun zuerst Y aufgerufen, dann X. X findet an der Stelle wo der MBR sein sollte nur sich selber weider, weshalb das System nicht mehr bootet.

Anmerkung: Analog für umgekehrte Reihenfolge der Infizierung.

b) Die Informationen über die einzelnen Partitionen müssen stimmen, was bei einem MBR ab CD nicht unbedingt gegeben ist, da der Benutzer bei der Installation eventuell Anpassungen vorgenommen hat.

2) Partitionen

  1. Defragmentieren der 2. Partition, so dass unbenutzte DNodes am Ende der Partition stehen.
  2. So viele DNodes aus der Freelist der 2. Partition entfernen, wie die 1. partition zusätzlich benötigt.
  3. Partition 2 ans Plattenende verschieben, so dass zwischen 1 und 2 freier Platz entsteht.
  4. Den Bereich zwischen den Partitionen als DNodes zur Freelist von Partition 1 hinzufügen.
  5. PBR der beiden Partitionen updaten (Grösse, etc)
  6. MBR updaten (Partition 2 befindet sich an einem neuen Ort)

3) Filesysteme

Es wird eine exakte Kopie der Datei angelegt, die geändert wird. Zuletzt kann in einem Schritt der Pointer der alten Datei auf die aktualisierte Datei umgehängt werden.

Stürzt das System vor dem Umhängen des Pointers ab, bleibt die alte Datei (konsistent) erhalten.

4) Implementation von Filesysteme

a)
-Freigeben für andere Prozesse
-Memory Leak vermeiden, da der Speicher sonst alloziert bleibt

b)
Der Finalisierer übernimmt das Schliessen von Dateien, die nicht mehr gebraucht werden.

c)

5) Interrupts und Prozesse

a)
-Laufenden Prozess (Thread) stoppen
-Prozesszustand speichern (PSW, Register, etc.)
-Nächsten Prozess aus der Ready Queue starten
-Timer zurücksetzen und neustarten

b)
Page Table laden
TLB flushen

c)
-Fehler (Division durch Null, Zugriff auf "fremden" Speicher)
-Yield, der aufgerufene Prozess führt gerade zur Erledigung des unterbrochenen
-

6) Speicherallokation

a)
-Interne Fragmentierung

b)
-Doppelt verkettete Free-Liste
-Jeder Eintrag hat zu Beginn und am Ende seine Länge (Offset) gespeichert
-Das ermöglicht effizientes verschmelzen aufeinanderfolgender Free-Listen-Elemente

7) Heapverwaltung

a)
-Memmory Leak: Ressource wird nicht mehr freigegeben

b)
-Garbage Collector ist ein Stop-And-Go Verfahren
->Aufruf des Garbage Collectors führt zu unterbruch aller Prozesse
->Terminierung der Prozesse evtl. nicht in vorgesehener Zeit
->Fehler in Real-Time Systemen

Lösung: unterbrechbares GC implementieren (z.B. mit Three Color Abstraction)

8) Mehrprozessspeicherlayout

a)

  • Jeder Prozess erhält einen eigenen Adressraum
  • Dynamische Libraries können einmal in den physikalischen Speicher geladen werden, aber über verschiedene virtual pages verwendet werden
  • Shared Memory: Prozesse können über geteilte Pages kommunizieren
  • Erlaubt das Auslagern momentan nicht verwendeter Pages auf die Harddisk
  • Lazy Copying bei fork()
  • ...


b)
Zunächst wird eine Kopie einer Datei nur durch einen Link auf das Original repräsentiert. Bevor aber das Original oder die Kopie erstmals geändert werden, wird der Link durch eine eigentliche Kopie des Originals ersetzt.
Benötigt ein Prozess eine Kopie einer Page, so wird, statt sofort eine tatsächliche Kopie zu erstellen, dieselbe Page verwendet, jedoch ein Read Only flag gesetzt. Dadurch wird das Kopieren verzögert, bis tatsächlich nötig. Das passiert z.B. beim forken.
c)
Pagetable benötigt zu viel Hauptspeicher
Gegenmassnahmen:

  • Multilevel Pagetable (nur oberster Level im Speicher)
  • Inverted Pagetable (benutzt Hashing)

9) Interprozesskommunikation

a)

  • Pipes, dazu wird jedem Prozess eine Eingangs- / Ausgangspipe zugeordnet, die Bytes sequentiell überträgt. Pipes können direkt verbunden werden (durch das Betriebssystem zur Verfügung gestellt).
  • Files
  • Sockets

b)

  • Eine Region im Heap wird von beiden Threads benutzt. Dazu benötigt man aber Mutex- und Benachrichtigungsmeachanismen (Monitoren zum Beispiel).
  • Globale Variablen

10) Synchronisation

-"Ein Monitor in der Informatik ist ein programmiersprachliches Konzept zur Synchronisation von Zugriffen zeitlich verschränkt oder parallel laufender Prozesse oder Threads auf gemeinsam genutzten Datenstrukturen oder Ressourcen." Wikipedia: Monitor (Informatik)

-"Ein Semaphor ist eine Datenstruktur mit zwei speziellen Nutzungsoperationen. Semaphore werden bei der Programmierung zur Prozesssynchronisation eingesetzt, also zur Lösung von Aufgaben, bei denen die parallele Ausführung mehrerer Prozesse/Threads eine zeitliche Abstimmung der Ausführungen erfordert." Wikipedia: Semaphore Informatik

Unterschiede:
-Monitore sind nur Konstrukte einer Programmiersprache während Semaphore eigentlicher Code des Programmierers ist.
-Monitore können bspw. durch Semaphoren implementiert sein.

11) Synchronisation

12) Prozesswechsel

Gemäss Musterlösung Serie 9, 2008:

Der Trick ist die direkte Nutzung der Procedure Activation Frames zum Umschalten zwischen den Prozessen:

a)
PROCEDURE SwitchTo(to: Process);
BEGIN
self.EBP := GetBP();
SetBP(to.EBP);
END SwitchTo;

b)
timer interrupt handler:
push regs;
to := Get(readyQ);
SwitchTo(to);
pop regs;

13) Prozesse

Gemäss Musterlösung Serie 9, 2008:

a) Allokation sehr vieler Stacks und die Granularität des Paging ist zu grob.

b) Lösung ist eine Mikrostack-Architektur, bei der der Stack dynamisch vergrösserbar ist. Die dynamische Stackvergrösserung kann durch Kopieren des Stacks und Versetzen des SP oder durch verlinkte Stackframes erreicht werden.

14) Scheduling

(a) Das working Set eines Prozess ist die Menge aller Pages, die der Prozess benutzt.

(b) Thrashing geschiet z.B. wenn zwei Prozesse sehr viel Speicher benötigen. Jedes mal, das einer der zwei Prozesse preempted wird, müssen alle Pages des anderes Prozess geladen werden (viele Page Faults), und umgekehrt. Das I/O overhead ist viel grösser als die tatsächliche benötigte Rechnerzeit.

15) I/O Subsysteme

a)
Die Hardware schreibt die Register in den Hauptspeicher, aber der Cache des Prozessors wird nicht updated, wodurch der Prozessor nur das sieht, was im Cache steht.

b)
Caching deaktivieren.

16) Virtuelle Maschinen