2 Punkte. 2 Punkte. 2 Punkte. 2 Punkte. 2 Punkte. - 4 von von 15 -

Ähnliche Dokumente
d) Welche Aussage zum Thema Adressräume ist richtig?

d) Welche Aussage über exec() ist richtig?

Dem Vater-Prozess wird die Prozess-ID des Kind-Prozesses zurückgeliefert.

d) Welche Aussage zum Thema Adressraumschutz ist richtig?

Der Code von Funktionen wird zusammen mit den Variablen der Funktion im Stack-Segment abgelegt. a) Welche Aussage zum Thema RAID ist richtig?

d) Welche Antwort trifft für die Eigenschaften eines UNIX/Linux Filedeskriptors

a) Wie funktioniert Adressraumschutz durch Eingrenzung?

d) Welche Aussage zum Thema Adressraumschutz ist richtig?

c) Welcher UNIX-Systemaufruf wird bei der Verwendung von Sockets auf keinen Fall gebraucht? close() accept() mmap() shutdown()

e) Welche Aussage zu Speicherzuteilungsverfahren ist falsch?

c) Welche Aussage zu Speicherzuteilungsverfahren ist richtig?

c) Welche der folgenden Aussagen zu statischem bzw. dynamischem Binden

d) Welche Aussage zu Zeigern ist richtig? Beim Rechnen mit Zeigern wird immer der Typ des Zeigers beachtet.

a) Welche der folgenden Aussagen zu statischem bzw. dynamischem Binden

Klausur Systemprogrammierung I Februar Klausur Systemprogrammierung I Februar 2001

a) Wie funktioniert Adressraumschutz durch Eingrenzung?

d) Welche Aussage zum Thema Adressraumschutz ist richtig?

d) Was passiert, wenn das folgende Programmstück übersetzt und ausgeführt

b) Für welchen Zweck wird der Systemaufruf listen() benutzt? 2 Punkte

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Wolfram Burgard

f) Welcher UNIX-Systemaufruf wird bei der Verwendung von Sockets auf keinen Fall gebraucht? (1 Punkt) close() bind() listen() open()

b) Gegeben sei folgende Enumeration: enum SPRACHE {Deutsch, Englisch, Russisch};

Hinweise. Friedrich-Alexander-Universität Erlangen-Nürnberg

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Maren Bennewitz

c) Welche Aussage über einem UNIX-Systemaufruf ist falsch?

Betriebssysteme. Tutorium 2. Philipp Kirchhofer

Grundlagen der Informatik 2 Modul Systemnahe Programmierung in C (SPiC) Klausur am 9. April 2008

d) Welche Aussage zum Thema virtueller Adressraum ist richtig?

U9-3 Vergleich von Thread-Konzepten. U9-2 Motivation von Threads. U9-3 Vergleich von Thread-Konzepten (2) U9-1 Überblick

Softwaresysteme I Übungen Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2007 U9.fm

a) Welche Aussage zu Zeigern ist richtig? Die Übergabesemantik für Zeiger als Funktionsparameter ist callby-value.

Klausur Betriebssysteme I

POSIX-Threads. Aufgabe 9 SP - Ü U10.1

b) Was bewirken folgende Programmanweisungen? uint8_t x = 42; x ^= x;

Klausur Betriebssysteme

Sequentielle Programm- / Funktionsausführung innerhalb eines Prozesses ( thread = Ausführungsfaden )

d) Welche Aussage zum Thema Ablaufplanung ist richtig?

U8 POSIX-Threads U8 POSIX-Threads

I 7. Übung. I-1 Überblick. Besprechung Aufgabe 5 (mysh) Online-Evaluation. Posix Threads. Ü SoS I I.1

d) Welche Aussage zum Thema Speicherzuteilung ist richtig?

Threads Einführung. Zustände von Threads

U8-1 Motivation von Threads. U8-2 Vergleich von Thread-Konzepten. U8-2 Vergleich von Thread-Konzepten (2) Motivation

f) Was versteht man beim Zugriff auf I/O-Register unter dem Begriff "Memory-mapped"?

d) Welche Aussage über Einplanungsverfahren ist richtig?

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Maren Bennewitz

OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer

