Das nächste Konzept, das wir uns anschauen wollen, sind Signale. Mit Signalen kann entweder
das Betriebssystem einem Prozess ein Ereignis mitteilen oder verschiedene Prozesse können
untereinander sich Signale zustellen lassen. Bevor wir nun mit Signalen anfangen, möchte
ich nochmal auf das Betriebssystemkonzept der Synchronen bzw. der Asynchronen Programmenunterbrechung
zurückkommen oder auch wie sie genannt werden Trap und Interrupt. Sinn und Zweck der beiden
ist es, dass die Hardware den Betriebssystem Ereignisse mitteilen kann. Zum Beispiel, dass
entweder eine Fehlersituation aufgetreten ist oder dass ein anderes Ereignis aufgetreten
ist, um das sich das Betriebssystem kümmern soll. Traps und Interrupts betreffen dabei
nur das Betriebssystem. Alle Anwendungen, die auf dem Betriebssystem laufen, bleiben
davon unberührt und bekommen diese nicht mit. Mit Signalen wird nun versucht, dieses Konzept
auf der Anwendungsebene nachzubilden. Dabei nimmt das Betriebssystem die Rolle der Hardware
ein und kann Anwendungen Signale zustellen. Hier wird ebenfalls zwischen Synchronen und
Asynchronen Signale unterschieden. Mit Signalen haben wir nun zwei verschiedene Anwendungsszenarien,
die wir uns vorstellen können. Zum einen kann eben die Signalisierung durch den Betriebssystem
Kerngeschehen. Dies kann entweder unmittelbar durch die Aktivität des Prozesses ausgelöst
werden oder eben durch einen externen Einfluss. In dem hier skizzierten Beispiel bekommt der
Prozess 2 ein Synchrones Signal zugestellt, weil es auf eine Adresse zugegriffen hat,
auf die er nicht hätte zugreifen dürfen. Zum Beispiel eben der Schreibzugriff auf
einen nicht schreibbaren Speicherbereich. Als Konsequenz stellt das Betriebssystem
dem Prozess einen Segmentation-Fault zu. Dies geschieht synchron, da es unmittelbar mit
dem Schreibzugriff des Prozess 2 zusammenhängt. Ein weiteres Beispiel, diesmal aber für eine
asynchrone Signalzustellung, betrifft Prozess 3. Dieser bekommt von irgendwoher einen SIG
Interrupt zugestellt. Dies kann zum Beispiel sein, weil der Nutzer auf dem Terminal die
Kombination Steuerung C gedrückt hat. Dies löst das Signal SIGINT aus, welches dem Vordergrundprozess
zugestellt wird. Das ist nun ein asynchrone Signal, da es nicht mit der unmittelbaren
Instruktion zu tun hat, die von Prozess zu dem Zeitpunkt ausgeführt wurde. Im zweiten
Anwendungsszenario können wir Signale dazu nutzen, um eine primitive Kommunikation zwischen
zwei Prozessen herzustellen. In diesem Beispiel haben wir Prozess 1, der versucht jeweils
Prozess 2 bzw. Prozess 3 eine Nachricht zu schicken. Dazu löst Prozess 1 zum Beispiel
ein Signal SIG User 1 aus und möchte dieses dem Prozess 2 zustellen. Um dies zu machen,
führt der Prozess 1 einen Systemaufruf mit der Aufforderung der Signalzustellung aus
und das Betriebssystem wird das Signal SIG User 1 an den Prozess 2 zustellen. Eine weitere
Variante ist, dass der Prozess 1 ein SIG TERM an Prozess 3 schicken möchte. Dies funktioniert
ähnlich. Der Unterschied ist, dass das Signal SIG TERM dazu gedacht ist, einen Prozess
zu signalisieren, dass dieser sich beenden soll, während die Reaktion auf das Ereignis
SIG User 1 vom jeweiligen Programm abhängt. Und obwohl die Signale nun durch explizite
Anforderungen durch Prozess 1 aufgetreten sind, sind auch dies wieder asynchrones Signale,
da diese asynchron aus Sicht des Empfängers sind. Als nächstes wollen wir uns anschauen,
wie ein Prozess, dem ein Signal zugestellt wird, eigentlich reagieren kann. Da stehen
verschiedene Optionen zur Auswahl. Die eine ist, dass er einfach das Signal ignoriert.
In dem Fall wird das Signal gar nicht erst an den Prozess zugestellt. Eine weitere Variante
ist, dass die Option CORE gesetzt ist. Das bedeutet, dass bei Signalzustellung ein CORE
Dump erstellt wird. Ein CORE Dump ist dabei eine Kopie des gesamten Speichers sowie der
Registerinhalte. Dieser wird auf der Festplatte gespeichert. Anschließend wird der Prozess
terminiert. Term ist so ähnlich, nur dass hier kein CORE Dump erstellt wird. Stattdessen
wird der Prozess sofort terminiert. So wird auf die meisten Signale reagiert, die zugestellt
werden können. Und die vierte Option ist, dass der Prozess eine eigene Signalbehandlung
implementiert. Das heißt, er implementiert eine Funktion, die aufgerufen wird, sobald
ein Signal zugestellt werden soll. Sobald die Signalbehandlung fertig ist, wird mit der
normalen Programmausführung fortgefahren. Zu der Option CORE kann man noch sagen, dass
Zugänglich über
Offener Zugang
Dauer
00:06:23 Min
Aufnahmedatum
2020-11-15
Hochgeladen am
2020-11-15 19:37:54
Sprache
de-DE