A Uebungen zur Vorlesung Betriebssysteme

1 Grundkenntnisse Kommandozeile

Lesen Sie bitte folgendes:

Siehe auch die Kapitel Absolut Basics und General overview of the Linux file system aus Online-Guide Introduction to Linux.

Kreieren Sie ein Verzeichnis bs (in Ihrem Heimverzeichnis) und darin ein Verzeichnis ticker. Kopieren Sie das File ticker.c in dieses Verzeichnis. Sie finden das File ticker.c unter ~/Share/kurs. Bitte nur die Kommandozeile (Shell) benutzen.

2 Remote arbeiten

Arbeiten Sie über SSH auf der maggie (Linux Box) und der margaret oder der selma (Solaris). Benutzen Sie Sun Secure Global Desktop (aka Tarantella) und testen Sie KDE auf der maggie aus. Details siehe HSZ-T Informatik Infrastruktur Tutorial

3 Programmieren in C

Uebersetzen Sie ticker.c aus der Uebung 1 (http://pubwww.hsz-t.ch/~pschmid/bs/practice/ticker/ticker.c). Passen Sie das Programm so an, dass es neben der Message auch die Uhrzeit (auch mit Datum, wenn das einfacher ist) und die Process ID anzeigt. Siehe auch

$ man 2 getpid
$ man 2 time
$ man 3 ctime
$ man 3 printf

Unter Solaris muss für den Abschnitt (Section) die Option -s eingegeben werden, z.B. man -s3c printf Uebersetzen Sie ticker.c unter Ihrem Knoppix:

$ cc -o ticker ticker.c

Gibt es Unterschiede zu Solaris (Sie können selma verwenden)?

Zustazaufgabe: Aendern Sie das Programm so, dass die Optionen -t time (Pause zwischen der Ausgabe in s) und -c count (Anzahl Ausgaben) eingegeben werden können. Tip: siehe man 3 getopt und GNU libc getopt Beispiel

4 Prozesse von der Kommandozeile aus kontrollieren (Shell Job Control)

Lesen Sie das Kapitel 4 aus Introduction to Linux über Prozesse bis 4.1.5.

  • Starten Sie den Prozess/Programm ticker. Wie kann man den Prozess beenden? Wie findet man die PID heraus? Was geschieht, wenn man ^Z eingibt?
  • Was passiert, wenn der Elternprozess (Terminal bzw. Shell) beendet wird? Kann man das verhindern und wie?
  • Starten Sie den Prozess/Programm ticker im Hintergrund. Beenden Sie den Prozess aus einem anderen Terminal.

5 Signale

Ergänzen Sie das Programm ticker so, dass wenn der Prozess die Signale SIGUSR1 und SIGUSR2 empfängt, der Prozess auf den Standard Out den Text "received SIGUSR1" bzw. "received SIGUSR2" ausgibt. Siehe Basic Signal Handling aus der GNU C Library

6 Systemadiminstration unter Knoppix

Damit Sie sich als Sysadmin betätigen können, brauchen Sie root Privilegien. Auf unseren Standard-Installationen in den PC-Zimmern ist das nicht möglich, doch die PCs lassen sich auch über das Netz mit Knoppix booten. Bevor der Bootmanager startet, die Funktionstaste .

  • Eröffnen Sie Benutzer-Konti für ihre Kollegen in der gleichen Bankreihe.
  • Ermöglichen Sie diesen neuen Benutzern über SSH auf Ihre Maschine zuzugreifen. Gibt es noch andere Möglichkeiten um anderen Benützern auf Ihrem Rechner remote arbeiten zu lassen?
  • Richten Sie einen Samba- und einen NFS-Share ein.
  • Mounten Sie die Shares Ihrer Kollegen.

6.1 Knoppix im Netzwerk

  • Mounten Sie jay.hsz-t.ch:/nfs/home über NFS. Was fällt Ihnen bei den Ownern auf? Gibt es da Sicherheitsprobleme?
  • Mounten Sie über SMB Ihr NT-Profile \\jay\profiles\USER und Ihr Heimverzeichnis \\jay\USER. Was ist anders als bei NFS?.

7 Einfaches Beispiel fork/exec

  • Uebersetzen Sie fork.c.
  • Wird die Stelle "erreiche ich jemals diese Stelle?" erreicht? Begründen Sie Ihre Antwort.
  • Ergänzen Sie das Programm, damit es auch die PID des Elternprozesses ausgibt.

8 Einfaches Beispiel Pthread

Das Beispiel race_condition.c ist mit fork/exec gelöst. Aendern Sie das Programm so, dass es mit Pthreads statt mit Prozessen funktioniert. Verwenden Sie die Systemcalls pthread_create und pthread_join. Eine gute Einführung zu Pthreads finden Sie unter http://www.llnl.gov/computing/tutorials/pthreads/ und http://en.wikipedia.org/wiki/POSIX_Threads.

Programme die Pthreads benutzen, übersetzt man auf Solaris folgendermassen (-lm ist für die Math-Library):

$ cc -mt -lpthread -lm -o race_condition race_condition.c

Unter GNU/Linux braucht es die Option -mt nicht.

  • Aendern Sie die Anzahl Loops. Was beobachten Sie?
  • Lassen Sie das Programm auf einer anderen Maschine laufen (unterschiedliche Architektur, unterschiedliche Anzahl von Prozessoren). Sind Unterschiede feststellbar? Wie erklären Sie sich das?

9 Bestimmung von Schedules

Gegeben sind 5 Prozesse mit folgenden Ankunfts- und Rechen- resp. Bedienzeiten:

Prozess Ankunftszeit Ts Rechenzeit Tb
1 0T 10T
2 3T 3T
3 4T 4T
4 5T 4T
5 5T 8T

  1. Bestimmen Sie für FCFS Scheduling die mittlere Bedienzeit Tb, die mittlere Wartezeit Tw und die mittlere Turnaroundzeit Ta, unter der Annahme, dass keiner der Prozesse blockiert.
  2. Bestimmen Sie für Round Robin Scheduling die mittlere Bedienzeit Tb, die mittlere Wartezeit Tw und die mittlere Turnaroundzeit Ta für q = 1.
  3. Zeichnen Sie für Multilevel Feedback Scheduling ohne dynamische Prioritäten den zeitlichen Ablauf der Prozesse. Die Prozesse kommen beim Start in die Queue mit der höchsten Priorität (P0 = 0) und werden jeweils nach Ablauf des Zeit-Quantums in die nächst tiefere Prioritäts-Queue (Pn = P(n-1)+1) eingereiht. Das Zeit-Quantum ist abhänig von der Queue und beträgt Qn = 2^n, d.h. je tiefer die Prioriät desto länger das Zeit-Quantum (jeweils eine Verdoppelung).

10 Anwendung von Posix Semaphore

Das in Uebung 8 verwendete Programm race_condition_thread.c soll so geändert werden, dass durch die Anwendung von einem Posix Semaphor die beiden Threads synchronisiert werden. Die Ausgabe sollte etwa so aussehen:

pschmid@selma:~/www/bs/practice/solutions/p10 > ./semaphore
Ausgabe vom Haupt-Thread
Ausgabe vom Thread
Ausgabe vom Haupt-Thread
Ausgabe vom Thread
Ausgabe vom Haupt-Thread
Ausgabe vom Thread
Ausgabe vom Haupt-Thread
Ausgabe vom Thread
Ausgabe vom Haupt-Thread
Ausgabe vom Thread
Ausgabe vom Haupt-Thread
Ausgabe vom Thread
Ausgabe vom Haupt-Thread
Ausgabe vom Thread
Ausgabe vom Haupt-Thread
Ausgabe vom Thread
Ausgabe vom Haupt-Thread
Ausgabe vom Thread
Ausgabe vom Haupt-Thread
pschmid@selma:~/www/bs/practice/solutions/p10 >

Braucht es für diese Aufgabe zwei Semaphoren oder genügt eine?

#include <semaphore.h>
int sem_init(sem_t *sem, int pshared, unsigned int value);
int sem_wait(sem_t *sem);          /* P(sem), wait(sem),   down(sem) */
int sem_post(sem_t *sem);          /* V(sem), signal(sem), up(sem) */

Siehe auch

Beispiel wie man Programm uebersetzt (Solaris):

$ cc -mt -lpthread -lm -lrt -o semaphore semaphore.c

Unter GNU/Linux braucht es die Option -mt nicht.

11 Uebung zu Deadlocks

Gegeben sind mehrere gleichartige Prozesse, die über die Semaphore S1 und S2 synchronisiert werden. Bei welchen der folgenden Codesequenzen besteht die Gefahr eines Deadlocks?

down(S1) . . . down(S2) . . .  up(S1) . . . down(S1) . . .  up(S1) . . .  up(S2)

down(S1) . . .  up(S1) . . . down(S1) . . . down(S2) . . .  up(S2) . . .  up(S1)

down(S2) . . .  up(S2) . . . down(S1) . . .  up(S1) . . . down(S2) . . .  up(S2)

Gegeben sind drei Prozesse P1, P2 und P3, sowie vier Ressourcen R1, R2, R3 und R4.

Prozess hat alloziert fordert an
P1 R1 R2
P2 R4 R1, R2, R3
P3 R3 R2, R4

Welche angeforderten Ressourcen können welchen Prozessen zugesprochen werden, ohne dass ein Deadlock ensteht?

12 Synchronisation mit Unnamed Pipes

Vervollständigen Sie das Programm pipe.c so, dass mit zwei Unnamed Pipes der Eltern- und der Kindprozess synchronisiert werden. Eine Pipe (fd_p2c) dient der Kommunikation von Eltern- zu Kindprozess , die andere (fs_c2p) der Kommunikation von Kind- nach Elternprozess. Tip: lesen blockiert.

Siehe man 3p pipe für Linux und man -s 2 pipe für Solaris. In die Pipe wird mit read und write geschrieben. Beispiel:

read(fd_p2c[0], buffer, 2);  // aus der Pipe lesen
write(fd_p2c[1], buffer, 2); // in die Pipe schreiben

Die Ausgabe sollte etwa so aussehen:

pschmid@selma:~/www/bs/practice/solutions/p12 > ./pipe
Ausgabe vom Elternprozess
Ausgabe vom Kindprozess
Ausgabe vom Elternprozess
Ausgabe vom Kindprozess
Ausgabe vom Elternprozess
Ausgabe vom Kindprozess
Ausgabe vom Elternprozess
Ausgabe vom Kindprozess
Ausgabe vom Elternprozess
Ausgabe vom Kindprozess
Ausgabe vom Elternprozess
Ausgabe vom Kindprozess
Ausgabe vom Elternprozess
Ausgabe vom Kindprozess
Ausgabe vom Elternprozess
Ausgabe vom Kindprozess
Ausgabe vom Elternprozess
Ausgabe vom Kindprozess
Ausgabe vom Elternprozess
Ausgabe vom Kindprozess
pschmid@selma:~/www/bs/practice/solutions/p12 >

13 Memory Management, Virtual Memory

13.1 Dynamischer Speicherallokation

In einem System mit dynamischer Speicherallokation sind folgende Löcher vorhanden (in aufsteigender Reihenfolge der Adressen): 10KB, 4KB, 20KB, 18KB, 7KB, 9KB, 12KB und 15KB.

Welche Löcher werden alloziert, wenn nacheinander Segmente der Grösse 12KB, 10KB und 9KB angefordert werden mit a) first-fit, b) next-fit und c) best-fit?

