问题标签 [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 回答
142 浏览

linux - Linux 内核会在 x86_64 上自动将页面合并为 2M 吗?

的背景

我已经在主线中挖掘了几个星期,试图弄清楚内核如何/如果(以及在什么条件下)自动合并,例如,512 个 4k PTE 到单个 2M PMD 条目中 - 除了预先安排这个使用hugetlbfs 或THP - 所以,纯粹是因为x86_64。

我之前假设内核中的 TLB/MMU/Paging 子系统会检测到这一点并只是做正确的事情,但这似乎并非如此,当我运行时我在 debugfs 的 kernel_page_tables 中看到带有大型 .text 部分模块 (> 5MB) 的测试。

问题

1) 如果内核确实在 x86_64 架构上自动将页面合并为一个大页面,那么需要设置什么条件才能发生这种情况?

2)如果内核不自动执行此操作,如何手动获取 512 4k PTE,并将它们合并/转换为 PMD?

我只需要一个提示;虽然我很想自己解决这一切,但现在已经有几个星期了,我不顾一切地挠头。

非常感谢

sc。

0 投票
1 回答
73 浏览

java - new with astract class and implements

I have this code of Memory Managment Unit. I made an abstract algorithm Ialgo with 2 Implements. I want to with the MMU class handle different situations. To do this i made a method that get a capacity to make the RAM and get also and Ialgo (1 of the 2 algorithm) but how i can do new for the "algo" member and get the class of the algo i've introduce on the method from the main. Here is the code:

0 投票
1 回答
7035 浏览

linux - Linux页表管理和MMU

我对linux内核和MMU之间的关系有疑问。我现在明白了 linux 内核管理虚拟内存地址和物理内存地址之间的页表。同时x86架构中还有MMU,管理虚拟内存地址和物理内存地址之间的页表。如果 MMU 出现在 CPU 附近,内核还需要处理页表吗?

这个问题可能很愚蠢,但另一个问题是,如果 MMU 负责内存空间,那么谁来管理高内存和低内存?我相信内核将从MMU(32位4GB)接收虚拟内存大小,然后内核将区分虚拟地址中的用户空间和内核空间。我对么?还是完全错误?

提前非常感谢!

0 投票
0 回答
1049 浏览

caching - 如何在uboot中的内存测试期间禁用缓存

我需要在 uboot 中编写内存测试,但需要禁用缓存。我知道我们可以将 p15 c1 配置为完全禁用数据缓存和 MMU,但这似乎太危险了。有没有更优雅的方法来做到这一点?就像在内存映射期间设置属性一样?

我还被告知,对于 uboot 中的命令,缓存可能已经被禁用,但我无法证明......任何人都可以帮忙吗?谢谢

0 投票
1 回答
1337 浏览

arm - ARM MMU,处理 L2 页表

我们如何确定 L2 页表的基地址?(使用 ARM Cortex-A9)

例如,如果我有一个需要 7KB 数据空间并从地址 0x0 开始的程序,我需要两页 4KB。为此,我在 L1 页表中添加了一个指向 L2 页表基地址的条目。然后我像这样在 L2 页表中添加两个条目(第一页的 addr = 0x0 和第二页的 0x1000)

现在有一件事我还是不明白。如何确定 L2 页表基地址?我应该把表格放在 L1 页表之后吗?

我在哪里可以存储地址?我知道 L1 页表的基地址存储在协处理器寄存器中,但我没有找到任何寄存器来存储 L2 基地址。

另一个需要确定的问题是,协处理器寄存器 TTBR0 和 TTBR1 都保存 L1 页的基地址。各有各的。L1 不是 TTBR0,L2 不是 TTBR1,是吗?

0 投票
1 回答
267 浏览

armv6 - TCM 内存中的 ARM MMU 页表

一个(希望如此)简单的问题。

我可以在 ARM 紧密耦合的内存中创建我的 MMU 页表,还是有限制阻止我这样做。

