Hans-Georg Eßer (Dipl.-Inform. Dipl.-Math.)
Betriebssysteme / Informatik-Grundlagen
Fakultät für Informatik und Mathematik
Fakultät für Wirtschaftsingenieurwesen
Hochschule München

hm.hgesser.de


Navigation
Startseite
Impressum
Vorlesungsarchiv
Betriebs-
systeme I
SS 09
Übersicht
Folien / Audio
Moodle
Skript
Prüfungs-Blog
Evaluation
Informatik
Grund-
lagen
WS 08/09
Übersicht
Folien / Audio
Moodle
Evaluation
Betriebs-
systeme I
SS 08
Übersicht
Folien / Audio
Prüfungs-Blog
Evaluation
Betriebs-
syst. I/II
WS 06/07
Übersicht
Folien
Evaluation
Über den Dozenten
Homepage [extern]
Veröffentlichungen
Didaktik-Fortbildungen
Hochschule München
Homepage
Fakultät für Informatik und Mathematik
Fakultät für Wirtschaftsingenieurwesen

Betriebssysteme-Blog

Ihre Fragen sind in normaler Schrift dargestellt, meinen Antworten kursiv.

Drei kleine Fehler in der Musterlösung (23.07.2009)


Die Lösung zur Probeklausur enthält drei kleine Fehler:

  • Aufgabe 4a): Die Musterlösung enthält in der Zeile zu SRT fälschlich die Ausführreihenfolge zu SJF statt SRT.
  • Aufgabe 8: 16 GB / 16 KB = 1 M, und 1 M = 2^20, nicht 2^10 -- dadurch sind 4 Byte statt 2 Byte pro Blockadresse nötig, was den Rest der Berechnungen ändert.
  • Aufgabe 11 a): Im vorletzten Schritt wird der neue Restervektor A mit (3 6 1) falsch berechnet; richtig ist (3 6 2).


[ Pfad: | permanenter Link ]

Blog eröffnet: Sommersemester 2009 (07.07.2009)


Noch 2,5 Wochen bis zur Klausur -- stellen Sie jetzt (per E-Mail) Ihre Fragen, ich antworte hier im Blog :)
Alle älteren Einträge (aus 2007 und 2008) beziehen sich auf frühere Veranstaltungen. (hge)


[ Pfad: | permanenter Link ]


Praktikum 7: sleep für Thread oder Prozess? (14.07.2008)


Laut dem beigelegten Artikel legt ein sleep() den gesamten Prozess inkl. allen enthaltenen Threads schlafen. usleep(), wie bei uns genutzt müsste doch den gleichen Prozess weiten Effekt haben. War es in der Praktikumaufgabe gewollt, den gesamten Prozess schlafen zu legen? Der Aufruf weckt so ein bisschen den Eindruck als würde er nur den Thread selbst betreffen.

In den Kommentaren ist noch eine Kleinigkeit, die vielleicht noch nicht entdeckt worden ist. Laut manpages benötigt usleep() die Anzahl der Mikro-Sekunden anstatt der Milli-Sekunden.

Hmmmm.... Zu sleep und usleep gibt es zwei Manpages. Rufen Sie mal "man 3p usleep" und im Vergleich dazu "man 3 usleep" auf; das Handbuch 3p gibt die POSIX-Anleitungen, und da ist von Threads die Rede. Das Code-Beispiel im Praktikum geht davon aus, dass nur der Thread schläft. (hge)

[ Pfad: | permanenter Link ]


Deadlock-Erkennung, bs-ss2008-esser-10-4up.pdf, Folie 17 (14.07.2008)


War das "<", statt einem "<=" wirklich beabsichtigt? (Schließlich sollte der Prozess/Kunde auch gleich die volle Summe von 122 fordern können.) Ich vermute ich sehe ihren Punkt. Im Falle von 122 müsste der Prozess/Kunde bereits alle Resourcen wieder zurückgeben was das System auf jeden Fall in einen sichereren Zustand bringen würde und die Prüfung hinfällig machen würde.

