Ich habe einen Artikel gelesen , der den Wechsel zwischen User-Space und Kernel-Space beschreibt, der bei einem Systemaufruf auftritt. Der Artikel sagt
Eine Anwendung erwartet den Abschluss des Systemaufrufs, bevor die Ausführung im Benutzermodus fortgesetzt wird.
Bisher bin ich davon ausgegangen, dass es einige Systemaufrufe gibt blocking
, während es andere sind non-blocking
. Mit dem obigen Kommentar bin ich jetzt verwirrt. Bedeutet dies, dass alle Systemaufrufe blockiert werden, oder habe ich ein Konzept falsch verstanden?
operating-systems
os-kernel
Ankit
quelle
quelle
Antworten:
Sie scheinen den Begriff "Sperren" zu überladen.
Wenn Sie einen Kontextwechsel zum Kernel vornehmen, müssen Sie warten, bis er wieder in den Benutzermodus wechselt, bevor Ihre Anwendung fortgesetzt werden kann. Dies wird normalerweise nicht als "Blockieren" bezeichnet.
Im aktuellen Kernel-Design sind blockierende Aufrufe Aufrufe, bei denen der Kernel nur zurückkehrt, wenn die Anforderung abgeschlossen ist (oder ein Fehler auftritt). Diese Anrufe dauern in der Regel länger und führen in der Regel dazu, dass Ihr Prozess terminiert wird. Beispielsweise blockieren viele E / A-Aufrufe.
Es gibt Systemaufrufe, die asynchrone E / A bereitstellen und die nicht blockieren. Beachten Sie, dass es hier immer noch eine Kontextumschaltung gibt. Nur die Anwendung muss sich um die Asynchronität des Aufrufs kümmern.
Das Papier scheint darauf abzuzielen, diesen Kontextwechsel (ausnahmelose Systemaufrufe) aufzuheben und alle Aufrufe asynchron zu machen.
quelle