我有 16k 的数据 TCM 似乎非常适合这项任务(指令 TCM 将包含我的安全世界代码),但启用 MMU 时出现异常中止。

当我编译我的安全世界代码以针对 SRAM 时,一切都按预期工作。问题是,在这个 SoC 上,SRAM 可以从一个完全不尊重 TrustZone 的类似 FPGA 的设备中获得。

我在这里遗漏了什么,还是我需要为自己切出一小块 RAM 才能让这一切正常工作?

我正在研究 ARM1176JZ-S。

0 投票
3 回答
1484 浏览

arm - 什么是 PDE 缓存?

我有以下基于 ARM 的 SoC 的规格:

  • L1 数据缓存 = 32 KB,64 B/行,2-WAY,LRU
  • L2 缓存 = 1 MB,64 B/行,16 路
  • L1 数据 TLB(用于加载):32 个条目,完全关联
  • L2 数据 TLB:512 个条目,4 路
  • PDE 缓存:16 个条目(每 1 MB 虚拟空间一个条目)

我想知道 PDE 缓存是什么?我想这类似于 TLB,但我不确定。

回答
PDE(Page Directory Entry)似乎是中间表遍历缓存,确实可以与TLB分开实现。

Cortex-A15 MPCore 处理器实现了专用缓存,将中间级别的转换表条目存储为表遍历的一部分。

0 投票
2 回答
932 浏览

memory-management - 为什么访问未映射的位置不会产生硬件异常 (Microblaze)

我想编写我的代码来处理 Microblaze 上的 TLB 未命中,当然还有页表等。这一切都在 OVPsim 上完成。

当我边走边学的时候,我编写了这个小程序集来引用一个未映射的位置(0x1000000)——我将它作为特权代码运行,并在 VM 上运行:

(即,将r20 == 0out的内容写入ORing形成的地址r12 == 0x1000000r0 == 0 => 0x1000000显然。)

但是 GDB 没有跳转到异常向量,而是报告“程序收到 SIGSEV”——我做错了什么?我没有在 MSR 中启用硬件异常位,但手册说您在任何情况下都不能屏蔽这些异常,所以这不应该是问题。

更多信息无论我是否使用调试器,我都无法执行任何异常处理代码(例如,包括未对齐异常)(除非我明确调用它)。关闭调试器后,我从 OVPsim 得到了这个输出(注意我只是改变了测试地址——上面的 0xA000000 和 0x100000 之间的区别没有意义):

这是所有代码都在特权模式下运行,所以我看不出它不调用处理程序的明显理由,除非我没有正确配置 Microblaze。我打开了这些:

没有理由相信这不会奏效,因为 OVPsim 将在 Microblaze 上运行 Linux。

0 投票
3 回答
1029 浏览

arm - 在 ARMv7 中,TTBR0 和 TTBR1 中使用的地址是物理的还是虚拟的

我一直在查看第 B3 节中的 v7-A 和 v7-R 的 ARM 架构参考手册,但我无法确定 TTBR0 和 TTBR1 寄存器中使用的地址应该是虚拟地址还是物理地址。

物理最有意义,但我想确切地知道。

那么,这个地址应该是物理地址还是虚拟地址?

是否需要将页表位置映射为身份地址(PA == VA)?

0 投票
3 回答
1231 浏览

linux - Linux /proc/pid/smaps 比例交换(类似于 Pss 但用于交换)

似乎(从查看 Linux 内核源代码)中的Swap:度量标准/proc/pid/smaps是给定 pid 可访问的总交换。

在涉及共享内存的情况下,这似乎是对实际交换使用的过度近似。例如,当将父 pid 与其分叉子代的交换使用量相加时,如果它们在交换中有共同的共享内存,那么这部分(交换的共享内存)似乎被计算了多次(每个 pid 一次)。

我的问题是,是否有一种方法可以根据共享它的进程数(类似于Pss:)来计算出一个公平的交换使用指标。