メモリの概要

メモリは、パソコンのパフォーマンスを左右する大きな要因である。どの種類のメモリを、どのくらい搭載し、どのようなチューニングを行えば、最速になるのか、ポイントを理解してください。(このページは予告なく変更されます。) 問い合わせはこちらまで

●メモリとは?
 
メモリは、データやプログラムを記憶するハードウェアであり、コンピュータ内部のワークエリア(作業場)の役割を果たす。メモリには構造上いくつか種類がある。まず、ROM(Read Only Memory)はデータの読み出し専用のメモリであり、ROMに保存されているデータは電源を切っても失われることはない。このため、パソコンを動作させる基本的なデータを保存するのに用いられている。一方、RAM(Randam Access Memory)には、メインメモリやVRAM(Video RAM)がある。パソコンに電源が入ると、ハードディスクからメインメモリにデータが読み込まれて、初めて機能するようになる。メモリに保存されたデータは、いったん電源を切るとすべて消去される。つまり、メモリを使用する目的は、保存ではなく作業場としての処理の高速化である。この観点から、最適なメモリカードのタイプと適切な容量を実装し、最も高速に作動するようチューニングする必要がある。
パソコンには、機能上、次のメモリが搭載されている。他に、VGAなどの機能も別途独立したメモリを搭載する。

○メインメモリ(メモリカード)

一般には、システムにハードウェアとして搭載されている物理メモリ(physical memory)のことであり、定められた規格のメモリカードを実装することにより使用可能になる。64MB(Mbytes)のメモリを搭載したシステムなら、そのシステムで利用可能な物理メモリサイズは64MBである。ボードの仕様によっては、メインメモリの一部をVRAM用に予約する場合もある。実装されたメモリは、ゼロ番地から順に、物理的なアドレスが割り振られる。この物理アドレスは、CPUが物理メモリをアクセスする際のアドレスになる。カードスロットの数やボードの規格により搭載できる容量は変更できる。

○キャッシュメモリ

キャッシュメモリは、メインメモリとCPUの間に位置する記憶メモリで、一般的には、1次キャッシュ(L1)と2次キャッシュ(L2)を組み合わせて動作する。キャッシュに、CPUがよく使うデータをあらかじめ読み込んでおくことによりわざわざメインメモリにアクセスしなくてもキャッシュからCPUへ高速にデータを渡すことができる。キャッシュへのデータヒット率が高いほど処理は高速になる。また、搭載容量、メインメモリとの速度差、素子の種類によりパフォーマンスは微妙に変わってくる。(現在のCPUでは、二次キャッシュに、主に、128KB、256KBが採用されている。)以前のCPUはマザーボード上に2次キャッシュを搭載していたものもあるが、最近のCPUは両方の機能をあらかじめCPU本体に組み込み、高速化を図っているものが多い。CPUのタイプにより容量や速度は固定されるため設定変更はできない場合がほとんどである。

○仮想メモリ(スワップファイル)

仮想メモリ(スワップファイル)は、メインメモリに入りきれないデータをHDD上に一時保存する機能である。当然読み書きの速度はメインメモリほど高速ではなく、HDDの基本性能に等しい。一般的に、この仮想メモリを速いHDD上に作成すると処理速度が圧倒的に改善される。ただし、設定を間違えるとシステムが起動しなくなるなどの逆効果をもたらすので要注意。

●メモリカード
 
○メモリカードの種類

