osInvallCache.htm
1.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<HTML>
<HEAD>
<TITLE>HTML 文書</TITLE>
<META NAME="GENERATOR" CONTENT="Internet Assistant for Microsoft Word 2.0j">
</HEAD>
<BODY>
<P>
<A NAME="UQHTML14"></A><B><FONT SIZE=4 FACE="Arial">osInvalICache(3P)
<BR>
</FONT></B>
<P>
<B>関数名<BR>
</B>
<P>
<FONT SIZE=5>osInvalICache</FONT>
<P>
→ CPUインストラクションキャッシュの無効化 <BR>
<P>
<B>構文<BR>
</B>
<P>
#include <ultra64.h>
<P>
void osInvalICache(void *vaddr, s32 nbytes);<BR>
<P>
<B>説明<BR>
</B>
<P>
MIPS R4300 CPUは16Kbyteのダイレクトマップされた命令キャッシュを32byteのラインサイズで実行します。キャッシュは物理メモリに関して干渉性はありませんので、キャッシュラインは物理メモリ上に新しいデータが存在し、使わなくなった命令を破棄する事を求められたとき、あからさまに無効にさせなければなりません。<B>osInvalICache</B>コールは[vaddr,
vaddr+nbytes)に含まれる全ての命令キャッシュラインを無効化します。vaddrで与えられたアドレスはダイレクトマップされるかCPU
TLBを経由してマッピングされたCPU仮想アドレスでなければなりません。vaddrがキャッシュライン境界に並べられないときやnbytesがキャッシュラインサイズの倍数でないときは、少し大きな範囲が無効化されるかもしれません。実用上では、特に害はありません。
<BR>
<P>
先に実行された命令が物理メモリに対して古くなってしまった場合、命令キャッシュを無効化する必要があります。もっとも共通的なシチュエーションとしては、新しいコールがダイレクトメモリアクセスDMAデバイスを経由して物理メモリにコピーされたときなどに起こります。もしそうなれば、プログラムテキストと結合されたアドレスはそれらのアドレスデコードを実行する前に無効化されなければなりません。
<BR>
<P>
<B>参照<BR>
</B>
<P>
<A HREF="osMapTLB.htm">osMapTLB</A>(3P), <A HREF="osInvalDCache.htm">osInvalDCache</A>(3P),
<P>
<A HREF="osWritebackeDCache.htm">osWritebackeDCache</A>(3P) <BR>
</BODY>
</HTML>