|
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 ] | | |