标签: mmu

在Linux中启用MMU

  1. 在ARM Linux中,在哪个点上启用了mmu.即,在哪个文件中(arch/arm/kernel/setup.c中的汇编文件或paging_init())

  2. ARM linux是否支持在没有分页的情况下运行.

提前致谢.

linux arm mmu

2
推荐指数
1
解决办法
2321
查看次数

在x86_64体系结构中使用多个页面大小的TLB

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

最好的祝福,

亚历克斯

x86 x86-64 tlb mmu

2
推荐指数
1
解决办法
2709
查看次数

代码在哪里引用/ proc/PID/maps?

我要观察内核代码打印/proc/PID/maps但无法找到这个.有人能告诉我这段代码的位置

linux-kernel mmu

2
推荐指数
1
解决办法
831
查看次数

Linux C++中的页面对齐内存分配

假设,我需要在Linux64 C++应用程序中分配一个大型Vector.我做以下事情:

int main()
{
  std::vector<int> v;
  v.resize(2000);

  std::cout << &v[0] << std::endl;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这会在我的笔记本电脑上打印0x7ffc2a177450,这是字对齐的.但是,Vector大小是2000*4B = 8kB,在我的4kB页面Ubuntu系统上正好是2页.

问题:如何将我的Vector放在页面的开头,这样分配在物理内存中恰好产生2页?理想情况下,物理内存中的两个页面也应该是连续的.谢谢!

c++ linux memory-management dynamic-memory-allocation mmu

2
推荐指数
1
解决办法
330
查看次数

RISCV中的内存映射部分是什么

熟悉MIPS架构,知道MIPS有kseg0、kseg1等内存段。这决定了该段是否可以被缓存或映射。例如,您应该将一些 I/O 设备(如 UART)定位到未缓存的段。

但是我在 RISCV arch 中没有找到任何相关的东西。那么RISCV OS如何知道地址是否应该被映射呢?

顺便说一句:我知道 satp CSR 中的值描述了翻译模式。当操作系统运行时,该值必须设置为“Bare(disabled MMU)”以外的值,以便操作系统可以支持虚拟内存。那么如果CPU访问UART地址,satp中的值仍然不是“Bare”?但应该是“Bare”吧?

memory cpu operating-system mmu riscv

2
推荐指数
1
解决办法
2159
查看次数

ARM Linux内核页表

参考.Linux内核ARM转换表基础(TTB0和TTB1)

我有父亲怀疑/查询上一个链接中讨论的主题:

  1. 0到0xbfffffff是内存的下半部分(对于用户进程)并由TTB0中的页表管理,它包含当前进程的页表

    参考.arm/include/asm/pgtable-2level.h:PTRS_PER_PGD = 2048,PTRS_PER_PMD = 1,PTRS_PER_PTE = 512

  2. 0xc0000000到0xffffffff是由TTBR1中的页表管理/转换的地址空间的上部(OS和存储器映射的I/O).TTB1表的大小和对齐是固定的(到16k).每个1级大小的条目是32位,代表1MB页/段.这是swapper_pg_dir(ref System.map)页面表,它位于实际文本地址下方16K处
  1. 这是第一个768条目swapper_pg_dir = 0 (用户进程的0x0到0xbfffffff)和从768到1024的有效条目(0xc0000000到0xffffffff用于OS和内存映射的I/O)?

  2. 有人喜欢在内核空间(内核模块)中共享一些示例代码来浏览这个swapper_pg_dirPGD​​吗?

linux arm mmu

1
推荐指数
1
解决办法
5818
查看次数

瞬态和非瞬态存储器在ARM中的概念和优点?

在《 ARM体系结构手册》中,提到了缓存可以是临时的也可以是非临时的,并且它是由实现定义的。我无法理解关于缓存的瞬时内存的概念和使用。我正在尝试编写用于启用MMU的软件,并且已经启用了L1和L2缓存。我正在使用LPAE。我知道MAIR寄存器控制此属性。我没有得到有关它的任何好的文档。

我想知道这个概念,以便检查将其应用于当前设计的可行性。

arm-v7-ar第134页

“对于包含大物理地址扩展名的ARMv7-A实现,将由IMPLEMENTATIONATION定义是否为可缓存的Normal内存区域支持Transient属性。如果实现支持此属性,则Normal内存区域的可能的可缓存性属性集将变为:
•直写式可缓存,非瞬态
•写回式可缓存,非瞬态
•直写式可缓存,瞬态
•回写式可缓存,瞬态
•不可缓存。”

memory arm cpu-architecture mmu

1
推荐指数
1
解决办法
1054
查看次数

对于C++中指针的错误初始化会产生什么后果呢?

这个问题已被关闭,因为它没有向某些人提出真正的问题我从那以后更新了问题主体,现在可能会有所改善.但是,我希望大家都建议我如何改进这个问题,因为这是我在这方面的工作和研究.

RAII(资源分配是初始化)理论规定,如果我从MMU借用内存,我需要将其返回(新的和删除).但是,我想知道如果我在C++中做错的初始化实践的话会有什么好处.

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

double* pp1 = 0;
double* pp2 = 0;
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

我知道一个明显的答案是,"你用C++编程,这样你就可以使用指针并停止滥用你电脑的MMU".但如果有人有任何不同的想法,我想听听.

c++ pointers initialization mmu

-8
推荐指数
1
解决办法
203
查看次数