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

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

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

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

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 Aussage zum Thema Adressraumschutz ist richtig?

d) Welche Aussage zum Thema Adressraumschutz ist richtig?

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

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

a) Wie funktioniert Adressraumschutz durch Eingrenzung?

U5 Verzeichnisse und Sortieren

c) Welche Aussage zu Speicherzuteilungsverfahren ist richtig?

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

e) Welche Aussage zu Speicherzuteilungsverfahren ist falsch?

a) Wie funktioniert Adressraumschutz durch Eingrenzung?

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

Klausur Betriebssysteme I

a) 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.

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

Klausur Systemprogrammierung I Februar Klausur Systemprogrammierung I Februar 2001

Zeiger vom Typ void* benötigen weniger Speicher als andere Zeiger, da bei anderen Zeigertypen zusätzlich die Größe gespeichert werden muss.

d) Welche Aussage zum Thema Speicherzuteilung ist richtig?

d) Welche Aussage über Einplanungsverfahren ist richtig?

d) Welche Aussage zum Thema virtueller Adressraum ist richtig?

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

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

Eine Mini-Shell als Literate Program

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

U7 POSIX-Prozesse U7 POSIX-Prozesse

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

Probeklausur Name: (c)

d) Welche Aussage zum Thema Adressraumschutz ist richtig?

d) Welche Aussage zum Thema Ablaufplanung ist richtig?

Klausur Betriebssysteme

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

K Ergänzungen zur Einführung in C

d) Wie funktioniert Adressraumschutz durch Eingrenzung?

1 Fehler in Bibliotheksfunktionen. 1 Überblick. 2 Ziele der Aufgabe. Besprechung der 1. Aufgabe

einlesen n > 0? Ausgabe Negative Zahl

2Binden 3. und Bibliotheken

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

1 pulsierender Speicher

Übung 1 - Betriebssysteme I

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

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

*** Viel Erfolg! ***

Verwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion. Programmieren in C

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

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18

Übersicht. Speichertypen. Speicherverwaltung und -nutzung. Programmieren in C

Algorithmen und Datenstrukturen

Klausur Betriebssysteme I

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

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

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

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

C++ Teil 6. Sven Groß. 23. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 15

Vorlesung Programmieren

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Wolfram Burgard

Einführung in die Programmierung zusammengesetzte Datentypen, dynamischer Speicher

Systemprogrammierung

Dynamische Speicherverwaltung

Systeme I: Betriebssysteme Kapitel 8 Speicherverwaltung

Übungen zu Systemnahe Programmierung in C (SPiC) Inhalt. Moritz Strübe, Rainer Müller (Lehrstuhl Informatik 4) Sommersemester 2014

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

Dynamisches Speichermanagement

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

G 5. Übung. G-1 Überblick. Besprechung 3. Aufgabe. Infos zur Aufgabe 5: fork, exec. Rechenzeiterfassung. Ü SoS I G.1

Dynamischer Speicher

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

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

Klausur: Informatik I am 06. Februar 2009 Gruppe: D Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Lösungsvorschlag zur 10. Übung

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Einführung in die Programmiersprache C

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

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15

Welche Informatik-Kenntnisse bringen Sie mit?

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

Betriebssysteme Übung 2. Tutorium System Calls & Multiprogramming

Exploit-Entwicklung mit Python

Advanced Programming in C

System-Makro in time.h : #define CLOCKS_PER_SEC 1000 Frühere Makro-Bezeichnung (z.t. noch gebräuchlich): #define CLK_TCK CLOCKS_PER_SEC//aus:time.

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

Testen nebenläufiger Objekte

Übungen zu Systemnahe Programmierung in C (SPiC)

Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten

Übungen zu Systemprogrammierung 1

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

7 Laufzeit-Speicherverwaltung

Übungen zu Systemprogrammierung 1

Übungen zu Systemprogrammierung 1 (SP1)

Informatik II. Semesterklausur

C++ Teil 5. Sven Groß. 8. Mai IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 8. Mai / 16

Programmierkurs C++ Datenstrukturen Seite 1

Einführung in die Programmiersprache C

Transkript:

