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

c++ - C++ 中指针初始化错误的后果是什么

这个问题已经关闭,因为它对某些人来说似乎不是一个真正的问题我从那时起更新了问题主体,现在可能会好一些。但是,我希望你们都建议我如何改进这个问题,因为这是我在这个领域的工作和研究。

RAII(资源分配即初始化)理论规定,如果我从 MMU 借用内存,我需要将其归还(新建和删除)。但是,我想知道如果我在 C++ 中做不好的初始化实践会产生什么后果。

如果我执行以下操作怎么办:

然后在我需要的地方使用 pp1 和 pp2 ?这是根据标准编程实践初始化指针的错误方法吗?或者它是初始化。初始化完全取决于new操作员吗?

以及在以下设计中应该使用多少指针:

1) 实时 2) 安全关键 3) 关键任务

此外,在 32 位和 64 位机器上运行相同的 C/C++ 应用程序时,我发现了奇怪的结果。如果我乱用指针,我的机器会变得多么缓慢/性能不佳。因为,由于在我的设计中使用了太多指针,我的机器变得越来越慢。对于一些“明显的”保密协议,我不能把我的代码放在这里。我对此感到非常抱歉。为了澄清起见,我将在返回结果之前删除每个方法中使用的所有指针,即我的内存管理非常平衡且足够高效,不会导致堆栈溢出问题。

我知道这些问题可能过于开放,但我也在调查(谷歌、MISRA C++、英国计算机协会和 IEEE)以找出详细的答案。我的想法是实际研究和开发一种在不涉及大量指针的情况下用 C++ 编程的方法。

我知道一个显而易见的答案是,“你用 C++ 编程,这样你就可以使用指针并停止滥用你的 PC 的 MMU”。但如果有人有任何不同的想法,我想听听。

0 投票
1 回答
5974 浏览

memory-management - MTRR 寄存器是如何实现的?

x86/x86-64 公开了 MTRR(内存类型范围寄存器),可用于指定物理地址空间的不同部分以用于不同用途(例如,可缓存、不可更改、写入组合等)。

我的问题是,是否有人知道这些由 MTRR 定义的物理地址空间限制是如何在硬件中实施的?在每次内存访问时,硬件是否在进程决定是否应该查找缓存或查找写入组合缓冲区或将其直接发送到内存控制器之前检查物理地址是否落在给定范围内?

谢谢

0 投票
2 回答
3324 浏览

linux - Dumping page table entries of a process in Linux

I was wondering if there is any utility/code in Linux (x86-64) that could dump each page table entries for a given process's (user) address space?

Thanks

0 投票
1 回答
195 浏览

embedded - 系统重置时的内存映射

据我了解,代码指令的地址是虚拟地址,但是为了访问各种设备(例如RAM,Parallel NOR Flash),这些虚拟地址需要转换为物理地址,这个任务由MMU完成。问题是这个翻译过程在系统复位时如何表现(上电时,我认为 MMU 中还没有条目),以便可以从并行 NOR 闪存中获取第一条指令并开始执行。任何人都可以解释这个过程(对于任何 CPU 架构 ARM、PowerPC ......,我只是猜想这种行为在架构中是通用的)。任何建议表示赞赏。提前致谢!

0 投票
2 回答
3160 浏览

x86 - x86_64 架构中多页大小的 TLB 使用情况

有人知道 TLB(L1 和 L2)是否支持在现代 x86_64 微处理器(Intel SandyBridge、AMD Bulldozer)中同时访问多个页面大小?x86 核心管道是否向 MMU 提供有关页面大小的信息?

最好的祝福,

亚历克斯

0 投票
2 回答
5545 浏览

linux - Linux - 在内核代码中映射用户空间内存

我正在编写一段代码,该代码需要在 SOC 关闭之前存储位于特定物理地址的 10k 内存。

我的问题是这个物理地址不是内核空间的一部分,所以我必须创建一个临时内存映射,这样我才能访问这个内存空间。

我尝试使用 io-remap 但它(显然)不适用于非内核空间。

是否有任何 API 可以做到这一点?我应该使用 kmap 吗?

提前致谢

0 投票
1 回答
2089 浏览

memory - 启用 ARMv7 VMSA 内存管理单元?

所以,基本上,我想在 ARMv7 内核上启用内存管理单元。实际过程非常简单。我只需要将转换表的地址加载到TTBR0并使用控制寄存器启用 MMU。

现在,一旦启用 MMU,问题就会出现,因为在 ARMv7 上(与其他版本的 ARM 架构不同),CPU 立即开始从虚拟地址获取。因此,如果引导加载程序在 at 运行0x10000000然后启用 MMU,除非它首先进入标识映射,否则下一次提取 at0x10000004将导致预取中止。现在,我知道可以在 MMU 的初始启用期间使用身份映射来执行此操作。但是,在切换翻译表(将新值加载到 中)时也会出现同样的问题TTBR0

所以,本质上,我正在寻找一种或多或少直接的方式来加载一个新值TTBR0(或者只是打开 MMU),然后立即跳转到一个新地址,这将在新地图中有效。这在早期架构上是可能的,因为在启用 MMU 或更改状态的指令之后至少有 4 条指令是从旧地址获取的。理想情况下,我希望能够做到这一点,而无需依赖极其丑陋的 hack,每次您想要切换页表或打开 MMU 时都必须创建一个身份映射。

为了澄清我在谈论旧架构时的意思,这里有一个指向 ARM 信息中心页面的链接,该页面解释了如何在 ARM720T 上打开 MMU:7.16.1。启用 MMU

0 投票
2 回答
1061 浏览

virtualization - VMM 是否在主机上使用虚拟内存?

我试图了解过去如何使用影子页表执行虚拟化。我读过的文章都在谈论从客户虚拟内存到主机物理内存的转换。我了解影子页面表如何消除访客虚拟到访客物理转换的需要。我的问题是,Host Virtual to Host Physical 步骤发生了什么。(HVA-> HPA)。

引用文章中的虚拟机管理器是否根本不使用主机中的虚拟内存?是否假定它们可以直接访问主机系统的物理内存?甚至可能吗?我认为 TLB 缓存转换是由 MMU 在硬件中实现的,并且每条指令的地址都由 MMU 本身从虚拟地址转换为物理地址。但是话又说回来,我不确定内核代码如何与 TLB 一起工作?内核指令不通过TLB吗?

0 投票
3 回答
473 浏览

assembly - 什么在操作系统中强制执行内存保护?

一般来说,我知道一个进程无法写入具有不允许写入的保护的内存(在其地址空间中)。但是什么检查进程是否可以做到这一点?是否有任何汇编指令通过操作系统?它是如何工作的?

0 投票
1 回答
3656 浏览

caching - 缓存集和标签

在一个常见的缓存地址中,我有三个字段:

将虚拟地址解析为缓存条目的过程应该是确定哪个集合包含我们正在搜索的数据,然后使用标签(虚拟地址的一部分)来消除多路缓存的歧义(每个集合可能包含多个条目)

我的问题是:如何确定一个集合?谁向我们保证,通过仅使用虚拟地址的一部分作为标签,我们可以唯一地确定两个相似值之间的缓存命中?