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.

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 ]

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