Besprechung Aufgabe 5 (crawl) POSIX-Threads. Problem: UNIX-Prozesskonzept ist für viele heutige Anwendungen unzureichend

U5 Verzeichnisse und Sortieren

Linker: Adreßräume verknüpfen. Informationen über einen Prozeß. Prozeß-Erzeugung: Verwandtschaft

b) Welche der folgenden Aussagen bzgl. Threads ist richtig?

Threads. Foliensatz 8: Threads Folie 1. Hans-Georg Eßer, TH Nürnberg Systemprogrammierung, Sommersemester 2015

8. Arbeiten mit Dateien

f) Welcher UNIX-Systemaufruf wird bei der Verwendung von Sockets auf keinen Fall gebraucht? (1 Punkt) close() bind() listen() open()

d) Wie funktioniert Adressraumschutz durch Eingrenzung?

Klausur Betriebssysteme I

Überlegungen beim Entwurf eines Betriebssystems

1 Prozesse und Scheduling (12 Punkte)

Informatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1

Betriebssysteme Übung 2. Tutorium System Calls & Multiprogramming

Konzepte von Betriebssystemkomponenten

EINFÜHRUNG IN LINUX DR. MATTHIAS M. HÖLZL

Hello World! Eine Einführung in das Programmieren Das erste Programm

6.1.5 Verzeichnisdateien

Konzepte von Betriebssystem- Komponenten Ausnahme- / Unterbrechungsbehandlung

(a) Wie unterscheiden sich synchrone und asynchrone Unterbrechungen? (b) In welchen drei Schritten wird auf Unterbrechungen reagiert?

Testen nebenläufiger Objekte

Zeiger vom Typ (void *) sind am besten für Zeigerarithmetik geeignet, da sie kompatibel zu jedem Zeigertyp sind.

Einführung. Anwendung. logischer Adreßraum. Kontrollfluß (Thread) = CPU führt Instruktionen aus. Was charakterisiert einen Kontrollfluß?

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

(Ausnahmebehandlung)

Prozesse. Prozesse sind Programme. Prozesse können aus Unterprozessen bestehen. Prozesshierarchie Unterprozesse Threads

Echtzeitbetriebssysteme

U6-1 Organisatories. U6-2 Motivation von Threads. U6-3 Vergleich von Thread-Konzepten. Organisatorisches

Lösungsvorschlag zur 10. Übung

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

Vorlesung Programmieren

Zeiger vom Typ (void *) sind am besten für Zeigerarithmetik geeignet, da sie kompatibel zu jedem Zeigertyp sind.

Aufgabenblatt 6 Musterlösung

Abschlussklausur. Betriebssysteme. 30. Januar Legen Sie bitte Ihren Lichtbildausweis und Ihren Studentenausweis bereit.

Betriebssysteme 1. Thomas Kolarz. Folie 1

Grundlagen der Informatik 2 Modul Systemnahe Programmierung in C (SPiC) Klausur am 25. Juli 2008

U3 UNIX-Signale U3 UNIX-Signale

PThreads. Pthreads. Jeder Hersteller hatte eine eigene Implementierung von Threads oder light weight processes

Technische Informatik 1

Betriebssysteme. Vorlesung im Herbstsemester 2010 Universität Mannheim. Kapitel 6: Speicherbasierte Prozessinteraktion

2Binden 3. und Bibliotheken

Proseminar: Konzepte von Betriebsystem-Komponenten (KVBK)

DOSEMU. Vortrag im Hauptseminar Konzepte und Techniken virtueller Maschinen und Emulatoren. Matthias Felix FAU. 13.

Übung 1 - Betriebssysteme I

Probeklausur Name: (c)

Programme erstellen in Java

Im Windows Betriebssystem sind Dateien eindeutig gekennzeichnet durch ihren Pfad, Dateinamen und nach einem Punkt die Dateierweiterung.

Basiskonzepte des Rechnerbetriebs

Systemnahe Programmierung in C Übungen Jürgen Kleinöder, Michael Stilkerich Universität Erlangen-Nürnberg Informatik 4, 2011 U7.fm

Aufgabe 9: recgrep rekursive, parallele Suche (letzte Aufgabe)

K Ergänzungen zur Einführung in C

