21.07.2013 Aufrufe

Klausur zum Präsenzmodul Systemnahe Programmierung (Info 3)

Klausur zum Präsenzmodul Systemnahe Programmierung (Info 3)

Klausur zum Präsenzmodul Systemnahe Programmierung (Info 3)

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Technische Universität München<br />

Institut für <strong>Info</strong>rmatik<br />

Prof. Dr. J. Schlichter<br />

G. Aiglstorfer, Dr. M. Schneider,<br />

A. Staller<br />

Aufgabe 1 (8 Punkte)<br />

<strong>Klausur</strong> <strong>zum</strong> <strong>Präsenzmodul</strong><br />

<strong>Systemnahe</strong> <strong>Programmierung</strong> (<strong>Info</strong> 3)<br />

(Lösungsvorschlag)<br />

(a) Es ergibt sich folgender Erreichbarkeitsgraph:<br />

t3<br />

t3<br />

10100<br />

t1<br />

01100<br />

t2<br />

10010<br />

01010<br />

t4<br />

t1 t1<br />

t4<br />

t5<br />

10001<br />

01001<br />

SIGNAL-Kurs 2002/04<br />

Lösung zur <strong>Klausur</strong><br />

16.12.2003<br />

Die Menge der erreichbaren Markierungen entspricht den Knoten im Erreichbarkeitsgraphen.<br />

(b) Im Zustand 01001, d.h. (nur) die Stellen s2 und s5 sind markiert, kann keine Transition<br />

mehr schalten.<br />

Eine entsprechende Folge von Transitionen lautet:<br />

t1 → t2 → t1 → t4<br />

Alternative Transitionsfolge:<br />

t1 → t2 → t4 → t1<br />

(c) Ja, ein Aushungern einer Transition ist möglich.<br />

Die Transitionen t4 und t5 werden bei folgendem periodischen Ablauf ausgehungert:<br />

t1 → t2 → t3 → t1 → t2 → t3 → t1 . . .<br />

Ein andere Möglichkeit ist: Aushungern von t3 bei:<br />

t1 → t2 → t4 → t5 → t2 . . .


Aufgabe 2 (8 Punkte)<br />

Man braucht folgende Semaphore:<br />

• boolscher Semaphor tor <strong>zum</strong> wechselseitigen Ausschluss des Tores mit Startwert 1 (zu<br />

Beginn ist das Tor frei)<br />

• boolscher Semaphor ausgabe <strong>zum</strong> wechselseitigen Ausschluss der Ausgabe mit Startwert<br />

1 (zu Beginn ist die Ausgabe frei)<br />

• Semaphor frei <strong>zum</strong> Zählen der freien Plätze mit Startwert 8 (zu Beginn sind alle Plätze<br />

frei)<br />

• Semaphor belegt <strong>zum</strong> Zählen der belegten Plätze mit Startwert 0 (zu Beginn ist kein<br />

Platz belegt)<br />

Die P- und V-Operationen müssen folgendermaßen in die Prozesse eingebaut werden:<br />

Lieferant Auslieferer_1 Auslieferer_2<br />

{ { {<br />

while (TRUE) while (TRUE) while (TRUE)<br />

{ { {<br />

tor.P; tor.P; tor.P;<br />

; ; ;<br />

tor.V; tor.V; tor.V;<br />

ausgabe.P; ausgabe.P;<br />

; ; ;<br />

frei.P;<br />

frei.P; belegt.P;<br />

frei.P; belegt.P; belegt.P;<br />

; ; ;<br />

belegt.V; frei.V; frei.V;<br />

belegt.V; frei.V;<br />

belegt.V;<br />

; ; ;<br />

ausgabe.V; ausgabe.V;<br />

tor.P; tor.P; tor.P;<br />

; ; ;<br />

tor.V; tor.V; tor.V;<br />

} } }<br />

} } }<br />

Bemerkung: Der ” Wareneingang“ muss nicht synchronisiert werden, da nur ein Lieferant vorhanden<br />

