Sigaction(), Dateisysteme, Mutex, Monitor

Wir haben u.a. folgende Fragen per Mail erhalten:

1.) Was ist der Unterschied zwischen sigaction(2) und sigprocmask(2), wann lohnt es das Eine über das Andere jeweils zu benutzen und wann braucht man jeweils ein sigemptyset?

2.) Wo liegt der Unterschied zwischen einer Master-File-Table und einer Inode-Table?

3.) Mutex vs. binärer Semaphor: Was wäre ein Grund dafür, den kritischen Abschnitt vor Prozesswechsel zu schützen, also einen Mutex zu nutzen statt einen binären Semaphor?

4.) Wie wird ein Mutex durchs Betriebssystem realisiert?

5.) Existiert meist ein Monitor pro Bedingungsvariable oder ein Monitor für alle Bedingungsvariablen?

  1. Mit sigaction() kannst du das Signal u.a. ignorieren, mit sigprocmask() blockieren. Nur mit letzterem werden „verpasste“ Signale nach dem deblockieren nachträglich zugestellt anstatt verloren zu gehen. sigemptyset() ist zum Initialisieren des Arguments nötig. Mehr Infos dazu in den Manpages & Folien.
  2. Den MFT gibt es nur bei NTFS, Inode-Tabellen gibt es in zahlreichen UNIX-Dateisystemen. Der MFT erfüllt in NTFS eine ähnliche Funktion wie Inode-Tabellen in UNIX-Dateisystemen.
  3. Mutexe erlauben eine effizientere Implementierung und erlauben hier besseren Schutz vor Programmierfehlern.
  4. Das ist nicht Stoff von SP, wie das geht lernt ihr in BS/BST. Zur Info: Es kann u.a. CAS hierzu verwendet werden (man braucht aber noch mehr), damit bekommt man ein Spinlock und einen Scheduler und kann dann mit den beiden Sachen einen Mutex bauen.
  5. Ich denke meist ein Monitor pro Bedinungsvariable.