Es ist hier egal, weil ja aus "<" auch "<=" folgt. (hge)

[ Pfad: | permanenter Link ]


Prioritätsinversion (14.07.2008)


Tritt eine Prioritäteninversion nicht schon mit nur 2 Prioritätsstufen auf. In der Folie sind zwar 3 Warteschlangen beschrieben, aber müssten eine hochpriorisierte, welche den betroffenen Thread inkl. aller anderen dauerlaufenden Threads beinhaltet, und eine niederpriorisierte, welche den Resourcenblockierenen Thread beinhaltet, nicht schon für eine solche Situation ausreichen?

Ja. Wenn Sie noch mindestens einen weiteren, ausführbereiten Thread in der obersten Prioritätsstufe haben, dann reicht das aus, denn der läuft dann permanent und verhindert auch, dass Threads aus der niedrigen Stufe laufen. Es muss also mindestens einen Thread geben, dessen Priorität echt höher als die des niedrigen und kleiner/gleich der des hohen ist. (hge)

[ Pfad: | permanenter Link ]


Thread-Zustände (14.07.2008)


Swapping ist für Threads natürlich unmöglich, aber wären sleep() und suspend() nicht für ein Betriebssystem implementierbar? (Schließlich hat das Betriebssystem eh von jeden Thread einen eigenen Process Control Block und kann auch erkennen dass es nur ein Thread ist.)

Theoretisch könnte man das machen. Für suspend() müssten Sie dann aber Benutzern die Möglichkeit geben, Threads über ihre Thread-ID anzusprechen und explizit zu suspendieren; das ist z.B. bei Linux nicht vorgesehen. (hge)

[ Pfad: | permanenter Link ]


Threads und Stacks (14.07.2008)


Normalerweise wächst ein Stack von der anderen Seite des Prozessesspeichers auf die Daten zu. Falls man nun aber mehrere Threads hat, so können nicht alle von der anderen Seite her wachsen, sondern müssten irgendwo in der Mitte anfangen. Gibt es da irgendeine einfache Regelung?

Sie müssen irgendeine Aufteilung des generellen Stack-Bereichs vornehmen. Wenn Sie Kernel-Level-Threads haben, verwaltet der Kernel für jeden Thread einen separaten Stack (wie bei verschiedenen Prozessen). Wenn Sie User-Level-Threads haben, muss sich die UL-Thread-Bibliothek darum kümmern -- das passiert dann nicht im regulären Stack des Prozesses. (hge)

[ Pfad: | permanenter Link ]


Context-Switch bei präemptiven Schedulern (13.07.2008)


Wie kann ein präemptiver Scheduler denn einem Prozess die CPU wieder wegnehmen?

Lässt er den Thread nur bis zu einer bestimmten Stelle laufen indem er den auszuführenden Code vor der Prozess-Aktivierung manipuliert? (also _ähnlich_ wie im Praktikum?) Oder verbindet der Scheduler den Timer mit einem Interrupt? Könnte der Prozess (bei bekanntem Interrupt) den Scheduler bzw den Interrupt manipulieren um dann alleine zu laufen?

Und wenn der Scheduler wieder an die Reihe kommt, dann wird doch sowieso ein Context-Switch gemacht dass der Scheduler selbs arbeiten kann; oder gibt es Hardwaremodelle (z.B. Hyperthreading) die dies ohne expliziten CS erledigen können?

Präemptive Scheduler kann man nur einsetzen, wenn die Hardware einen Timer-Baustein bereitstellt, der Interrupts auslöst. Wenn dieser Interrupt ausgelöst wird, wird der Scheduler aktiviert. Der entscheidet dann, ob der gerade noch laufende Prozess seine Arbeit fortsetzen kann oder ob ein anderer Prozess aktiviert wird.