現在普及しているメモリカードには、主に次のような規格のものである。(他にもいくつかの規格があるので詳細仕様については専門文献を参照してください。)最新のアーキテクチャを採用したタイプは能力は高いが高額である。マザーボードの仕様により装着できるカードの種類は決まってくる。基本的には外部バスクロック(CPUと外部の装置のやり取りの速度)と同等の速度で作動するカードを装着するのが理想である。購入する際は、必ず内部仕様(PC/100:CL2 など)とフォームファクタ(SIMM、DIMM、RIMM)を確認してください。(両方とも一致しないと使えない。形状が同じでも電圧の相違やピンが非互換のものがある。)

  1. EDO DRAM(Enhanced Data Out Dynamic Random Access Memory)

    4、5年前のパソコンに使用されていた、72pin の2枚1組で取り付けるタイプ。
    データを出力するタイミングを改良することで、読み出し時の連続転送速度を向上させたDRAMで、パソコンのメインメモリ用として広く普及した。

  2. SDRAM(Synchronous Dynamic Random Access Memory)

    2、3年前から現在の主流で、現在では主に、168pin のPC100、PC133 規格のものが販売されている。
    外部バスインターフェースが一定周期のクロック信号に同期して動作するよう改良されたDRAMで、66MHz、100MHz、133MHzの外部クロックに同期して動作する。EDO DRAMに代わって、ここ数年パソコン用メモリの標準となっていた。

  3. DDR SDRAM(Double Data Rate Synchronous Dynamic Random Access Memory)

    Apollo133 などの最新のチップセットでサポートされる高速メモリのタイプ。
    SDRAMの同期タイミングを強化して、転送レートを従来の 2倍に改良した仕様で、新たなパソコン用メモリの標準となることが予想されており、Rambus社のDirect RDRAMと、SDRAMに取って代わる次世代の標準メモリの座を争っている。

  4. Direct RDRAM(Direct Rambus Dynamic Random Access Memory)

    Rambus 社が開発した高速インターフェース技術 Direct Rambus を採用した、I820 などの最新チップでサポートされる高速メモリのタイプ。
    800MHz と非常に高いクロック周波数で動作する、RDRAM を改良した次世代のメモリ規格である。Intel社 の全面的なバックアップにより、SDRAM に代わるパソコン用メモリとして期待されていたが、当初の生産量が少ないため高額となり、Rambus 社と大手メモリメーカー各社の知的所有権をめぐる紛争、Direct RDRAM に対応した Intel 社のチップセットの不具合が大きく報じられたことなどから普及が遅れている。現時点では、一部のワークステーションやサーバーなどに採用されている。

  5. RDRAM(Rambus Dynamic Random Access Memory)

    Rambus 社が開発した高速インターフェース技術「Rambus」を採用したDRAM。
    600〜700MHz の高いクロック周波数で動作し、ビデオカードの VRAM やゲーム機「NINTENDO 64」、「PlayStation 2」に使われている。

○エラー訂正機能付メモリカード

一般に、搭載メモリの大きなパソコンほど、メモリ上のデータエラーが発生する可能性が高くなる。このエラーを検出できないと、誤ったデータが書き込まれたり、誤作動を招く原因になる。メモリエラーが発生した場合に速やかにシステムを停止させるためには、次のような方式のメモリを使用するのが望ましい。メモリ搭載容量が128MBを越えたら、以下のエラー訂正機能のあるメモリを使用したい。

  1. パリティ付メモリ

    パリティは、メモリの信頼性を向上させるための機能であり、アドレスの基本単位である8ビット(1バイト)に1ビットのパリティビットを追加し、データエラーの検出精度をアップし訂正を容易にする仕組みである。パリティ付メモリはパリティチェックなしのパソコンでも使用できるが、パリティチェックありのパソコンではパリティなしのメモリは使えない。

  2. ECC(Error Checking Code)機能

    パリティチェックは、1バイトの中にデータエラーが存在することを検出するだけで、エラービットがどれかはわからない。ECC機能は、64ビットに対して8ビットの冗長データを追加して、エラーデータを正しいデータに修正する。パリティチェックより高い精度でエラーを修正できる。(2ビット以下のエラーは100%検出し、誤りが1ビットだけであればその位置まで特定できる。)

○メモリの搭載量

メインメモリの容量(通常MBで表す)が少ないと、CPUが高速でも本来の性能が十分に発揮できず、パソコンの動作スピードは遅くなる。特に、大容量のデータを扱うマルチメディア処理においては搭載メモリー容量の影響が非常に大きい。Windows 98/Me だけで32MBが必要になる。アプリケーションを使用するならメインメモリが 64MB以上、マルチメディア処理中心の使い方なら、128MB以上のメモリを実装したい。アプリケーションの特性と扱うデータ量によって十分な容量を実装すべきである。
また、増設スロットが付いていればメインボードの仕様が許す範囲で増やすことができる。空きスロットがないと、いま入っているメモリと差し代えることになり、これまで使っていたメモリが無駄になる場合がある。ノート型などスロットの少ないパソコンは特に注意しよう。

○増設メモリが認識されない?

たとえば、256MBのメモリカードを追加したのに、容量が128MBしか増えない、ということがある。これは、440BXなどの256MBチップを認識できないやや古めのボードに、256MBチップを使ったメモリカードを追加した場合に発生することが多い。128MBチップを2個組み合わせたメモリカードなら正しく認識するはずである。なお、機種(厳密にいうとマザーボードの種類)によって、増設できるメモリーの最大容量は決まっている。限度を超える容量のメモリーをセットしても認識されないので注意してください。

