Hallo Harald,
Du hast am Montag gesagt, Theorie duerfe bis zum Tutorium abgegeben
werden. Also hier noch ein Nachtrag, falls unsere Aufgabe 1 zu
unvollstaendig war:

  /**************************************************************/
  /*                                                            */
  /*      UNIX 1 / WS 92/93       Gruppe  ux803                 */
  /*      5. Uebung - Aufgabe 1                                 */
  /*                                                            */
  /*      Vorname     Name        Matrikelnr.                   */
  /*     ---------   -------     -------------                  */
  /*      Dietmar     Dierks        125761                      */
  /*      Roman       Czyborra      127221                      */
  /*      Torsten     Buller        117894                      */
  /*      Gerasimos   Paliatsaras   140956                      */
  /*                                                            */
  /**************************************************************/

a) user file descriptor table
Hier gibt es keinen Reference Counter.
Verweist auf die File Table.

b) file table
Hier ist ein Reference Counter enthalten.
Er zaehlt die Verweise der user file desciptor tables auf diesen Eintrag in
der file table. Immer, wenn ein neuer Zeiger aus der user file descriptor
table auf die file table zeigt, muss der reference counter erhoeht werden.
So wird z.B. beim fork()-Befehl der Reference Counter erhoeht, falls der er-
zeugende Prozess offene Files hatte, die aus der u-area auf die file table
zeigten. Diese Informationen werden an den Sohn-Prozess vererbt und somit
zeigt aus der neuen u-area ebenfalls ein Verweis aus den open files in die
file table. Eine weitere Moeglichkeit, den Reference Counter zu erhoehen,
ist die Funktion dup().

c) inode table
Hier ist ein Reference Counter enthalten.
Er zaehlt die Verweise der File Table auf diesen Eintrag in der inode table.
Immer, wenn ein neuer Zeiger aus der file table in die inode table zeigt,
muss der Reference Counter erhoeht werden. So wird z.B. beim fork()-Befehl
der Reference Counter fuer die cwd- und root directory-Verweise erhoeht.
Ausserdem bewirkt jedes open () auf einen bereits von irgendwem geoeffneten
File eine Inkrementierung.

d) proc table
Hier gibt es keinen Reference Counter.
Die proc table enthaelt nur alle proc structures und es existieren keine
Verweise, die einen Reference Counter "verursachen" wuerden.
Es macht keinen Sinn, wenn es mehrere Zeiger auf einen Prozess geben wuerde.

e) mount table
Hier gibt es keinen Reference Counter.
(enthaelt die device number, Zeiger auf root-inode, Zeiger auf mount-point (der
in der inode table ist) und Zeiger auf den Superblock des Filesystems)


:::::::::::::::::::::NACHTRAG

Zur inode table waere genau genommen zu sagen, dass dort pro Eintrag zwei
reference counters vorhanden sinds, wenn man nlinks noch mitzaehlt, das
die Zahl der hard links auf das disk inode angibt und erhoeht wird,
wenn ein neuer hard link eingerichtet wird, also speziell fuer ein
directory auch dann, wenn ein subdirectory kreiert wird.

Zur Frage, wann werden die counter modifiziert, waere natuerlich nicht
nur zu beantworten, wann diese inkrementiert werden, sondern auch, wann
sie dekrementiert werden:
file table: wenn ein user das file schliesst
inode table: wenn ein file table reference counter 0 erreicht
nlinks: bei unlink(2)

