MUSTERLÖSUNG

Werbung
Klausur „Softwaresysteme I“
März 2007
MUSTERLÖSUNG
Friedrich-Alexander-Universität Erlangen-Nürnberg
Schriftliche Prüfung zur Lehrveranstaltung
„Softwaresysteme I“
erreichbare
Punkte
Aufgabe 1
Aufgabe 2
erhaltene
Punkte
30
A
D
T
K
a
b
c
d
a
b
U
M
60
Aufgabe 3
20
Aufgabe 4
10
Summe
120
Note
(Name)
(Vorname)
(Matrikel-Nr.)
(Studiengang)
(Semester)
Durch meine Unterschrift bestätige ich
- den Empfang der vollständigen Klausurunterlagen (18 Seiten inkl. Deckblatt),
- den Empfang der Manualseiten (4 Blätter mit 12 Manualseiten: connect, opendir/readdir, fopen/fdopen, gets, ip, malloc, pthread_cond, pthread_create/pthread_exit,
pthread_detach, pthread_mutex, socket, unlink)
- die Kenntnisnahme der Hinweise auf Seite 2.
Ich bin damit einverstanden, dass mein Prüfungsergebnis
unter Angabe der Matrikel-Nr. veröffentlicht wird.
ja
Erlangen, 15.03.2007
(Unterschrift)
- 1 von 18 -
nein
Klausur „Softwaresysteme I“
März 2007
Hinweise
Die folgenden Informationen bitte aufmerksam lesen und die Erklärung am Ende dieser Hinweise unterschreiben.
• Die Bearbeitungszeit beträgt 120 Minuten.
• Es sind keine eigenen Hilfsmittel zugelassen mit Ausnahme eines einzelnen, mit
blauem Stift handbeschriebenen, karierten Notizblatts.
• Die Lösung einer Aufgabe soll auf das Aufgabenblatt in den dafür vorgesehenen
Raum geschrieben werden. Beachten Sie bitte, dass der freigelassene Platz großzügig bemessen ist und nicht unbedingt der erwarteten Antwortlänge entspricht.
Sollte der Platz nicht ausreichen, können Sie die Rückseiten der Aufgabenblätter
mitverwenden. Kennzeichnen Sie dabei die Zugehörigkeit Ihrer Lösung zu einer
Aufgabe. Bei Bedarf können zusätzliche Lösungsblätter (weiß) ausgeteilt werden. Vermerken Sie vor deren Verwendung unbedingt Ihren Namen und Ihre
Matrikelnummer darauf!
• Schmierpapier und Manualseiten dürfen nicht abgegeben werden. Bei Bedarf ist
von der Aufsicht weiteres Schmierpapier (farbig) erhältlich.
• Das mitgebrachte handgeschriebene Notizblatt muss mit der Klausur am Ende
abgegeben werden.
• Fragen zu den Prüfungsaufgaben können grundsätzlich nicht beantwortet werden.
• Tragen Sie Ihren Namen und Vornamen, Ihre Matrikelnummer, Studiengang und
Fachsemesterzahl auf dem Deckblatt der Klausur ein.
• Bitte legen Sie Ihren Studenten- und einen Lichtbildausweis zur Kontrolle bereit.
• Sie dürfen den Raum nicht verlassen bevor Ihre Personalien überprüft wurden
und Sie die Klausurunterlagen der Aufsicht zurückgegeben haben.
• In den letzten 15 Minuten der Bearbeitungszeit können Sie den Raum nicht mehr
verlassen. Bleiben Sie an Ihrem Platz sitzen, bis schließlich alle Klausurunterlagen eingesammelt sind und die Aufsicht das Zeichen zum Gehen gibt.
Die Klausurergebnisse werden in ca. einer Wochen am schwarzen Brett vor dem Sekretariat des Lehrstuhls für Verteilte Systeme und Betriebssysteme (vor Raum 0.047
RRZE Erdgeschoss) und im WWW unter der Seite der Vorlesung im SS 2006, Unterpunkt "Ergebnisse" veröffentlicht (Benutzername: i4sos, Passwort: s0s2k4).
- 2 von 18 -
Klausur „Softwaresysteme I“
März 2007
Aufgabe 1: (30 Punkte)
Bei den Multiple-Choice-Fragen ist jeweils nur eine richtige Antwort eindeutig anzukreuzen. Auf die richtige Antwort gibt es die angegebene Punktzahl.
Wollen Sie eine Multiple-Choice-Antwort korrigieren, kreisen sie bitte die falsche
Antwort ein und kreuzen die richtige an.
Lesen Sie die Frage genau, bevor Sie antworten.
a) Was versteht man unter einem Translation Lookaside Buffer (TLB)?
2 Punkte
❏ Einen speziellen Cache der MMU, der den Inhalt der zuletzt angesprochenen Speicherzellen vorhält.
❏ X Einen speziellen Cache der MMU, der Informationen aus den zuletzt genutzten Seitendeskriptoren vorhält.
❏ Einen Pufferspeicher des Compilers um den Übersetzungsvorgang zu beschleunigen (es werden die Codes der zuletzt übersetzten Statements vorgehalten).
❏ Einen speziellen Cache der CPU, der die zuletzt ausgeführten Maschinenbefehle zwischenspeichert (beschleunigt vor allem den Ablauf von Schleifen).
b) Welche Aussage zu Speicherzuteilungsverfahren ist richtig?
2 Punkte
❏ die worst-fit-Strategie ist lediglich theoretisch interessant, da es in
der Praxis nie sinnvoll ist, den am schlechtesten passenden Speicherplatz zuzuweisen.
❏ best-fit ist in jedem Fall das beste Verfahren
❏ X bei buddy-Verfahren gibt es keinen externen Verschnitt
❏ buddy-Verfahren sind nur bei sehr leistungsfähigen Rechnern und großem Speicher einsetzbar, weil sie aufwändig in der Berechnung sind und viel Verschnitt
verursachen.
c) Es gibt verschiedene Ursachen, wie Nebenläufigkeit in einem System
entstehen kann (gewollt oder auch ungewollt). Was gehört nicht dazu?
❏ durch Interrupts
❏ X durch die MMU
❏ durch preemptives Scheduling
❏ durch Threads auf einem Monoprozessorsystem
- 3 von 18 -
2 Punkte
Klausur „Softwaresysteme I“
März 2007
d) Im regulären Ablauf eines Anwendungsprogramms und einer Signalbehandlungsfunktion (bzw. im Ablauf eines Betriebssystems und einer
Unterbrechungsbehandlungsfunktion) wird auf gemeinsame Daten
modifizierend zugegriffen. Welche Aussage ist falsch?
3 Punkte
❏ Falscher Einsatz von Schlossvariablen (lock/unlock-Operationen) kann zu Verklemmungen führen
❏ Der Aufruf von P-Operationen im Anwendungsprogramm und dazu korrespondierenden V-Operationen in der Signalbehandlung führt nicht zu Verklemmungen
❏ X Alle Verfahren der mehrseitigen Synchronisation können eingesetzt werden
❏ Alle Verfahren nicht-blockierender Synchronisation sind einsetzbar
e) Gegeben sei folgendes Szenario: zwei Threads werden auf einem
Monoprozessorsystem mit der Strategie "First Come First Served" verwaltet. In jedem Faden wird die Anweisung "i++;" auf die gemeinsame,
globale Variable i ausgeführt.
Welche der folgenden Aussagen ist richtig:
2 Punkte
❏ Während der Inkrementoperation müssen Interrupts vorübergehend unterbunden werden.
❏ Die Inkrementoperation muss mit einer CAS-Anweisung nicht-blockierend
synchronisiert werden.
❏ Die Operation i++ ist auf einem Monoprozessorsystem immer atomar.
❏ X In einem Monoprozessorsystem ohne Verdrängung ist keinerlei Synchronisation erforderlich.
f) Welche der folgenden Aussagen zu statischem bzw. dynamischem Binden ist falsch?
2 Punkte
❏ beim statischen Binden werden alle Adressen zum Bindezeitpunkt
aufgelöst
❏ statisch gebundene Programme können zum Ladezeitpunkt an beliebige Speicheradressen platziert werden
❏ bei dynamischem Binden können auch zum Übersetzungszeitpunkt alle bekannten Adressbezüge bereits vollständig aufgelöst werden
❏ X bei dynamischem Binden werden alle Adressen bis zum Zeitpunkt des Programmstarts aufgelöst
- 4 von 18 -
Klausur „Softwaresysteme I“
März 2007
g) Was passiert, wenn Sie in einem C-Programm über einen ungültigen
Zeiger versuchen auf Speicher zuzugreifen
2 Punkte
❏ Der Compiler erkennt die problematische Code-Stelle und generiert
Code, der zur Laufzeit bei dem Zugriff einen entsprechenden Fehler
auslöst.
❏ Der Speicher schickt an die CPU einen Interrupt. Hierdurch wird das Betriebssystem angesprungen, das den gerade laufenden Prozess mit einem "Segmentation fault"-Signal unterbricht.
❏ X Beim Zugriff über den Zeiger muss die MMU die erforderliche Adressumsetzung vornehmen, erkennt die ungültige Adresse und löst einen Trap aus.
❏ Das Betriebssystem erkennt die ungültige Adresse bei der Weitergabe des
Befehls an die CPU (partielle Interpretation) und leitet eine Ausnahmebehandlung ein.
h) Man unterscheidet zwischen privilegierten und nicht-privilegierten
Maschinenbefehlen. Welche Aussage ist richtig?
2 Punkte
❏ Privilegierte Maschinenbefehle dürfen in Anwendungsprogrammen
grundsätzlich nicht verwendet werden.
❏ Die Benutzung eines privilegierten Maschinenbefehls in einem Anwendungsprogramm führt zu einer asynchronen Programmunterbrechung.
❏ X Privilegierte Maschinenbefehle können durch Betriebssystemprogramme
(partielle Interpretation) implementiert werden.
❏ Privilegierte Befehle sind die einzige Möglichkeit, auf Geräteregister zuzugreifen.
i) In einem Seitendeskriptor werden verschiedene Informationen über eine
Seite eines virtuellen Adressraums gehalten. Was gehört sicher nicht
dazu?
❏ Die Adresse der Seite im physikalischen Hauptspeicher
❏ X Die Position der Seite im logischen Adressraum
❏ Zugriffsrechte (z. B. lesen, schreiben, ausführen)
❏ Ein Zähler, der ein Maß für das Alter der Seite enthält
- 5 von 18 -
2 Punkte
Klausur „Softwaresysteme I“
März 2007
j) Beim Blockieren in einem Monitor muss der Monitor freigegeben werden. Warum?
2 Punkte
❏ weil sonst die Monitordaten inkonsistent sind.
❏ X weil ein anderer Thread die Blockierungsbedingung nur aufheben kann, wenn
er den Monitor betreten darf.
❏ weil kritische Abschnitte immer nur kurz belegt sein dürfen.
❏ weil der Thread sonst aktiv warten würde.
k) Ein Betriebssystem setzt logische Adressräume auf der Basis von Segmentierung ein. Welche Aussage ist falsch?
2 Punkte
❏ Die Segmentierung schränkt den logischen Adressraum derart ein,
dass nur auf gültige Speicheradressen erfolgreich zugegriffen werden kann.
❏ Über gemeinsame Segmente kann innerhalb von zwei verschiedenen logischen
Adressräumen auf die selben Speicherzellen zugegriffen werden.
❏ X Mit der Segmentierung kann einem Prozess mehr Speicher zugeordnet werden als physikalisch vorhanden ist, da ein Segment teilweise ausgelagert werden
kann.
❏ Segmente können verschiedene Länge haben. Eine Längenbegrenzung wird
üblicherweise bei der Speicherabbildung geprüft.
l) Welches der folgenden Verfahren ist nicht zur Verklemmungsvorbeugung in dem am Beispiel der "speisenden Philosophen" beschriebenen
Verklemmungsszenario geeignet?
2 Punkte
❏ Einer der Philosophen nimmt immer nur beide Stäbchen (oder
Gabeln) gleichzeitig.
❏ X Jeder Philosoph nimmt grundsätzlich immer zuerst das rechte und dann das
linke Stäbchen. Dadurch wird eine Ordnung im System hergestellt, durch die
keine Verklemmungen auftreten können.
❏ Alle Philosophen nehmen immer nur beide Stäbchen gleichzeitig.
❏ Ein Philosoph kann von seinem Nachbarn die Rückgabe eines Stäbchens fordern.
- 6 von 18 -
Klausur „Softwaresysteme I“
März 2007
m) Welche Aussage zum Thema "Aktives Warten" ist richtig?
2 Punkte
❏ Aktives Warten vergeudet gegenüber passivem Warten immer CPUZeit
❏ Auf Mehrprozessorsystemen ist aktives Warten unproblematisch und deshalb
dem passiven Warten immer vorzuziehen
❏ X Aktives Warten darf bei nicht-verdrängenden Scheduling-Strategien auf
einem Monoprozessorsystem nicht verwendet werden
❏ Bei verdrängenden Scheduling-Strategien verzögert aktives Warten nur den
betroffenen Prozess, behindert aber nicht andere
n) Für lokale Variablen, Aufrufparameter, etc. einer Funktion wird bei vielen Prozessoren ein sog. Aktivierungsblock (activation record oder
stack frame) auf dem Stack angelegt. Welche Aussage ist richtig?
3 Punkte
❏ X Über Zeiger kann man alle Daten des Aktivierungsblocks der aufrufenden Funktion verändern.
❏ Nach dem Rücksprung aus einer Funktion sind Zeiger auf die Speicherzellen
ihres Aktivierungsblocks nicht mehr gültig. Ein Zugriff über solch einen Zeiger
führt dann zu einem Segmentation fault.
❏ Bei rekursiven Funktionsaufrufen kann der Aktivierungsblock in jedem Fall
wiederverwendet werden, weil die gleiche Funktion aufgerufen wird.
❏ Der Compiler legt zur Übersetzungszeit fest, an welcher Position im Aktivierungsblock der main-Funktion die globalen Variablen angelegt werden.
- 7 von 18 -
Klausur „Softwaresysteme I“
März 2007
Aufgabe 2: (60 Punkte)
Sie dürfen diese Seite zur besseren Übersicht bei der Programmierung heraustrennen!
a) Schreiben Sie ein Programm mailq (Mail-Queue-Bearbeiter), das Mail aus einem
Warteschlangendirectory an entfernte Rechner zustellt.
Wird mailq ohne Parameter aufgerufen, werden maximal 5 Aufträge gleichzeitig
bearbeitet. Bei Aufruf mailq n werden bis zu n Aufträge durch Threads gleichzeitig bearbeitet.
Das Programm soll folgendermaßen arbeiten:
– mailq sucht in dem Directory /var/spool/mailq nach Dateien, deren
Name mit dem Zeichen m beginnt und bearbeitet den Auftrag durch Aufruf
der Funktion void pjob(char *mfile). Andere Dateien werden ignoriert.
– Funktion pjob: Falls die maximale Zahl gleichzeitig zu bearbeitender Aufträge bereits erreicht ist, wird gewartet, bis ein laufender Auftrag fertig wird.
Sonst wird für den Auftrag ein Thread (Arbeits-Thread) erzeugt. Die ThreadStartfunktion tstart führt zur eigentlichen Auftragsbearbeitung die Funktion
void send_mail(char *mfile) aus.
– Zur Koordinierung der maximalen Threadzahl müssen Sie die Anzahl der erzeugten Threads in einer normalen Variablen mitzählen. Das Inkrementieren
erfolgt bei der Threaderzeugung, das Dekrementieren führt der Thread vor
dem Terminieren aus. Beachten Sie die Nebenläufigkeit dieser Operationen!
Wenn die maximale Threadzahl erreicht ist, wartet der Haupt-Thread mit
pthread_cond_wait (und nicht mit pthread_join!) auf das Terminieren
eines Arbeits-Threads.
– Funktion send_mail: In einer mfile-Datei steht in der ersten Zeile der
Empfänger in der Form user@hostname und ab der zweiten Zeile bis zum
Dateiende der Inhalt der Mail. Es wird eine Verbindung zu hostname, Port 25,
aufgebaut und Folgendes übertragen:
RCPT TO: user@hostname
DATA
Mailinhalt
.
Abschliessend wird die mfile-Datei gelöscht.
– Sie können davon ausgehen, dass alle benutzten Dateinamen sowie die Zeilen
im Mailinhalt jeweils nie länger als 1024 Zeichen sein werden und dass der Inhalt der mfile-Datei in jedem Fall korrekt aufgebaut ist.
Auf den folgenden Seiten finden Sie ein Gerüst für das beschriebene Programm. In
den Kommentaren sind nur die wesentlichen Aufgaben der einzelnen, zu ergänzenden Programmteile beschrieben, um Ihnen eine gewisse Leitlinie zu geben. Es ist
überall sehr großzügig Platz gelassen, damit Sie auch weitere notwendige
Programmanweisungen entsprechend Ihrer Programmierung einfügen können.
Einige wichtige Manual-Seiten liegen bei - Sie können aber nicht davon ausgehen,
dass Sie ausschließlich nur diese Funktionen benötigen.
- 8 von 18 -
Klausur „Softwaresysteme I“
März 2007
/* includes */
#include <sys/types.h>
#include <stdlib.h>
#include <errno.h>
#include <dirent.h>
#include <pthread.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <netdb.h>
/* Funktionsdeklarationen, globale Variablen */
void pjob(char *);
void *tstart(void *);
void *send_mail(char *);
1,5A
static int threadsavailable = 5; /* Punkt bei Arg. prüfen */
static pthread_mutex_t mtx; /* Punkte bei Initialisierung */
static pthread_cond_t cdt;
/* Funktion main */
int main (int argc, char **argv)
/* Funktionsdeklaration: 1/2A, return aus main 1/2A */
{
/* Argumente prüfen */
/* Def. von threadsavailable 0,5P */
if (argc == 1) {
/* 0,5 P */
threadsavailable = 5;
/* 0,5 P */
} else if (argc == 2) {
/* 0,5 P */
threadsavailable = atoi(argv[1]);
/* 0,5 P */
} else {
/* 0,5 P */
fprintf(stderr, "usage: mailq [n]\n");
exit(EXIT_FAILURE);
}
- 9 von 18 -
1A
2,5A
A:5
Klausur „Softwaresysteme I“
März 2007
/* Initialisierungen */
{
/* Punkte jew. auf Initialisierung und globale Def.*/
pthread_mutex_init(&mtx, NULL);
pthread_cond_init(&cdt, NULL);
2T
}
/* Auftraege suchen und bearbeiten */
{
DIR *mailq;
struct dirent *direntry;
/* (1P bei opendir) */
/* (1P bei readdir) */
/* opendir 2 P */
if ((mailq = opendir("/var/spool/mailq")) == NULL) {
perror("open mailq");
/* 1 P */
exit(EXIT_FAILURE);
}
/* readdir 2 P */
while (errno=0, (direntry=readdir(mailq)) != NULL) {
if (direntry->d_name[0] == ’m’) {
/* 1 P */
pjob(direntry->d_name);
/* 1 P */
}
}
if ( errno != 0 ) {
/* 1 P */
perror("readdir");
exit(EXIT_FAILURE);
}
closedir(mailq);
/* 1P */
return(0);/* 1/2 A -> Seite 9 */
}
3D
6D
T: 2
D: 9
} /* Ende Funktion main */
- 10 von 18 -
Klausur „Softwaresysteme I“
März 2007
/* Auftragsbearbeitung: Funktion pjob */
void pjob(char *mfile) {
/* Variablendefinitionen, Vorbereitungen */
pthread_t worker;
/* Dateiname vor Uebergabe an Thread in
eigenen Speicher duplizieren */
char *mfile2;
/* malloc mit Fehlerabfr. 2P */
mfile2 = malloc(sizeof(char) * (strlen(mfile) + 1));
if(mfile2 == NULL) {
perror("malloc");
exit(EXIT_FAILURE);
}
strcpy(mfile2, mfile);
3T
/* 1P */
/* Regelung der Threadzahl. Koordinierung mit Threads */
pthread_mutex_lock(&mtx);
while(threadsavailable == 0) {
pthread_cond_wait(&cdt, &mtx);
}
threadsavailable--;
pthread_mutex_unlock(&mtx);
/* 1P */
/* 1P */
/* 2P */
6K
/* 1P */
/* 1P */
T: 3
K: 6
- 11 von 18 -
Klausur „Softwaresysteme I“
/* Thread erzeugen
März 2007
*/
/*worker richtig def. 1P, Aufruf+richtige Par.+Fehler 2P*/
if (pthread_create(&worker, NULL, tstart, mfile2) != 0) {
perror("pthread_create");
exit(EXIT_FAILURE);
};
if(pthread_detach(worker) != 0)
/* 1P */
perror("detach");
4T
} /* Ende Funktion pjob */
/* Thread-Startfunktion: Funktion tstart */
void *tstart(void *mfile) {
/* Mail zustellen */
send_mail((char *)mfile);
/*
/* Aufruf 1P, cast 1P */
2T
Ressourcen freigeben, Thread beenden */
free(mfile);
/* 1P */
pthread_mutex_lock(&mtx);
threadsavailable++;
pthread_cond_broadcast(&cdt);
pthread_mutex_unlock(&mtx);
pthread_exit(NULL);
/*
/*
/*
/*
/*
1P
1P
1P
1P
1P
*/
*/
*/
*/
*/
1T
5K
T: 7
K: 5
} /* Ende Funktion tstart */
- 12 von 18 -
Klausur „Softwaresysteme I“
März 2007
/* Mailuebertragung: Funktion send_mail */
void send_mail(char *mfile) {
/* Variablendefinitionen */
FILE *mf, *sfd;
char filename[1024];
char user[1024], hostname[1024];
char buffer[1024];
char *p;
int s;
/* m-Datei oeffnen */
sprintf(filename, "/var/spool/mailq/%s", mfile); /* 1 P */
if ((mf=fopen(filename, "r")) == NULL) {
/* 2 P */
perror(filename);
/* 1 P */
return;
}
4U
/* Empfaenger ermitteln */
fscanf(mf, "%s@%s\n", user, hostname);
/* Adress-Struktur fuer hostname aufbauen */
{
struct sockaddr_in addr;
struct hostent *h;
if ((h=gethostbyname(hostname)) == NULL) {
perror(hostname);
return;
}
memcpy(&addr.sin_addr, h->h_addr_list[0], sizeof(addr.sin_addr));
addr.sin_port = htons(25);
addr.sin_family = AF_INET;
- 13 von 18 -
->
Klausur „Softwaresysteme I“
März 2007
/* Verbindung aufbauen */
if ((s = socket(PF_INET, SOCK_STREAM, 0)) == -1){ /*2 P*/
perror("create socket");
return;
}
if (connect(s, (const struct sockaddr *)&addr,
sizeof(addr)) == -1) {
/* 2 P */
perror("connect failed");
/* 1 P */
return;
}
2U
3U
}
/* Mailinhalt uebertragen */
sfd = fdopen(s, "w");
/* wenn fdopen noetig, 1 P */
/* sonst 1P auf korrekten Output-Zusammenbau,
*/
fprintf(sfd, "RCPT TO: %s@%s\n", user, hostname);/* 1 P */
fprintf(sfd, "DATA\n");
/* 0,5 P */
while(fgets(buffer, 1024, mf) ) fputs(buffer, sfd);/* 3 P */
fprintf(sfd, ".\n");
/* 0,5 P */
6U
/* Auftrag abschliessen */
fclose(sfd); fclose(mf);
/* 2P */
if (unlink(filename)==-1) perror("unlink"); /* 2 P */
return;
/* 1 P */
} /* Ende Funktion send_mail */
- 14 von 18 -
5U
<U:4+
11+5
=20
Klausur „Softwaresysteme I“
März 2007
b) Schreiben Sie ein Makefile zum Erzeugen des mailq-Programms.
Ein Aufruf von
make mailq
soll das Programm erzeugen, ein Aufruf von
make clean
soll das mailq-Programm und evtl. bei vorherigen make-Läufen
erzeugte .o-Dateien entfernen.
mailq: mailq.c
${CC} -o mailq mailq.c
clean:
rm -f mailq
/* Abhängigk.: 1M */
/* Kommando: 1M */
3M
/* 1M */
M: 3
- 15 von 18 -
Klausur „Softwaresysteme I“
März 2007
Aufgabe 3: (20 Punkte)
Man kann Schedulingverfahren nach verschiedenen Kriterien in Kategorien einteilen.
Beschreiben Sie für die folgenden Kategorisierungen jeweils die Eigenschaften entsprechender Schedulingstrategien, nennen Sie konkrete Beispiele für solche Strategien
und geben Sie an, in welchen Anwendungssituationen entsprechende Strategien sinnvoll eingesetzt werden.
a) Kooperatives bzw. präemptives Scheduling
5 Punkte
Kooperativ: Anwendung entscheidet über Umschaltungen, (1)
z.B. für Batch-Aufgaben oder systeminterne sehr
kurzlaufende Threads (1), Beispiel FCFS (1)
Präemptiv: Betriebsystem entzieht Prozessen die CPU (1)
Typisch bei Mehrbenutzer/Timesharing-Systemen, (1)
Beispiel RR, MLFB (1)
b) Deterministisches bzw. probabilistisches Scheduling
6 Punkte
Deterministisches S.: Vorberechnetes Scheduling, (1)
Stoßlängen/Termine sind bekannt (1),
genaue Vorhersage der CPU-Auslastung möglich (1),
Zeitgarantien möglich (1),
Einsatz vor allem bei Echtzeitsystemen, (1)
kein Beispiel in Vorlesung direkt genannt -Prioritäten (1)
(nicht doppelt bepunkten, wenn bei nur das Gegenteil
genannt wird!)
Probabilistisches S.: Stoßlängen/Termine unbekannt (1),
Auslastung nur abschätzbar (1), keine Zeitgarantien
möglich (1), Beispiele: SPN, SRTF, HRRN (1)
- 16 von 18 -
Klausur „Softwaresysteme I“
März 2007
c) Statisches bzw. dynamisches Scheduling
5 Punkte
statisch: Berechnung des Plans vor der Programmausführ.(1)
vollständiger Ablaufplan (1),
u.a. durch Quelltextanalyse (1),
Einsatz vor allem bei strikten Echtzeitsystemen (1)
dynamisch: online während der Programmausführung (1),
auf Basis von Rechenzeit, E/A-Zeiten, (1)
Einsatz bei den meisten Systemen (interaktiv, Stapel,
schwache/feste Echtzeit), (1)
Beispiele: RR, MLFBQ, ... (1)
d) Asymmetrisches bzw. symmetrisches Scheduling
4 Punkte
asymmetrisch: Prozesse werden nicht gleichmäßig auf die
CPUs verteilt (1)
bei asymmetrischen MPS / ungleiche Prozessoren (1)
bei symmetrischen MPS optional (BS hat freie Hand) (1)
symmetrisch: Prozesse werden gleich auf die Prozessoren
verteilt (1), identische Prozessoren (1),
Lastausgleich (1)
- 17 von 18 -
Klausur „Softwaresysteme I“
März 2007
Aufgabe 4: (10 Punkte)
Bei virtuellen Adressräumen können Teile des Speichers auf Hintergrundspeicher ausgelagert sein.
a) Wie wird im System bei einem Speicherzugriff erkannt, dass der entsprechende
Speicher ausgelagert ist?
MMU erkennt beim Versuch der Adressumsetzung von der
logischen in die physikalische Adresse, dass das
Anwesenheitsbit im Seitendeskriptor nicht gesetzt ist
(2 Punkte)
b) Was läuft im System nach dieser Erkennung ab? Beschreiben Sie die einzelnen
Schritte, die im Betriebssystem abgewickelt werden, um den Speicher verfügbar zu
machen und geben Sie an, welche Prozesszustände der auslösende Prozess dabei
jeweils einnimmt.
8 Punkte
1. Die MMU löst einen Trap aus ->
Aktivierung des Betriebssystems (page fault handling)
2. Prozess wird in Zustand blockiert überführt
3. BS sucht einen freien Seitenrahmen, ggf muss eine
andere Seite ausgelagert werden
4. Einlagerung der Seite von der Platte wird angestossen
5. Erfolgte Einlagerung wird per Interrupt gemeldet
6. Seitendeskriptor wird aktualisiert
7. Prozess wird in Zustand bereit überführt
8. Wenn Prozess wieder die CPU zugeteilt bekommt, wird der
fehlgeschlagene Befehl wiederholt
- 18 von 18 -
Herunterladen