问题标签 [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.
x86 - 如果存储在 tlb 中的标志不匹配,会发生什么错误?
如果我的理解没有错的话,TLB不仅存储了虚拟到物理地址的映射,还存储了每个页面的标志,例如可写标志(W),执行禁用(XD)标志。
我的问题是,如果它尝试执行堆或堆栈等不可执行的页面,会产生什么错误?是页面错误吗?
bash - “顶部”中的故障列是什么?
我正在尝试下载 Xcode(到版本 El Capitan),它似乎被卡住了。当我运行“top”时,我看到一个名为“storedownloadd”的进程,并且“STATE”列在睡眠、卡住和运行之间交替。'FAULTS' 有一个快速增加的数字,后面有一个加号。'FAULTS' 列现在超过 400,000 并且还在增加。除了“顶部”,我看不到下载活动的迹象。这是否表明有什么不对劲?这是一个屏幕截图:
assembly - 引导加载程序页面错误
所以今天我正在创建另一个引导加载程序,并认为如果我能够使用 64 位处理器的功能会很好。一切似乎都运行良好,直到我的 bochs 由于页面错误而开始重新启动。
注意:部分代码是从 osdev 和其他一些 osdev 教程中复制的,因为我希望首先能够拥有工作代码,然后分析它是如何工作的,然后自己重写它。
正如维基百科所说:
页面错误发生在正在运行的程序访问映射到虚拟地址空间但未实际加载到主内存中的内存页面时。
不幸的是,我无法理解这是什么意思。
这是代码:
当我尝试用颜色 rgb(114, 220, 239) 填充我的屏幕时发生页面错误,这里是:
我知道这听起来可能很愚蠢,但我能做些什么来解决这个问题?
另请注意,我以前从未使用过长模式
exception - 堆给出页面错误
我现在遇到页面错误,这意味着我正在访问无效地址。这很可能是我选择遵循的高半内核设计。但我看不出它在哪里导致页面错误。这是我的 kernel.c++
好的,您可以看到我注释掉了最后几行.. k_malloc() 是导致所有混乱的原因。出于某种原因,它的 malloc() 低于 0xC0100000 ,这是我们可以为内核设置的最小大小,因为我们使用的是虚拟地址,并且 1MB 是 Grub 相关的东西。说这是我的 heap.c++ :
我认为问题出在 malloc() 上,因为当我将其注释掉时,一切正常。我正在访问该函数中的一些无效地址:
. 帮助将不胜感激。这是我在 Github 中的完整源代码:https ://github.com/amanuel2/OS_MIRROR
memory-management - 进程的常驻内存增加但没有重大页面错误
我创建了下面的小型 c 程序,它使用 malloc() 分配 50Mb 的内存,然后使用循环“触摸”每个页面以使其驻留。
实际上,该程序似乎工作,这意味着在前 5 秒睡眠后,“top 命令”输出上的常驻内存开始填满并最终将所有虚拟内存分配给 RAM。
我注意到程序的页面错误,只有轻微的:
不应该有重大的页面错误吗?据我了解,当我使用 malloc() 时,会创建一个 50Mb 的虚拟地址空间。之前写在每个虚拟页面上,实际驻留的大小很小,但是之后就等于申请的虚拟内存了。
当我“触摸”页面(以使它们驻留)时,每个页面都会从磁盘移动到 DRAM,对吗?那么为什么没有任何主要页面错误呢?
另外,当你 malloc() 50m 并且你注意到住宅大小时,只有几个 KB,其余页面在哪里?它们在磁盘上吗?
linux-kernel - 想编译 userfaultfd ecample
我想处理用户空间页面处理程序。
以下网址显示了 userfaultfd 的用法
https://www.cons.org/cracauer/cracauer-userfaultfd.html
但是我无法编译该程序。
错误如下。
为什么我不能编译这个程序?
我的环境:
Ubuntu 16.04 64bit
gcc 版本 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
c - 我的流程*真的*有多少小故障?
我有以下简单的程序,它基本上只是mmap
sa 文件并将其中的每个字节求和:
我是这样的:
你传递一个文件名和一个populate
或nopopulate
1,它控制是否MAP_POPULATE
传递给mmap
它。它等待您在退出之前输入 enter(让您有时间检查其中的内容/proc/<pid>
或其他内容)。
我使用 1GB 的随机数据测试文件,但你真的可以使用任何东西:
使用时MAP_POPULATE
,我希望页面缓存中的文件出现零主要错误和少量页面错误。我得到perf stat
了预期的结果:
45 个错误仅来自运行时和进程开销(并且不依赖于映射文件的大小)。
但是,/usr/bin/time
报告了大约 15,300 个小故障:
top
和通过检查报告相同的约 15,300 个小故障/proc/<pid>/stat
。
现在,如果您不使用MAP_POPULATE
,所有方法,包括perf stat
同意,都会有大约 15,300 个页面错误。对于它的价值,这个数字来自1,000,000,000 / 4096 / 16 = ~15,250
- 即 1GB 分为 4K 页面,另外 16 倍的减少来自内核功能(“faultaround”),它在多达 15 个附近已经存在的页面中出现故障发生故障时的页面缓存。
谁在这里?根据 的记录行为MAP_POPULATE
,返回的数字perf stat
是正确的 - 单个mmap
调用已经填充了整个映射的页表,因此在触摸它时应该没有更多的小错误。
1实际上,除了 populate
作为nopopulate
.
linux - 为什么linux内核中的这段代码不会导致死循环?
我正在阅读关于启动时页表初始化的linux源代码(4.4.45,但在其他版本中应该相同),下面的代码让我感到困惑。
具体来说,我正在阅读有关如何early_level4_pgt
初始化的信息。这是x86_64中的部分代码,链接在这里。
从 开始,不管怎样1:
,流程都会去;2:
而在里面,不管怎样2:
,流量都会跳回去!!1:
我真的很困惑,这个循环如何结束以及内核何时进入secondary_startup_64
?我的猜测是,当它访问导致页面错误的无效 pmd 条目时,处理程序将处理其余的启动代码。但是我不确定它,我不知道在哪里可以找到相应的代码。
谁能给我一些线索?任何帮助表示赞赏。
opencl - OpenCL 是否支持自动页面迁移?
在最近的 CUDA 迭代中,可以“分配内存”,在主机和设备上都可以访问,传输(故障)由驱动程序自动处理。
OpenCL 目前是否允许这样的功能?如果是这样,是否有任何实际支持它的实现?