昨年の夏ごろからメモリーの価格が安くなってきました。1GBのメモリーが1万円を切りいまでは8千円程度で買えるようになりました。 大容量のメモリーは速度アップにもつながるので、どうせならメモリースロットを埋めてしまおうという方も多いのではないかと思います。 そこで今回は大量のメモリーを搭載したがゆえに見舞われるトラブルについて検証していきたいと思います。 | ||
| ||
上記のようにメモリースロットが埋まったら、なんとなく気持ちいいものですね。 ですが、すべて埋まってしまうといろいろな現象が現れたりします。
先の三つに関しては、
| ||
では、なぜ32BitOS環境上で4GB以上のメモリーを正しく認識しないのか。これは先ほど書いたようにハードウェアとソフトウェアつまりOSの、「仕様」です。 (MSDN風)また64BitOS環境ではこのような問題は起こりません。それについてはまずOSのI/O制御について説明します。 OSから各種I/Oの制御を行うにはBIOSを仲介としなければなりません。これはPCーATのころに使われていた制御方法で現在の高速化に到底 絶えられるものではありません。そこでより早くI/Oの制御を行うためにデバイスドライバーが開発されました。 そしてデバイスドライバーの動作を支える仕組みとして、「Memory Mapped I/O (MMIO)」が使用されました。 これは各種I/Oの制御やデーター転送などにBIOSを仲介せずにメインメモリー上のアドレス空間を仲介するものです。 つまり狭い道よりも広い道を通りたいので、そのためのバイパスといった感じです。 そしてここに4GBを正しく認識しない理由があります。MMIOが利用するメモリーアドレス空間はOSで使うことができません。そして MMIOは32Bitのアドレス空間内を利用します。32Bitつまり4GBです。32BitOSは文字通り32Bitのアドレス空間内で動作します。 つまりこの環境に4GBのメモリーをインストールしてしまうと、32Bitアドレス空間がパンクしてしまいます。 どういうことなのかというと、アドレス空間の指定においてMMIOに優先権があるので、
| ||
この問題を解決するには以下の条件を満たす必要があります。
また、Athlon64(AMD)やEM64T搭載のCPU(Intel)、PowerPCなどのように64Bitに対応したCPUは64Bitのアドレス空間(144PB つまり144000000GB) を利用できるのでまったくといっていいほど問題になりません。 最大の問題は3のソフト面の問題です。ほとんどの場合この条件を満たすことができないため問題解決できないのです。 たとえハードウェアが32Bit以上使えようとI/O制御を行うのはOSの仕事。つまりOSが32Bitのままだとそれ以上の部分を使えないので、それにしたがって MMIOも32Bitアドレス空間内に指定せざる終えません。 いまでは64BitOSが簡単に手に入るのでそれを使えば問題はありません。Windows XP Professional x64 EditionやWindows 2003 server シリーズの一部などが64Bitです。 以上の環境がそろえば無事4GB以上のメモリーは認識されます。 | ||