问题标签 [page-fault]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2112 浏览

algorithm - 页面错误和 LRU 算法

一个主存储器最多可以保留 4 页。如果 LRU 算法用于按顺序排列的后续页面,哪个页面将是第一个出现页面错误的页面?

1,2,3,1,2,4,1,2,3

这是一个我认为没有答案的测试问题。主内存可以保留 4 个页面,并且由于存在页面 1、2、3、4,因此不应该发生页面错误。

答案是第 4 页,但我不明白为什么。

0 投票
2 回答
922 浏览

python - 是什么导致了这个 python 代码中的 135k/sec 页面错误?(试除素筛)

以下代码在工作线程中执行,并且很高兴地旋转,接收暂停/报告命令等。我认为它们是软故障,因为我没有 RAM 使用问题并且我的硬盘驱动器没有在周末融化,这与我让结果累积多长时间有关,因为我几天前启动它时只收到约 50 个页面错误。

“计数器”属性当前为 22,496,115,“结果”有 1,418,641 个元素。之所以选择“结果”部分是因为我感到相反,因此从 1 开始。

注意:我知道我可以使用Eratosthenes 的筛子来优化算法并可能减少页面错误,但这不是重点:我试图找出确切的原因 - 或者至少是最严重的违规者 - 背后页面错误,这样我就可以避免将来做同样的事情。当我需要一个“极其昂贵、简单的工作线程”时,该算法仅用于测试 UI 响应能力。

根据要求的附加设置:

0 投票
1 回答
556 浏览

windows - 获取进程总页面错误

任务管理器和 SysInternals Process Explorer 都显示了进程页面错误的总量,但我发现的所有性能计数器和 WMI 对象仅显示每秒页面错误,

是否有不同的 API 或一些晦涩的性能计数器可以显示某个进程的页面错误总数?(在 Windows 上)

0 投票
2 回答
1860 浏览

linux-kernel - 当 mov 指令导致页面错误并在 x86 上禁用中断时会发生什么?

我最近在自定义 Linux 内核(2.6.31.5,x86)驱动程序中遇到了一个问题,其中 copy_to_user 不会定期将任何字节复制到用户空间。它会返回传递给它的字节数,表明它没有复制任何东西。经过代码检查,我们发现代码在调用 copy_to_user 时禁用了中断,这违反了它的合同。更正此问题后,问题停止发生。因为这个问题很少发生,我需要证明禁用中断导致了这个问题。

如果您从 arch/x86/lib/usercopy_32.c rep 查看下面的代码片段;movsl 通过 CX 中的计数将单词复制到用户空间。大小在退出时用 CX 更新。如果 movsl 正确执行,CX 将为 0。因为 CX 不为零,所以 movs? 为了符合 copy_to_user 的定义和观察到的行为,必须没有执行指令。

我的两个想法是:

  1. 当中断被禁用时,页面错误不会发生然后rep;动?被跳过而不做任何事情。然后返回值将是 CX,或未复制到用户空间的数量,如定义指定和观察到的行为。
  2. 确实发生了页面错误,但是由于禁用了中断,linux无法处理它,因此页面错误处理程序跳过了该指令,尽管我不知道页面错误处理程序会如何执行此操作。同样,在这种情况下,CX 将保持不变并且返回值将是正确的。

谁能指出英特尔手册中指定此行为的部分,或者指出任何其他可能有用的 Linux 源代码?

0 投票
1 回答
1142 浏览

virtual-memory - 以下哪个答案最能描述页面错误?

所以这不是一个家庭作业问题。这是我的教授在之前的考试中发布的一个问题,作为帮助我们为期中学习的资源。但是,有两个答案(对我来说)似乎是正确的答案。

A.) 页面错误意味着要替换的物理页面必须保存到硬盘上。B.) 请求的虚拟不在物理内存中。

现在,我的理解是页面错误是指存储在物理内存页面中的数据不是您需要的数据,因此,您需要访问硬盘驱动器并加载正确的数据。此外,如果脏标志为1,则表示物理内存中的先前数据已被修改,因此您需要将其重新保存到磁盘。

因此,在我看来,A 和 B 都是正确的,但我想知道是否有人可以告诉我他们认为更好的选择是什么。