13.2 Partition

Gegeben ist ein System mit mehreren gleichen Partitionen der Grösse 2^16 Bytes und einer gesamten Speichergrösse von 2^24 Bytes. Für jeden geladenen Prozess unterhält das Betriebssystem eine Tabelle mit Zeigern auf die einzelnen Partitionen.

Aus wie vielen Bits muss ein Zeiger im Minimum bestehen?

13.3 Paging

Gegeben ist ein einfaches Paging System mit folgenden Parametern: physikalischer Speicher 2^32 Bytes, Pagegrösse 2^10 Bytes und 2^16 Pages im logischen Adressraum.

  • Aus wie vielen Bits besteht die logische Adresse?
  • Wie viele Bytes enthält ein Frame?
  • Wie viele Bits der physikalischen Adresse werden für die Frameadresse benötigt?
  • Wie viele Einträge hat eine Page Tabelle?
  • Wie viele Bits werden im Minimum pro Tabelleneintrag benötigt? Nehmen Sie an, dass jeder Eintrag ein valid Bit benötigt.

13.4 LRU, FIFO und OPTIMAL

Ein Prozess besteht aus 8 virtuellen Pages und hat 4 Page Frames fix zugewiesen. Der Prozess referenziert folgende Pages: 1, 0, 2, 2, 1, 7, 6, 7, 0, 1, 2, 0, 3, 0, 4, 5, 1, 5, 2, 4, 5, 6, 7, 2.