また、独自ボードを使用したパソコンメーカー製のモデルには、仕様は同じでも市販のメモリを増設するとエラーが発生するものがある。この現象は特にメジャーなメーカーのパソコンに多いので、購入の際には、あらかじめ稼働実績を確認するべきである。メモリの不良と思われるエラーが発生したら、メモリをスキャンしエラーを検出するツールを実行して確認することができる。
 
●現在使われているメモリカード

○デスクトップパソコン用

現在、デスクトップパソコンで使われている主なメモリーには、次のような種類がある。

1.168ピンDIMMモジュール(SDRAMを搭載)
2.184ピンDIMMモジュール(DDR SDRAMを搭載)
3.184ピンRIMMモジュール(Direct RDRAMを搭載)
4.232ピンRIMMモジュール(Direct SDRAMを搭載)

また、数年前に製造された少し古いパソコンになると、72ピンSIMMモジュールが使われている場合もある。

メモリーを増設する場合は、使用しているマザーボード(チップセット)に対応した製品を購入しなければならない。パソコンのマニュアルで仕様を確認し、対応するタイプのメモリーを購入してください。さらに、同じ種類のメモリーでも、対応するクロック周波数が違うものがある。(クロック周波数はマザーボードによって決まっている。)たとえば、168ピンDIMMにはPC100、PC133などがあり、184ピンDIMMにはDD266、DD333などの種類がある。それぞれの数字が対応するクロック周波数を示している。一般的に、マザーボードのクロック周波数よりも数字の大きい製品を選べば間違いがないはずであるが、数字が大きくてもうまく動作しない場合もある。

増設メモリーは、パソコンメーカーが販売している純正品のほかに、専門メーカーが販売しているものがあり、純正品よりも安い価格で入手することができる。各メーカーのWebサイトで検索してみてください。ほかに、パソコンショップでは、ノーブランド品のメモリーを販売している。ノーブランド品は激安で、問題なく稼動する場合もあるし、クロックスピードによっては動かないとか、保証がなかったり返品ができないなどの制限がある場合もあるので、ビギナーにはおすすめできない。

○ノートパソコン用

現在のノートパソコンでは、144ピンSO-DIMMがよく使われている。
ただし、機種によっては、特に古いノートパソコンでは、専用のメモリーを搭載している場合がある。購入時には、仕様を必ず確認してください。

●メモリトラブルの主な原因
 
○DOSのメモリ管理

MS-DOSが使用できるのは名目上640KBまでのコンベンショナルメモリと呼ぶ領域(セグメントアドレス:0000h〜9FFFh)である。ここから、1MBまでの領域(セグメントアドレス:A000h〜FFFFh)までをUMA(Upper Memory Area)と呼び、ビデオメモリや拡張ROMなどに予約される。80386以降のパソコンでは、メモリマネージャと呼ばれるソフトが未使用領域(UMB:Upper Memory Block)にRAMをマッピングでき、デバイスドライバや常駐プログラムのために使用されてきた。

つまり、MS-DOSのアプリケーションが利用可能なメモリは、640KBのコンベンショナルメモリのうち、MS-DOSが使用していない残りの領域にすぎなかったため、徐々にアプリケーション自体のサイズの増加や扱うデータが肥大化する中で、メモリ不足の問題が発生してきた。こうした問題に対処するため、コンベンショナルメモリ以外にアプリケーションが利用可能なメモリ領域を増加させる方式が考えられてきた。最初に登場したのがバンク切り替え方式のEMS、次に登場したのが1MB以上のメモリ領域のアクセス方式を決めたXMSであり、これらの規格を実装したのがメモリマネージャである。
現在のWindowsには、MS-DOSの互換プログラムのために、エクスパンドメモリマネージャとしてEMM386.EXE、エクステンドメモリマネージャとしてHIMEM.SYSが付属している。Windows 98 では、これらはWindowsフォルダに格納されており、「Config.sys」に指定して起動する。この「コンベンショナルメモリ」の不足に起因するトラブルは今でも多い。この場合は、DOSの設定ファイル「Config.sys」と起動ファイル「Autoexec.bat」を編集して対応する必要がある。

MS-DOSアプリケーションは徐々に使われなくなってきており、すでに、Windows Me では、DOSの設定ファイル「Config.sys」と起動ファイル「Autoexec.bat」を起動時に読み込んでくれない。よって、このファイルを使うアプリケーションは正常に稼働しない可能性が高い。

○メモリリーク(memory leak)

なんらかの原因で、アプリケーションが動的に獲得したメモリが解放されない(システムに返還されない)まま、メモリ空間に残ってしまう状態をいい、これはフリーズやりソース不足の要因である。ほとんどの場合、アプリケーションの不具合が原因だが、ユーザーが強制的にプロセスを終了した場合などでは、アプリケーション終了の処理が正しく行なわれず、メモリリークが発生する場合がある。

