问题标签 [mmu]

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 投票
1 回答
1034 浏览

linux - mprotect : 内存保护是如何实现的

我已经知道 mprotect() 系统调用在 BSD 中有 4 种保护模式,但我的问题是这种保护是如何实现的(硬件或软件实现)?

假设我们将特定页面的保护设置为 PROT_NONE ,它真的取决于我正在使用的硬件还是通过在页表中的指定页面上设置一些标志来某种软件技巧。

似乎这种对硬件的保护依赖于我们拥有的MMU,但我不确定。

您可以在以下位置找到有关 mprotect 和分页的更多信息:

BSD 手册页

分页 - 维基

0 投票
0 回答
96 浏览

memory-management - 重定向 DMA 内存访问

我想知道是否可以将 DMA 设备的内存读取请求重定向到操作系统级别的另一个地址,而不会注意到 DMA 设备。

假设我的 PCIe 卡可以通过直接读取物理地址来访问我 PC 上的所有内存。操作系统的MMU能否将这些请求重定向到内存中的其他地址?这意味着 DMA 地址认为它读取了正确的物理地址,但实际上它正在读取其他一些地址?

那可能吗?

0 投票
0 回答
211 浏览

gdb - 获取(仿真)ARM 板的 MMU 映射

有没有办法使用 QEMU 控制台和/或连接到 QEMU 实例的 GDB 在断点期间捕获 MMU 上下文(并最终获得精美的图片来理解它)?

0 投票
1 回答
982 浏览

linux - 更改内核页面权限以允许用户访问

在 x86 或 x64 Linux 中,我正在尝试制作一个内核模块来更改特定的内核页面权限以允许用户应用程序访问该内存。例如,如果在 0xC0001000 处有一个可读的内核页面(比如说它是 3:1 拆分),我想更改此页面的用户/主管位并允许用户应用程序执行类似的操作。

在我的内核模块中,我将相应内核内存页面的访问位从 0x67 更改为 0x63(低位 111 -> 011)以清除主管位。

之后,我使用 invdpg 指令刷新了虚拟地址 0xc0001000 的 TLB。我已经确认我操作的页面条目确实是对应的。但是,从用户应用程序访问 0xC0001000 仍然会导致我出现分段错误。我在这里错过了一些重要的事情吗?也许是cs段和GDT?还是那无关紧要?

一些建议会很好,提前谢谢你:)

0 投票
1 回答
358 浏览

linux-kernel - 直接映射内核虚拟地址

我读过如果Linux内核虚拟地址在0xC0000000和(0xC0000000 + 896MB)之间。映射直接到物理地址。

也就是说,如果 RAM 位于 0x80000000。直接映射到 0xC0000000。

这是如何在 Linux 中实现的。是否有人告诉 MMU 每次虚拟地址在 0xC0000000 和 (0xC0000000 + 896MB) 之间时减去一个偏移量

0 投票
1 回答
815 浏览

computer-architecture - L1 / L2 / LLC / DRAM中的并行查找?

这是一个奇怪的问题,但也许这里有人知道:参考 Intel/AMD 最新的处理器,CPU 是否同时查找缓存和 DRAM?

这可能是节省周期的好方法(但可能更耗电)。

任何答案(最好有参考资料)都会有所帮助。谢谢!

0 投票
0 回答
274 浏览

deadlock - 处理器进入 WFI 时收到的不精确的外部中止可能导致处理器死锁

这是 Cortex A9 处理器的 ARM 勘误表。

描述:-

在处理器准备进入 WFI 状态时接收到的不精确的外部中止可能会导致处理器死锁。显式内存事务可以通过在 WFI 指令之前插入 DSB 来完成。但是,这并不能阻止先前发出的 PLD 指令页表遍历与先前发出的 PLD 指令相关联或作为 PLE 引擎的结果生成的内存访问。如果在执行 WFI 指令后由于这些内存访问之一而返回外部中止,则处理器可能会导致死锁。

那么,如何通过保护MMU来防止死锁。

0 投票
1 回答
721 浏览

arm - 可以将 ARM MMU 设置为允许执行代码,但不允许读取

我想知道是否可以为 ARM7(特别是 Cortex A8)MMU 设置页表条目的权限,以便允许从页面执行代码,但不允许读取。

如果权限是正交的,您可能会认为如果未设置 XN(从不执行),则无论是否允许读取,都将允许执行。

当然,一些 ARM 代码在执行时从自身读取(例如,获取存储在函数末尾之外的文字),该代码不太可能工作。

如果您尝试执行的代码没有对其自身进行任何读取(更具体地说,是从禁用读取的页面),代码会按预期执行还是会出现数据中止(或其他)异常?

0 投票
1 回答
283 浏览

linux-kernel - 如果没有处理页面错误,MMU 的行为是什么?

我正在经历 do_page_fault (x86 arch) 例程。假设一个进程试图写入一个被换出的共享页面。然后根据 do_page_fault 中的执行流程,如果访问是有效的并且它是一个普通页面(不是大页面)并且执行可以说是直到 do_swap_page (即没有错误)。一旦 do_swap_page 被执行,它就会返回。

1) 但是如果换入本身由于某种原因没有处理,是否会再次出现故障?

2) 一般来说,我想了解更多关于 MMU 的详细信息,例如 - 它是否检查 pte 标志或 vm 区域标志以引发地址故障?谁能指出我可以理解MMU如何检查内存访问的来源。

0 投票
1 回答
275 浏览

linux-kernel - 如果一个页面的 pte 被标记为 _PAGE_USER 位为 0,是否会导致页面错误或 general_protection 异常?

我试图了解英特尔 x86 MMU 架构提供的保护。我基本上对 MMU 何时会引发页面错误(page_fault,int 14)以及 CPU 何时会引发异常(general_protection fault,int 13)感到困惑。我知道当特权级别不匹配时,CPU 通常会引发异常。

但是谁将用户/管理员模式位映射到特权级别,是 MMU 还是 CPU?

特别是,当我清除页面的 pte 条目的 _PAGE_USER 标志时,我无法解释谁会引发异常,我预计 MMU 会引发错误(或者它是处理器?)

如果可以的话,请指出我的资源,以便我可以阅读以防万一这在某处可用。谢谢 !