Zeigen Sie für LRU, FIFO und OPTIMAL, welche Pages in welchen Frames abgelegt werden.

14 File Systeme und File Management

14.1 I-Nodes

Ein UNIX File System hat 1KB grosse Diskblöcke und 4 Byte grosse Diskblock Adressen. Wie gross kann ein File maximal sein, wenn der I-Node 10 direct Pointer, 1 single, 1 double und 1 triple indirect Pointer enthält?

14.2 Free Block Bitmap

Nachdem ein Disk neu formatiert wurde, sieht die Bitmap der Free Block List folgendermassen aus: 1000 0000 0000 0000 (der erste Block wird für das Root-Verzeichnis gebraucht). Nachdem das File foo, das 6 Disk Blöcke benötigt, auf den Disk geschrieben wurde, sieht die Bitmap wie folgt aus: 1111 1110 0000 0000. Erstellen Sie die Bitmap, wenn jeweils folgende Fileoperationen ausgeführt wurden:

  1. File bar wird geschrieben, 5 Blöcke werden benötigt
  2. File foo wird gelöscht
  3. File foobar wird geschrieben, 8 Blöcke werden benötigt
  4. File bar wird gelöscht

14.3 Loopdevice

ext2 formatiertes Loopdevice erstellen

$ dd if=/dev/zero of=ext2.img bs=1k count=10000
# losetup /dev/loop0 ext2.img
# mke2fs -c /dev/loop0 10000
# mkdir /mnt/ext2
# mount -t ext2 /dev/loop0 /mnt/ext2

