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

virtual-address-space - 当虚拟地址空间等于物理地址空间时,我们是否需要 MMU?

MMU用于借助对应于该进程的页表将正在运行的进程的虚拟地址转换为物理地址。让我们假设虚拟地址空间等于物理地址空间的情况。在这种情况下,我们真的需要 MMU,因为我们不会遇到相同的虚拟地址空间映射到不同的物理地址的情况吗?

让我们说

我们真的需要为每个进程提供页表吗?当有多个进程时可能会出现什么问题?

为简化起见,请忽略高速缓存。

0 投票
0 回答
2078 浏览

c - 如何使用 VxWorks 映射 PCIe 区域?

这是我的第一篇文章 :) 我正在使用 VxWorks 6.9 和 Intel Sandy Bridge 板。我想知道如何在我的应用程序中映射 PCIe 内存区域。PCIe 内存区域是图形内存的一部分,它的物理地址是 0x80000000。

我正在尝试使用不返回虚拟地址的 vmMap 函数。在这种情况下,我将虚拟地址设置为与物理地址相同的值,但我不知道这是否是好的行为。如何从物理地址获取虚拟地址?如果不存在函数,我必须使用什么虚拟地址?

当我在我的应用程序中映射了该区域时,我正在对该区域的访问进行调整。我正在尝试使用函数 vmStateSet 更改缓存状态,但只能设置 COPYBACK、WRITETHRU 和 DEFAULT(设置其他缓存值失败)。所有缓存状态的吞吐量都很低。在 Intel Sandybridge 中,可以将 MMU 设置为写入组合。我如何在 VxWorks 中做到这一点?

这是我到目前为止所尝试的:

谢谢您的帮助 !!

0 投票
1 回答
983 浏览

memory - 内存 - 分页和 TLB

我对以下任务有疑问。

考虑一个 IA-32 系统,其中 MMU 支持两级页表。第二级包含 1024 个页表条目,映射到 4 KB 页框。每个页表条目(两个级别)的大小为 4 个字节。系统仅支持 4 KB 页面大小。
我们想从虚拟内存中连续读取 8 MB,从字节 0 开始。我们一次读取一个字(4 个字节)
我们有一个 8 条目数据 TLB。读取上面指定的 8 MB 内存需要多少内存访问?

如果 TLB 有 4 个条目而不是 8 个条目,这会有所不同吗?

所以,我们按顺序阅读。这意味着 8MB/4B = 2M 内存访问。我们有一个两级页表。因此,2M + 2*2M = 6M 没有 TLB 的内存访问。

但我不知道如何计算包括 TLB 在内的内存访问。

谁能给我解释一下?那将非常有帮助。

0 投票
2 回答
2733 浏览

memory - MMU和内存控制器的区别

内存控制器的作用是什么?它们与处理器内部的 MMU 有何不同?MMU 的工作是否是将虚拟地址转换为物理地址(除其他外)并将此物理地址发送到内存控制器,该内存控制器将特定信号发送到 DRAM 并将结果返回给 MMU?或者内存控制器是 MMU 的一部分?

0 投票
1 回答
2351 浏览

arm - 启用 MMU/缓存的 ARM Cortex A9 序列的 SMP 启动

我正在尝试在启用了 MMU/Cache 的双核 ARM Cortex A9 系统上的 U-boot 中进行 SMP 启动。我需要初始化序列。以下事情发生的顺序应该是怎样的。以什么顺序?

  • MMU页表设置
  • 设置 SMP 位(内核 0 和内核 1)
  • 无效缓存(内部缓存)
  • 缓存的刷新(内部和外部呢)
  • 何时必须启用 L2 缓存?
  • 何时必须启用 SCU?在 SMP 位之前还是之后?

如果有人可以列出操作顺序,那将是一个很大的帮助。

提前致谢

0 投票
1 回答
160 浏览

arm - 如何决定在页表中映射了多少虚拟地址空间?

