Sie sind auf Seite 1von 6

1 Prozesse und Scheduling (16 Punkte)

a) UNIX Shell (insgesamt 5 Punkte)


1) „$ ls > Dateien.txt“ (2 Punkte) Was bewirkt die Ausführung dieses Kommandos in einer UNIX-Shell?

2) „$ cat Dateien.txt | grep txt“ (3 Punkte) Was bewirkt die Ausführung dieses Kommandos in einer
UNIX-Shell?

b) Prozess-Scheduling (FCFS) (5 Punkte) Ein Betriebssystem verwaltet drei zyklisch-arbeitende Pro-


zesse P1, P2 und P3. Die Prozesse treffen zum Zeitpunkt der in der Tabelle angegebenen Ankunftszeit
ein. In der folgenden Tabelle sind alle Zeitangaben in ms angegeben.
Prozess Ankunftszeit CPU-Zeit E/A-Zeit
P1 20 40 20
P2 30 20 10
P3 0 30 40
Zeichnen Sie in das folgende Gantt-Diagramm ein, wie die drei Prozesse P1, P2 und P3 abgearbeitet
werden, wenn das Scheduling nach der First-Come First-Served -Strategie vorgenommen wird. Jeder
Prozess ist nach erfolgreicher Abarbeitung von je einem CPU- und einem E/A-Stoß wieder rechen-
bereit. Auf einen CPU-Stoß folgt immer ein E/A-Stoß. Die Prozessumschaltzeit kann vernachlässigt
werden. E/A-Vorgänge können parallel zu anderen E/A-Vorgängen und CPU-Stößen ausgeführt wer-
den. Markieren Sie in dem folgenden Diagramm die Prozesszustände entsprechend der Legende. Es
genügt die ersten 200ms anzugeben.
Hinweis: Die ersten drei Zeiteinheiten sind bereits fertig ausgefüllt.

P1 Legende:
Running
P2
Ready
P3 Blocked
t[ms]
0 100 200
(Ersatzdiagramm auf dem Reserveblatt: Streichen Sie ungültige Lösungen deutlich durch!)

Probeklausur Betriebssysteme, 25.06.2018 Seite 1 von 6


c) Prozesserzeugung (6 Punkte) Was gibt das folgende C-Programm aus? Was bewirken die Funktionen
fork und pthread_create?
Hinweis: Fehlerabfragen und die #include-Zeilen zur Einbindung der Systemheader wurden der Einfachheit
halber weggelassen.

1 #d e f i n e GALAXIES_BOUND 10
2 int worlds , g a l a x i e s ;
3 pthread_t demiurge ;
4
5 v o i d ∗ p o p u l a t e G a l a x i e s ( v o i d ∗ param ) {
6 int i ;
7 f o r ( i =0; i <GALAXIES_BOUND ; i ++) g a l a x i e s ++;
8 p r i n t f ( "%d␣%d␣ " , w o r l d s , g a l a x i e s ) ;
9 p t h r e a d _ e x i t (NULL ) ;
10 }
11
12 v o i d ∗ c r e a t e U n i v e r s e ( v o i d ∗ param ) {
13 w o r l d s ++;
14 p t h r e a d _ c r e a t e (& d e m i u r g e , NULL , p o p u l a t e G a l a x i e s , NULL ) ;
15 p t h r e a d _ j o i n ( d e m i u r g e , NULL ) ;
16 r e t u r n NULL ;
17 }
18
19 i n t main ( v o i d ) {
20 worlds = 0;
21 galaxies = 0;
22
23 i f ( f o r k ( ) == 0 ) {
24 c r e a t e U n i v e r s e (NULL ) ;
25 } else {
26 w a i t (NULL ) ;
27 c r e a t e U n i v e r s e (NULL ) ;
28 }
29 return 0;
30 }

Ausgabe:

Probeklausur Betriebssysteme, 25.06.2018 Seite 2 von 6


2 Synchronisation und Verklemmungen (14 Punkte)

a) Synchronisation (insgesamt 10 Punkte)


1) Mutex (2 Punkte) Erläutern Sie den Begriff Mutex im Kontext von Betriebssystemen.

2) Semaphore (2 Punkte) Erläutern Sie den Begriff Semaphore im Kontext von Betriebssystemen.

3) Race-conditions Ein Entwickler möchte mittels Threads einen Zähler inkrementieren. Um sicherzustel-
len, dass sein Programm richtig funktioniert, gibt er nach der Abarbeitung eines jeden Threads den aktuellen
Wert des Zählers aus. Die folgende Ausgabe bereitet ihm Sorgen: 2585, 5238, 3238, 9238, 11238, 7238.
Analysieren Sie nun sein Programm:

