FUSEREX -Systemanruf in c

FUSEREX -Systemanruf in c
Im Allgemeinen erfordern die Thread -Synchronisation -Primitive die Verwendung von Systemaufrufen von Userspace -Programmen. Der Systemaufruf ist von Natur aus unvermeidlich, wenn Sie einen Faden zum Schlafen stellen und auf einen anderen Faden warten oder einen Faden aus dem Schlaf aufwachen. Das Erhalten einer nicht in nicht eingehaltigen Schloss beispielsweise keine Systemaufruf erfordert zumindest nicht natürlich. Der Futex ist das Mittel gegen diese Herausforderung. Ein Futex ist einfach eine sofortige Ganzzahladresse. Die Adresse wird verwendet, um eine Warteschlange von Threads zu identifizieren, die darauf warten, verarbeitet zu werden. Der Wert der Ganzzahl an diesem Ort wird verwendet, um den schnellen Pfad mit atomarer Operationen auszuführen, falls verfügbar. Mit dem System FUSTEX () können ein Programm auf einen Wert an eine bestimmte Adresse warten, um sich zu ändern, sowie jeden, der auf diese Adresse wartet, aufweckt. Es wird am häufigsten verwendet, um den umstrittenen Fall einer gemeinsamen Speichersperrung zu implementieren, wie in FUTEX (7) erwähnt. Wenn eine FUSEREX (7) -Kaktion in UserSpace ohne Fehler nicht abgeschlossen ist, ist ein Aufruf des Kernels erforderlich, um das Problem zu beheben. Das Schiedsverfahren kann verwendet werden, um entweder den Aufrufprozess in den Schlaf zu setzen oder einen Wartevorgang aufzuwecken. Die im FUTEX definierte Semantik wird voraussichtlich von Anrufern dieser Funktion folgen (7).

Da diese Semantik nicht portable Montageanweisungen erfordern, sind die meisten Benutzer höchstwahrscheinlich eher Bibliotheksautoren als gewöhnliche Anwendungsentwickler. Futex ist ein einzelner Systemaufruf, der viele Vorgänge ausführt. Das mag seltsam erscheinen, sogar verwirrend, wenn nicht geradezu. Das heißt denn. Für eine andere Instanz ist es unwahrscheinlich. Wenn Threads in einem einzigen Prozess darauf zugreifen, kann es als globale Variable angegeben oder in einem gemeinsam genutzten Speichersegment gespeichert werden. Ein im UserSpace über Atomoperationen aktualisierter Status wird in der gemeinsam genutzten Variablen gespeichert. Es besteht kein Systemanruf, wenn der Staat sagt, dass es keinen Konflikt gibt. Wenn die Bedingung auf der anderen Seite eine Konsequenz anzeigt.

Beispiel zum Erklären von FUTEX () -Systemaufruf in C -Sprache

Um den Futex () -Systemanruf in C -Sprache zu verstehen, haben wir Ubuntu 20 installiert.04 Linux -Betriebssystem. Erstellen Sie eine Datei mit dem Titel „FC).C". Der Titel der Datei kann geändert werden, aber die Erweiterung bleibt gleich. Öffnen Sie also zunächst die Hülle der installierten Ubuntu 20.04 Linux -Betriebssystem, indem Sie es in den „Anwendungen“ finden oder die Taste „Strg+Alt+T“ überprüfen. Leiten Sie nach der Öffnung die angebotene Anweisung im Terminal des installierten Ubuntu 20 aus.04 Linux -Betriebssystem.

$ nano fc.C

Sie können die erfolgreiche Ausführung der Datei nur bestätigen, wenn Sie den GNU -Nano -Editor auf Ihrem Bildschirm erhalten. Jetzt müssen Sie den im angehängten Screenshot angezeigten Code schreiben. Dies ist eines der grundlegendsten Beispiele für Futex () -Systemanrufe.

ist eine Datei, die Deklarationen für verschiedene Funktionen und Makros enthält, die für die Empfangen von Eingaben aus Eingängen erforderlich sind und die Ausgabe im Ausgangsfenster des C -Programms angezeigt haben. Es ist unnötig, „Stdio zu fügen. H ”, da wir mit einem anderen Programm wie DOS Eingaben in das C -Programm bereitstellen und Ergebnisse speichern können. Der Header bietet eine Vielzahl symbolischer Konstanten und Typen sowie eine Vielzahl von Funktionen. syScall () ist eine winzige Bibliotheksfunktion, die den Systemanruf mit der angeforderten Menge an Argumenten und der angegebenen Montage -Schnittstelle aufruft. Sobald Sie den oben genannten Code verstanden haben, können Sie die Ausgabe überprüfen. Wir haben einen GCC -Compiler für die Zusammenstellung von Code installiert. Der GNU C -Compiler (GCC) ist der berühmteste und ausführlichste verwendete Compiler unter Programmierern, die C als Programmiersprache verwenden. GCC ist ein zugänglicher Compiler, der mit allen Linux -Verteilungen kostenlos geliefert wird. Führen Sie nun den angehängten Befehl im Terminal des Ubuntu 20 aus.04 Linux -System.

$ GCC FC.C
$ ./A.aus

Die Ausgabe ist im oben genannten Bild zu sehen.

Abschluss

Dieser Artikel lieferte eine kurze Einführung des FUTEX () -Systemaufrufs in C -Programmiersprache. Wir haben ein einfaches und kurzes Beispiel für einen Futex () -Systemanruf. Durch die Implementierung der gleichen Beispiele und das Hinzufügen von geringen Änderungen können Sie FUTEX () -Systemanrufe in der C -Programmiersprache verstehen.