メモリー大安売り

 昨年の夏ごろからメモリーの価格が安くなってきました。1GBのメモリーが1万円を切りいまでは8千円程度で買えるようになりました。 大容量のメモリーは速度アップにもつながるので、どうせならメモリースロットを埋めてしまおうという方も多いのではないかと思います。
そこで今回は大量のメモリーを搭載したがゆえに見舞われるトラブルについて検証していきたいと思います。
すべて埋まったメモリースロット

 大抵のマザーボードには、3本以上のメモリースロットがついています。現在販売されているマザーボードはDualチャンネルとの兼ね合いから 4本、多いものでは6本のメモリースロットを搭載しているものがあります。

 まずメモリースロットが埋まることはめったとありません。一般的な用途ではメモリーは1GBほどあれば事足りるからです。
ですが、ハイエンド3Dゲームや映像編集などを行う場合はそれ以上の大容量が必要となります。そこで昨今のメモリー安を期に増設しようというのは 実に納得がいく話です。
そしてメモリーを増設すれば必然的に空いているメモリースロットが埋まってしまいますね。(右写真)
すべてのスロットが埋まったところ
埋まったメモリースロットに潜む罠

 上記のようにメモリースロットが埋まったら、なんとなく気持ちいいものですね。
ですが、すべて埋まってしまうといろいろな現象が現れたりします。
  • 突然再起動する
  • メモリーエラーが出る
  • メモリー動作速度が落ちる
そしてこれが今回のテーマである、
  • 4GB搭載したがWindows上から正しく認識しない(32BitOS上にて)
などの現象が起こります。先の三つに関してはハードウェア的原因ですが、今回のテーマであるこの問題はハードウェアとソフトウェア の両方に依存してきます。
先の三つに関しては、
  • メモリー電圧を上げる(俗に言う渇入れ)
  • BIOSのメモリー設定を手動で行う(一番遅いメモリーに速度をあわせる、タイミングの調整など)
  • BIOSを更新する
などの処置で解決できます。
なぜ4GB以上正しく認識しないのか

 では、なぜ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に優先権があるので、
  • MMIOが32Bitアドレス空間から必要な分のアドレスを予約
  • すると全体に残されたアドレス空間の容量は、32BitからMMIO使用分を差し引いた分になります
  • そしてOSはこの残された空間のみを使用可能な状態になります
つまり、OSは残された部分のみしかメモリーとして使えないので OS上からメモリー容量を見ると4GBにならないわけです。
正しく認識させるには

 この問題を解決するには以下の条件を満たす必要があります。
  • 1、システムの持つアドレス空間を32Bit以上に拡張する
  • 2、MMIOの使用するアドレスを32Bitアドレス空間以外の場所に指定する
  • 3、OS、デバイスドライバーが拡張アドレス空間での動作をサポートする
つまりMMIOの利用するアドレスとOSが使うアドレスとを被らないようにするわけです。1と2についてはすでにハードウェア でのサポートがされています。CPUの動作モードのひとつであるPAE:Physical Address Extension(物理アドレス拡張) という機能で36Bit(64GB)のアドレス空間が使用可能になります。
また、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以上のメモリーは認識されます。
ヘルプ  ホームへ