Transkript:

Aufgabe 1.1: Einfachauswahl-Fragen (14 Punkte) Bei den Multiple-Choice-Fragen in dieser Aufgabe ist jeweils nur eine richtige Antwort eindeutig anzukreuzen. Auf die richtige Antwort gibt es die angegebene Punktzahl. Wollen Sie eine Multiple-Choice-Antwort korrigieren, streichen Sie bitte die falsche Antwort mit drei waagrechten Strichen durch ( )und kreuzen die richtige an. Lesen Sie die Frage genau, bevor Sie antworten. a) Was versteht man unter Virtuellem Speicher? Speicher der einem Prozess durch entsprechende Hardware (MMU) und durch Ein- und Auslagern von Speicherbereichen vorgespiegelt wird, aber möglicherweise größer als der verfügbare physikalische Hauptspeicher ist. Speicher, der nur im Betriebssystem sichtbar ist, jedoch nicht für einen Anwendungsprozess. Unter einem Virtuellen Speicher versteht man einen physikalischen Adressraum, dessen Adressen durch eine MMU vor dem Zugriff auf logische Adressen umgesetzt werden. Virtueller Speicher kann dynamisch zur Laufzeit von einem Programm erzeugt werden (Funktion valloc(3)). b) Welche Aussage über das aktuelle Arbeitsverzeichnis (Current Working Directory) trifft zu? Jedem UNIX-Benutzer ist zu jeder Zeit ein aktuelles Verzeichnis zugeordnet. Besitzt ein UNIX-Prozess kein Current Working Directory, so beendet sich der Prozess mit einem Segmentation Fault. Mit dem Systemaufruf chdir() kann das aktuelle Arbeitsverzeichnis durch den Vaterprozess verändert werden. Pfadnamen, die nicht mit dem Zeichen / beginnen, werden relativ zu dem aktuellen Arbeitsverzeichnis interpretiert c) In einem UNIX-UFS-Dateisystem gibt es symbolische Namen/Verweise (Symbolic Links) und feste Links (Hard Links) auf Dateien. Welche Aussage ist richtig. Ein Symbolic Link kann nicht auf Dateien anderer Dateisysteme verweisen. Ein Hard Link kann nur auf Verzeichnisse nicht jedoch auf Dateien verweisen. Wird der letzte Symbolic Link auf eine Datei gelöscht, so wird auch die Datei selbst gelöscht. Für jede reguläre Datei existiert mindestens ein Hard-Link im selben Dateisystem. d) Bei der Behandlung von Ausnahmen (Traps oder Interrupts) unterscheidet man zwei Bearbeitungsmodelle. Welche Aussage hierzu ist richtig? Das Wiederaufnahmemodell dient zur Behandlung von Interrupts (Fortführung des Programms nach einer zufällig eingetretenen Unterbrechung). Bei einem Trap ist das Modell nicht sinnvoll anwendbar, da ein Trap deterministisch auftritt und damit eine Wiederaufnahme des Programms sofort wieder den Trap verursachen würde. Nach dem Beendigungmodell werden Interrupts bearbeitet. Gibt man z. B. CTRL-C unter UNIX über die Tastatur ein, wird ein Interrupt-Signal an den gerade laufenden Prozess gesendet und dieser dadurch beendet. Interrupts dürfen auf keinen Fall nach dem Beendigungsmodell behandelt werden, weil überhaupt kein Zusammenhang zwischen dem unterbrochenen Prozess und dem Grund des Interrupts besteht. Das Betriebssystem kann Interrupts, die in ursächlichem Zusammenhang mit dem gerade laufenden Prozess stehen, nach dem Beendigungsmodell behandeln, wenn eine sinnvolle Fortführung des Prozesses nicht mehr möglich ist. e) Welche Aussage ist in einem Monoprozessor-Betriebssystem richtig? Ein Prozess im Zustand blockiert muss warten, bis der laufende Prozess den Prozessor abgibt und kann dann in den Zustand laufend überführt werden. Es befindet sich zu einem Zeitpunkt maximal ein Prozess im Zustand laufend. Ist zu einem Zeitpunkt kein Prozess im Zustand bereit, so ist auch kein Prozess im Zustand laufend. In den Zustand blockiert gelangen Prozesse nur aus dem Zustand bereit. - 3 von 15 - - 4 von 15 -

