page-fault相关内容

处理缺页陷阱后的指令指针值

老实说,我真的对这个特定的虚拟内存相关概念感到困惑. Q1) 发生缺页时,处理器是否先完成当前指令的执行,然后将IP寄存器的内容(下一条指令的地址)移入堆栈?或者,它中止当前正在执行的指令并将指令指针寄存器的内容移动到堆栈? Q2) 如果第二种情况为真,那么它如何恢复被中止的指令,因为当它恢复时,堆栈包含的指令指针值只是下一条指令的地址.所以它永远不会恢复发生页面错误的指令. 我 ..
发布时间:2022-01-11 23:38:50 其他开发

从内存加载寄存器时是否可以“中止"而不是触发页面错误?

我正在考虑“最小化页面“行走"大图时出现故障(和 TLB 故障)' '如何知道一个指针是否在物理内存中,否则会触发 Page Fault?' 是一个从另一面看问题的相关问题,但没有解决方案. 我希望能够将一些数据从内存加载到寄存器中,但如果内存当前已被分页,则加载会中止而不是出现页面错误.我需要代码在 Windows 和 Linux 上的用户空间中工作,而无需任何非标准权限. ( ..
发布时间:2022-01-06 13:09:13 其他开发

处理缺页错误后的指令指针值

老实说,我真的对这个与虚拟内存相关的特定概念感到困惑. Q1) 发生页错误时,处理器是否先完成当前指令的执行,然后将 IP 寄存器内容(下一条指令的地址)移到堆栈中?或者,它中止当前正在执行的指令并将指令指针寄存器的内容移到堆栈中? Q2) 如果第二种情况为真,那么它如何恢复被中止的指令,因为当它恢复时,堆栈包含指令指针值,该值只是下一条指令的地址.所以它永远不会恢复发生页面错误的指令 ..
发布时间:2021-06-12 20:36:31 其他开发

导致主要页面错误的日志存储器访问

有人知道如何获取导致页面错误的内存访问(指针)吗?我主要对主要页面错误感兴趣. 关于我要实现的目标的一些背景知识.我有一个具有大内存占用的应用程序(数据库),并且我想将分页与对大型数据结构(例如表,使用mmap()分配的索引)的访问相关联.该过程的映射很容易从/proc//maps中检索.现在,如果我具有导致页面错误的内存访问,则可以跟踪访问每个数据结构时引起了多少页面错误. 我认为p ..
发布时间:2021-05-29 22:53:43 服务器开发

为什么页面错误通常由操作系统而不是硬件处理?

我发现在缺少TLB的过程中,某些体系结构使用硬件来处理它,而另一些使用OS.但是,当涉及到页面错误时,大多数人都使用操作系统而不是硬件. 我试图找到答案,但没有找到任何说明原因的文章. 有人可以帮忙吗?谢谢. 解决方案 如果硬件可以自行处理,则无需出错. 整个问题是操作系统尚未将页面连接到硬件页面表中,例如因为它实际上根本不在内存中,或者是因为OS需要捕获写入尝试才能使O ..

最小化页面错误(和TLB错误),同时“遍历"页面.大图

问题(考虑GC的标记阶段) 我有一张需要走动的“物体"图,拜访了所有物体. 如果已经访问过,我可以将其存储在每个对象中. 所有对象都存储在内存中,并使用普通指针链接在一起. 对象的大小不尽相同. 有时系统中的内存不足以同时将所有对象都保存在内存中,我希望避免“页面颠簸". 我也希望避免TLB错误 其他时候,ram足够多了. 我不介意编写低级代码. 我不介意Windows和li ..
发布时间:2020-11-12 19:50:02 其他开发

从内存加载寄存器时是否有可能“中止”而不是触发页面错误?