Der laufende Prozess kann den Scheduler nicht manipulieren, weil er dazu in Datenstrukturen des Betriebssystems herum hantieren müsste, die er durch die virtuelle Speicherverwaltung gar nicht sieht. (Das heißt natürlich: Wenn Sie eine primitivere Speicherverwaltung ohne Schutzmechanismen einsetzen, ist ein solcher Eingriff doch möglich, aber dann ist ja jede beliebige Manipulation möglich.)

Beim Aktivieren des Schedulers über einen Timer-Interrupt gibt es zwar auch ein Sichern der Daten des laufenden Prozesses (wie bei jedem Interrupt), aber es findet im Wortsinne kein Context Switch statt, denn das würde bedeuten, zu einem anderen Prozess zu wechseln. Nur wenn der Scheduler schließlich entscheidet, einen anderen Prozess zu schedulen, kommt es zum Context Switch. Den Prozess für einen kurzen Lauf des Schedulers zu unterbrechen, dann aber wieder fortzusetzen, ist billiger als ein Prozesswechsel.

Dass spezielle Hardware dabei helfen könnte, sehe ich nicht; wenn Sie einen HT-Prozessor haben, laufen ja in beiden HT-Komponenten Prozesse, und Sie müssen in jedem Fall einen der Prozesse vorübergehend unterbrechen, um den Scheduler zu starten. (hge)

[ Pfad: | permanenter Link ]


Blog eröffnet: Sommersemester 2008 (08.07.2008)


Noch eine Woche bis zur Klausur -- stellen Sie jetzt (per E-Mail) Ihre Fragen, ich antworte hier im Blog :)
Alle älteren Einträge (aus 2007) beziehen sich auf die Veranstaltung im WS 2006/07. (hge)


[ Pfad: | permanenter Link ]


Klausur mit Zusatzaufgaben? (05.02.2007)


Hat die Klausur einen Überlauf? Wieviel % braucht man, um zu bestehen?

Ja. Die Klausur hat 130 Punkte, ca. 100 brauchen Sie voraussichtlich fuer eine glatte Eins. Ab wo sie bestanden ist, lege ich bei der Korrektur fest. (Also die Frage ist da: bestanden ab 50 Punkten oder schon mit weniger...) (hge)

[ Pfad: | permanenter Link ]


Probeklausur: Fragen zu fork(), virtuellen Speicheradressen (05.02.2007)


1. In Aufgabe 4.b) Ihrer Musterlösung heißt es für den Vaterprozess "pid != 0" (was ja auch stimmt, da er die Child-ID bekommt) und "pid == 0" für den Sohnprozess. Es ändert zwar nichts daran, dass [2] und [3] ausgegeben werden, aber müsste nicht der Vaterprozess die [2] und der Sohnprozess die [3] ausgeben? Also genau umgekehrt, wie es in Ihrer Lösung steht?

Sie haben recht. Ich habe "if (pid)" als "if (pid==0)" fehlinterpretiert, aber es ist natuerlich genau anders rum, weil 0=false und alles andere =true... Das hat man davon, wenn man Abkuerzungen benutzt statt "if (pid==0)" auszuschreiben ;)

2. Ebenfalls in der Musterlösung, in der Aufgabe 8.b): Wieso gibt es für die 3.Stufe 2^22 Einträge, und nicht 2^11 Einträge?

Nicht Eintraege! Es gibt 2^22 Tabellen (!) mit je 2^11 Eintraegen.
Die Tabellen sind immer gleich gross, aber auf der dritten Stufe gibt es viel mehr, weil es eben eine Stufe mehr gibt...

[ 1. ] ->  [ 2. ] ->  [ 3. ] ->  Seite
 1=2^0      2^11       2^22
Das ist der Sinn der mehreren Stufen; mit jeder Stufe wird die Zahl der Tabellen deutlich groesser; auf der vierten Stufe (so es eine gaebe) haetten Sie dann 2^33 Tabellen. (hge)

[ Pfad: | permanenter Link ]

Context Switch nach Interrupt-Behandlung? (05.02.2007)