○メモリリソース(memory resource)

拡張カードによっては、拡張BIOSや共有RAMをメモリ空間にマップするものがある。このようなメモリもシステムリソースとして扱われる。複数のデバイスが同じメモリアドレスを使用するとトラブルの原因となる。一般的に、カード上のメモリがマップされる領域はA000h〜DFFFhの範囲である。(ただEISAやMCA、VL-Bus、PCIでは、最大4GBのメモリ空間を利用できるので、メインメモリの後にカード上のメモリをマップできる。)「システム」>「デバイスマネージャ」で「コンピュータ」をクリックし、「リソースの表示」で「メモリ」をチェックすると、メモリアドレスを確認でき、専門知識があれば「リソースの予約」であらかじめ特定のメモリアドレスを予約できる。

●メモリの設定とチューニング

まず、物理メモリ(メインメモリ)が多いほど、処理が速くなるという考えは捨ててください。確かに、32MBよりは64MBを実装した方が処理は速くなりシステムは安定する。しかし、それ以上の拡張については、メインメモリを使用するアプリケーションの使い方や扱うデータ量により変わってくる。つまり、CPUの速度に影響される処理、メモリの大きさに依存する処理、HDDの読み書き速度に依存する処理などにより、メモリの効果は変わってくる。
前述のとおり、とりあえず、事務系の処理中心なら 64MB、マルチメディア処理中心なら 128MBを搭載してみるのが好ましい。(筆者の本音としては、余裕があれば 256MB搭載したい。また、メモリを開放するツールも入手できる。)
次に、メモリに関する設定を見直してみよう。

○メインメモリの設定

DRAMは、行(Column)と列(Row)から構成される格子状のセルとして扱われ、最初に行アドレスを指定して1行分を呼び出し、次に列アドレスを指定して特定のメモリセルにアクセスする。行アドレス伝える信号をRAS(Row Address Strobe)、列アドレスを伝える信号をCAS(Column Address Strobe)という。
DRAMの処理速度に影響を与える項目(「Cas Latency」など)の設定は、通常BIOSで行う。BIOSの種類によっては、項目が設定されていないものもある。このような場合、Windowsそのものにはメインメモリの処理速度を変更する機能は装備されていないが、Windowsで稼働するフリーウェアでこれらの項目を動的に変更できるものがある。BIOSのセットアップ・ユーティリティを起動し該当する項目を探してみよう。AWARD社製BIOSであれば、「Chipset Feature Setup」のDRAMに関する各設定項目を変えてみる。例えば、基本周波数が100Mhzの場合、PC/100 CL2規格のメモリを搭載していれば「Cas Latency」=「2T」が最速となる。(変更した後、起動しない、フリーズする、などのトラブルが発生したら、元の値に再設定する。)これらの値はPentiumIIの仕様に基づいているが、他のCPUでも基本周波数が100Mhzであれば、PC100 CL2 規格のメモリ最適といえる。

PC/100メモリタイミングの仕様
CL*1
Trcd*2
Trp*3
Trc*4
コメント
3
3
3
8
サポートされる最も遅い値(slowest supported)
3
2
2
7
目標値(target)=CL3
3
2
3
8
次善の選択(2nd choice)
2
2
2
7
推薦値(goal)=CL2

*1:CL(CAS Latency):CASを出力してからセルに入出力できるようになるまでのクロック数
*2:Trcd(RAS to CAS Delay Time):RASを出力してからCASを出力するまでの遅延時間
*3:Trp(RAS Precharge Time):1行分のセルをメモリに書き戻すのに要する時間(RASのプリチャージ時間)
*4:Trc(RAS Cycle Time) :RASの出力から次のRASの出力までの間隔

PC100 CL2 準拠のメモリであれば、「CL、Trcd、Trp」がそれぞれ、「2、2、2」になるようBIOSを設定すると最速になる。CL3よりCL2が高速に動作する。また、設定値は、BIOSが自動チューニングする場合もある。

○仮想メモリの設定