如果我被迫选择,我会说A。

旁注 我已经通过电子邮件向教授发送了答案,但他的回复真的很糟糕,还没有给我发电子邮件。

0 投票
0 回答
1612 浏览

memory-management - 识别 Windows 进程页面错误原因

Windows使用商业软件来执行某项任务,甚至可以运行 18 小时。

通过检查任务管理器,进程报告了大量的页面错误,比如 65M 页面错误和大约 1GB 的内存使用峰值。

该机器具有 2 GB 内存和 2 GB 虚拟内存,以及 2 到 4 GB 的分页文件。

为了减少执行时间,我正在考虑通过使用像ramdisk这样的工具来存储大多数访问的文件来减少页面错误的影响。但是要了解这些文件是哪些文件,我需要发现哪些内存访问会产生页面错误。有没有办法/工具来完成这项任务?有人看到这种方法的替代方法吗?

0 投票
1 回答
2597 浏览

caching - 缺页和脏页

我已经开始阅读有关 CPU 缓存的信息,我有两个问题:

1) 假设 CPU 收到页面错误并将控制权转移给内核处理程序。处理程序决定驱逐内存中标记为脏的帧。可以说 CPU 缓存用有效和修改的位写回。现在,此帧的内存内容已过时,缓存包含最新数据。内核如何强制缓存刷新?

2)页表条目(PTE)被标记为脏的方式如下:TLB有一个修改位,当CPU修改页面内容时设置。该位在上下文切换时被复制回 PTE。如果我们得到一个页面错误,PTE 可能是非脏的,但 TLB 条目可能设置了修改的位(它还没有被复制回来)。这种情况如何解决?

0 投票
2 回答
3523 浏览

linux - 防止Linux上实时进程中的小页面错误

我需要使该过程尽可能实时运行。

所有通信都是通过共享内存完成的 - 内存映射文件 - 根本没有系统调用 - 它在共享内存上使用忙等待。

该进程以实时优先级运行,并且所有内存都被锁定mlockall(MCL_CURRENT|MCL_FUTURE),成功并且进程有足够ulimits 的内存锁定所有内存。

当我在它上面运行它时,perf stat -p PID我仍然会得到一些轻微的页面错误。

我用进程亲和力和没有进程亲和力对此进行了测试。

问题:

是否有可能完全消除它们——即使是轻微的页面错误?

0 投票
2 回答
2466 浏览

linux - linux中的堆栈预故障 - 需要单个或多个故障

在 Linux 中,当进程向系统请求一些(虚拟)内存时,它只是在 vma(进程虚拟内存的描述符)中注册,但每个虚拟的物理页面在调用时并未保留。之后,当进程访问该页时,会发生故障(访问会产生缺页中断),PF# handler 将分配物理页并更新进程页表。

有两种情况:读取时出错可能变成写保护的零页(特殊全局预置零页)的链接;写入错误(在零页和刚刚需要但未物理映射的页上)将导致实际的私有物理页分配。

对于 mmap(以及内部 mmap 的 brk/sbrk),此方法是每页的;所有 mmaped 区域都在 vma 中整体注册(它们具有开始和结束地址)。但是堆栈以其他方式处理,因为它只有起始地址(典型平台上较高的地址;增长到较低的地址)。

问题是:

当我在堆栈附近访问新的未分配内存时,它将获得 PF# 并增长。如果我访问的不是堆栈旁边的页面,而是距离堆栈 10 或 100 页的页面,如何处理这种增长?

例如

这个程序会为堆栈分配 2 或 50 个私有物理页吗?

我认为要求内核在单个页面错误中分配十个物理页面然后逐页分配十个页面错误是有利可图的(1个中断+ 1个上下文切换+简单,对N个页面分配请求的缓存友好循环与N个中断+ N 上下文切换 + N 页面分配,当 mm 代码可能从 Icache 中逐出时)。

0 投票
1 回答
182 浏览

paging - 虚拟内存 - 同时在 RAM 和硬盘上的页面?

一个页面可以同时在物理内存和虚拟内存中吗?

如果我要求一个位于虚拟内存上的地址,它是否总是会触发页面错误?如果第一个问题是正确的,那么它应该只在页面不在物理内存中时触发页面错误。那正确吗?