Aufgabe 1.1: Einfachauswahl-Fragen (18 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) Welche Aussage zum Thema Adressraumverwaltung ist richtig? 3 Punkte Da das Laufzeitsystem auf die Betriebssystemschnittstelle zur Speicherverwaltung zurückgreift, ist die Granularität der von malloc() zurückgegebenen Speicherblöcke vom Betriebssystem vorgegeben. Mit Hilfe des Systemaufrufes malloc() kann ein Programm zusätzliche Speicherblöcke von sehr feinkörniger Struktur vom Betriebssystem anfordern. Ein Speicherbereich, der mit Hilfe der Funktion free() freigegeben wurde, verbleibt im logischen Adressraum des zugehörigen Prozesses. Mit malloc() angeforderter Speicher, welcher vor Programmende nicht freigegeben wurde, kann vom Betriebssystem nicht mehr an andere Prozesse herausgegeben werden und ist damit bis zum Neustart des Systems verloren. b) Man unterscheidet Traps und Interrupts. Welche Aussage ist richtig? 3 Punkte Normale Rechenoperationen können zu einem Trap führen. Bei der mehrfachen Ausführung eines unveränderten Programms mit gleicher Eingabe treten Interrupts immer an den gleichen Stellen auf. Der Zeitgeber (Systemuhr) unterbricht die Programmbearbeitung in regelmäßigen Abständen. Die genaue Stelle der Unterbrechungen ist damit vorhersagbar. Somit sind solche Unterbrechungen in die Kategorie Trap einzuordnen. Wenn ein Interrupt einen schwerwiegenden Fehler signalisiert, muss das unterbrochene Programm abgebrochen werden. c) Ein laufender Prozess wird in den Zustand blockiert überführt. Welche Aussage passt zu diesem Vorgang? Der Prozess terminiert. Der Prozess wartet auf Daten von der Festplatte. Es ist kein direkter Übergang von laufend nach blockiert möglich. Der Prozess liest von der Festplatte mit nichtblockierenden Eingabeoperationen. - 3 von 15 - d) Was passiert, wenn Sie in einem C-Programm über einen ungültigen Zeiger versuchen auf Speicher zuzugreifen? Das Betriebssystem erkennt die ungültige Adresse bei der Weitergabe des Befehls an die CPU (partielle Interpretation) und leitet eine Ausnahmebehandlung ein. Die MMU erkennt die ungültige Adresse bei der Adressumsetzung und löst einen Trap aus. Beim Laden des Programms wird die ungültige Adresse erkannt und der Speicherzugriff durch einen Sprung auf eine Abbruchfunktion ersetzt. Diese Funktion beendet das Programm mit der Meldung "Segmentation fault". Der Compiler erkennt die problematische Code-Stelle und generiert Code, der zur Laufzeit bei dem Zugriff einen entsprechenden Fehler auslöst. e) Welche Aussage über den Rückgabewert von fork() ist richtig? 1 Punkt Der Kind-Prozess bekommt die Prozess-ID des Vater-Prozesses. Im Fehlerfall wird im Kind-Prozess -1 zurückgeliefert. Der Rückgabewert ist in jedem Prozess (Kind und Vater) jeweils die eigene Prozess-ID. Dem Vater-Prozess wird die Prozess-ID des Kind-Prozesses zurückgeliefert. f) Nehmen Sie an, der Ihnen bekannte Systemaufruf stat(2) wäre analog zu der Funktion readdir(3) mit folgender Schnittstelle implementiert: struct stat *stat(const char *path); Welche Aussage ist richtig? Der Systemaufruf liefert einen Zeiger zurück, über den die aufrufende Funktion direkt auf eine Datenstruktur zugreifen kann, die die Dateiattribute enthält. Der Aufrufer muss sicherstellen, dass er den zurückgelieferten Speicher mit free(3) wieder freigibt, wenn er die Dateiattribute nicht mehr weiter benötigt. Ein Zugriff über den zurückgelieferten Zeiger liefert völlig zufällige Ergebnisse oder einen Segmentation fault. Durch den Zugriff über den zurückgegebenen Zeiger ist es möglich, die Inode- Informationen auf dem Datenträger direkt zu verändern. - 4 von 15-3 Punkte

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 h) Welche der folgenden Aussagen zu statischem bzw. dynamischem Binden ist richtig? bei dynamischem Binden müssen zum Übersetzungszeitpunkt alle Adressbezüge vollständig aufgelöst werden beim statischen Binden werden alle Adressen zum Ladezeitpunkt aufgelöst dynamisch gebundene Programme können auch noch zur Laufzeit durch das Nachladen neuer Programmodule (plug-ins) ergänzt werden bei statischem Binden werden durch den Compiler alle Adressbezüge vollständig aufgelöst 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) Gegeben sei folgendes Programmfragment: static int a = 2012; int f1 (const int *y) { static int b; int c; char *d = malloc(2407); int (*e)(const int *) = f1; y++; } 34 Punkte Welche der folgenden Aussagen zum obigen Programmfragment sind richtig? a liegt im Datensegment. b liegt im Stacksegment. c ist mit dem Wert 0 initialisiert. d ist ein Zeiger, der in den Heap zeigt. Die Speicherstelle, auf die d zeigt, verliert beim Rücksprung aus der Funktion f1() ihre Gültigkeit. e liegt im Stacksegment und zeigt in das Textsegment. Die Anweisung y++ führt zu einem Laufzeitfehler, da y konstant ist. y liegt im Stacksegment. - 5 von 15 - - 6 von 15 -

