是否有可能暗示Windows使进程完全脱离交换


13

是否可以暗示Windows虚拟内存管理器使特定进程退出交换?

我经常发现自己遇到的情况通常是将所有正常程序的RAM占用大约50%,尤其是嵌入式目标的IDE及其相关的调试器。

然后,我让内存消耗旺盛的进程继续运行-例如,wireshark或某个周末正在累积数据的事物,一切都被交换掉了-应当这样做。大流程完成后,大多数流程都处于交换状态。

然后,偶尔会暂停以将进程交换回去,从而导致调试器出现问题,这大概是由于IDE和硬件调试器之间的通信中出现了时序问题。因此,在足够的尝试使IDE中的调试数据退出交换之前,可以零星地控制目标设备。


这将是非常有用的!从用户的角度来看,在每次单击或用户操作之后等待交换过程很烦人。最好说:“取消此过程!” ,去喝咖啡,然后返回到响应系统!
Tomas

我不熟悉Windows的交换过程中的细节,但是这个东西你要找的?注释中应该有一个可用的二进制示例。
瑞克(Rik)2013年

1
我曾经有一个类似的问题,并根据我在Stack Overflow上得到的答案编写了一个程序。
Kerrek SB 2013年

@Kerrek,我尝试在MinGW下编译您的代码,每次读取均出现错误“无法从0x161000读取一个字节,错误299(读取0字节)。” 由于我只有Windows在工作,所以我不足以运行您附加的随机二进制文件,因此问题可能出在我的编译中。
格雷格,

1
@KerrekSB,似乎是个小问题。也许您正在触摸未映射的存储区?无论如何,我认为您的答案值得赏识:) PS:与HDD速度相比,交换掉似乎慢得多。瓶颈似乎在其他地方,但是在哪里?
Tomas

Answers:


1

KerrekSB为此目的开发了一种特殊的工具:

/programming//a/2940209/684229

它可以通过二进制文件在GiTHUB上使用:https : //github.com/louisdx/unpage

在运行过程中,您会遇到很多错误“无法从0x .... 000读取一个字节,错误299(读取0个字节)”,但这不是问题,该工具运行良好。


“但这是一个问题”?我不认为这是一个问题。
Kerrek SB 2013年

Quote:“试图将所有应用程序恢复到物理内存的工具”。对于海报的“内存不足过程”,这可能无法正常工作。
harrymc

@harrymc来自问题的引用:After the big process is finished, most processes are left in swap.。因此,大概他已经结束了“饥饿的记忆过程”。
瑞克(Rik)2013年

@KerrekSB当然是错字。谢谢:-)
Tomas

@Tomas我找到。以我对c ++的了解非常有限,我验证了对于每次失败的访问,页面的确受PAGE_GUARD位的保护。我if (meminfo.Protect > 50) { std::cerr << meminfo.Protect << " - " << PAGE_GUARD << std::endl; }ReadProcessMemory-line 之前使用过。PAGE_GUARD是256,而失败的页面却有260。因此有可能摆脱错误。具备某些c ++和Paging知识的人需要阅读PAGE_GUARD位。
瑞克(Rik)2013年

1

您可以使用Process Lasso进程赋予Memory页面优先级

从Windows Vista开始,每个内存页面的优先级范围为0到7。“待机列表”分为八个列表,每个列表处理不同优先级的页面。当内存管理器要从待机列表中获取页面时,它将首先从低优先级列表中获取页面。”

进程套索可以通过允许为进程设置持久性内存优先级来帮助管理内存优先级,以便每次运行时将其虚拟内存页设置为特定的优先级。

Process Lasso有两个版本:免费版本和商业版本(试用版为18.95美元)。


恐怕您正在回答完全不同的问题。为进程提供内存优先级是另一项任务,在上下文OP中可能没什么作用,而我已勾勒出:当您已经有一个处于交换状态的进程并想要交换它时。您不想阻止它交换。
托马斯

@Tomas:这不是我的理解。该请求是为了防止给定进程被换出。如果未对进程本身进行编程以将其页锁定到内存中,则下一个最佳解决方案是为其赋予最高的内存优先级,以使其不太可能被换出。
harrymc

3
@ harrymc,OP表示,当内存占用运行时,“一切都被交换出去了-应当如此”,这就是OP想要的。只是在星期一早上,他希望立即将重要流程的工作集全部引入,而不是随着时间的推移而出现页面错误,从而使琐碎的事情变得单调乏味。
mgkrebbs

@mgkrebbs:这是解决该问题的另一种方法,我认为这是不可能的。我的解决方案是,如果从不交换掉IDE,那么就不需要将其交换回去。“内存不足的进程”将只减少几兆字节的RAM,这不会对其性能产生太大影响。
harrymc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.