¿Es posible insinuar al administrador de memoria virtual de Windows para sacar un proceso particular del intercambio?
La situación en la que a menudo me encuentro es usar aproximadamente el 50% de mi RAM para todos los programas normales, uno en particular es un IDE para un objetivo incrustado, junto con su depurador asociado.
Luego dejo un proceso de memoria hambriento en ejecución, por ejemplo, Wirehark o algo que está acumulando datos durante un fin de semana, todo se intercambia, como deberían. Una vez finalizado el gran proceso, la mayoría de los procesos se dejan en intercambio.
Luego, las pausas esporádicas para volver a intercambiar el proceso causan problemas con el depurador, presumiblemente debido a problemas de sincronización en las comunicaciones entre IDE y el depurador de hardware. Por lo tanto, el control del dispositivo de destino puede ser esporádico hasta que suficientes intentos hayan recuperado los datos de depuración en el IDE.
Respuestas:
KerrekSB desarrolló una herramienta especial para este propósito:
/programming//a/2940209/684229
Está disponible en GiTHUB con binarios: https://github.com/louisdx/unpage
Durante la ejecución, obtiene muchos errores "Error al leer un byte de 0x .... 000, error 299 (lectura de 0 bytes)", pero no es un problema, la herramienta funciona muy bien.
fuente
After the big process is finished, most processes are left in swap.
. Por lo tanto, presumiblemente ya terminó el "proceso de memoria hambriento".if (meminfo.Protect > 50) { std::cerr << meminfo.Protect << " - " << PAGE_GUARD << std::endl; }
justo antes de la líneaReadProcessMemory
. PAGE_GUARD es 256 y obtuve 260 con las páginas fallidas. Por lo tanto, es posible deshacerse de los errores. Alguien con conocimientos de c ++ y de paginación necesita leer el bit PAGE_GUARD.Puede usar Process Lasso para dar a un proceso una prioridad de página de memoria :
Process Lasso tiene dos versiones: gratuita y comercial ($ 18.95 con prueba).
fuente