问题标签 [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 投票
2 回答
1046 浏览

linux - Linux 如何在 x86-64 中支持超过 512GB 的虚拟地址范围?

x86-64 与 Linux 的用户虚拟地址空间是 47 位长。这实质上意味着 Linux 可以映射一个具有大约 128 TB 虚拟地址范围的进程。

然而,令我困惑的是 x86-64 架构支持 ISA 为每个进程定义的 4 级分层页表(排列为基数树)。页表的根最多只能映射 512 GB 的连续虚拟地址空间。那么Linux如何能够支持超过512GB的虚拟地址范围呢?它是否为每个进程使用多个页表?如果是,那么对于一个进程,对于任何给定进程,CR3(x86-64 的包含页表基地址的寄存器)应该包含什么?我错过了什么吗?

0 投票
1 回答
497 浏览

linux - 在 Linux 中的内核和用户代码之间来回跳转

我正在为一个研究项目在运行 x86-64 的 Linux 上进行一些内核黑客攻击。我需要从内核例程跳转到用户模式代码页并立即返回内核代码。换句话说,我需要在内核中执行时对用户代码做一个蹦床。

我想知道这是否可能。如果可能的话,有人可以给出一些想法如何实现吗?

0 投票
2 回答
1140 浏览

linux - linux内核中的x86分页与mmu

x86 arch, linux kernel 2.6.x, 32bit系统

我了解虚拟地址 0xC0000000 ~ 0xFFFFFFFF

为内核保留。

这个虚拟地址可以通过以下方式转换为物理地址

减去 0xC0000000。

但是,我认为即使结果相同,MMU 也会翻译

通过页表遍历内核虚拟地址(例如0xC0851000)到物理地址。

CR3 -> 页面目录 -> 页表 -> PFN。

我是对还是错?,如果我错了,请纠正我。

我需要在 x86、linux 32 位系统中开发基于硬件的内核监视器。

所以我需要知道这个问题

请帮忙。

0 投票
1 回答
302 浏览

mmu - 指令获取是否通过 MMU?

当CPU使用程序计数器取下一条指令时,是否需要先把下一条指令的地址送到MMU,这样地址才能变成物理地址,然后再通过那个物理地址从内存中取出指令呢?

0 投票
2 回答
710 浏览

memory-management - 用于处理 Linux 内核中 TLB 未命中的调用图

我试图了解 linux 内核如何处理 TLB 未命中。具体来说,我知道页表遍历发生在其中follow_pagemm/memory.c但是当发生 TLB 未命中时,follow_page 是如何调用的。follow_page的返回值 ( struct page) 是如何传回硬件的?有人可以说明从硬件引发 TLB 未命中异常到何时follow_page被调用的 TLB 未命中处理的调用图吗?

follow_page我在内核代码中搜索了http://lxr.linux.no/linux+v3.4.4/+search=follow_page但结果似乎没有多大帮助。为了清楚起见,假设硬件是 x86_64。

0 投票
1 回答
1395 浏览

memory-management - ARM 内存重映射

ARM 页表条目具有 TEX 重映射位。我已经读过类似 TEX remap 的内容与页表条目的 AP 位一起用于访问保护。

  1. 有人帮我澄清一下这些位是什么以及它们的含义

  2. 它与内存重新映射有关吗?

    一个。如果是这样,它与普通内存重映射寄存器和主内存重映射寄存器有什么关系。

  3. linux内核是否正在使用这些。

    一个。如果是这样,linux内核以哪种方式使用这些。请给我一些用例。

0 投票
1 回答
1280 浏览

kernel - 如何修复分段错误?

我需要使用TMS320DM368读取异步外部存储器接口 ( AEMIF )在自定义硬件上的嵌入式 linux 环境中。我实际上还没有硬件,所以我正在 Leopardboard 368 上测试 vala 代码(如下)。引导加载程序使用第一个 AEMIF 来读取 nand flash。我的代码正在尝试使用第二个 AEMIF 来读取不在 Leopardboard 上但将在自定义硬件上的 SRAM。我怀疑分段错误是由于我试图访问受保护的内存这一事实引起的。实际的自定义硬件将有几 M 的 SRAM 需要读取,但我试图让这个测试代码读取读取 256 个字节。如何修复由下面的测试代码引起的分段错误?我需要向内核添加驱动程序吗?如果可能的话,我宁愿不要弄乱内核。是否有嵌入式 Linux 方法来配置或声明某些地址范围不受保护?

0 投票
2 回答
1438 浏览

android - 如何在 __turn_mmu_on 阶段后调试 Linux 内核引导过程?

我正在尝试在自定义硬件上启动基于 Linux 内核 3.0.1 的 Android 4.0.1(冰淇淋三明治)。

我能够__enable_mmu使用串行端口调试 Linux Kernel 3.0.1 引导过程,直到在 head.S 中定义的函数。

但是一旦__turn_mmu_on执行功能,我就无法调试启动过程。

我已经浏览了 linux-arm-kernel 邮件列表档案并且我已经尝试过他们的printascii()工作。但是我仍然无法在__turn_mmu_on.

在这里,我之前可以获取日志,__turn_mmu_on因此我的串行控制台端口工作正常。

还有一件事——我没有 JTAG。

谁能提供打开MMU后如何调试Linux内核引导过程的解决方案?

0 投票
1 回答
1307 浏览

kernel - 如何知道Linux内核中CPU访问的物理内存地址?

我正在尝试通过 Linux 中的一些基准应用程序跟踪内存访问模式。最终,我想知道内核(或用户)空间中的 CPU 访问的物理内存地址。

有没有一种简单的方法可以在不修改内核源代码的情况下获得它?我希望可以在我的内核模块中挂钩一些 MMU 例程,然后将虚拟地址转换为物理地址,并将物理地址写入内核日志或类似的东西。这可能吗?

使用像 Qemu 这样的模拟器会更好吗?

0 投票
1 回答
991 浏览

arm - PLD指令的使用

我对 ARM cortex A8 中 PLD 指令的使用有一些疑问。当我在循环内使用指令时,可能会出现超出范围的内存访问。我怀疑这是否会导致分段错误。我在ARM 手册中读到,其中指出

由于所有级别的高速缓存都将 PLD 指令作为任何其他加载指令来处理,因此 PLD 指令遵循标准的数据依赖规则和逐出程序。在 PLD 执行的任何阶段,如果发生地址转换错误、高速缓存命中或中止,PLD 指令将被忽略。

因此,如果进行了越界内存访问,相应的 PLD 指令是否会被忽略是我的疑问。