我是靠谱客的博主 真实灯泡,最近开发中收集的这篇文章主要介绍PowerPC PPC460-S MMU(四 Storage Attribute),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述


    • Storage Attributes
      • Overview
      • Write-Through W
        • Expanded Write-Through Storage Attributes WL1
      • Caching Inhibited I
      • Memory Coherence Required M
      • Guarded G
      • Endian E
      • User-Definable U0-U3
      • Attribute Combination属性绑定

Storage Attributes

Overview

以下内容涉及Cache以及存储(内存)管理理论较多,请注意参考相关资料。

每个TLB entry都定义了一些相关页面的存储属性,将控制页面存储访问行为;
主要包含以下属性(WIMG CPU):

  • Write through(W)直写(关于Cache写机制参考)
  • Caching inhibited(I)缓存抑制
  • Memory coherence required(M)内存一致性
  • Guarded(G)
  • Endianness(E)
  • User-definable(U0,U1,U2,U3)

Write-Through W

如果页面内存采用直写方式(W=1),那么数据可以直接写入主存Memory(注意:信号同时发送到Cache与
主存,主存数据可与Cache数据保持同步);相反的情况下(W=0),会仅仅先写入数据缓存(除非主动flush,
缓存数据可能与主存数据不一致)。

如果Cache Line中已经存在对应的数据缓存(即“命中”),数据也会写入Data Cache(但对应的Cache Line
并不会再标记已经修改了(即,dirty位不会置位)。

Expanded Write-Through Storage Attributes, WL1

关于引入一级缓存的直写扩展属性的原因如下:

  1. 当一级缓存中出现奇偶校验错误,为了恢复,L1 Cache必须工作在Write-Through模式;
  2. PowerPC架构禁止混淆使用W属性(对L1 Cache单独控制);

WL1位1时,L1 data cache 工作在Write-through模式
WL1位0时,W=0则工作在Copy-back(回写)模式,W=1无效绑定;

Caching Inhibited I

如果一个主存页标记为缓存抑制的(I = 1), 那么所有的加载、存储以及指令Fetch操作均在主存中;
反言之,页在Cache中有缓存的,会首先从对应的指令或数据缓存中执行操作。

Memory Coherence Required M

由于PPC460-S并不支持多核一致性,所以此项设置对内核没有效果。

Guarded G

首先理解下面两个关于Memory location的属性概念 non-well-behaved 和 well-behaved :
表现好的:如果对应的存储页面确实存在,而且没有特别的缺陷,而且对于单次访问与多次访问
也没有特殊的区别,那么就可以说,对此处的Memory的定位将会是表现良好的。

这个属性主要用于控制对于表现不好的页面定位的随机访问(乱序访问,被中断,后重试等)。

通常情况下,如果发现了定位表现不好的页面,就需要对其标记为Guarded. 因为此处的页写入
可能代表了一个IO设备的控制寄存器或者页面可能不存在,对此处的乱序访问可能引起非预想的
结果或者引发设备检查异常(Machine Check Exception)。

那么,对于一个已经标记为Guarded的Storage location如何访问呢?
此时就需要保证当前的访问是一种已知的连续执行模块的请求,或者当前的访问在Data Cache中
已有缓存。当一个守护的数据存储访问已经初始化(已经要开始访问,且知道为Guarded属性)时,
如果存储属性配置了缓存抑制(caching inhibited,页面无缓存),那么此时只允许其在主存中访
问请求的字节数数据。如果没有配置缓存抑制,那么当前存储可允许其访问在Cache或者主存中的
整个Cache Block。

由于PowerPC架构并没有禁止从守护Storage中取指,因此对于Guarded Storage取指不受影响,
但是软件一般应通过标记这些页为不可执行(UX/SX=0)来禁止这种类型的取指操作,然后,当
这样的取指发生时便会引发执行权限异常。

Endian E

显而易见,此Endianness属性用来控制读、写以及取指操作的字节序。
E = 0 大端
E = 1 小端

User-Definable U0-U3

PPC460-S内核定义了4个用户可自定义的Storage Attributes。
当然,默认情况下,这些属性对内核不会有任何作用。
特别的系统设计时才可能用到这些属性来控制系统级的行为(未知什么情况,好像需要内核特别支持)
但是,用户可以通过配置MMUCR寄存器来配置U1、U2两个属性起作用(但这两个属性已经固定),
尽管如此控制了一些属性,但其实对于内核来说仍然没有任何作用,不过已经方便了不少;
其中U1的属性可以控制对于相应页面的相应Cache的方式(正常模式或旁路模式)
U2的属性可以控制当Cache Line中缺页时是否再分配Cache line(从主存中拷贝,并重新缓存一个Entry)

Attribute Combination属性绑定

属性绑定:
W=1时(即直写模式),内存访问时将同时访问Cache与主存,而此时如果I=1(即缓存抑制)会出现
属性冲突,因此不支持W=1 && I = 1;

其他情况下可自由绑定结合;

关于内存控制器MMUCR以及进程控制器PID部分参见后续文章介绍。


参考资料 Reference

  • WiKi Cache Computing
  • 关于CPU cache
  • L1 cache
  • WIMG CPU

最后

以上就是真实灯泡为你收集整理的PowerPC PPC460-S MMU(四 Storage Attribute)的全部内容,希望文章能够帮你解决PowerPC PPC460-S MMU(四 Storage Attribute)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部