メモリ属性とアーキテクチャまとめ

さて、メモリ属性には

  • プリフェッチ可能 (ロード命令の回数とアクセス回数が一致していなくてよい)
  • ライトコンバイン可能 (ストア命令の回数とアクセス回数が一致していなくてよい)
  • 並べかえ可能 (命令の順序とアクセス順序が一致していなくてよい)
  • キャッシュ可能(コピーを持ったり書き換えたりしてもよい)

というよっつがある。
(実はもうちょっとある、あと「他のプロセッサから見える」のとか「メモリに書く(他のデバイスから見える)」のとが別だったりして困る。あんまり理解していない)

x86

リアルモードではMTRRをいじってアドレス領域を作り、領域ごとに属性を付けられる。
プロテクトモードではPATを弄るとページごとに属性を付けられる。

  • UC : プリフェッチもライトコンバインも並べかえもキャッシュもしない
  • WC : プリフェッチ、ライトコンバイン、並べかえが起こる
  • WT, WB, WP : プリフェッチ、ライトコンバインが起こって、キャッシュする。少し並びかわる。

PowerPC

I(cache Inhibited) と G(Guarded) というのがあって、I=1でキャッシュ不可、G=1でそれ以外が不可になる。
(プリフェッチやらライトコンバインなどしてもよい領域、つまりG=0にしてもよい領域をwell-behavedなストレージ、とか呼んでいる)

リアルモードは、普段はI=0 かつ G=1で、どこかのレジスタRMIビットを1にすると、I=1になる。
どっかのレジスタのRMSCを設定すると、G=0になる領域を設定できる。

アドレス変換が有効になっているとページごとにI,Gが決められる。

SH4

ライトコンバインやプリフェッチは無い。(明示的なプリフェッチ命令はあるが)。並びかえもしない。

物理アドレスは29bitまでで、その29bitが7箇所(8番目は別の目的で使っている)から見えることになる。
リアルモードでは、どこから見るかによってキャッシュする/しないが変わる。
例えば、0x40001000は、0x00001000がキャッシュ可能領域として見えるが、0xA0001000は、0x00001000がキャッシュ不可領域として見える。

アドレス変換を有効にすると、どのアドレスにページをマップしたかによって、キャッシュ可能かどうかが決まる。

ARM(Version不明)

キャッシュ可能/不可能が決められる。SHと同じでライトコンバインとかは無い。

リアルモードではCP15のレジスタ6、レジスタ2で領域とその領域のキャッシュ属性を決める。
アドレス変換が有効だとページごとにビットがある。



少し調べるだけのはずが、なんか少しではなかった…というか、PowerPCが実装に依存しない書きかたになっててよくわからないというだけだが…
MIPSとかは誰かがMIPSマシンをくれたら書く。
IA64とかSPARCは生きてるうちに書きたい。