7 - 2.2 IPC + Signale: UNIX-Signale [ID:23868]
50 von 70 angezeigt

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

Teil einer Videoserie :

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

Einbetten
Wordpress FAU Plugin
iFrame
Teilen