Allgemeine Fragen zu SP

noch mehr Fragen…

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Allgemeine Fragen zu SP
Guten Tag,
beim Lernen für die Klausur sind mir ein paar Fragen gekommen, bei deren Antwort ich mir nicht sicher war. Ich hoffe, ihr könnt mir helfen.

1. Wenn ich die Interrupts sperre, können dann noch Signale auftreten und kann der Scheduler meinen Prozess verdrängen

  • auf einem Monoprozessorsystem?
  • auf einem Multiprozessorsystem?
    2. Einseitige Synchronisation erfordert immer Betriebssystemunterstützung. Ja oder Nein?
    Gedanken: - Die einseitige Synchronisation, die wir kennen gelernt haben (Signale sperren) benötigt das Betriebssystem
  • Synchronisation kann nicht in purem C implementiert werden, man benötigt die Unterstützung des Betriebssystems (oder der Hardware, z.B. CAS)
    3. Hat das Buddyverfahren externen Verschnitt (neben dem internen)? Oder ist das einfach freier Speicher?
    4. Findet Offline-Scheduling vor dem Start des Systems oder des Programms statt?

Edit:
5. Sind die folgenden Aussagen richtig oder falsch:
a) Ein Prozess ist ein Programm in Ausführung.
b) Ein Prozess ist quasi eine abstrakte Klassen, deren Objekte Prozessinstanzen sind.
c) Zu einem Programm gehört genau ein Prozess.
d) Ein Programm kann gleichzeitig durch mehrere Prozessinstanzen ausgeführt werden.
e) Ein Prozess kann nur ein Programm ausführen.

Vielen Dank im Voraus
Mackie


Wenn du mit „ich“ einen Anwendungsprozess meinst: Der kann keine Interrupts sperren, das darf nur das Betriebssystem.
Wenn du das Betriebssystem meinst: Das wird immer, bevor es die Kontrolle zurück an die Anwendung gibt, Interrupts wieder aktivieren. Sonst könnte die Anwendung die CPU dauerhaft monopolisieren.
Insofern erübrigt sich der Teil der Frage mit Signalen.

Verdrängt werden kann ein Prozess nur vom Betriebssystem und nur auf der CPU, auf der er selber läuft. Wenn der Timer-Interrupt auf der besagten CPU nicht durchkommt, kann also auf diesem Weg keine Verdrängung mehr stattfinden - unabhängig davon, ob noch andere CPUs im System existieren.
Allerdings kann das Betriebssystem immer noch eine Prozessumschaltung durchführen, wenn der Prozess einen Systemaufruf absetzt und „freiwillig“ in den Kern wechselt.

Schwer zu sagen…
Um Signale zu blockieren, braucht man das Betriebssystem.
Interrupts darf sowieso von Haus aus nur das Betriebssystem sperren.
Kriegt man eine Semaphor-Implementierung ohne Betriebssystemunterstützung hin? Ich denke nicht, aber bin mir nicht hundertprozentig sicher…
Verdrängungssperre betrifft normalerweise das Betriebssystem - es sei denn, man implementiert das für User-Level-Threads, dann müsste es ohne Unterstützung durch den Kernel gehen…

Externer Verschnitt ist möglich: Wenn jemand 128 Bytes braucht, aber du nur noch zwei getrennte 64-Byte-Blöcke auf Lager hast, kannst du ihn nicht bedienen.

Vor dem Start des Systems. Die Programme, die laufen sollen, müssen zu diesem Zeitpunkt schon alle bekannt sein. Für diese Programme wird einmalig vorab ein Ablaufplan erstellt, der dann eiskalt durchgezogen wird.

a) Richtig.
b) Kann man so sagen. Im alltäglichen Sprachgebrauch werden aber auch Prozessinstanzen oft als Prozesse bezeichnet.
c) Mach mal eine Shell auf und dann eine zweite Shell! Dann hast du zwei Prozesse, die beide dasselbe Programm [m]/bin/bash[/m] ausführen [1].
d) Richtig, siehe c).
e) Falsch, siehe hier: Ein Prozess kann immer nur ein Programm gleichzeitig ausführen, aber mehrere hintereinander.

[1] Okay, hier stolpere ich möglicherweise über „Prozess“ vs. „Prozessinstanz“.

1 Like

Vielen Dank erstmal für die schnelle Antwort.

Zu 5.: Die Frage zielte genau auf den Unterschied zwischen Prozessinstanz und Prozess ab. In den Folien wird das ja relativ klar abgegrenzt, aber heißt das, dass man in der Klausur die Begriffe nicht so stark trennen muss? Also wenn dort “Prozess” steht, kann ich das auch je nach Kontext als “Prozessinstanz” lesen?


Ja. Ich geb zu, dass es bisschen doof ist, dass wosch das in den Folien extra aufdröselt und wir uns dann doch nicht so strikt an die Nomenklatur halten… :-/
Aber im normalen Sprachgebrauch macht man einfach keine Unterscheidung zwischen Prozess und Prozessinstanz - genausowenig wie man im Alltag zwischen Student und Studenteninstanz unterscheidet, oder zwischen Bratwurst und Bratwurstinstanz. :wink:

2 Likes

Also wenn schon, dann bitte Bratwurstinkarnation :wink:


Und am dritten Tage dann die Bratwurstreinkarnation? :-p

3 Likes

hi ich hab ne Frage zu dem pthread zeug :
wenn ich so eine condition variable pthread_cond oder phtread_mutex erstelle, ist dann
pthread_cond cond1 = PTHREAD_COND_INITIALIZER; und
pthread_cond cond2 = PTHREAD_COND_INITIALIZER;
2 verschiedene variablen? oder zeigen die auf die gleiche cond (gleiches gilt dann für mutex, oder?)
wenn ja :
kann ich für cond1 einfach eine speicherstelle allokieren um so unterschiedliche conds zu bekommen?


Das sind dann jeweils unterschiedliche Condition Variablen.