06/07/27 03:49:53 bXII0j75
>>292
target cpuによる。(カーネルバージョンやコンパイルオプションでも違ったような)
たとえばx86だと、論理アドレスを物理アドレスと同じアドレスにmapにしてた希ガス
4G超(だっけ?)のメモリつんでると32bit論理アドレスでアクセスできんからちゃんとremapしてた希ガス
後者の問題で、少ないメモリだとたまたま論理=物理なので動くけど、いっぱいつむと論理!=物理になって動かん、とかある希ガス
SHとかMIPSだと、論理アドレス=物理アドレス+OFFSETで決め打ちになる(ならないエリアもある)
ので変換なしでもアクセスできるかもしれんけど、
OFFSETでキャッシュあり・なしとかwrite through/write backとかが決まるので、
変換でOFFSETを調整してやらんと
メモリ領域をnon-cacheアクセスすると動くこたあ動くが遅いとか、
memory maped I/O領域をcache accessすると、(たまたまcache flushされ書き込まれた場合は)一見動いているように見えるが、そうでない場合は書き込まれずに挙動不審、とかある希ガス
何も変換がいらないcpuだとマクロかinlineになってて最適化コンパイルすると消えて呼び出しコスト0になるはずなので、
わるいこといわないからつけとけ
うろ覚えなんだが__vaにはcacheモードによる変種があった希ガス
SH/MIPSだとOFFSETをandしたりorしたり
x86だとどっかにmapした上でそこのcacheモードを設定してたような希ガス
生__vaは一番無難なnon-cacheアクセスだった希ガス
適切な__vaファミリを選べれ
ちなみにxenとかcolinuxはこのへん(va,pa)に手を入れて、「kernelが物理アドレスと思ってるアドレス」と「本当の物理アドレス」の変換をしてた希ガス