Oftmals lese/höre ich das Argument, dass viele Systemaufrufe etc. ineffizient wäre, da die Anwendung einen Modus wechseln, dh vom Benutzermodus zum Kernelmodus und nach der Ausführung wechselt Der Systemaufruf beginnt mit der Ausführung im Benutzermodus, indem erneut ein Moduswechsel durchgeführt wird.Was ist der Overhead in einem Moduswechsel
Meine Frage ist, was ist der Aufwand für einen Modus wechseln? Wird CPU-Cache ungültig oder TLB-Einträge werden gelöscht oder was passiert, wenn Overhead verursacht wird?
Bitte beachten Sie, dass ich über den Aufwand im Modus wechseln und nicht Kontext wechseln frage. Ich weiß, dass Moduswechsel und Kontextwechsel zwei verschiedene Dinge sind, und ich bin mir voll bewusst über Overhead, der mit einem Kontextwechsel verbunden ist, aber was ich nicht verstehe, ist, welcher Overhead durch einen Moduswechsel verursacht wird?
Wenn sein mögliches bitte einige Informationen über eine bestimmte * nix-Plattform wie Linux bieten, FreeBSD, Solaris usw.
Grüße
lali
Es findet kein Daten-Caching statt; deshalb habe ich strace verwendet, um zu überprüfen, ob der Systemaufruf stattfindet. Ein Syscall ist definitionsgemäß ein Aufruf in den Kernel-Space. –
Auch Ihre Behauptung, dass ein Moduswechsel äquivalent zu einem Kontextwechsel ist, ist nicht wahr. Ein Kontextwechsel umfasst das Auslagern des gesamten CPU-Zustands und der Seitentabellen; Dies ist eine wichtige Arbeit, die für Systemaufrufe nicht erforderlich ist. Ein Syscall ist ein einfacher Software-Interrupt (x86-Assembly "int $ 0x80") –
Also gibt es im syscall nur eine Präambel und eine INT-Anweisung? – Juice