Prüfungsprotokoll Betriebssysteme 1/2

Umgebung

Datum: 2000-10-11
Prüfer: Kammerer
Beisitzer: Gärtner
Prüfungsumfang: BS1 (2+2), BS2 (2+2)
Prüfungsdauer: 45 Minuten

Ablauf

Prof. Kammerer hat sich dumm gestellt und wolle alles Erklärt haben. Felix hat nur wehrend Kammerers kurzer Abwesenheit ein paar Fragen gestellt und am Ende noch SUN-NFS angesprochen. Es ist vorteilhaft, eigenständig die Fragen zu beantworten und dabei die sich ergebenden Probleme von alleine zu erwähnen und zu lösen.

  1. Vorgegeben ist ein 4GB Motorola-System, auf denen nur zwei Seiten um die 2GB-Grenze vorhanden sind. Erstellen sie die Seitentabellen für Betriebssystem und User-Mode.

    AdresstabelleDie erste Ebene der dreistufigen Pagetable gibt es einmal für der Common-Root-Pointer (CRP) und für der Supervisor Root Pointer (SRP). In ersterer sind die oberen 8 Einträge als "invalid" markiert, um den Zugriff auf Betriebssystemdaten zu unterbinden. Die unteren 8 Einträge in beiden Tabellen sind identisch.

    Die Einträge enthalten ein Valid-Bit, die restlichen 31 Bits verweisen auf eine physikalische Adresse (Kachel). Die dritte Ebene enthält weitere Bits für Auslagerungsstrategien. Für Mehrprozessorsysteme ist das Cache-Bit interessant, um das MESI-Cache-Kohärenzprotokoll einzuschalten.

  2. Mehrere Userlevel-Threads auf Kernellevel-Threads. Wie sieht exit_monitor() aus?
    exit_monitor
      enter_mutex
      if urgent'COUNT>0
        deblock(urgent)
      elif entry'COUNT>0
        deblock(entry)
      else
        busy = false;
      exit_mutex
    

    Um Usermode wird enter_mutex und exit_mutex() durch Usermode-Varianten ersetzt. Erster Ansatz:

    tenter_mutex
      signals_off
      spinlock(mutex)
    texit_mutex
      free(mutex)
      signals_on
    

    Diese Variante hat den Nachteil, daß wenn ein Thread die ULT-Verwaltung aufruft und anschließend die Zeitscheibe des KLT abläuft, alle anderen KLTs nicht in die ULT-Verwaltung kommen und nutzlos Spinlocks machen. Deshalb benutzt man ein Kernel-Semaphore, um den KLT zu suspendieren:

    tenter_mutex
      signals_off
      P(mutex)
    texit_mutex
      V(mutex)
      signals_on
    P(mutex)
      test_and_decr(local, mutex)
      if local<=0
        deactivate
    V(mutex)
      incr_and_test(mutex,local)
      if local<=0
        activate
    

    Die Reihenfolge on texit_mutex() darf nicht vertauscht werden, da sonst ein Prozeßwechsel zwischen den beiden Befehlen in tenter_mutex blockieren würde.

  3. Was ist der Unterschied von signal() nach Hoar und notify() bei Hansen?

    Bei Hoar wird nach signal() ein Thread-Wechsel erzwungen und der signalisierende Thread in der urgent-Queue blockiert. Bei Hansen wird der signalisierte Prozeß lediglich deblockiert. Hansen spart damit die urgent-Queue. signal() bei Hoar heißt bei Handel notify() bzw. notifyAll(). Bei Hansen muß ein aufgeweckter Thread die Kondition erneut überprüfen und sich ggf. erneut blockieren. Bei Threads ist das effizient machbar. Nachteil bei Hoar ist, daß der signalisierende Thread genau die Bedingung kennen muß wegen der sich der aufzuweckende Thread blockiert hat.

  4. Wo werden Monitore benutzt?

    Java benutzt Monitore für das synchronized-Konzept bei Methoden, die bei statischen Methoden sich bezüglich der Klasse bzw. bei normalen Methoden bezüglich des Objekts ausschließen.

  5. Wofür braucht man notifyAll()

    Beispiel 2. Leser/Schreiber-Problem mit Schreiber-Priorität: Nachdem der letzte Schreiber den kritischen Abschnitt verlassen hat können alle Lesen weiterlaufen. Bei Hoar muß ein Leser der nächsten Leser durch Kettenaufwecken deblockieren. Mit notifyAll() ist die Lösung eleganter.

  6. Wo wird RPC genutzt?

    In verteilten Systemen, zum Beispiel auch bei NFS. Da die beteiligten Rechner unterschiedliche Architekturen haben, müssen ggf. Parameter konvertiert werden. Dazu muß bekannt sein, von welchem Typ die Parameter sind: Integer, Gleitpunktzahl, Zeichenkette. Als Kodierung wird XDR (eXternal Data Representation) benutzt.

Fazit

BS war meine insgesammt 4 Prüfung ist ist Bestandteil meines Schwerpunktfachs. Ich habe mich etwa 3 Wochen vorbereitet, die letzte davon sehr intensiv. Die Übungen sollte man nur zum besseren Verständnis machen, da sie selbst nicht direkt in der Prüfung vorkommen. Die beiden Skripte geben einen groben Überblick, man sollte auf jeden Fall noch weitere Bücher lesen:

Die Prüfungsatmosphäre war sehr entspannt und sachlich, so daß man gut miteinander diskutieren konnte. Das Ergebnis war eine 1.0

Philipp Hahn