f) Welche Antwort trifft für die Eigenschaften eines UNIX/Linux Filedeskriptors zu? Ein Filedeskriptor ist eine prozesslokale Integerzahl, die der Prozess zum Zugriff auf eine Datei benutzen kann. Filedeskriptoren sind Zeiger auf Betriebssystem-interne Strukturen, die von den Systemaufrufen ausgewertet werden, um auf Dateien zuzugreifen. Ein Filedeskriptor ist eine Integerzahl, die über gemeinsamen Speicher an einen anderen Prozess übergeben werden kann, und von letzterem zum Zugriff auf eine geöffnete Datei verwendet werden kann. Beim Öffnen ein und derselben Datei erhält ein Prozess jeweils die gleiche Integerzahl als Filedeskriptor zum Zugriff zurück. g) Man unterscheidet die Begriffe Programm und Prozess. Welche der folgenden Aussagen zu diesem Themengebiet ist richtig? Das Programm ist der statische Teil (Rechte, Speicher, etc.), der Prozess der aktive Teil (Programmzähler, Register, Stack). Wenn ein Programm nur einen aktiven Ablauf enthält, nennt man diesen Prozess, enthält das Programm mehrere Abläufe, nennt man diese Threads. Ein Prozess ist ein Programm in Ausführung - ein Prozess kann aber auch mehrere verschiedene Programme ausführen Ein Programm kann immer nur von einem Prozess ausgeführt werden Aufgabe 1.2: Mehrfachauswahl-Fragen (4 Punkte) Bei den Multiple-Choice-Fragen in dieser Aufgabe sind jeweils m Aussagen angegeben, n (0 n m) Aussagen davon sind richtig. Kreuzen Sie alle richtigen Aussagen an. Jede korrekte Antwort in einer Teilaufgabe gibt einen halben Punkt, jede falsche Antwort einen halben Minuspunkt. Eine Teilaufgabse wird minimal mit 0 Punkten gewertet, d. h. falsche Antworten wirken sich nicht auf andere Teilaufgaben aus. Wollen Sie eine falsch angekreuzte Antwort korrigieren, streichen Sie bitte das Kreuz mit drei waagrechten Strichen durch ( ). Lesen Sie die Frage genau, bevor Sie antworten. a) Welche der folgenden Aussagen zum Thema Threads sind richtig? Bei User-Threads ist die Schedulingstrategie keine Funktion des Betriebssystemkerns. Kern-Threads blockieren sich bei blockierenden Systemaufrufen gegenseitig. Kern-Threads können Multiprozessoren nicht ausnutzen. Zur Umschaltung von User-Threads ist ein Adressraumwechsel erforderlich. Die Umschaltung von User-Threads ist sehr effizient. Zu jedem Kern-Thread gehört ein eigener Adressraum. Bei Kern-Threads ist die Schedulingstrategie meist durch das Betriebssystem vorgegeben. Die Umschaltung von Kern-Threads muss immer im Systemkern erfolgen. 4 Punkte - 5 von 15 - - 6 von 15 -

