Windows 95には64MBの壁が実在するのか

Windows 95では64MB以上のメモリが認識できないのはホントですか。



ウソです。Windows 95自体は64MB以上でもメモリ空間を認識することができます。理論的には4GBまで認識できることになっているのです。しかし,メモリはソフトウェアだけがしっかりしていればいいのかというと,そうでもありません。そこにハードウェアのメモリ認識方法の枠による制限がかかってくるのです。チップセットもその処理過程でメモリ上のデータにアクセスしますが,チップセットが把握できるメモリ空間の広さが問題になってくるのです。
メインメモリの一部をL2キャッシュでキャッシングしたとしても,それがメインメモリのどの位置にあたるものかが認識できなければなりません。430FX(Triton)チップセットなどの場合は,認識方法としてDirect Mapped方式を採用しています。この方法は,あるアドレスをキャッシュ容量で割った余りをキャッシュの位置として利用しています。それでも,同じ余りを持つアドレスは複数存在するので,それを区別するためにTagを使っているのです。またTagには,アドレスのほかにキャッシュ管理用フラグビット(Valid/Modified)も保持する必要があるので,さらに2ビットの情報が必要です。
 キャッシュには,ある連続した単位(line sizeやblock sizeという)でデータが格納され,その単位がPentiumの場合は32B,486なら16B単位となっています。L2キャッシュの容量が256KBの場合は,256KB/ 32B=8Kラインとなります。430FXは,チップ内部に16KビットのTag RAMを持っているので,アドレスに外部Tag(8Kライン×8ビット=64Kビット),Valid/Modifiedの各キャッシュ管理用のフラグビットを内蔵Tag(8Kライン×2ビット=16Kビット)に割り当てています。結局キャッシングできるメインメモリの範囲は,256KB×28(注:2の8乗,8はアドレス用の8ビットという意味です)=64MBとなります。
 L2キャッシュの容量が512KBの場合には,line数は512KB/32B=16Kラインとなり,内部Tagは16Kライン×1ビットとして使われます。外部に接続される16Kライン×8ビットのTag RAMと合わせて9ビット幅しかなく,アドレスに割り当てられるものはキャッシュ管理用フラグビット2ビットを差し引いた7ビットとなります。したがって,キャッシングできる範囲は512KB×27=64MBと,L2キャッシュ256KBの場合と同じです。これは,430FXや430VXの場合の制限です。
 430HXでは,64MBを超えるメインメモリにキャッシングを行うために,アドレスTagのビット数を増やすことが可能になっています。外部Tagの増設によって8ビット増やせば,アドレス用に16ビット(L2キャッシュ256KBの場合)または15ビット(L2キャッシュ512KBの場合)使えるようになるので,64MBを超えるメモリ空間にアクセスするのに十分といえるでしょう。具体的にはL2キャッシュ512KBの場合,外部Tagとして16Kライン×8ビット=128Kビットを最小限追加すればよいということになります。64MBを超える大容量メモリを搭載した430HX以降のマシンは,L2キャッシュをすべてのメインメモリで有効にできるので,ぜひともTag RAMの増設をお勧めします。詳細は,マザーボードのマニュアルを参考にするか,または購入したショップに問い合わせてみてください。
(伊勢雅英)