ist.


Aufgabe 3 (9 Punkte)<br />

funct: PUSHR -- Prolog: Register sichern<br />

MOVEA 64+!SP, R12 -- Adresse des ersten Parameters<br />

MOVE W SP, R13 -- SP in R13 speichern<br />

MOVE W !R12, R0 -- Parameter a nach R0<br />

MOVE W 4+!R12, R1 -- Parameter b nach R1<br />

CMP W R0, I 0 -- Test (a


Aufgabe 4 (7 Punkte)<br />

(a) Bei der direkten Abbildung von Programm- auf Maschinenadressen treten Probleme bzgl.<br />

folgender drei Punkte auf (siehe Skript S. 165-167):<br />

• Verschiebbarkeit<br />

Die Programme werden beim Laden fixiert und müssen bis zu ihrem Ende an derselben<br />

Stelle bleiben, da der Benutzer mit Adressen rechnen kann und deshalb positionsabhängige<br />

Adressen in seinen lokalen Variablen hat. Bei der Beendigung eines<br />

Programms passen neue Programme u.U. nicht in die zurückgebliebene Lücke<br />

(Problem der externen Fragmentierung). Verdrängte Programme müssen wieder an<br />

dieselbe Stelle geladen werden, was in der Regel nicht mehr möglich ist, da andere<br />

Programme im benötigten Speicherbereich stehen können.<br />

• Programmgröße<br />

Programme können wesentlich größer als der verfügbare Arbeitsspeicher werden. Der<br />

Benutzer muss sein Programm selbst in Segmente zerlegen und diese bei Bedarf nachladen<br />

(Overlay-Technik). Dies ist sehr aufwändig, schwierig und damit fehleranfällig.<br />

• Speicherausnutzung<br />

Es ist kein Mechanismus vorgesehen, um die Lokalitätseigenschaft von Programmen<br />

auszunutzen, d.h. nur die momentan bzw. in naher Zukunft notwendigen Ausschnitte<br />

eines Programms in den Arbeitsspeicher zu laden. Damit könnten mehr Programme<br />

im Arbeitsspeicher untergebracht und parallel verarbeitet werden.<br />

Durch die Seitenadressierung werden diese Probleme behoben: Die Zuordnung einer Seite<br />

zu einer Kachel ist nicht fix, der Programmadressraum kann wesentlich größer als der<br />

Maschinenadressraum sein und momentan nicht benötigte Seiten können aus dem Arbeitsspeicher<br />

verdrängt werden.<br />

(b) Angenommen, es gibt die Seiten 0, 1, 2 und 3. Der Arbeitsspeicher bestehe aus den drei<br />

Kacheln k1, k2 und k3. Auf die Seiten sei in der Reihenfolge 0 1 2 0 zugegriffen worden<br />

und die Belegung des Arbeitsspeichers sei k1 : 0, k2 : 1, k3 : 2<br />

Es soll nun auf die Seite 3 zugegriffen werden, d.h. eine Seite muss aus dem Arbeitsspeicher<br />

verdrängt werden.<br />

Drei Beispiele für Seitenverdrängungsstrategien (siehe Skript S. 178):<br />

• FIFO (first-in first-out): Verdrängen der ältesten Seite<br />

Die älteste Seite ist 0. Damit ergibt sich die Arbeitsspeicherbelegung<br />

k1 : 3, k2 : 1, k3 : 2<br />

• LIFO (last-in first-out): Verdrängen der jüngsten Seite<br />

Die jüngste Seite ist 2. Damit ergibt sich die Arbeitsspeicherbelegung<br />

k1 : 0, k2 : 1, k3 : 3<br />

• LRU (least recently used): Verdrängen der am längsten nicht genutzten Seite<br />

Die am längsten nicht genutzte Seite ist 1. Damit ergibt sich die Arbeitsspeicherbelegung<br />

k1 : 0, k2 : 3, k3 : 2

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!