FAT formatiertes Loopdevice erstellen

$ dd if=/dev/zero of=fat.img bs=1k count=10000
# losetup /dev/loop1 fat.img
# mkdosfs -c /dev/loop1 10000
# mkdir /mnt/fat
# mount -t msdos /dev/loop1 /mnt/fat

Erstellen Sie Textfiles mit einem Editor Ihrer Wahl in diesen Filesystemen. Schauen Sie den Inhalt mit khexedit an. Verschieben, kopieren und löschen sie die Files innerhalb der Filesysteme.

  • Was beobachten Sie im khexedit?
  • Was passiert beim Kopiervorgang (cp), wie unterscheidet sich der Verschiebevorgang (mv). Betrachten Sie jeweils das FAT- und das EXT2-Filesystem.
  • Können Sie gelöschte Files wieder herstellen?

Erstellen Sie Hard- und Softlinks.

  • Wie unterscheiden sich diese Links?
  • Was geschieht, wenn Links gelöscht werden?
  • Funktionieren Links auch über Filesysteme aus?

15 I/O

15.1 Zugriff auf Disk

Ein 5 MiB (1 MiB = 1024 * 1024 B) grosses File soll auf den Disk geschrieben werden. Daten werden in Clustern mit 8 Blöcken geschrieben, die Cluster sind zufällig über den Disk verteilt. Für den Disk gilt: Blockgrösse 512 Bytes, Seek Time ts 8ms, 7200 U/Min. Wie lange dauert es, das File auf den Disk zu schreiben?

15.2 Interruptverarbeitung

Gegeben ist ein 56 kbps Modem. Der Treiber transferiert ein Zeichen zum Modem und blockiert, bis ein Interrupt meldet, dass das nächste Zeichen transferiert werden kann. Die gesamte Verarbeitung eines Interrupts inklusive Datentransfer zu Modem dauert 100 us. Wie viel Prozent der CPU-Leistung wird durch das Bedienen des Modems aufgebraucht? Nehmen Sie an, dass jedes Zeichen ein Start und Stop Bit hat, d.h. jedes Zeichen besteht aus 10 Bits.

15.3 Powermanagement

Das Power Management System eines Prozessors erlaubt es, die Versorgungsspannung um den Faktor n zu senken, dabei sinkt gleichzeitig die Clockfrequenz auf 1/n des ursprünglichen Wertes und der Leistungsverbrauch auf 1/n2. Was ist der optimale Wert von n unter der Annahme, dass ein Anwender 1 Zeichen pro Sekunde eingibt und die Verarbeitung eines Zeichens 100 ms Rechenzeit benötigt. Wie viel Energie in Prozent kann eingespart werden? Nehmen Sie dazu an, dass die CPU keine Energie verbraucht, wenn Sie nichts zu tun hat und vernachlässigen Sie die restlichen Rechnerkomponenten.

B Uebungen zur Vorlesung Verteilte Systeme

1 Domain Name System

1.1 Suchreihenfolge, andere Nameserver

Aendern Sie ihr Knoppix so, dass wenn nur ein Host-Name (kein FQDN) eingegeben wird, zuerst in der Domain switch.ch. gesucht wird. Als Nameserver sollen die Public Domain Name Servers von Google verwendet werden (8.8.8.8 und 8.8.4.4).

1.2 Caching Nameserver

Richten Sie ihr Knoppix so ein, dass der Namserver des lokalen Systems verwendet wird. Testen Sie die Namensauflösung mit nslookup oder einem anderen Tool.

1.3 Eigene Zone (Aufgabe für 2er-Gruppen)

Richten Sie eine eigene Zone ubs.com ein (Autorativer Primary Namserver). Ihr Banknachbar soll ebenfalls einen Nameserver einrichten, der Namserver soll aber der Secondary zu Ihrem Nameserver sein.