我读过 Arm V7 ISA 为程序提供了 4gig 的虚拟地址空间。如果我采用一个所有代码都在 4kb 以内的程序,我的问题是整个 4gig 的空间是否映射到页表中?我采用短描述符格式来构建页表并使用 4k 粒度,这将在 ram 中占用大量空间来保存页表。所以我认为单个进程的整个 4GB 空间没有被映射,但只有一部分被映射。这个对吗?如果它是正确的,那么如何决定表中映射了多少 VA?

0 投票
3 回答
1393 浏览

linux - 现代 cpus 如何处理跨页未对齐访问?

我试图了解未对齐内存访问 (UMA) 如何在现代处理器(即 x86-64 和 ARM 架构)上工作。我知道我可能会遇到 UMA 的问题,从性能下降到 CPU 故障。我阅读posix_memalign并缓存行。

当我的请求超出页面边界时,我找不到现代系统/硬件如何处理这种情况?

这是一个例子:

  1. malloc()有一块 8KB 的内存。
  2. 假设我malloc()没有足够的内存和sbrk()8KB。
  3. 内核获取两个内存页(每个4KB)并将它们映射到我进程的虚拟地址空间(假设这两个页在内存中不是一个接一个)
  4. movq (offset + $0xffc), %rax我从第 4092 个字节开始请求 8 个字节,这意味着我想要从第一页末尾开始的 4 个字节和从第二页开头开始的 4 个字节。

物理内存:

我需要在页面边界处拆分的 8 个字节。

x86-64 和 ARM 上的 MMU 如何处理这个问题?内核 MM 中是否有任何机制可以以某种方式为这种请求做准备?有什么保护措施malloc吗?处理器是做什么的?他们获取两页吗?

我的意思是要完成这样的请求,MMU 必须将一个虚拟地址转换为两个物理地址。它如何处理这样的请求?

如果我是一名软件程序员,我应该关心这些事情吗?为什么?

我目前正在阅读来自 google、SO、drepper 的 cpumemory.pdf 和 gorman 的 Linux VMM 书的大量链接。但它是信息的海洋。如果您至少向我提供一些我可以使用的指针或关键字,那就太好了。

0 投票
0 回答
480 浏览

linux - 如何读取内核页表?

Linux 将虚拟内存空间分为两部分:0x00000000 ~ 0xBFFFFFFF 和 0xC0000000 ~ 0xFFFFFFFF。正如我所读到的,所有进程共享相同的内核虚拟空间 0xC0000000 ~ 0xFFFFFFFF。

我正在尝试锁定一个 TLB 以在 ARM 架构上进行系统调用。例如,对于 raw_spin 系统调用,我从 System.map 中获得了虚拟地址 0xc04d35b0,然后我想找到对应的物理地址来锁定一个 TLB 条目。

我的问题是如何读取内核页表?谢谢!

0 投票
1 回答
518 浏览

tlb - 如何编写检查 TLB 锁定和失效的测试?

我正在尝试验证软件 MMU。

在我得到的测试用例中,我需要检查“TLB 锁定和失效”。

我进行了测试并检查了 TLB 未命中,但我无法理解 TLB 锁定和失效的确切含义。

0 投票
0 回答
275 浏览

linux-kernel - ARMv5 的大页/超页支持

我正在查看一些最近添加到 linux 内核的添加代码以支持 ARMv6 和 ARMv7 的 1MB 页面,Freebsd 自 2013 年以来也支持内置,但它也仅限于 ARMv6 和 ARMv7。Linux 还支持使用大页面来映射 ARMv5 上的内核内存,但不支持用户空间。

当我考虑在 ARMv5 上添加对用户空间 Hugepages 的支持时,我想知道是否有任何架构障碍使其无法实现。

ARMv5 上的用户空间应用程序不支持大页面是否有原因?还是只是“有人必须实施”的问题?在 Linux 上,我可以看到他们使用以前的访问权限/域位来保存一些额外的信息,AFAICT 在 ARMv5 上是不可能的。但这是唯一的原因还是我可能错过了其他什么?