仮想メモリ(スワップファイル)は、メインメモリに入りきれないデータをHDD上に一時保存する機能である。当然読み書きの速度はメインメモリほど高速ではなく、HDDの基本性能に等しい。一般的に、この仮想メモリを速いHDD上に作成すると処理速度が圧倒的に改善される。ただし、設定を間違えるとシステムが起動しなくなるので要注意である。HDドライブを複数使用している場合(C:、D:など)は、次のように設定する。

  1. まず、HDDの速度を測定できるベンチマークプログラムをインストールする。
  2. ベンチマークプログラムで最速ドライブを探す。
  3. 最速ドライブが「C:」であれば設定を変える必要はない。「C:」でなければ4に進む。
  4. 「システム」>「パフォーマンス」タブ>「仮想メモリ」を開く。
  5. 「自分で設定する」にチェックし、「ハードディスク」のドライブを最速ドライブ(例えばD:\)に変更して「OK」。
  6. 再起動。(これで、スワップファイルのアクセスが高速になる。)

●ファイルシステムとメモリ
○ファイルシステムとメモリの関係

Windows は、起動時に搭載メモリ(物理メモリ)の容量を、ディスクキャッシュ(Vcache)とプログラム実行領域(VMM)に割り当てる。これらに割り当てられる容量が適正でないと、次のような問題が発生する。

  1. ディスクキャッシュへの割り当てが多過ぎると、VMM が使用できるメモリが不足し、HDD へのスワップが多発するため、アプリケーションの実行速度が低下する。
  2. ディスクキャッシュへの割り当てが少な過ぎると、アプリケーションのファイルや使用するデータのロードが遅くなるため、アプリケーションの起動速度が低下する。

現在の Windows 98/Me 環境では、物理メモリの割り当てを完全に最適化することはできない。そこで、パフォーマンスを低下させないために、ディスクキャッシュに保存されているデータをプログラム実行領域にマップして直接実行できるように、マップキャッシュ (MapCache)が設定されている。

マップキャッシュは、次のようにして無効にすることもできる。「MapCache」の値が存在しない場合はマップキャッシュは有効である。
  1. 「スタート」メニューの「ファイル名を指定して実行」を開く。
  2. 「Regedit」と入力し「OK」。(レジストリエディタうぃ起動する。)
  3. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VXD\VMM を開く。
  4. 「編集」の「新規」を開き、「バイナリ」 をクリックし 「新規値」を作成する。
  5. 「新規値」を「MapCache」に変更する。
  6. 「MapCache」をダブルクリックし、値に「00」を入力して「OK」。
  7. 再起動する。
 
○キャッシュサイズの制限

最近は、メモリーカードの低価格化が進行し大量のメモリを搭載するが可能になってきた。だが、「大容量のメモリはパフォーマンスを向上させる」と考えるのは必ずしも正しいとは限らない。というのは、前述のとおり、Windows のファイルシステムで使用するキャッシュサイズは、起動時に自動的に決定され割り当てられるが、初期設定では必要以上の容量がキャッシュに割り当てられてしまい、結果的にアプリケーションの実行速度を遅くする場合が多い。

この問題は、システムファイル(「System.ini」)に次のような記述を追加し、キャッシュサイズを制限することにより回避することができる。これは、キャッシュサイズを最小 0MBから最大 8MB に制限する例である。(通常、最大 4MB程度で十分である。)

  1. 「スタート」の「ファイル名を指定して実行」を開く。
  2. 「Sysedit」入力し「OK」。(システムエディタを起動する。)
  3. C:\WINDOWS\SYSTEM.INI を表示し、縦スクロールして [vcache] を探し、以下のように記述する。
    --------------------
    [vcache]
    MinFileCache=0
    MaxFileCache=8192
    --------------------
  4. 「ファイル」メニューの「上書き保存」をクリックして、システムエディタを終了する。
  5. 再起動する。

○スワップファイルの制限

現在販売されているパソコンの多くは 64MB以上のメモリを搭載している。ところが、十分なメモリを搭載していても現在の Windows のメモリコントロールではスワップが発生することがある。HDD へのスワップが発生すると、HDD への書き出し/読み込みのために当然処理は遅くなる。

この問題を回避するためには、メモリをギリギリまで使用してスワップの発生を最小化させればよい。このためには、システムファイル(「System.ini」)に次のような記述を追加すればよい。(この変更は 64MB未満のメモリしか搭載していないパソコンでは行なわないでください。)

  1. 「スタート」の「ファイル名を指定して実行」を開く。
  2. 「Sysedit」入力し「OK」。(システムエディタを起動する。)
  3. C:\WINDOWS\SYSTEM.INI を表示し、縦スクロールして [386Enh] を探し、以下のように記述する。
    ------------------------
    [386Enh]
    ConservativeSwapfileUsage=1
    ------------------------
  4. 「ファイル」メニューの「上書き保存」をクリックして、システムエディタを終了する。
  5. 再起動する。