Frage

ich habe gelesen ein Artikel Dies beschreibt den Wechsel zwischen Benutzerraum und Kernelraum, der bei einem Systemaufruf auftritt. In dem Artikel heißt es

Eine Anwendung erwartet den Abschluss des Systemaufrufs, bevor die Ausführung der Benutzermodelle wieder aufgenommen wird.

Bis jetzt nahm ich an, dass einige Systemanrufe sind blocking, während andere sind non-blocking. Mit dem obigen Kommentar bin ich jetzt verwirrt. Bedeutet dies, dass alle Systemanrufe blockieren oder ein Konzept falsch verstanden?

War es hilfreich?

Lösung

Sie scheinen den Begriff "Blockierung" zu überladen.

Jeder Kontextschalter, den Sie an den Kernel machen, müssen Sie warten, bis er wieder in den Usmodode wechselt, bevor Ihre Anwendung fortgesetzt werden kann. Dies ist nicht das, was normalerweise als "Blockierung" bezeichnet wird.

Im aktuellen Kernel -Design werden Blockierungsanrufe aufgerufen, bei denen der Kernel nur dann zurückgibt, wenn die Anforderung vollständig ist (oder Fehler auftritt). Diese Anrufe dauern normalerweise längere Zeit und führen normalerweise dazu, dass Ihr Prozess geplant wird. Zum Beispiel blockieren viele IO -Anrufe.

Es gibt Systemanrufe, die bereitgestellt werden Asynchrone IO Und sie blockieren nicht. Beachten Sie, dass hier immer noch ein Kontextschalter stattfindet. Nur die Anwendung muss sich um die asynchrone Natur des Anrufs kümmern.

Das Papier scheint zu zielen, diesen Kontext zu beseitigen (außergewöhnliche Systemaufrufe) und versuchen, alle Aufrufe asynchron zu machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit cs.stackexchange
scroll top