我正在考虑'最小化页面错误(和TLB错误),同时“遍历”大图' '如何知道指针是否在物理内存中或它将触发Page Fault?'是从另一个角度看问题的一个相关问题,但没有解决方案。 我希望能够将内存中的某些数据加载到寄存器中,但是如果当前内存已被调出,则将中止加载而不是发生页面错误。我需要代码可以在Windows和Linux上的用户空间中工作,而无需任何标准权限。 (理想上,我也 ..
发布时间:2020-10-11 00:01:39 其他开发

在x86 32位中禁用分页

我试图直接写到物理内存位置,所以我正在使用汇编函数首先禁用分页,写入值,然后重新启用分页,但是由于某些原因,尝试时仍会触发页面错误写值. 据我了解,在x86-32bit中,通过翻转cr0中的第32位来打开和关闭分页,所以这是我的汇编函数: mov 4(%esp), %ecx //address mov 8(%esp), %edx //value mov %cr0, %eax and ..
发布时间:2020-09-12 23:37:24 其他开发

分段错误与页面错误

我想知道两者之间有什么区别和关系 分段错误和页面错误? 分段错误仅属于分段存储器模型吗? 页面错误仅属于页面内存模型吗? 如果都是,则由于大多数计算机系统(例如x86和Linux)使用分页内存模型而不是分段内存模型,为什么GCC C编译器有时会报告分段错误错误? 感谢和问候! 解决方案 实际上,这两件事是非常不同的. segmentation fault 是指程序试 ..
发布时间:2020-05-08 21:34:15 其他开发

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

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

Linux,在首次读取或首次写入时将页面pagefault置零吗?

我的问题是Linux特定的,需要了解内核,虚拟内存,mmap,页面错误.我有带有大型静态数组的C程序,它将进入bss部分(内存,初始化为零).程序启动时,不会物理分配此内存,只有虚拟内存,并且虚拟内存的每一页都映射到特殊的零页(所有零的页).当应用程序访问此页面时,将生成页面错误并分配物理页面. 问题是:这种页面错误会在从bss部分对该页面的首次读取访问或首次写入访问时生成吗? 解决方 ..
发布时间:2020-05-01 09:50:34 服务器开发

如何禁用mmap()的按需复制和零填充

我正在使用mmap()实现cp(文件复制)命令. 为此,我将源文件映射为MAP_PRIVATE(我只想读取)模式,将目标文件映射为MAP_SHARED模式(因为我必须写回目标文件的更改内容). 在执行此操作时,我观察到由于2个原因导致的许多次要页面错误而导致性能下降. 1)在为源文件调用mmap(MAP_PRIVATE)时按需零填充. 2)在调用mmap(MAP_SHARED)作为目标文件时 ..
发布时间:2020-04-23 10:52:49 服务器开发

在D2006应用程序中获取外部异常C0000006 - 如何强制delphi加载整个可执行文件?

当我退出我的应用程序时,我偶尔会收到这个消息 - 我的应用程序是通过网络运行EXE的。我了解这是一个页面错误,部分EXE是按需加载的。 我也在TDrawGrid的OnDrawCell方法中观察到,所以我很神秘这可能导致页面加载。另外,这个例外情况一直在发生。 所以我的问题: 可以从其他原因导致错误C0000006?我对应用程序管理内存的方式做了相当大的改变,虽然没有什么是普通的, ..
发布时间:2017-09-29 09:58:43 其他开发

在D2006应用程序中获取外部异常C0000006 - 如何强制delphi加载整个可执行文件?

当我退出我的应用程序时,我偶尔会收到这个消息 - 我的应用程序正在通过网络运行EXE。我明白这是一个页面错误,当EXE的一部分是按需加载的。 我也在TDrawGrid的OnDrawCell方法中观察到,所以我很神秘这可能导致页面加载。另外,这个例外情况一直在发生。 所以我的问题: 可以由其他原因导致错误C0000006?我对应用程序管理内存的方式做了相当大的改变,虽然没有什么是普 ..
发布时间:2017-04-23 23:18:30 Delphi

计算页面错误数2-D阵列

我想学习的exam..and我发现这个例子,但无法理解他们是如何得到的答案。谁能解释一下吗? 问: 考虑二维数组A: int类型的[] [] =新INT [100] [100]; 其中A [0] [0]是在位置200与200尺寸小的过程,操纵矩阵驻留在0页(地址0到199)的页面分页内存系统。因此,每一个取指令将从0页。 两页帧,页故障多少由以下数组初始化环路产生,使用LRU替换和假 ..
发布时间:2016-06-01 20:10:31 其他开发