Kann der Linux-Kernel auslagerbaren (austauschbaren) Speicher für seine eigenen Puffer verwenden?

8

Wenn die Antwort auf die Frage NEIN lautet, warum ist es keine gute Idee, dies zu tun? Kann der Kernel Seitenfehler, die im Kernelmodus auftreten, nicht behandeln und beheben? Ändert sich die Antwort, wenn der Code, der auslagerbaren Speicher verwendet, nur als Teil der unteren Hälfte eines Interrupts ausgeführt wird?

Danke!

    
Mayank 12.08.2013, 23:00
quelle

2 Antworten

5
  

Kann der Linux-Kernel auslagerbaren (austauschbaren) Speicher für seine eigenen Puffer verwenden?

Nein. "Normalerweise verursachen Seitenfehler, die beim Ausführen im Kernel-Modus auftreten, einen Kernel oops. Es gibt jedoch Ausnahmen; die Funktionen, die Daten zwischen Benutzer und Kernel-Raum kopieren, sind ein Beispiel." (Quelle: Ссылка )

  

Warum ist es keine gute Idee, dies zu tun?

Im Benutzerbereich können Sie den Benutzerprozess einfach anhalten und ohne Probleme fortfahren. Aber im Kernelraum hat Ihr Thread möglicherweise viele Sperren oder deaktivierte Interrupts angenommen. Wenn Sie anhalten müssen, um einen Seitenfehler zu machen, haben Sie die Wahl:

1) Lassen Sie das gesamte -System für Millionen von Anweisungen zum Stillstand kommen, während diese Seite von der Festplatte geladen wird. Dies würde zu schrecklichen Leistungen führen.

2) Fügen Sie Komplexität hinzu, so dass die Locks / Interrupts zu jedem Zeitpunkt "entpackt" werden können, damit andere Kernel-Threads fortfahren können.

  

Kann der Kernel Seitenfehler, die im Kernelmodus auftreten, nicht behandeln und beheben?

Ja, Sie können Fehler haben, aber nur Sonderfälle. I.e. Sie dürfen keine Sperren haben, wenn Sie "get_user_page" aufrufen. Dadurch kann der Kernel von der Aufgabe "wegschalten", als wäre er im Benutzermodus. Wenn Sie Interrupts ausgeschaltet oder Sperren deaktiviert hätten, könnte der Rest des Kernels nicht ausgeführt werden.

  

Ändert sich die Antwort, wenn der Code, der auslagerbaren Speicher verwendet, nur als Teil der unteren Hälfte eines Interrupts ausgeführt wird?

Nein.

Die andere Hälfte der Frage lautet: "Was gewinnen Sie, wenn Sie zulassen, dass der Kernel ausgelagert wird"? Im Allgemeinen ist der Kernel-Speicher nur ein winziger Bruchteil des gesamten Speichers.

    
BraveNewCurrency 08.06.2014, 17:01
quelle
1

Der Kernel-Speicher kann nicht ausgetauscht werden und der einzige Kernel-Speicher, der Seitenfehler erzeugt, ist vmalloc memory

    
c4f4t0r 08.12.2013 23:34
quelle