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

memory-management - 构建基于软件的 MMU 和 TLB

我正在尝试破解旧的 unix 内核。我只想使用软件实现 MMU 和 TLB。有人可以告诉我在构建一个时使用的最佳数据结构和算法是什么。我看到很多人使用伸展树,因为它很容易实现 LRU。有没有更好的数据结构?在软件中将虚拟地址转换为物理地址的最有效方法是什么。假设它的 x86 架构和转换是任何基本的页表转换。

0 投票
9 回答
150472 浏览

memory-management - 逻辑地址和物理地址的区别?

我正在阅读操作系统概念,我在第 8 章!但是,我可以使用一些澄清或保证我的理解是正确的。

逻辑地址:根据本书,逻辑地址是由 CPU 生成的。这到底是什么意思?(在执行生成的地址系统中..)我假设为程序编译代码时,程序知道代码将在内存中加载到哪里。编译器所做的只是设置程序布局的一般草图以及图像的布局方式,但不会为其分配任何实际地址。当程序执行时,CPU 获取编译器制作的布局图像,并将一些地址(逻辑地址)分配给从代码生成的地址。

物理地址:直到 CPU 生成一组逻辑地址(由基地址和偏移量组成)之后才会生成物理地址。逻辑地址通过 MMU 或其他设备,并且沿线路的某处将逻辑地址映射到物理 RAM 地址。

那么实际的区别是什么?我可以看到一个好处。使用逻辑地址给应用程序更多的自由。如果物理地址是硬编码的,那么程序的成功将在很大程度上取决于物理计算机、可用的 RAM 地址等。

使用转换为物理地址的逻辑地址不是强加了两个步骤而不是一对一,因此不是更多的开销吗?

那么逻辑地址在生成后驻留在哪里?当 CPU 为进程提供服务时,它们可能存在于 CPU 上的寄存器中,但在此之前和之后,它们会去哪里?我知道这取决于实现。我假设它们可能存储在 CPU 上的某些特殊寄存器空间或缓冲区中,例如 TLB,对吗?如果不是,那么该表可能存在于实际的 RAM 本身中,并且 CPU 仅保存指向 RAM 中表的基地址的指针/地址,对吗?

将地址保存在 RAM 中似乎与逻辑内存地址的目的相反。我只能假设我的理解是不正确的。

0 投票
2 回答
382 浏览

c - 桌面操作系统上的 C 编译器使用多少内存页来检测堆栈溢出?

这个问题与C99 中的可变长度数组有关但不同于这个问题

答案指出,在堆栈中分配可变长度数组(或仅是固定大小的大数组)的一个危险是分配可能会默默地失败,而不是调用malloc,它明确告诉调用者分配是否成功。

现代非嵌入式编译平台使用无效内存区域来检测一些堆栈溢出,无需额外费用(检查只是 MMU 已经免费进行的检查)。这并不能 100% 避免上述问题,因为非常大的本地数组可能会导致堆栈指针跳过无效区域。

有谁知道通常为此检测分配多少页?我猜它至少是 4KiB,但可能更多。这是编译器还是操作系统做出的选择,无论哪种情况,有没有办法改变它?

0 投票
1 回答
1253 浏览

operating-system - 操作系统对页面错误的响应

当发生页面错误时,MMU 会引发异常(中断)。操作系统停止当前进程并解决这个引发的中断。

1)这是否意味着(对于 68K 架构,其中有 7 条中断线,其中第 7 条不可屏蔽)MMU 生成的中断处于第 7 级?

2)此外,如果在引发中断时有一个非常重要的过程(不需要虚拟寻址字的数据)怎么办?操作系统是做什么的?

0 投票
2 回答
1089 浏览

memory-management - 在 Solaris 中查找从虚拟页面到物理页面的映射

我想访问虚拟页面到某个进程的物理页面的映射。操作系统是 Solaris,可以从https://stackoverflow.com/users/760807/metallicpriest询问确切的版本

我想获得如下列表:

CPU 是 x86 或 x86_64。页面大小为 4K;交换已关闭。我对由 FS(可执行映像)支持且进程未使用的页面不感兴趣。

0 投票
2 回答
2449 浏览

memory-management - 转储 x86 CPU 的 TLB 缓冲区的内容

是否可以从 TLB(翻译后备缓冲区,这是 CPU 中的特殊缓存)获取翻译列表(从虚拟页面到物理页面)。我的意思是现代 x86 或 x86_64;我想以编程方式完成,而不是使用 JTAG 并将所有 TLB 条目移出。

0 投票
2 回答
1244 浏览

c - mprotect有多快

我的问题是有多快mprotect。mprotecting 说 1 MB 的连续内存与 1 GB 的连续内存有什么区别?当然我可以测量时间,但我想知道引擎盖下发生了什么。

0 投票
1 回答
542 浏览

gcc - 链接器:如何将数据块放置在特定地址边界

这可能是一个简单的问题,但我是 GNU GCC 链接器文件的初学者(codesourcery arm-none-eabi ver 4.5.2)。

我必须在 ARM7 处理器和数据表中初始化 Mmu,据说 Mmu 页表必须位于 16kbyte (2^14) 边界。

现在我已经有了这个解决方案,但我几乎可以肯定这不是更有效的解决方案!

startall.o 是一个包含处理器初始化的程序集文件。
下一行,我将地址设置为 0x4000(2^14 的边界)。
MmuSdram0.o 包含 Mmu 页表。
然后按照固件的其余部分进行操作。
显然,这个解决方案让我在 startall 的结尾和 0x4000 之间有一个差距,这浪费了内存空间(我不喜欢浪费 ;-)

我会做的是将页面表放在 *(.text) 之后,但我不知道如何执行以下操作:
*(.text) "except" MmuSdram0.o
我更喜欢让链接器放置页面表在下一个可用的 2^14 边界,而不是自己修复地址。我检查了链接器文档,找到了 ALIGN 命令,但我不确定如何正确使用它,或者这是否适合我需要的命令......

提前致谢!

0 投票
1 回答
403 浏览

gdb - 在 eclipse 和 gdb 中调试 MMU 激活

我尝试使用 segger 的 j-link 探针、带有 CDT 插件的 eclipse 和 yagarto 调试我的处理器(Cirrus Logic 的 EP7312,ARM7)的初始化。

一切正常,直到我激活处理器的 MMU。之后,调试器就完全丢失了。

我知道调试器在激活 MMU 时可能会丢失程序计数器,我尝试在激活 MMU 后设置断点以从此处运行程序,但调试器仍然丢失。

有谁知道配置 eclipse 的方法,以便它可以处理从 MMU 未激活到 MMU 激活的通道?

eclipse 版本:20090920-1017 gnu 版本:Sourcery 7.2.50

0 投票
1 回答
5160 浏览

profiler - 测量 x86-64 中的 TLB 未命中处理成本

我想估计在运行 Linux 的 x86-64 (Intel Nehalem) 机器上由于 TLB 未命中而导致的性能开销。我希望通过使用一些性能计数器来获得这个估计值。有人对估计这个的最佳方法有一些指示吗?

谢谢阿卡