Aufgabe 2: dust (47 Punkte) Sie dürfen diese Seite zur besseren Übersicht bei der Programmierung heraustrennen! Schreiben Sie ein Programm dust (DOS-to-Unix Source Translator), das alle Quellcode-Dateien, die im aktuellen Arbeitsverzeichnis liegen, vom DOS- ins Unix-Format umwandelt. Anders als in der Unix-Welt werden unter DOS und Windows Zeilenumbrüche in Textdateien nicht mit dem Einzelzeichen \n codiert, sondern mit der Zeichenfolge "\r\n". Da nicht jedes Programm unter Unix mit solchen Zeilenumbrüchen zurechtkommt, sollten Textdateien, die auf einem Windows-Rechner verfasst wurden, konvertiert werden. Dies geschieht durch das Weglassen aller \r -Zeichen. Das Programm bekommt auf der Befehlszeile vom Benutzer den Namen eines (existierenden) Zielverzeichnisses übergeben, in das die konvertierten Dateien geschrieben werden sollen. Durch die Verwendung von POSIX-Threads kann die Umwandlung mehrerer Textdateien parallel erfolgen, wobei die Anzahl der gleichzeitig laufenden Fäden auf MAX_THREADS (= 8) beschränkt ist. Das Programm soll folgendermaßen arbeiten: Der Haupt-Thread durchsucht das aktuelle Arbeitsverzeichnis und ruft für jeden gefundenen Eintrag die Funktion processentry auf. Anschließend wartet er, bis die Abarbeitung aller Dateien abgeschlossen ist, und gibt die Anzahl der erfolgreich konvertierten Dateien nach dem folgenden Schema aus: x files converted. Funktion void processentry(const char entry[]): Untersucht, ob es sich bei dem übergebenen Verzeichniseintrag um eine reguläre Datei handelt, deren Name auf ".c" oder ".h" endet. Ist dies der Fall, so wird ein neuer Thread erzeugt, der die Umwandlung vornimmt. Ist die maximal erlaubte Threadzahl bereits erreicht, wird gewartet, bis einer der aktiven Fäden sich beendet hat. Thread-Startfunktion void *convertfile(void *arg): Öffnet die angegebene Datei und kopiert ihren Inhalt unter Auslassung aller \r -Zeichen in eine gleichnamige Datei im Zielverzeichnis. Zur Koordination stehen Ihnen zählende Semaphore mit den Funktionen sem_init(), P(), V() und sem_del() zur Verfügung. Sie müssen diese Funktionen nicht selbst implementieren. Die Schnittstellen sind auf der folgenden Seite am Anfang des Programms deklariert. Auf den folgenden Seiten nden 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 - es kann aber durchaus sein, dass Sie bei Ihrer Lösung nicht alle diese Funktionen oder gegebenenfalls auch weitere Funktionen benötigen. /* includes */ #include <dirent.h> #include <errno.h> #include <fnmatch.h> #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include "sem.h" SEM *sem_init(int initval); void P(SEM *sem); void V(SEM *sem); void sem_del(sem *sem); static void die(const char message[]) { perror(message); exit(exit_failure); } /* Makros, Funktionsdeklarationen, globale Variablen */ /* Funktion main */ - 7 von 15 - - 8 von 15 -

/* Argumente pruefen und weitere Initialisierungen */ /* Auf Terminierung der Threads warten, Ergebnis ausgeben */ /* Aufraeumen */ /* Quellverzeichnis durchsuchen, Eintraege verarbeiten */ /* Ende Funktion main */ A: - 9 von 15 - - 10 von 15 -

/* Funktion processentry */ /* Funktion convertfile() */ E: C: - 11 von 15 - - 12 von 15 -

Aufgabe 3: (19 Punkte) a) Gegegeben sei das nachfolgende Programm. Skizzieren Sie den Aufbau des logischen Adressraums eines Prozesses, der dieses Programm ausführt. Wozu werden welche Segmente angelegt? b) Welche Arten von Schutz gewährleisten logische Adressräume? Zeichnen Sie für jede Variable ein, wo diese ungefähr im logischen Adressraum zu finden sein wird. Wohin zeigen die Zeiger m, p und q (ungefähre Position einzeichnen!)? int ga; static int gb; char *m = "message"; int main() { int la; static int lb; int *p; static double *q; } p = malloc(100 * sizeof(int)); q = malloc(100 * sizeof(double); c) Wenn das folgende Programmstück in einem UNIX-System abläuft, wird ein Fehler auftreten.... int *p = NULL;... *p = -1;... Bitte möglichst knappe, aber präzise Antworten: c1) Welcher Fehler tritt auf? c2) Warum tritt der Fehler auf? c3) Der Fehler wird von einer Hardwarekomponente zuerst entdeckt - welche Komponente ist das? c4) Mit welchem Mechanismus wird der Fehler dem Betriebssystem mitgeteilt? c5) Was macht das Betriebssystem mit dem Prozess, der gerade das Programmstück ausführt? - 13 von 15 - - 14 von 15 -

Aufgabe 4: (6 Punkte) Wie wird eine Ausnahmebehandlung (Trap oder Interrupt) von der CPU und vom Betriebssystem abgewickelt? - 15 von 15 -