Aufgabe 2: pdu (45 Punkte) Sie dürfen diese Seite zur besseren Übersicht bei der Programmierung heraustrennen! Schreiben Sie ein Programm pdu (parallel disk usage), das die Größe aller übergebenen Verzeichnisbäume parallel ermittelt und anschließend sortiert ausgibt. Der Grad der Parallelität kann durch den Aufrufer per Befehlszeile festgelegt werden. Das Programm bekommt auf der Befehlszeile vom Benutzer als ersten Parameter die maximale Anzahl an gleichzeitig laufenden Threads. Für diesen Parameter sind nur Werte zwischen 1 und 399 zulässig. Die folgenden Parameter sind die Namen der zu durchsuchenden Verzeichnisbäume. Das Programm soll folgendermaßen arbeiten: Der Haupt-Thread startet für jeden übergebenen Verzeichnisbaum die Funktion tstart in einem eigenen Thread. Ist die maximale Anzahl an gleichzeitig laufenden Threads erreicht wartet der Haupt-Thread passiv, bis wieder ein neuer Thread gestart werden kann. Nachdem für jeden Verzeichnisbaum die Größe parallel ermittelt wurde, gibt der Hauptthread eine Liste der Verzeichnisnamen zusammen mit der Größe aus. Trat bei der Bearbeitung eines Vereichnisbaums ein Fehler auf, so wird als Größe -1 angezeigt. Funktion void *tstart(struct threadarg *arg): Berechnet für das per Struktur übergebene Verzeichnis die Größe mit Hilfe der rekusiven Funktion getdirsize und legt das Ergebnis in der Struktur ab. Funktion int getdirsize(char *path): Durchsucht das als Parameter übergebene Verzeichnis und summiert die Größe aller Einträge rekursiv auf. Dabei sollen nur Verzeichnise und reguläre Dateien berücksichtigt werden. Tritt bei der Bearbeitung ein Fehler auf, wird die Rekursion abgebrochen und -1 zurückgegeben. Ihnen steht das aus der Übung bekannte Semaphoren-Modul zur Verfügung. Die Schnittstelle finden Sie im folgenen Programmgerüst nach den #include-anweisungen. 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 - 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 <pthread.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> #include "sem.h" SEM *sem_init(int initval); int sem_del(sem *sem); void P(SEM *sem); void V(SEM *sem); static void die(const char message[]) { perror(message); exit(exit_failure); } // Makros, Funktionsdeklarationen, Strukturen, globale Variablen - 7 von 15 - - 8 von 15 -

// Funktion main // Verzeichnisse parallel bearbeiten // Argumente auswerten und weitere Initialisierungen // Auf Terminierung der Threads warten, Ergebnis ausgeben A: // Ende Funktion main T: - 9 von 15 - - 10 von 15 -

// Thread-Funktion // Groesse der relevanten Eintraege ermitteln und summieren // Funktion getdirsize // Directory-Eintraege lesen D: - 11 von 15 - - 12 von 15 -

Aufgabe 3: (11 Punkte) Gegeben ist die folgende Ausgabe des Kommandos ls -alri /tmp/sp (rekursiv absteigende Ausgabe aller Dateien und Verzeichnisse unter /tmp/sp mit Angabe der Inode- Nummer) auf einem Linux-System. (11 Punkte) fauixx> ls -alri /tmp/sp /tmp/sp: total 408 91 drwxrwxr-x 4 jklein i4staff 4096 Jul 19 15:17. 833 drwxrwxrwt 118 root root 401408 Jul 19 15:30.. 96 drwxrwxr-x 2 jklein i4staff 4096 Jul 19 15:21 dir1 98 drwxrwxr-x 2 jklein i4staff 4096 Jul 19 15:22 dir2 /tmp/sp/dir1: total 68 96 drwxrwxr-x 2 jklein i4staff 4096 Jul 19 15:21. 91 drwxrwxr-x 4 jklein i4staff 4096 Jul 19 15:17.. 536 -rwxr--r-- 2 jklein i4staff 52224 Jul 19 15:20 datei1 258 -rw-rw-r-- 1 jklein i4staff 30 Jul 19 15:21 datei2 /tmp/sp/dir2: total 68 98 drwxrwxr-x 2 jklein i4staff 4096 Jul 19 15:22. 91 drwxrwxr-x 4 jklein i4staff 4096 Jul 19 15:17.. 896 lrwxrwxrwx 1 jklein i4staff 14 Jul 19 15:22 dat1 ->../dir1/datei2 536 -rwxr--r-- 2 jklein i4staff 52224 Jul 19 15:20 xxx 900 -rw-rw-r-- 1 jens i4staff 30 Jul 19 15:22 yyy Ergänzen Sie im weißen Bereich die auf der folgenden Seite im grauen Bereich bereits angefangene Skizze der Inodes und Datenblöcke des Linux-Dateisystems um alle entsprechenden Informationen, die Sie aus obiger Ausgabe entnehmen können. Inodes 2?? 833 118 401408 Inhalt der Datenblöcke 2. 2.. 833 tmp 833. 2.. - 13 von 15 - - 14 von 15 -

Aufgabe 4: (1) Beschreiben Sie in Stichworten die unterschiedlichen Arten ("Gewichtsklassen") von Prozessen/Threads (Eigenschaften, Vorteile, Nachteile). - 15 von 15 -