Unix­1 im Wintersemester 1994/95

3. Übungsblatt

Aufgabe 1  (theoretisch, 5 Punkte)

Beschreibe in Stichpunkten, was genau bei den Systemcalls open() und close() kernelintern abläuft!  Dabei sollten auch Begriffe wie namei(), inode table, file table, user filedescriptor table und reference counter erscheinen.

Aufgabe 2  (theoretisch, 1 Punkt)

Wieso hat man beim Entwurf von Unix extra eine globale File­Table angelegt und Informationen wie Read/Write­Offset und Zugriffsmodus nicht einfach in der incore inode table untergebracht?

Aufgabe 3  (theoretisch, 2 Punkte)

Was ist der Unterschied zwischen den Reference­Counter und dem Link­Counter eines Inodes? Besitzt ein Inode überhaupt ständig beides? Begründung!

Aufgabe 4  (theoretisch, 2 Punkte)

Beschreibe einen Algorithmus "pwd", der das aktuelle Verzeichnis (current working directory) ausgibt und sich dabei nur der Funktionen stat(), opendir() und readdir() bedient!  Denke bitte auch an die Abbruchbedingung!

Aufgabe 5  (praktisch, 10 Punkte)

Schreibt eine kleine Shell msh Zunächst soll die msh nur die nachfolgend aufgeführten builtin­Kommandos bereitstellen:

Benutzt die in der letzten Aufgabe implementierten Routinen parseline() und readline() Als Erweiterung sind die C­Quelldateien builtin.c, prompt.c und ls.c zu schreiben. 

builtin.c:
	int do_builtin (struct kommando *kp)
prompt.c:
	void show_prompt ()
ls.c:
	void do_ls (struct kommando *kp)
In der Datei main.c ist wiederum die Testumgebung für die implementierten Module zu schreiben.  Wenn es sich bei einem Kommando nicht um ein builtin­Kommando handelt, ist eine geeignete Fehlermeldung auszugeben.

Beispiel:

	[3:00am] [.../ueb/ueb5] > la /bin/builtin.c ; cd ..
	[3:01am] [.../foo/ueb] > ls
	msh: Command not found.
	[3:02am] [.../foo/ueb] > cd ; la ueb/ueb5
	[3:02am] [.../f/foo] > exit
Der Tilde­Operator braucht nicht implementiert zu werden.  Die Funktionen ftw() und scandir() sollen nicht benutzt werden.