Eine Frage (BS) zur Folie 22 & 23 des Kapitels 3 Interrupts (1/2).
Folie 22: In der Grafik wird dargestellt, dass beim Auftreten eines Interrupts der aktuelle Prozess (Programm) unterbrochen wird an der Stelle i, wenn ein Interrupt auftritt. Dann wird der Interrupt- Handler und die entsprechende Routine aufgerufen. Nach der Abarbeitung erfolgt die Weiterbearbeitung des unterbrochenen Prozesses an Stelle i+1.
Folie 23: Hier wird dieses Vorgehen nochmals in einem Text festgehalten, nur wird hier aufgeführt, dass nach Abarbeitung der Interrupt-Routine der Scheduler zum Einsatz kommt und evtl. den "alten" Prozess für eine Weiterbearbeitung auswählt oder auch einen neuen Prozess.
Dies verwirrt mich ein wenig, wie ist es nun? Wird am Alten weitergearbeitet oder kommt immer der Scheduler zum Einsatz?

Zitat aus "Linux-Kernelarchitektur" (W. Mauerer, S. 591 f.):
"[...] Die Abschnitte vor und nach Aufruf des Interrupt-Handlers werden als entry und exit path, also Ein- und Ausgangspfad bezeichnet. [...] Im Ausgangspfad prüft der Kern, ob der Scheduler einen neuen Prozess auswählen soll, durch den der alte ersetzt wird. [...]"
Also: Nach dem Interrupt kommt moeglicherweise, aber nicht zwingend, ein Context Switch. (hge)


[ Pfad: | permanenter Link ]


Datei-Attribute (05.02.2007)


In Ihrer Zusammenfassung zu Betriebssysteme II auf Folie 44 sprechen Sie die erweiterten Attribute an. Als Zusatzinfo habe ich mir 'nebendran' notiert, dass es 3 Attributarten gibt, a) Standard, b) Erweitert und c) Extended. Standard ist klar: lesen, schreiben etc. Erweitert steht auf der Folie 44, aber Extended? Gelten die dann fuer Windows? Bzw. welche Attribute sind die Extended?

Mit Windows hat das gar nichts zu tun. Die Aussage zu den drei Attribut-Typen bezieht sich auf Ext2/Ext3.
Die dritte Art sind die frei benennbaren Attribute (Name/Wert-Paare), die im Foliensatz BS2-11 als "erweiterte Attribute" eingefuehrt wurden.
Die Benennung ist nicht ganz konsistent; die zweite und dritte Kategorie heissen beide "erweitert"... Machen Sie sich einfach klar, wofuer es die Dinge gibt: die einfachen erweiterten sind nur Flags, immutable und so; die anderen erweiterten koennen alles moegliche sein, z.B. ACLs, Kommentare etc. (hge)


[ Pfad: | permanenter Link ]


Windows-Themen prüfungsrelevant? (05.02.2007)


Sind die Windows-Teile (z.B. bs-esser-16-4up.pdf) der Vorlesung pruefungsrelevant ?

Nein. Wie zu Beginn der Vorlesung (am ersten Tag in der Einführung) versprochen: "Kein Windows in der Prüfung." (hge)

[ Pfad: | permanenter Link ]


Probeklausur: 45 min. oder 90 min.? (21.01.2007)


Mich würde interessieren: War das eine 45 min oder eine 90 min Probe-Prüfung? Mir ist die Tatsache bewusst, dass es eine über 100%-Prüfung war.

Eine 90-Minuten-Probeklausur. Für die endgültige Klausur werde ich so vorgehen: Wenn ich die Aufgaben zusammen gestellt habe, setze ich mich hin und löse die Klausuraufgaben selbst; dabei stoppe ich die Zeit. Mein Ziel ist dann, alle Aufgaben in 60 Minuten (mit Dozenten-Malus ;) ) lösen zu können. Je nachdem, wie viel länger oder kürzer ich brauche, passe ich das Volumen an. (hge)

[ Pfad: | permanenter Link ]

Copyright © 2006-2008 Hans-Georg Eßer.
Anschrift: Hochschule München, Fakultät für Informatik und Mathematik, Lothstraße 34, D-80335 München