Warum sollte ein Benutzerprogramm mit dem Kernelspeicher herumspielen?

9

Ich bin mir nicht einmal sicher, wo das Problem liegt, aber ich spreche von dem hier beschriebenen Kernel-Angriff . In dieser Liste von Kommentaren fragte jemand , ob er den Prozess wiederholen möchte. Der Trick hat die Situation nicht verbessert (die Maschine läuft immer noch sehr träge) und der antwortende Kommentar sagt etwas über den Kernel-Speicherplatz im Vergleich zum Benutzer-Speicherplatz aus.

Ist der antwortende Kommentar korrekt? Wenn ja, warum funktioniert Renice für Dinge im Benutzerbereich und nicht für Dinge im Kernelbereich? Nach dem, was ich gelesen habe , sollten sich alle Programme, die ein Benutzer selbst startet, im Benutzerbereich befinden. Was habe ich vermisst?

Wenn es falsch ist, warum verbessert Renice dann nicht die Situation?

Phunehehe
quelle

Antworten:

9

Es gibt Dienste, die ein Kernel für den Benutzerbereich bereitstellt (z. B. das Öffnen von Sockets). Es gibt eine gut definierte Schnittstelle (API), über die User-Space-Programme mit dem Kernel interagieren können.

In diesem Fall öffnet das User-Space-Programm wiederholt Sockets, sendet Dateideskriptoren durch diese und schließt dann die Sockets. Diese Aktionen werden vom Kernel ausgeführt. Der Dateideskriptor wird in einem Puffer gespeichert, bis das andere Ende des Sockets ihn liest. Der besondere Fehler ist, dass ein Garbage Collector eventuell den Dateideskriptor freigeben sollte, dies jedoch nicht - der fd wird durchgesickert. Die durchgesickerten FDS summieren sich und verbrauchen Ressourcen. Durch das Beenden des Programms werden die Ressourcen nicht freigegeben, da sie nicht im Besitz des Programms sind.

Shawn J. Goff
quelle
6
Und der Grund, warum Renice nicht hilft, ist, dass es nur beeinflusst, wie viel Anteil der Benutzer-CPU-Zeit ein Prozess erhält. Die im Kernelmodus verbrachte Zeit wird für diesen Zweck nicht gezählt. Im Allgemeinen betrifft nice nur CPU-gebundene Programme, keine E / A-gebundenen Programme. Hier ist der außer Kontrolle geratene Prozess reine E / A, und es werden nicht einmal so viele Systemaufrufe ausgeführt, da der Fehler darin besteht, dass jeder Systemaufruf viel zu lange dauert.
Gilles 'SO - hör auf böse zu sein'
1
@ Gilles Tut mir leid, dass ich so ein altes Problem angesprochen habe, aber es sieht sehr interessant aus! Verstehe ich es richtig, dass so etwas ionicemehr Gutes bewirken würde?
Rozcietrzewiacz
@rozcietrzewiacz Ich glaube auch nicht, dass Ionice helfen würde, aber ich bin mir nicht sicher. Aufgrund des Fehlers verbringt der Prozess seine ganze Zeit in einem einzigen Systemaufruf, und ionice wird dies nicht verhindern (glaube ich).
Gilles 'SO - hör auf böse zu sein'