问题标签 [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.
linux - 处理 pagefaulte 异常后如何使 mprotect() 取得进展?
我想使用 mprotect() 拦截对我的应用程序中特定内存块的所有内存引用,所以我稍微修改了此处找到的 mprotect 示例代码。但是,当我运行修改后的代码时,应用程序不会在捕获的第一个异常之后继续前进。相反,Linux 将继续向我的应用程序发送异常,并且我的应用程序将继续在无限循环中打印出同一行。
现在,我的问题是如何告诉 Linux 继续前进并进入下一条指令。
以下是输出示例:
这是代码:
c - Linux内核页面错误计数
我目前正在为学校制作一个项目,我们必须在 linux 内核中实现一个新的 sys 调用来计算这样的结构中的页面错误数
并使用 PID 访问它。我也应该能够在 pfstat 模式下设置任务。我已经通过在其中插入 pfstat 并添加 pfmode 来修改 task_struct。我的问题是我真的不明白在哪里可以找到处理这些不同页面错误的代码,从而增加那里的值。
我在arch/x86/mm/fault.c中找到了do_page_fault ,但它似乎无法处理所有这些错误。我是否还应该修改一些功能,例如do_anonymous_page、do_linear_fault、do_swap_page、do_nonlinear_fault、do_wp_page还是我错过了一些理解?
总而言之,我只是找不到应该增加所有结构成员的代码。
编辑:我使用的是内核版本 4.4.50。
paging - 除了页面错误陷阱之后,页面如何加载到 RAM 中?
我试图了解需求分页概念,但找不到答案。页面错误率如何相对较小,如果唯一的方法是让操作系统了解它需要特定页面,就是获取指令并发现该页面没有加载到 RAM 中?如果页面错误率很小,操作系统如何设法在 RAM 中加载正确的页面?它如何提前猜测,将需要该特定页面?谢谢。
operating-system - 操作系统中的页面错误。(无效寻址或页面不在主存储器中)
我正在阅读有关需求分页中的页面错误的信息。页面错误发生在 1)被访问的内存是非法的 2)页面是有效的但不存在于主内存中
我读到使用有效-无效位可以判断内存是否不在逻辑地址空间中,因为相应的位将被标记为无效。
相同的有效-无效位用于识别上述2个条件。
我的问题是操作系统如何知道被访问的内存是非法的,或者页面是否有效但不在主内存中,只有一个有效-无效位?谢谢你!
linux - 您如何为 FIFO 和时钟策略执行高级 shell 脚本来计算页面错误?
我是 bash shell 脚本的新手。我知道如何手动计算页面错误,但我不知道如何使用高级 shell 脚本来完成。如果有人有时间教我,甚至给我一个例子,我将非常感激。谢谢你,祝你有美好的一天。
memory-management - 读取指令可能导致的最大页面错误数?
将 32 位字加载到寄存器中的机器语言指令包含要加载的字的 32 位地址。该指令可能导致的最大页面错误数是多少?
(塔南鲍姆,操作系统,Q 44)
看起来很简单,它只会导致 1 页错误。当它试图访问 32 位字时。(我关于这个问题的理论,请随意忽略它,因为它可能包含许多错误或混淆的事实。)
请告诉我这个问题的正确解决方案是什么。
linux-kernel - 在简单的 IRQ 处理程序中调用 printk 会使内核崩溃
我是内核编程的新手,我找不到足够的信息来了解为什么会发生这种情况。基本上,我试图用一些简单的方法来替换内核 IDT 中的页面错误处理程序,最终调用原始处理程序。我只想让这个函数打印一个它被调用的通知,并且printk()
在它内部调用总是会导致内核恐慌。否则它运行良好。
非常感谢任何可以告诉我我在这里做错了什么的人。
page-fault - 如何衡量次要页面错误成本?
我想验证透明大页面(THP)会导致大页面错误延迟,因为 Linux 在将页面返回给用户之前必须将页面归零。THP 比 4KB 页面大 512 倍,因此清除速度较慢。当内存碎片化时,操作系统通常会压缩内存以生成 THP。
所以我想测量轻微的页面错误延迟(成本),但我仍然不知道。
memory-management - 在内核中保留非常大的虚拟地址空间 (TB) 的最佳方法是什么?
我正在尝试手动更新 TLB 以将新的虚拟内存页面转换为内核空间中的一组物理页面。我想这样做,do_page_fault
以便每当加载/存储指令发生在特定的虚拟地址范围(尚未分配)中时,它都会提前在 TLB 中放置一个页表条目。翻译很简单。例如,我希望以下代码正常工作:
所以,翻译只是一个减法0xffff000000000000
。我想知道实现 TLB 更新功能的最佳方法是什么?
编辑:这样做的主要原因是能够在内核中保留大量的虚拟内存空间。我只想处理内核中特定地址范围内的页面错误。所以,首先我必须保留地址范围(可能超过 100TB 的限制)。然后,我必须为该特定范围实现页面缓存。如果不可能,那么最好的解决方案是什么?