プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。どなたかご存知でしたら教えてください。

とあるCPUのキャッシュラインサイズが32バイトで、
非キャッシュアクセスするグローバル変数Aのアドレスがが32バイト境界上になく、
かつ、変数Aの直前の領域がキャッシュアクセスする領域の場合、

変数Aの先頭の領域がキャッシュの影響を受けて意図しないデータで
つぶされる(上書きされる)可能性はあるのでしょうか?

非キャッシュアクセスするグローバル変数は必ずキャッシュラインサイズで境界調整する必要があるのでしょうか?

以上、よろしくお願いします。

A 回答 (3件)

そういえばSH系は同じ物理アドレスにキャッシュ空間と非キャッシュ空間がマップされてましたね。

DMAとかCPU以外のものがアクセスする場合は使用前にキャッシュパージしてください。
変数としてのアクセスも単にキャッシュラインを分けるだけで足りるか自信ないです。むしろアクセスする非キャッシュ空間アドレスに対応するキャッシュ空間アドレスをキャッシュパージしておく方が良いと思います。
    • good
    • 0
この回答へのお礼

キャッシュパージですか。ネットで調べてみたらキャッシュを無効化する操作のようですね。使えるかどうか検討してみます。
ありがとうございます。

お礼日時:2007/12/11 01:27

> キャッシュパージ



キャッシュのフラッシュといったほうが用語として正しかったかも。

何にせよキャッシュとメモリの整合を取る命令です。
キャッシュが更新されていればメモリに書き出して、キャッシュのデータを無効にします。キャッシュライン単位でフラッシュできたと思います。
    • good
    • 0

どんなCPUとどんな言語を使って書いてるか分かりませんけど、普通はキャッシュされる変数と非キャッシュの変数を同じキャッシュラインに配置することなんてできないんじゃないですか?


# 普通キャッシュ領域と非キャッシュ領域はページ単位でアラインされてるのでは?

むしろどうやって同じキャッシュラインに乗るように配置するのか興味があります。

この回答への補足

コメントありがとうございます。

>どんなCPUとどんな言語を使って書いてるか分かりませんけど、
ルネサスのSH系のチップで、C言語で記述しています。

>普通キャッシュ領域と非キャッシュ領域はページ単位でアラインされてるのでは?
普通にグローバル領域を宣言してソフトウェアからアクセスして使用する分にはキャッシュアクセスなのですが、その領域をCPUのMMUを介さないでアクセスする場合(例えばDMAとか)は非キャッシュアクセスとなるようです。

補足日時:2007/12/10 22:45
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!