1 #d e f i n e NTHREADS 6
2 int counter = 0;
3 p t h r e a d _ t t h r e a d s [ NTHREADS ] ;
4
5 void ∗ count ( void ∗ arg ) {
6 int i ;
7 f o r ( i =0; i <2000; i ++) c o u n t e r ++;
8 p r i n t f ( "%d , " , c o u n t e r ) ;
9 p t h r e a d _ e x i t (NULL ) ;
10 }
11
12 i n t main ( v o i d ) {
13 int i ;
14 f o r ( i =0; i <NTHREADS ; i ++) p t h r e a d _ c r e a t e (& t h r e a d s [ i ] , NULL , count , NULL ) ;
15 f o r ( i =0; i <NTHREADS ; i ++) p t h r e a d _ j o i n ( t h r e a d s [ i ] , NULL ) ;
16 return 0;
17 }

Wieso ist das Endergebnis nicht 12000? (2 Punkte)

Probeklausur Betriebssysteme, 25.06.2018 Seite 3 von 6


Helfen Sie nun dem Entwickler sein Programm zu synchronisieren. Notieren Sie dazu, hinter den folgenden
beiden Funktionen, die Programmzeilen nach welchen Sie diese Funktionen einfügen würden. Sie können
davon ausgehen, dass die Schlossvariable bereits initialisiert wurde. (2 Punkte)

pthread_mutex_lock(&lock):

pthread_mutex_unlock(&lock):

b) Verklemmungen (6 Punkte) Wenn eine geschlossene Kette wechselseitig wartender Prozesse existiert
(circular wait, also ein Zyklus im Betriebsmittelbelegungsgraphen), liegt eine Verklemmung vor. Nen-
nen Sie stichpunktartig die drei Vorbedingungen, die erfüllt sein müssen, damit es überhaupt zu einer
Verklemmung kommen kann, und erklären Sie diese jeweils kurz mit eigenen Worten.

3 Speicherverwaltung und Virtueller Speicher (11 Punkte)

a) Speichersegmentierung (4 Punkte) Geben Sie für die Speicheranfragen (logische Adressen) 0x0000BEEF
und 0x1CEB00DA die physikalische Adresse unter Anwendung des Speichersegmentierungsverfahrens
an. Die höchstwertigen 8 Bit der logischen Adresse geben die Position innerhalb der Segmenttabelle
an. Löst eine Speicheranfrage eine Zugriffsverletzung aus, so machen Sie dies bitte kenntlich.

Segmenttabelle:
Startadresse Länge
0010 0000 00E016 21 20FF16 logische Adresse: 0x0000BEEF 16
0110 B542 000016 01 000016 → physikalische Adresse:

0210 0515 000016 20 000016


0310 0006 000016 00 FFFF16 logische Adresse: 0x1CEB00DA16
... → physikalische Adresse:

2810 0001 000016 FF FFFF16

Probeklausur Betriebssysteme, 25.06.2018 Seite 4 von 6


b) Buddy-Verfahren (3 Punkte) Gegeben sei ein freier Arbeitsspeicher der Größe 32 MiB. Die Prozesse A,
B, C und D fordern nacheinander Speicher ein. Ergänzen Sie die folgenden Tabellen um Markierungen
für die Anfragen. Nutzen Sie das Buddyverfahren zur dynamischen Speicherverwaltung. Für den ersten
Prozess A wurde der Speicher bereits allokiert.
Hinweis: Falls eine Belegung/Freigabe nicht erfüllt werden kann, kennzeichnen Sie die betreffende
Zeile geeignet.
Wichtig: Beachten Sie, dass ein Feld in den Tabellen zwei MiB entspricht!

Prozess A: Prozess A belegt 6 MiB

0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30

A A A A

Prozess B: Prozess B belegt 9 MiB

0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30

Prozess C: Prozess C belegt 1 MiB

0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30

Prozess D: Prozess D belegt 6 MiB

0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30

Probeklausur Betriebssysteme, 25.06.2018 Seite 5 von 6


c) LRU (4 Punkte) In einem System mit Seitenadressierung und der Seitenersetzungsstrategie LRU (Least
Recently Used ) tätigt ein Prozess Seitenzugriffe entsprechend folgender

Referenzfolge: 5, 3, 5, 1, 2, 5, 4, 6, 1

Das Betriebssystem sieht für diesen Prozess eine feste Anzahl von drei Hauptspeicherkacheln vor.
Tragen Sie in die Tabelle unter „Hauptspeicher“ jeweils die Nummer der Seite ein, die zum gegebenen
Zeitpunkt in der jeweiligen Kachel eingelagert ist. Die Felder unter „Kontrollzustände“ können Sie zum
Notieren des Alters der eingelagerten Seiten zuhilfenehmen.

Referenzfolge 5 3 5 1 2 5 4 6 1

Hauptspeicher Kachel 1 5
Kachel 2
Kachel 3
Kontrollzustände Kachel 1 0
Kachel 2
Kachel 3

4 Ein-/Ausgabe und Dateisysteme (4 Punkte)

a) Eingabe- und Ausgabe-Geräte (2 Punkte) Nennen Sie vier E/A-Geräte.

b) Direct Memory Access (DMA) (2 Punkte) Was bedeutet DMA-getriebene Ein- und Ausgabe (E/A)?

Probeklausur Betriebssysteme, 25.06.2018 Seite 6 von 6

Das könnte Ihnen auch gefallen