Fragen zur Ausnahmebehandlung

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 zur Ausnahmebehandlung
Hallo,

zur Miniklausur SS 2014 (https://www4.cs.fau.de/Lehre/SS14/V_SP2/Pruefung/2014s-MKlausur-www.pdf), letzte Aufgabe, habe ich ein paar Fragen. Bei der b) wird nach den Varianten der Ausnahmebehandlung gefragt. Sind damit das Terminierungsmodell und das Wiederaufnahmemodell gemeint, oder, dass je nachdem, ob es sich um einen Maschinenbefehl oder einen System Call handelt, zuerst die CPU bzw. das Betriebssystem den Fehler als erstes bemerkt?

Zu der c): Es ist klar, dass der NULL-Pointer zum Beschreiben invalid ist, weshalb es dort zu einem Fehler kommt. Nach den Folien, Kapitel 3.4 (genauer https://www4.cs.fau.de/Lehre/SS19/V_SP1/Vorlesung/Folien/SP1-051-A4.pdf, ab Seite 26) ist es so, dass die CPU den Fehler erkennt und anschließend ein Ausnahme erhebt. Wie ist das genau zu verstehen? Mir ist auch nicht klar, was dort mit “die Operation wird abgefangen (trap) bzw. unterbrochen (interrupt)” gemeint ist, insbesondere, wieso hierbei sowohl Traps wie Interrupts möglich sind. Logischer wäre für mich allerdings, dass der eigentliche Fehler durch die MMU ausgelöst wird, welche einen Trap auslöst (dadurch wird dieser Fehler an das Betriebsystem weitergeleitet). Ist das korrekt?
Außerdem: Bin ich bei der c) a3) richtig in meiner Annahme, dass der Prozess in den Zustand blockiert gesetzt wird, bis die Fehlerbehandlung abgeschlossen ist, oder wird die Fehlerbehandlung innerhalb dieses Prozesses ausgeführt (d. h. es wird kein neuer Prozess erzeugt)?

LG Gabriel


b) ja hier sind Beendigungs und Wiederaufnahmemodell gemeint.

Die von dir verlinkten Vorlesungsfolien behandeln das Thema Ausnahmen allgemein. Ein Trap ist immer auf die gerade ausgeführte Operation zurückzuführen, ein Interrupt hingegen kommt immer von außen, daher vermutlich die unterschiedliche Formulierung von wosch.
In Aufgabe c) ist der spezielle Fall der Dereferenzierung eines Nullpointers gefragt, hier wird natürlich von der MMU ein Trap ausgelöst.

c a3) das Betriebssystem läuft nicht in einem eigenen Prozess. Der laufende Prozess wird einfach unterbrochen und die Ausnahmebehandlung wird ausgeführt. Im Falle der Aufgabe ist die Behandlung den Prozess zu beenden.


Noch eine andere Frage: Wenn eine globale (oder auch static) Variable angelegt wird, ala

char *m = "irgendeintext";

dann liegt m ja im Datensegment. Wohin zeigt dieser Pointer? Auch ins Datensegment (hier haben sie mal (SS 14, Aufgabe a3) c) behauptet, es würde ins Textsegment zeigen, das macht für mich aber wenig Sinn, da ja der [m]const[/m]-Bezeichner fehlt)?


der String liegt im Textsegment. Wenn du versuchst ihn zu modifizieren, beispielsweise mit m[1] = ‘a’; führt das zu einem Segmentation fault. m liegt aber wie du schon richtig gesagt hast im Datensegment, die Anweisung m = “abc”; ist ja ok.

1 „Gefällt mir“

Genau, hier reflektiert der Typ leider nicht die semantischen Constraints. D.h. obwohl m[1] = 'a' kompiliert, wirft das zur Laufzeit einen Fehler (vom der MMU aus).
Deswegen sollte man bei gutem Code auch den const-Bezeichner reintun: const char *m = "...". Um dann trotzdem noch m = "abc" zu verhindern, brauchst du ein Doppelconst: const char * const m = "..." (lies: m is a const pointer to a char const mit der Spirale Rule).


Noch ne organisatorische Sache bzgl. der Miniklausur: Ist es erlaubt, wenn der Spickzettel bisschen kleiner als ein Din A5-Blatt ist oder man diesen selbst bastelt, indem man ein Din A4-Blatt zerteilt?


Ein in der Mitte geteiltes DIN A4 Blatt ist - by design - genau DIN A5 groß und sollte daher ok sein.


Man darf einen Spickzettel mitnehmen?


Ja, ein (doppelseitig) handbeschriebens Din A5-Blatt. Ich frage deshalb, weil mein Block in der Höhe etwas kleiner als Din A5 groß ist, ob das so ok ist, oder ob ich ein Din A4-Blatt zerlegen muss.


Solange der Zettel nah genug an A5 dran ist, ist das bei der Miniklausur kein Problem.

Bei der echten Klausur sollte es exakt ein A4-Zettel sein.