Klausur Juli 2012

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.

Klausur Juli 2012
Nachdem in alten Threads die Lösungen zu dieser Klausur nicht diskutiert wurden, fange ich hier nochmal einen neuen an:

Unsere Lösungen für Single-/Multiple-Choice-Aufgaben:

1.1)
a) 2
b) 1
c) 4
d) 2 (urspruenglich 3, denn bei 2. stört uns das "nicht-verdrängende Scheduling " und beim Defragmentieren wird massiv geswappt)
e) 3
f) 2
g) 4
h) 3
i) 1
j) 4

1.2)
a)richtig: 2,3,5,7
b)richtig: 4,5,6,8 (7. nicht, da MMU nicht zwingend erforderlich ist)


  1. ist falsch, es ist 2.

Defragmentieren führt (hoffentlich) nicht zum Seitenflattern, da werden nur die Daten auf der Platte umsortiert, deswegen wird da noch lange nicht geswapped. Geswapped wird, wenn der genutzte Teil des virtuellen Adressraums zu groß für deinen logischen/physikalischen Adressraum wird und du deswegen Daten auf die Festplatte auslagern musst.
Nicht-verdrängend oder verdrängend ist hier nicht relevant, beides kann zu Seitenflattern führen. Es kommt darauf an, dass das Working-Set zu groß ist, dass es nicht mehr in den RAM passt.

Was hat euch an dem nicht-verdrängend gestört?

  1. ist falsch, es ist 1.

CAS ist aktives Warten. Du wartest in deiner Schleife so lange, bis sich nicht gerade auch jemand im kritischen Abschnitt befindet.
CAS ermöglicht dir, dass du ohne extra Sperren (die Hardware muss das natürlich noch irgendwie tun, z.B. über Cache-Kohärenz-Protokolle) eine Variable atomar verändern kannst.

7 ist auch noch richtig. [m]kill[/m] terminiert stoppt den Prozess (beendet), auch wenn er z.B. gerade auf ein Mutex wartet (blockiert).

Kurze Ergänzungsfrage zur 7, was ist stattdessen aber zwingend erforderlich? Oder anders, warum ist eine MMU nicht zwingend erforderlich?

PS: Bitte korrigiere deine Antworten, damit es zukünftige Leser einfacher haben.

Edit: Hab mich verlesen, sorry.


Naja, fuer die Begrenzung koennte man rein theoretisch auch jedes mal trappen und des betriebsystem validitaet ueberpruefen lassen, oder nicht? Das soll jetzt nich heissen, dass des irgendwie sinnvoll sein, aber es waere moeglich.

An dem nicht-verdraengend ham wir halt gemeint, dass wenn man einen einzigen Prozess hat der den gesamten Arbeitsspeicher belegt, dass des sehr schwierig zu kriegen ist.

Und die Denkweise hinter dem Defragmentieren war, dass man ja jedes mal sections der platte einlesen muss, schaun, ob fragmentierung da ist, und verschoben zurueckschreiben.


Und wer sorgt dafür, dass die CPU einen Trap zugestellt bekommt? Sobald der Prozess läuft, hat das BS ja keine Kontrolle mehr über das, was gerade ausgeführt wird und auf welche Speicherbereiche zugegriffen wird. Wie willst du da verhindern, dass da jemand schreibt wo er nicht darf?

Das verstehe ich nicht.

Beispiel: Prozess 1 braucht 90% des RAMs, macht was, gibt freiwillig die CPU ab (nicht-verdrängend). Prozess 2 kommt dran, braucht auch 90% RAM und das BS muss erstmal Platz machen und dabei alles auf die Festplatte auslagern, dann gibt Prozess 2 die CPU ab und 1 kommt dran, BS muss wieder alles von der Platte laden … → Seitenflattern.

Und was hat das mit Seitenflattern zu tun? Natürlich müssen Daten von der Festplatte gelesen werden, aber das hat nichts mit Swappen oder Seitenflattern zu tun (siehe mein letzter Post).

1 Like

Ich verweise hierhin. Der Threadersteller hat sogar fast den gleichen Einleitsatz geschrieben :smiley:

Ich seh auch gerade, dass der Thread namens „Klausur Februar/Juli 2012“ nur etwa 7 Threads unter diesem liegt… Shame on you…

Korrektur MC
Und ich verweise nun hierhin. =)

1 Like