Linux内存从0到1学习笔记(五,内存分类)

Posted 高桐@BILL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux内存从0到1学习笔记(五,内存分类)相关的知识,希望对你有一定的参考价值。

一、内存类型

ARMv8架构处理器定义了两种类型的内存类型,分别是普通内存(Normal Memory)和设备内存(Device Memory)。

二、普通内存

        普通内存对应MT_NORMAL属性;

        普通内存由于其弱一致性(weakly ordered),没有额外限制,可以提供最高的内存访问性能。通常代码段、数据段、和其他数据都放在普通内存中。普通内存可以让处理器做很多优化,如分支预测,数据预读,高速缓存行预读和填充,乱序加载等硬件优化。

        普通内存是可以设置高速缓存开关,对应如MT_NORMAL_NC。表示关闭高速缓存,其中NC表示Non-Cacheable.

        除此之外,我们可以设置高速缓存为内部共享和外部共享的高速缓存。

        一个单核处理器系统中,除了处理器之外,有其他的可以访问内存的硬件单元,这些硬件单元通常具有访问内存总线(bus master)的能力,如DMA设备,GPU等。一个多核系统中,DMA设备和GPU通过总线连接到DDR内存,而处理器也通过系统总线连接到DDR内存。

  • 如果一个内存区域被标记为“不可共享”,则表示仅能被一个处理器访问,其他处理器不能访问。
  • 如果被标记为“内部共享”,则可以被多个处理器访问和共享,但其他如DMA设备,GPU等硬件不可以访问。
  • 如果标记为外部共享,则所有处理器和其他访问内存的硬件(GPU,DMA设备等)均可以访问。

三、设备内存

设备内存通常用来映射外设的。处理器访问设备内存会有很多限制,访问此类内存必须严格按照指令顺序来执行,不能进行预测访问。

ARMv8架构定义了多种设备内存的属性(G表示Gathering,指聚合的意思,意思是在同一个内存属性的区域中允许多笔命令能并成一条命令)。(NG表示不聚合 non Gathering),如下:

  • Device-nGnRnE:对应MT_DEVICE_nGnRnE属性,不支持聚合操作,不支持指令重排,不支持提前写应答。
  • Device-nGnRE:对应MT_DEVICE_nGnRE属性,不支持聚合操作,不支持指令重排,支持提前写应答。
  • Device-nGRE
  • Device-GRE:对应MT_DEVICE_GRE属性,支持聚合操作,支持指令重排,支持提前写应答。

以上是关于Linux内存从0到1学习笔记(五,内存分类)的主要内容,如果未能解决你的问题,请参考以下文章

Linux内存从0到1学习笔记(6.8,物理内存初始化之buddy伙伴系统)

Linux内存从0到1学习笔记(6.7,物理内存初始化之CMA初始化)

Linux内存从0到1学习笔记(6.9,物理内存初始化之Slab分配器)

Linux内存从0到1学习笔记(七,用户空间虚拟内存之三 - 内存映射)

Linux内存从0到1学习笔记(九,内存优化调试之一 - kswapd0)

Linux内存从0到1学习笔记(8.7 DMA-BUF代码解读)