Fragen zu BS/VS

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Fragen zu BS/VS
Hi, mir sind ein paar Dinge aufgefallen, die mir, um ganz ehrlich zu sein, etwas unklar sind:

  1. Warum ist es sinnvoll, bei der Unterbechungsbehandlung der behandelnden Routine auch den SP zu übergeben? (S.26 Unterbrechungsbehandlung)

  2. Epilogbehandlung: Der Epilog behandelt z.B. den Timerinterrupt. Er ruft den Scheduler auf der entscheidet die Koroutine bzw. den Thread zu wechseln. Wenn noch andere Epiloge anstehen, dann kann es doch sein, dass diese Epiloge erst mal nicht mehr abgearbeitet werden, weil es ja sein könnte, das der gerade aufgerufene Prozess die Kontrolle freiwillig abgegeben hat und somit nicht wieder bei der Epilogabarbeitung einsteigt … Wie kann ich das vermeiden?

  3. Wieso adressiere ich bei Aktiven Nachrichten eine entfernte Prozedur. Überhaupt ist mir das nicht so ganz einsichtlich mit den aktiven Nachrichten. Im Prinzip passiert doch folgendes. Ich schick die Nachricht und den Handler für die Nachricht ab, auf Empfängerseite gibts ne asynchrone Programmunterbrechung die den mitgeschickten Handler aktiviert der dann die Daten seiner programmierung entsprechend weiterleitet, also sie z.B. an eine ganz Bestimmte Stelle im Speicher kopiert. Fertig … oder hab ich da was falsch verstanden. Was hat denn jetzt die adressierte Prozedur damit zu tun. Sorgt die dafür das der Interrupt erst ausgelößt wird ???


Eine Unterbrechungsbehandlung kann ja auch z.B. von einem Trap ausgelöst werden. Du kannst z.B. im Debugger ein breakpoint-Trap machen, dessen Unterbrechungsbehandlung natürlich den Stapelzeiger mitbekommen muss, damit er was anzeigen kann.
Anderes Beispiel wäre z.B. ein Page-Fault, was auch eine Unterbrechungsbehandlung auslöst. Mit Abschluss der Unterbrechungsbehandlung wird die letzte Anweisung des Prozesses, das den Page-Fault verursacht hat, erneut ausgeführt - tja und um an diese Anweisung zu kommen braucht die Unterbrechungsbehandlung den Stackpointer.

Hmm, also wenn ein Interrupt eintritt, und der Interrupt seine kritische Operation (Aufruf des Schedulers) im Epilog ausführt, dann werden dabei auch automatisch alle anstehenden Epiloge abgearbeitet. (D.h. Epiloge werden abgearbeitet wenn ein kritischer Bereich verlassen wird, oder wenn ein Interrupt Auftritt und er merkt dass der kritische Abschnitt frei ist und seinen und damit dann auch alle anstehenden Epiloge abarbeiten kann).
Ich seh kein Problem mit der freiwilligen Abgabe. Wenn ein Interrupt Auftritt, dessen Prolog ein Epilog auslöst, und der kritische Abschnitt frei ist, dann werden alle Epiloge abgearbeitet. Wenn gerade ein kritischer Abschnitt betreten wurde, dann werden die Epiloge beim verlassen eben dieses Abschnittes abgearbeitet. Eine freiwillige Abgabe hat darauf meiner Meinung nach keine Auswirkungen.
… viel spannender sind da verschachtelte Interrupts in Bezug auf die Epilogabarbeitung (siehe auch Reaktivierungszeitpunkt der Unterbrechungsebene 0) …

hmm, ich denk der Interrupt wird vom E/A-Gerät ausgelöst, das Nachrichten empfängt. In dessen Behandlungsroutine wird irgendwo die in der Nachricht enthaltene Adresse der Prozedur angesprungen. Ob die Prozedur mitgeliefert wird oder ob auf allen Rechnern das gleiche Programm läuft und dadurch die Prozeduradressen auf allen Rechnern gleich sind und dadurch die Prozeduren selber nicht mit verschickt werden müssen, ist aus der Folie nicht ersichtlich. Eines von den beiden Möglichkeiten wird’s wohl sein :slight_smile:


Ok, danke für die Infos, auch wenn ich sie einen Tag zu spät lese … hab schon Prüfung gehabt und auch wenn ich dachte das ichs voll versemmelt hatte ist eine sehr gute Note dabei rausgekommen. Hauptsache ne 1 vor dem Komma :-p

Fragen zu BS
Ich hätte auch noch ein paar Fragen und zwar erst mal zu dieser ganzen load-linked/store-conditional-Semantik: also so wie ich das verstanden habe, ist der Nachteil von cas/cmpxchg, dass sie nur prüfen, ob der Wert passt, aber nicht schaun, ob ein anderer Prozess den Wert geschrieben hat. Aber was ist so falsch daran, wenn der Wert stimmt, dann passt doch alles? Wann stört es mich denn, wenn die Speicherzelle von einem anderen Wert beschrieben wurde, aber der Wert ok ist? Ich kann der Erklärung von der Folie nicht ganz folgen.

Das zweite betrifft die Schleusensynchronisation: Das Öffnen/Schließen des Schleusentors ist nur unkritisch um Uniprozessorfall: ok, beim CISC hat man den incl-Befehl, und bei RISC ll/sc, deswegen ist das unkritisch, oder? Aber warum nicht auch im Multiprozessorfall, es gibts doch cmpxchg/cas zur Multiprozessorsynchronisation, wo der Bus gesperrt wird?


ich hatte heute prüfung deshalb gebe ich mal meinen senf dazu:

cas:
der wert kann zwischendurch anders gewesen sein und das reicht schon aus um probleme zu machen.
kommt natürlich drauf an wie man das verwendet…

dass das öffnen und schliessen unkritisch ist halte ich für ein gerücht, zumindest in der prüfung grad hat das anders geklungen.
man braucht nur im uniprozessorsystem keine befehle wie cas/ll/cs weil man immernoch interrupts sperren kann im notfall.
(bei nichttransparenter queue)

bei multiprozessoren hat man nicht nur das problem mit den interrupts sondern auch noch die anderen prozessoren die asyncron laufen.
dazu braucht man unbedingt atomare read/write funktionen, denk ich mal.
und man kann/will die interrupts nicht für alle prozessoren sperren.

in der prüfung wird das eh nicht so genau verlangt…


[color=gray][quote=Robert]
Jo, find ich auch!
[/quote]

?
gelöscht…[/color]


?
gelöscht…[/color]
[/quote]

Ach ja, da hat der Cody von meinem Computer aus gepostet und weil er schon so betrunken war hat er wohl vergessen mich erst auszuloggen und sich dann selber einzuloggen. Kann ja mal passieren :smiley: