Ist es möglich, den Windows Virtual-Memory-Manager anzudeuten, einen bestimmten Prozess aus dem Swap zu holen?
Die Situation, in der ich mich oft befinde, beansprucht normalerweise etwa 50% meines Arbeitsspeichers für alle normalen Programme, insbesondere für eine IDE für ein eingebettetes Ziel und den zugehörigen Debugger.
Dann lasse ich einen speicherhungrigen Prozess laufen - z. B. Wireshark oder etwas, das über ein Wochenende Daten sammelt, alles wird ausgetauscht - wie sie sollten. Nachdem der große Prozess abgeschlossen ist, werden die meisten Prozesse im Swap belassen.
Dann pausiert das Sporadische, um den Prozess zurückzuspielen, was zu Problemen mit dem Debugger führen kann, vermutlich aufgrund von Timing-Problemen in der Kommunikation zwischen IDE und dem Hardware-Debugger. Die Steuerung des Zielgeräts kann daher sporadisch erfolgen, bis genügend Versuche die Debug-Daten in der IDE wieder aus dem Swap-Speicher entfernt haben.
Antworten:
KerrekSB hat dafür ein spezielles Tool entwickelt:
/programming//a/2940209/684229
Es ist auf GiTHUB mit Binärdateien verfügbar: https://github.com/louisdx/unpage
Während des Laufs erhalten Sie viele Fehler "Fehler beim Lesen eines Bytes von 0x .... 000, Fehler 299 (0 gelesene Bytes)", aber es ist kein Problem, das Tool funktioniert großartig.
quelle
After the big process is finished, most processes are left in swap.
. Vermutlich hat er den "gedächtnishungrigen Prozess" also schon beendet.if (meminfo.Protect > 50) { std::cerr << meminfo.Protect << " - " << PAGE_GUARD << std::endl; }
kurz vor derReadProcessMemory
-Linie verwendet. PAGE_GUARD ist 256 und ich habe 260 mit den fehlgeschlagenen Seiten. So ist es möglich, die Fehler loszuwerden. Jemand mit C ++ - und Paging-Kenntnissen muss das PAGE_GUARD-Bit nachlesen.Sie können Process Lasso verwenden , um einem Prozess eine Speicherseitenpriorität zuzuweisen :
Process Lasso hat zwei Versionen: kostenlos und kommerziell (18,95 USD mit Testversion).
quelle