Betriebssysteme->deadlocks
-
Bashar schrieb:
Du meinst, wenn irgendwelche TSRs sich verhaken?
nö, auch in sequentiellem code, wenn z.b. zwei codeabschnitte ständig übersprungen werden, weil nur der jeweils andere dafür sorgen kann, dass das bei dem einen nicht mehr passiert.
Bashar schrieb:
Egal, ich bleibe bei der Aussage. DOS hatte viele Probleme, aber besondere Anfälligkeit für Deadlocks war nicht dabei.
hast ja auch recht. wenn multitasking im spiel ist, ist die verklemmungsgefahr viel höher, das bringt die sache so mit sich.

-
;fricky schrieb:
nö, auch in sequentiellem code, wenn z.b. zwei codeabschnitte ständig übersprungen werden, weil nur der jeweils andere dafür sorgen kann, dass das bei dem einen nicht mehr passiert.
Es stellt sich eben die Frage, ob das noch als "Deadlock" durchgeht.
Ein besonders schön anfälliges Exempel für solchen Code wäre das hier - die einzige Stelle in C++, wo ich bis jetzt eine Anwendung für goto gefunden habe:
TPoint TImageDrawer::TImageSection::getBoundaryPoint (TRect rect, TPoint point, double angle) { static const double epsilon = 0.00001; if (!rect.Contains (point)) return point; double dx = std::cos (angle), dy = std::sin (angle); bool dxIsNotNull = std::abs (dx) > epsilon, dyIsNotNull = std::abs (dy) > epsilon; long w = rect.Width (), h = rect.Height (); TPoint retval; switch (angleToQuadrant (angle)) { case_0: // C# supports "goto case". C++ apparently doesn't. case 0: // Right boundary if (dxIsNotNull) { retval.x = rect.left + w - 1; retval.y = point.y + dy / dx * (retval.x - point.x) + 0.5 /* round */; if (retval.y >= rect.top && retval.y <= rect.top + h) return retval; } case 1: // Bottom boundary if (dyIsNotNull) { retval.y = rect.top + h - 1; retval.x = point.x + dx / dy * (retval.y - point.y) + 0.5 /* round */; if (retval.x >= rect.left && retval.x <= rect.left + w) return retval; } case 2: // Left boundary if (dxIsNotNull) { retval.x = rect.left; retval.y = point.y + dy / dx * (retval.x - point.x) + 0.5 /* round */; if (retval.y >= rect.top && retval.y <= rect.top + h) return retval; } case 3: // Top boundary if (dyIsNotNull) { retval.y = rect.top; retval.x = point.x + dx / dy * (retval.y - point.y) + 0.5 /* round */; if (retval.x >= rect.left && retval.x <= rect.left + w) return retval; } goto case_0; // Ain't that an elegant goto? } return TPoint (-1, -1); // Satisfy the compiler. }SCNR

-
audacia schrieb:
Ein besonders schön anfälliges Exempel für solchen Code wäre das hier ...
^^das ist ja bloss eine endlosschleife.
was ich meine, geht etwa so (simples beispiel, in der realität sind solche hänger meistens nicht so offensichtlich):int t; void process_1 (void) { if (t > 9) return; t++; puts ("p1 running"); } void process_2 (void) { if (t > 5) return; t++; puts ("p2 running"); } int main (void) { for(;;) { process_1(); process_2(); ... // noch mehr code, der davon nicht betroffen ist ... } }^^ keiner von beiden setzt 't' zurück, deswegen blockt es. beide würden weiterlaufen, wenn's einer tun würde.

-
mal nee andere Frage.
wieso ist in deinem Beispiel t=0 obwohl du es nicht mit 0 initialisiert hast

-
Ich rate mal ins Blaue: Die ist default-static und static-Primitive werden initialisiert? Im Notfall: Vielleicht ist es gar nicht 0 und er war ;schlampig.
MfG SideWinder
-
blurry333 schrieb:
wieso ist in deinem Beispiel t=0 obwohl du es nicht mit 0 initialisiert hast
globale variablen werden vorm aufruf von 'main' automatisch auf 0 gesetzt (wenn sie nicht mit was anderem initialisiert werden).

-
;fricky schrieb:
audacia schrieb:
Ein besonders schön anfälliges Exempel für solchen Code wäre das hier ...
^^das ist ja bloss eine endlosschleife.
was ich meine, geht etwa so (simples beispiel, in der realität sind solche hänger meistens nicht so offensichtlich):int t; void process_1 (void) { if (t > 9) return; t++; puts ("p1 running"); } void process_2 (void) { if (t > 5) return; t++; puts ("p2 running"); } int main (void) { for(;;) { process_1(); process_2(); ... // noch mehr code, der davon nicht betroffen ist ... } }^^ keiner von beiden setzt 't' zurück, deswegen blockt es. beide würden weiterlaufen, wenn's einer tun würde.

das ist auch nur ne endlosschleife, hat mit deadlock noch nix zu tun.
-
hustbaer schrieb:
das ist auch nur ne endlosschleife, hat mit deadlock noch nix zu tun.
lass mich raten: dir fehlt der preemptive multitasking-kernel, der das ganze antickert, richtig?

-
Zusätzlich benötigt man für jeden Prozess noch eine Funktion y = f(x) welche für jede Adresse im virtuellen Speicher die zugehörige Adresse im physischen Speicher zurückliefert.
Jetzt kommts:
Die Abbildung f(x) ist keine mathematische Funktion, sondern wird von einem Hardwaregerät bereitgestellt.
Den letzten Satz versteh ich nicht. Das Hardwaregerät hat doch bestimmt
auch eine Software die die Berechnung ausführt oder ?
-
Ja, das mit "keine mathematische Funktion" ist Käse, natürlich ist das auch (gerade) mathematisch eine Funktion. Damit soll wohl gemeint sein, dass das kein Ausdruck wie "y = x*1000 - 7" ist.
-
krabbels schrieb:
Installiere Eclipse mit ein paar Plugins und mit etwas Glück gibts nach dem Start nen Deadlock

Ist mir in 7 Jahren Eclipse nie passiert.
-
blurry333 schrieb:
Den letzten Satz versteh ich nicht. Das Hardwaregerät hat doch bestimmt
auch eine Software die die Berechnung ausführt oder ?dieses hardwaregerät ist ungefähr sowas: http://en.wikipedia.org/wiki/Memory_management_unit
die 'software' für solche dinger wird mit hardwarebeschreibungssprachen entwickelt und als logisches schaltnetz auf 'nem silikon-chip verewigt. also, da ist keine CPU drin, die befehle nacheinander abarbeitet wie im PC oder so.

-
byto schrieb:
krabbels schrieb:
Installiere Eclipse mit ein paar Plugins und mit etwas Glück gibts nach dem Start nen Deadlock

Ist mir in 7 Jahren Eclipse nie passiert.
Dann hast du wohl die falschen Plugins installiert gehabt(cdt ist dafür ganz gut geeignet). Ich kann mich noch dran erinnern wie ich(und viele andere auch) ständig die Configs löschen mussten damits überhaupt wieder startet.
-
Die offiziellen Java Plugins laufen alle nahezu fehlerfrei.
-
Was meinst du mit offiziellen Java Plugins(cdt ist ja nun nicht gerade ein Nischenplugin)? Klar, mit einer Standard-Installation ohne irgendwelche Änderungen kann man Glück haben. Aber sobald ich Plugins verwendet habe, gabs schnell Ärger.
-
Ein Thread zum Thema: Warum man besser bei Wikipedia nachschaut, was Deadlocks sind, als hier zu fragen.
-
Seid ihr eigentlich alle total schwul? Was haben Dreadlocks mit Betriebssystemen zu tun????