Systempraktikum - Eignungsfeststellung, 23.11.2020
Fragenblock A: Auswahlfragen
Hinweis: Pro Frage kann mehr als eine Antwort richtig sein. Wählen Sie alle richtigen Antworten aus, indem Sie ein “X” in das leere Feld in eckigen Klammern schreiben, so: [X]. Verändern Sie sonst keinen Text in diesem Fragenblock.
Für jede vollständig richtig beantwortete Frage erhalten Sie einen Punkt; für nicht vollständig richtig, gar nicht oder falsch beantwortete Fragen erhalten Sie jeweils 0 Punkte.
Frage A-C121C521: Welche Aussagen zu Race Conditions sind richtig?
- Eine Race Condition bezeichnet den Geschwindigkeits-/Effizienzvergleich zwischen zwei Programmen.
- Das Ergebnis einer Berechnung hängt davon ab, dass der Benutzer das Programm schnell genug beendet.
- Das Ergebnis einer Berechnung hängt von der tatsächlichen Ausführungsreihenfolge mehrerer Prozesse/Threads und den enthaltenen Operationen ab.
- Zur Vermeidung einer Race Condition können bei der Programmerstellung beispielsweise Semaphoren eingesetzt werden.
Lösung:
- Das Ergebnis einer Berechnung hängt von der tatsächlichen Ausführungsreihenfolge mehrerer Prozesse/Threads und den enthaltenen Operationen ab.
- Zur Vermeidung einer Race Condition können bei der Programmerstellung beispielsweise Semaphoren eingesetzt werden.
Punkte Frage A-C121C521 (erreichbar 1):
Frage A-13752883: Mittels der folgenden Programmzeile soll Speicher reserviert werden:
Anschließend soll eine Fehlerbehandlung durchgeführt werden. Welche der folgenden Code-Fragmente sind dazu geeignet?
- Man muss nichts überprüfen, da “malloc(…)” immer den geforderten Speicherplatz liefert.
-
if (buffer < BUFFERSIZE) { …Fehlerbehandlung… }
-
if (free(buffer) > BUFFERSIZE) { …Fehlerbehandlung… }
-
if (buffer == NULL) { …Fehlerbehandlung… }
Lösung:
if (buffer == NULL) { …Fehlerbehandlung… }
: Diese Bedingung prüft, obmalloc
fehlgeschlagen ist, indem es prüft, obbuffer
NULL ist.
Punkte Frage A-13752883 (erreichbar 1):
Frage A-B7463FCA: Welche der folgenden Aussagen zu dynamischer Speicherverwaltung in C sind korrekt?
- Dynamisch allozierter, nicht mehr referenzierter Speicher wird in C durch den Garbage Collector freigegeben.
- Dynamischer Speicher wird in C mit Hilfe der Funktion
malloc()
angefordert. - Nachdem Speicher mittels
ptr = malloc()
alloziiert wurde, kann die Größe des reservierten Speichers in Bytes mittelssizeof(ptr)
ermittelt werden. -
free(void *ptr)
gibt den Speicherbereich, auf denptr
zeigt, wieder frei.
Lösung:
- Dynamischer Speicher wird in C mit Hilfe der Funktion
malloc()
angefordert.free(void *ptr)
gibt den Speicherbereich, auf denptr
zeigt, wieder frei.
Punkte Frage A-B7463FCA (erreichbar 1):
Frage A-90BB8756: Gegeben sei der folgende Ausschnitt aus einem C-Programm:
Mit welcher Zeile lässt sich eine Instanz des so definierten Strukturtyps “s” initialisieren?
-
s[0] = 1; s[1] = 2;
-
struct s s1; s1[x] = 1; s1[y] = 2;
-
struct s s1; s1.x = 1; s1.y = 2;
-
s1 = new s(1, 2);
Lösung:
struct s s1; s1.x = 1; s1.y = 2;
: Diese Zeile initialisiert eine Instanz der Strukturs
und weist den Feldernx
undy
Werte zu.
Punkte Frage A-90BB8756 (erreichbar 1):
Frage A-D2A2089B: Welche Aussagen zu Prozessen sind korrekt?
- Ein Prozess ist eine ausführbare Datei.
- Ein Prozess ist ein in Ausführung befindliches Programm.
- Ein Prozess kann als (temporärer) Eigentümer von Ressourcen aufgefasst werden.
- Jeder Unix-Prozess ist direkter oder indirekter Nachfahre des
init
-Prozesses (mit Ausnahme voninit
selbst).
Lösung:
- Ein Prozess ist ein in Ausführung befindliches Programm.
- Ein Prozess kann als (temporärer) Eigentümer von Ressourcen aufgefasst werden.
- Jeder Unix-Prozess ist direkter oder indirekter Nachfahre des
init
-Prozesses (mit Ausnahme voninit
selbst).
Punkte Frage A-D2A2089B (erreichbar 1):
Frage A-B3523D5D: Welche der folgenden Aussagen zu Strukturen in C sind korrekt?
- Eine definierte Struktur hat immer eine feste Anzahl an Elementen/Feldern.
- Elemente einer Struktur können unterschiedlichen Typs sein.
- Strukturen können nur innerhalb der
main()
-Funktion definiert werden. - Strukturen realisieren Objektorientierung in C.
Lösung:
- Eine definierte Struktur hat immer eine feste Anzahl an Elementen/Feldern.
- Elemente einer Struktur können unterschiedlichen Typs sein.
Punkte Frage A-B3523D5D (erreichbar 1):
Frage A-91A22C1E: Gegeben sei der folgende Teil aus einem Makefile:
Welche der folgenden Aussagen sind korrekt?
-
prog1
ist ein Ziel. -
main.c
undm1.c
sind Abhängigkeiten. - Vor
$(CC)
muss ein Tabulatorschritt stehen. -
CC
undCFLAGS
sind Variablen, auf deren Werte mittels$
zugegriffen wird.
Lösung:
prog1
ist ein Ziel.main.c
undm1.c
sind Abhängigkeiten.- Vor
$(CC)
muss ein Tabulatorschritt stehen.CC
undCFLAGS
sind Variablen, auf deren Werte mittels$
zugegriffen wird.
Punkte Frage A-91A22C1E (erreichbar 1):
Frage A-3EE49807: Welche der folgenden Aussagen zu den Funktionen der exec*()
-Familie sind korrekt?
- Im Erfolgsfall erfolgt nach dem Aufruf einer Funktion aus der
exec*()
-Familie keine Rückkehr zum aufrufenden Prozess. - Im Erfolgsfall eines
exec*()
-Aufrufs wird das ursprüngliche Prozess-Image durch ein neues ersetzt. - Während
fork()
einen Kindprozess erzeugt, der eine Kopie des aufrufenden Prozesses darstellt, erzeugt einexec*()
-Aufruf einen neuen “leeren” Prozess, der keine Attribute vom Aufrufer erbt. - Die Funktionen der
exec*()
-Familie terminieren den laufenden Prozess und starten einen neuen.
Lösung:
- Im Erfolgsfall erfolgt nach dem Aufruf einer Funktion aus der
exec*()
-Familie keine Rückkehr zum aufrufenden Prozess.- Im Erfolgsfall eines
exec*()
-Aufrufs wird das ursprüngliche Prozess-Image durch ein neues ersetzt.
Punkte Frage A-3EE49807 (erreichbar 1):
Frage A-C91D332A: Welche Aussagen sind korrekt? Ein Shared-Memory Segment…
- ist ein vom Betriebssystem verwalteter Speicherbereich.
- kann von mehreren Prozessen gelesen und beschrieben werden.
- wird bei allen beteiligten Prozessen an der gleichen virtuellen Adresse eingeblendet.
- ermöglicht die Kommunikation zwischen Prozessen auf verschiedenen Rechnern/Systemen.
Lösung:
- ist ein vom Betriebssystem verwalteter Speicherbereich.
- kann von mehreren Prozessen gelesen und beschrieben werden.
- wird bei allen beteiligten Prozessen an der gleichen virtuellen Adresse eingeblendet.
Punkte Frage A-C91D332A (erreichbar 1):
Frage A-D55983D8: Welche der folgenden Aussagen zur fork()
Funktion sind korrekt?
- Der durch
fork()
erzeugte Prozess hat die gleiche Prozess-ID (PID) wie der Vater-Prozess. - Terminiert ein Prozess, so werden alle von ihm vorher durch
fork()
erzeugten Prozesse terminiert. -
fork()
erzeugt eine Kopie des aufrufenden Prozesses, die sich im Wesentlichen nur durch einen Teil der Einträge im Prozesskontrollblock (PCB) unterscheidet. - Durch den Rückgabewert von
fork()
kann zwischen Vater- und Kind-Prozess unterschieden werden.
Lösung:
fork()
erzeugt eine Kopie des aufrufenden Prozesses, die sich im Wesentlichen nur durch einen Teil der Einträge im Prozesskontrollblock (PCB) unterscheidet.- Durch den Rückgabewert von
fork()
kann zwischen Vater- und Kind-Prozess unterschieden werden.
Punkte Frage A-D55983D8 (erreichbar 1):
Frage A-F9FF1851: Wofür steht der Aufrufparameter (Flag) -Wall
des GNU C-Compilers?
- Aktivierung der Firewall
- Anzeige sämtlicher Warnungen
- Übersetzung ohne Linking
-
-Wall
ist keine gültige Option des GNU C-Compilers
Lösung:
- Anzeige sämtlicher Warnungen
Punkte Frage A-F9FF1851 (erreichbar 1):
Frage A-DC5B9891: Gegeben sei der folgende Ausschnitt aus einem C-Programm:
Welche Konsolenausgabe wird dadurch erzeugt?
- 7
- 9
- 11
- Die Anfangsadresse des Arrays
a
.
Lösung:
- 9
Punkte Frage A-DC5B9891 (erreichbar 1):
Frage A-01177467: Welche Arten der Parameterübergabe bei Funktionsaufrufen gibt es?
- Call by reference
- Call by value
- Call by heap
- Call by signal
Lösung:
- Call by reference
- Call by value
Punkte Frage A-01177467 (erreichbar 1):
Frage A-25D6F62D: Welche der folgenden Aussagen zu Zombie-Prozessen sind korrekt?
- Ein Zombie ist ein Prozess, der bereits terminiert ist, aber dessen Rückgabewert nicht abgefragt wurde.
- Ein Zombie belastet das System, denn er belegt nach wie vor alle Ressourcen, wie z.B. Speicher, Semaphore, geöffnete Dateien.
- Ein Prozess existiert als Zombie, um auch nach seiner Terminierung dem Vaterprozess seinen Rückgabewert liefern zu können.
- Ein Zombie, dessen Vater terminiert ist, wird vom
init
-Prozess aufgeräumt.
Lösung:
- Ein Zombie ist ein Prozess, der bereits terminiert ist, aber dessen Rückgabewert nicht abgefragt wurde.
- Ein Prozess existiert als Zombie, um auch nach seiner Terminierung dem Vaterprozess seinen Rückgabewert liefern zu können.
- Ein Zombie, dessen Vater terminiert ist, wird vom
init
-Prozess aufgeräumt.
Punkte Frage A-25D6F62D (erreichbar 1):
Frage A-DF3979B1: Es gibt Prozesse, die als Waisen bezeichnet werden. Welche der folgenden Aussagen sind korrekt?
- Entsteht ein Waise, so wird es vom
init
-Prozess “adoptiert”. - Waisen belasten ein System nicht, da sie keine Ressourcen mehr belegen.
- Ein Waise ist ein Prozess, der noch ausgeführt wird, aber dessen Vater bereits terminiert ist.
- Ein Waise ist ein Prozess, der durch das Scheduling “ausgehungert” wurde.
Lösung:
- Entsteht ein Waise, so wird es vom
init
-Prozess “adoptiert”.- Ein Waise ist ein Prozess, der noch ausgeführt wird, aber dessen Vater bereits terminiert ist.
Punkte Frage A-DF3979B1 (erreichbar 1):
Frage A-54B3DA74: Welche der folgenden Aussagen zur Sichtbarkeit in C sind korrekt?
- Variablen, die innerhalb eines Blocks deklariert sind (d.h. innerhalb von
{…}
), sind auch nur innerhalb dieses Blocks sichtbar. - Jede Variable ist in allen Blöcken sichtbar.
- Nur Variablen des Typs
int
sind lokal, alle anderen Typen sind global sichtbar. - Globale Variablen werden durch die Präprozessoranweisung
#define_as_global
realisiert.
Lösung:
- Variablen, die innerhalb eines Blocks deklariert sind (d.h. innerhalb von
{…}
), sind auch nur innerhalb dieses Blocks sichtbar.
Punkte Frage A-54B3DA74 (erreichbar 1):
Frage A-3E9C2726: Das Kommando gcc load.c -o register
- ist eine explizite Anweisung an den Lader, alle globalen Variablen in die CPU-Register zu laden.
- ist ein Aufruf an einen C-Compiler zur Übersetzung des Programms
load.c
. - ist ein in C-Programme einbettbarer Assembler-Befehl, der das Laden eines Makros in ein Ausgaberegister (
-o
für output) bewirkt. - erzeugt ausschließlich Objektdateien.
Lösung:
- ist ein Aufruf an einen C-Compiler zur Übersetzung des Programms
load.c
.
Punkte Frage A-3E9C2726 (erreichbar 1):
Frage A-6FA2E9B0: Gegeben sei die folgende Code-Zeile:
Welche Aussagen sind korrekt:
- Der erste Aufrufparameter ist ein Zeiger/Pointer.
- Der zweite Aufrufparameter wird durch Wertübergabe (by-value) übergeben.
- Für den ersten Parameter können nur Konstanten übergeben werden, aber keine Variablen.
- Die Funktion kann mit keinem, einem oder zwei Parametern aufgerufen werden.
Lösung:
- Der erste Aufrufparameter ist ein Zeiger/Pointer.
- Der zweite Aufrufparameter wird durch Wertübergabe (by-value) übergeben.
Punkte Frage A-6FA2E9B0 (erreichbar 1):
Frage A-D5D291D4: Welche der folgenden Aussagen zu Definitionen und Deklarationen sind korrekt?
- Jede Definition ist auch eine Deklaration.
- Zwischen Definition und Deklaration besteht kein Unterschied. Beide Begriffe sind synonym.
-
int a;
ist in C eine Definition. -
extern int a;
ist in C eine Definition.
Lösung:
- Jede Definition ist auch eine Deklaration.
int a;
ist in C eine Definition.
Punkte Frage A-D5D291D4 (erreichbar 1):
Frage A-442F34E0: Was bewirkt die Zuweisung i = &j;
in nachstehendem Beispiel?
-
j
wird miti
binär UND-verknüpft und das Ergebnis ini
gespeichert. - Die Zuweisung existiert nicht in dieser Form und liefert einen Fehler beim Übersetzen.
- Die Adresse des Speicherbereiches der Variable
j
wirdi
zugewiesen. -
i
undj
haben den gleichen Wert.
Lösung:
- Die Adresse des Speicherbereiches der Variable
j
wirdi
zugewiesen.
Punkte Frage A-442F34E0 (erreichbar 1):
Fragenblock B: Lückentext
Hinweis: Ergänzen Sie in diesem Fragenblock bitte die im Text durch […] markierten Lücken. Verändern Sie sonst keinen Text in diesem Fragenblock.
Frage B-73A689B5:
Ergänzen Sie in nachfolgendem Programmcode die gekennzeichneten Stellen entsprechend der im Quellcode stehenden Kommentare!
Punkte Frage B-73A689B5 (erreichbar 3):
Frage B-3DEB039F:
Wir haben die folgenden Dateien im Projekt und wir möchten die Projektkompilierung mit Makefiles vereinfachen. Ergänzen Sie die Lücken mit entsprechenden Einträgen (Makefile commands)
Dateien:
main.c
message.c
message.h
Punkte Frage B-3DEB039F (erreichbar 4):
Frage B-C3268B90:
Betrachten Sie den weiter unten stehenden Code eines Programms, das einen Chat zwischen einem Client und einem Server ermöglicht. Beantworten Sie die folgenden Fragen:
Auf welchem Port erwartet der Server eingehende Verbindungen?
4711
In welcher Zeile des Programms nimmt der Server eine eingehende Verbindung mit dem Client entgegen?
33
In welcher Zeile des Programms stellt der Client eine Verbindung zum Server her?
54
In welcher Zeile des Programms sendet der Client eine Nachricht zum Server?
65
In welcher Zeile des Programms wartet der Server auf eine eingehende Nachricht von einem verbundenen Client?
43
Die Eingabe eines welchen Schlüsselwortes beendet regulär die Verbindung zwischen Client und Server?
quit
Punkte Frage B-C3268B90 (erreichbar 6):
Frage B-CBEC40F1:
Ergänzen Sie in nachfolgendem Programmcode die gekennzeichneten Stellen entsprechend der im Quellcode stehenden Kommentare!
Punkte Frage B-CBEC40F1 (erreichbar 5):
Frage B-D1676B96:
Vervollständigen Sie nachfolgenden Programmcode an den gekennzeichneten Stellen entsprechend der Vorgaben im Quelltext.
Punkte Frage B-D1676B96 (erreichbar 6):
Fragenblock C: Freitext
Hinweis: Beantworten Sie in diesem Block die Fragen, indem Sie Ihre Antwort an die mit “Antwort:” markierte Stelle und die folgenden Zeilen eintragen. Verändern Sie sonst keinen Text in diesem Fragenblock.
Frage C-9CB6B1C7:
Ein Programm verwendet eine einfach verkettete Liste, in der Ganzzahlwerte gespeichert werden wie folgt:
Die Liste wird durch den Zeiger auf das erste Element repräsentiert (head).
Erstellen Sie drei Hilfsfunktionen zur Arbeit mit der Liste:
Antwort:
Antwort:
Antwort:
Punkte Frage C-9CB6B1C7 (erreichbar 10):
Frage C-1AC45831:
Geben Sie die Deklaration einer Funktion an, die folgende Eigenschaften erfüllt:
- Der Rückgabewert der Funktion ist ein
FILE
Pointer - Der Funktionsname ist Ihr Nachname
- Die Funktion erwartet keine Parameter
Antwort: FILE* [IhrNachname](void);
// void
hier optional
Punkte Frage C-1AC45831 (erreichbar 1):
Frage C-87982B15:
Geben Sie die Deklaration einer Funktion an, die folgende Eigenschaften erfüllt:
- Die Funktion gibt keinen Wert zurück
- Der Funktionsname ist Ihr Nachname
- Die Funktion erwartet als ersten Parameter einen Ganzzahlwert, als zweiten Parameter einen Zeiger auf eine doppelt genaue Fließkommazahl
Antwort: void [IhrNachname](int first, double *second);
Punkte Frage C-87982B15 (erreichbar 1):
Frage C-1E53E263:
Schreiben Sie ein Programm, welches eine beliebige Anzahl an positiven Ganzzahlwerten auf der Kommandozeile entgegennimmt und das Maximum dieser Zahlen ausgibt.
Antwort:
Punkte Frage C-1E53E263 (erreichbar 6):
Frage C-D31EF298:
Geben Sie die Definition einer Funktion an, die folgende Eigenschaften erfüllt:
- Die Funktion erwartet zwei Ganzzahlwerte und berechnet deren Summe
- Das Ergebnis wird als Ganzzahlwert zurückgegeben
- Der Name der Funktion sei “sum”.
Antwort:
Punkte Frage C-D31EF298 (erreichbar 2):