Richten Sie den Resolver so ein, dass Ihre und die Nachbarmaschine als Nameserver verwendet werden.

www.ubs.com soll auf Ihre lokale Maschine zeigen (z.B. IP-Adresse 192.168.34.128, zi132-01.hsz-t.ch). Starten Sie Apache und lassen sich die Page mit der URL http://www.ubs.com durch einen Browser anzeigen.

Zusatzaufgabe: Laden Sie die Original-Page der UBS runter und passen Sie den Webserver so an, dass man das Gefühl hat, auf der richtigen Seite zu sein.

Den Firewall nicht vergessen.

2 Kerberos

2.1 Kerberos einrichten

Kerberos Client installieren:

# apt-get update
# apt-get install -t unstable krb5-user

Kerberos so konfigurieren, dass der Realm der HSZ-T benutzt wird. Testen mit kinit user (user durch Ihren HSZ-T-Benutzernamen ersetzen).

2.2 Einloggen ohne Passwort (SSO)

Ziel: über SSH einloggen ohne Passwort aber mit TGT

Kerberos PAM-Library installieren:

# apt-get install -t unstable libpam-krb5

/etc/pam.d/auth-common wird automatisch so angepasst, dass man nun mit dem Kerberos Passwort einloggen kann. Dazu muss natürlich ein Account mit dem selben UID existieren. Das sollte eigentlich schon mit Aufgabe 6 erledigt worden sein. Testen, ob ein Login mit Kerberos-Passwort möglich ist.

Den richtigen Keytab von http://pubwww.hsz-t.ch/~pschmid/bs/practice/solutions/b2/keytabs/ herunterladen und installieren, /etc/ssh/sshd_config, /etc/ssh/ssh_config und ~/.k5login anpassen. Siehe auch http://blogs.interdose.com/sebastian/2008/07/18/ssh-und-kerberos-auf-debian/

3 LDAP

3.1 LDAP Utlities

Zuerst müssen die LDAP-Utilities installiert werden

# apt-get install -t unstable ldap-utils

Damit der LDAP-Server gefunden wird, kann man /etc/ldap/ldap.conf anpassen, sonst muss man auf der Kommandozeile jedesmal angeben, welchen Server man benutzen will.

# Your LDAP server. Must be resolvable without using LDAP.
host   ldap1.hsz-t.ch ldap2.hsz-t.ch

# The distinguished name of the search base.
base   dc=hsz-t,dc=ch

# NDS mappings
nss_map_attribute   uniqueMember member

# OpenLDAP SSL mechanism
# start_tls mechanism uses the normal LDAP port, LDAPS typically 636
ssl   start_tls
ldap_version   3
pam_filter   objectClass=posixAccount
nss_base_passwd   ou=People, dc=hsz-t,dc=ch
nss_base_shadow   ou=People, dc=hsz-t,dc=ch
nss_base_group   ou=group,dc=hsz-t,dc=ch
tls_checkpeer   no

Damit keine Authentifizierung vorgenommen wird, gibt man die Option -x bei ldapsearch an.

Aufgaben: Suchen Sie nach dem eigenen Eintrag im LDAP-Verzeichnis. Stellen Sie fest, zu welchen Gruppen Sie gehören. Wenn Sie die Uebung zuhause machen, können Sie den Rechner maggie.hsz-t.ch benutzen, da der LDAP-Port 389 von der Firewall geblockt wird.

3.2 LDAP für Mailclient (Outlook, Thunderbird)

Richten Sie Ihren Mailclient so ein, dass als globales Adressbuch automatisch LDAP benutzt wird.

3.3 LDAP für Benutzerkonten

# apt-get install -t unstable ldap-libnss-ldap

4 Verteiltes Netzwerk-Filesystem, Verteilter Speicher

4.1 OpenAFS

Erstellen Sie eine eigene AFS-Gruppe mit Ihren Banknachbarn als Mitglieder. Kreieren Sie ein Verzeichnis, auf das Ihre Banknachbarn zugreifen können (Berechtigung über Ihre Gruppe).

Finden Sie heraus, wo sich ihr AFS-Volume physikalisch befindet. Wie gross ist Ihr Quota? Wie sieht das mit dem Verzeichnis /afs/hsz-t.ch/public/sharetp aus?

Siehe auch:

4.2 iSCSI

iqn.1996-04.de.suse:01:ff71100fd23

-- PeterSchmid - 01 Nov 2007

Edit | Attach | Watch | Print version | History: r20 < r19 < r18 < r17 < r16 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r20 - 2010-09-24 - PeterSchmid
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2018 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback