Betriebssysteme:Aufgaben X

Aus Tudwiki
Version vom 25. Februar 2012, 22:43 Uhr von 92.231.88.242 (Diskussion)

(Unterschied) Nächstältere Version→ | Aktuelle Version (Unterschied) | ←Nächstjüngere Version (Unterschied)
Wechseln zu: Navigation, Suche

X1[Bearbeiten]

X2[Bearbeiten]

X3[Bearbeiten]

X4[Bearbeiten]

X5[Bearbeiten]

Aufgabenstellung:

Erläutern Sie die Begriffe (im Sinne eines Glossars) Prozeßsteuerblock (PCB) – i-node – RPC jeweils unter den Gesichtspunkten Einordnung in das Gebiet Betriebssysteme (ein Stichwort) und Erklärung (Bedeutung, Struktur, Anwendungsbereich o.ä.)!


PCB:

    +---------------------+
    | ID                  |
    +---------------------+
    |Status-Info          |
    +---------------------+
    |Steuer-Info          |
    +---------------------+
    | Betriebsmittel-Info |
    +---------------------+
    | Verwaltungs-Info    |
    +---------------------+

i-node: -enthält Metadaten einer Datei

  • die Zugriffsrechte auf die Datei (Eigentümer-, Gruppen- und sonstige Rechte)
  • den Eigentümer der Datei und die bevorrechtigte Gruppe (UID, GID)
  • den Dateityp (einfache Datei, Verzeichnis, Link,…)
  • die Größe der Datei (in Bytes)
  • einen Referenzzähler (Anzahl der Verweise auf die Datei)
       -Aufruf einer Datei erfolgt über i-node

RPC: -Aufruf von Funktionen in ein anderen Adressraum

    -Technik zur Realisierung von Interprozesskommunikation

X6[Bearbeiten]

X7[Bearbeiten]

X8[Bearbeiten]

X9[Bearbeiten]

X10[Bearbeiten]

X11[Bearbeiten]

a)+b)

Fehler 1: Zeile 12: pipe(fd) wird erst nach dem Forken aufgerufen. Deswegen wurden die beiden fd's des Childs nie initialisiert, somit wird read(fd[0],...) nicht funktionieren

Lösung: pipe(fd) vor der switch-Anweisung(also dem forken in der Bedingung) in Zeile 5 setzen

Fehler 2: Zeile 13: waitpid(pid, 0, 0) Parent wartet auf Child bis es sich beendet und Child wartet auf Parent, der eine Eingabe in die Pipe stecken soll.

Lösung: Zeile 13 und 14 vertauschen, zuerst Input in Pipe schreiben, dann auf das Terminieren des Childs warten

X12[Bearbeiten]

a) Kernaufruf und Standard Library
f wird als file descriptor verwendet, der dem Prozeß eine Zuordnung seiner geöffneten Dateien ermöglicht (indem er sie einfach durchnummeriert)

b) Zugriffe auf Platte sind langsam, und somit ineffizient. Möglichkeiten dies zu verbessern:
(1) gleich mehr auf einmal lesen und puffern
(2) Datei oder Teile davon in den Addressraum (virtueller Speicher) des Prozesses einblenden
(ich denke doch, daß das hier gemeint ist, oder?)

c)

X13[Bearbeiten]

Probleme mit der Daten-Kohärenz, wenn nicht bemerkt wird, das ein Block mehrmals beim Clients im Speicher ist.

Bsp.: Programm 1 liest von gecachten Blöcken. Programm 2 liest aus der neu vom Server geholten Datei die betreffenden Blöcke. Andere Clients könnten schon schreibend auf die Datei zugegriffen haben. Und nach dem write through Prinzip ist die Datei vom Server also aktuell, die Blöcke im Cache des Clients jedoch möglicherweise schon veraltet.

Lösung: Verwaltung der gecachten Blöcke des Clients mit dem Ziel, mehrfache Abbilder zu verhindern. (z.B. Durch invalidieren vorhandener Blöcke beim erneuten Laden bzw. Sharing) oder diese auf einem Stand zu halten (z.B. Synchronisation).

X14[Bearbeiten]

geänderte Aufgabenstellung i=3 !! statt alt:

PID 2 -> i = 0
PID 1 -> i = 1
PID 1 -> i = 0

wobei insgesamt 4 Prozesse arbeiten (1 Parent, 2 Kinder, 1 "Kindeskind")

Hinweis: Setzt man das ganze einfach mal um und lässt das Programm durchlaufen kommt die Lösung, die als erste unter [1] genannt wird. Ich denke dies Bedarf keiner weiteren Begründung, OB dies richtig ist. Wie man dahin kommt ist allerdings unklar!


---Sollte eig so stimmen, wenn man davon ausgeht das exit~bei return (i=3)
PID 1 -> i = 2
PID 2 -> i = 1
PID 3 -> i = 0
PID 2 -> i = 0
PID 1 -> i = 1
PID 6 -> i = 0
PID 1 -> i = 0

X15[Bearbeiten]

Aufgabenstellung:

Betrachtet werde in einem Unix-System ein Programm, das folgenden Code ausführt: sleep(20);
fork();
sleep(20);
if (fork() > 0) wait();
sleep(20);
exit(0);

Dabei bewirkt der Systemaufruf sleep(20), daß der aufrufende Prozeß für 20 Sekunden schlafengelegt (blockiert) wird. Der Einfachheit halber werde angenommen:

− Prozeßnummern (PIDs) werden fortlaufend vergeben.

− In dem System gibt es keine weiteren Prozesse.

a)Wieviel Pozesse werden insgesamt erzeugt (einschl. dem Prozeß mit PID = 1, der zu obigem Programm gehört)?

b) Tragen Sie in nachstehender Tabelle ein, welche Prozesse sich zu den angegebenen Zeitpunkten nach Start des Programms in dem System befinden, und kennzeichnen Sie ihren jeweiligen Zustand durch ein nachgestelltes S bzw. W für sleeping bzw. waiting!


Lösung:

a) Es werden insgesamt 6 Prozesse erzeugt (immer einer nach 20s und der erste ist ja schon da).



Ich würde zu so einem bildchen tendieren und dann auf 4 prozesse kommen

o
|
|
vfork
>---v
|    |
|    | fork(je)
>v   >v
||   ||
||   ||
||   |x
||   |
||   x
||
|x
|
x


b)
10 | P1S
30 | P1S P2S
50 | P1W P2W P3S P4S
70 | P1S P2S
90 |
110|