osMapTLB.htm
3.02 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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<HTML>
<HEAD>
<TITLE>HTML 文書</TITLE>
<META NAME="GENERATOR" CONTENT="Internet Assistant for Microsoft Word 2.0j">
</HEAD>
<BODY>
<P>
<B><FONT FACE="Arial">osMapTLB(3P) <BR>
</FONT></B>
<P>
<B>関数名<BR>
</B>
<P>
osMapTLB, osUnmapTLB, osUnmapTLBAll, osSetTLBASID
<BR>
<P>
<B>構文<BR>
</B>
<P>
#include <ultra64.h>
<P>
<B>void osMapTLB(s32 index, OSPageMask pm, void *vaddr, u32 evenpaddr,
u32 oddpaddr, s32 asid);</B>
<P>
void osUnmapTLB(s32 index);
<P>
void osUnmapTLBAll(void);
<P>
void osSetTLBASID(s32 asid);<BR>
<P>
<B>説明<BR>
</B>
<P>
これらのコールはCPUの高速変換干渉機構TLBにロウレベルのアクセスを供給します。ダイレクトマッピングされたアドレス空間KSEG0とKSEG1を除く残りのCPU仮想アドレス空間はページ単位に物理メモリにマッピングすることを指定するためにTLBを使用したアドレス空間にマッピングされます。CPU
TLBは32の偶数、奇数の物理ページをペアに規定する32のエントリまたは、64のトータルページからなります。それぞれのTLBエントリは4096バイトから最大16メガバイトまで変化する特定のページサイズに関連づけられます。
<BR>
<P>
<B>osMapTLB</B>コールは0から31の範囲のTLBエントリインデックスをセットします。引数pmは以下に定義されるようなページサイズを指定します。
<BR>
<PRE WIDTH=132>
<B><FONT SIZE=4>OS_PM_4K</FONT></B><FONT SIZE=4 FACE="MS ゴシック"> 4096 byte page size
<B>OS_PM_16K</B> 16384 byte page size
<B>OS_PM_64K</B> 65536 byte page size
<B>OS_PM_256K</B> 262144 byte page size
<B>OS_PM_1M</B> 1048576 byte page size
<B>OS_PM_4M</B> 4194304 byte page size
<B>OS_PM_16M</B> 16777216 byte page size
</FONT>
</PRE>
<P>
引数vaddrは、マップへの開始アドレスを,引数evenaddrとoddaddrは対応する奇数及び偶数物理ページアドレスを指定します。evenaddrまたはoddaddrに-1を代入したときは、偶数または奇数ページから作られるマッピングがないことをそれぞれ表します。引数asidはアドレス空間IDを指定します。アドレス空間IDは、アドレス空間IDレジスタがロードされたときだけ、マッピングを有効にします。(<A HREF="osSetTLBASID.htm">osSetTLBASID</A>参照)。asidに-1を代入することにより、常にグローバルマッピングを有効にすることができます。例として、以下のコールは物理アドレスの[0xab000,
0xac000)に仮想アドレスの[0x2000, 0x3000)を、また物理アドレスの[0xcd000,
0xce000)に仮想アドレスの[0x3000, 0x4000)をグローバルマッピングに割り当てていることを示しています。
<BR>
<P>
<B>osMapTLB(0, (void *)0x2000, 0xab000, 0xcd000, -1);<BR>
</B>
<P>
osUnmapTLBコールはTLBエントリインデックスにおける偶数または奇数マッピングのいくつかを解除します。osUnmapTLBAllコールは全てのインデックスにおける全てのマッピングを解除します(TLBエントリの無効化)。osUnmapTLBAllはいくつかの古いマッピングを解除するために、その他のTLBコールよりも前にコールされるべきです。
<BR>
<P>
osSetTLBASIDコールは(グローバルマッピングと同様に)同一の与えられたアドレス空間IDのマッピングだけを有効にするシステムワイドアドレス空間IDレジスタをセットします。この特徴は、予測不可能な結果をリードする可能性があるアドレスエラーの発見に非常に有効であるということです。
<BR>
<P>
<B>参照<BR>
</B>
<P>
<A HREF="osVirtualToPhysical.htm">osVirtualToPhisical</A>(3P)
<BR>
</BODY>
</HTML>