gpt4 book ai didi

windows - 什么导致页面错误?

转载 作者:可可西里 更新时间:2023-11-01 12:11:31 32 4
gpt4 key购买 nike

According to Wikipedia :

A page fault is a trap to the software raised by the hardware when a program accesses a page that is mapped in the virtual address space, but not loaded in physical memory. (emphasis mine)

好的,这是有道理的。

但如果是这样,为什么每次刷新 Process Hacker 中的进程信息时,我都会看到大约 15 个页面错误?

Screenshot

或者换句话说,为什么内存会被换页? (我不知道它是用户内存还是内核内存。)我没有页面文件,RAM 使用量大约是 4 GB 中的 1.2 GB,这是在干净重启后的情况。任何资源都不缺;为什么任何东西都会被调出?

最佳答案

(我是 Process Hacker 的作者。)

首先:

A page fault is a trap to the softwareraised by the hardware when a programaccesses a page that is mapped in thevirtual address space, but not loadedin physical memory.

这并不完全正确,正如稍后在同一篇文章中解释的那样(次要页面错误)。存在软页面错误,内核需要做的就是将页面添加到进程的工作集中。这是 Windows Internals 书中的一张表(我已经排除了导致访问冲突的那些):

<表类="s-表"><头>故障原因 结果<正文>访问不驻留在内存中但在磁盘上的页面文件或映射文件中的页面 分配一个物理页,从磁盘中读取所需的页并放入相关的工作集中访问备用或修改列表中的页面 将页面转移到相关进程、 session 或系统工作集访问零需求页面 向相关工作集添加零填充页面写入写时复制页面 创建页面的进程私有(private)(或 session 私有(private))副本,并替换进程或系统工作集中的原始页面

页面错误的发生有多种原因,如您在上文中所见。其中只有一个与从磁盘读取有关。如果您尝试从堆中分配一个 block ,并且堆管理器分配了新页面,然后访问这些页面,您将遇到零需求页面错误。如果您尝试通过写入 kernel32 的页面来 Hook kernel32 中的函数,您将遇到写时复制错误,因为这些页面正在静默复制,因此您的更改不会影响其他进程。

现在更具体地回答您的问题:Process Hacker 似乎只在更新其服务信息时出现页面错误 - 也就是说,当它调用 EnumServicesStatusEx 时,哪些 RPC 到 SCM (services.exe)。我的猜测是,在此过程中,正在分配大量内存,导致需求零页面错误(服务信息需要存储多个页面,IIRC)。

关于windows - 什么导致页面错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5684365/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com