連載
» 2008年07月18日 05時00分 公開

Windows Q&A:64bitプロセッサ (2/3)

[小林章彦,デジタルアドバンテージ]

Q:32bitプロセッサは4GBを超える物理メモリをサポートできないのか?

A:実際には32bitプロセッサであっても、Pentium Pro以降のプロセッサでは、PAE(Physical Address Extension:物理アドレス拡張)と呼ばれる機能がサポートされており、64GBの物理メモリが利用可能である。仮想記憶を実現するためのページテーブルエントリを工夫するなどして、物理アドレス空間を36bitに拡大している。1プロセス当たりの論理アドレス空間は4GB(32bit)に制限されるものの、物理アドレス空間としては64GBまで対応可能である。

 ただし32bitプロセッサ環境で4GBを超える物理メモリを利用するには、Windows Server 2003 SP1, Enterprise EditionなどのPAEをサポートしたOSと、PAE対応システム(およびBIOSやチップセットの対応)が必要である。

 PAEによって物理メモリを拡張することで、複数のアプリケーションを物理メモリ内にロードした状態で実行することが可能になる。大きなワーキングセット*2を持つアプリケーションを複数起動しても、その全てを物理メモリ内に収めることが可能になり、ページングの発生を防止できる。ただし各プロセスのユーザーアドレス空間は最大2GBに制限されたままのため、2GBを超えるようなワーキングセットを持つアプリケーションを実行することはできない。

*2 ワーキングセットと仮想記憶システム:
 「ワーキングセット」とは、実行中のアプリケーションのプログラムコードやデータ領域(固定的なデータ領域だけでなく、ヒープやスタックなどの動的なデータ領域も含む)などの集まりのこと。GUI化が進んだ現在のアプリケーションでは、ワーキングセットのサイズは数十〜数百MBにもなることがある。各プロセスのワーキングセットサイズはタスクマネージャーの[プロセス]タブにおける[メモリ使用量]欄などで確認できる。
 全プロセスのワーキングセット(およびOSカーネルの使用メモリ)の合計が物理メモリサイズを超える場合は、どれか不要なプロセスを一時的にディスクに「スワップアウト(追い出し)」しておき、実行時にまた「スワップイン(呼び戻し)」する。実際にはプロセス単位ではなく、「ページ」という単位(ほとんどの場合、1ページは4KB)でディスクに書き出したり、読み込んだりするので、「ページング」ともいう。このように、少ない物理メモリでも(まるで多量のメモリがあるかのように見せかけて)大きなプログラムを実行させるためのメカニズムを「仮想記憶システム」という。だがスワップイン/スワップアウトのために実行速度は大きく低下するので、大きなワーキングセットのプログラムを実行するためには、十分な量の物理メモリを装備することが望ましい。


 PAEによるメモリアクセスの概念を以下の図に示す。図のユーザーアドレス空間とは、各プロセスが利用する、プログラムコードやデータなどを置くアドレス空間であり、システム空間とはOSカーネルが置かれるアドレス空間のことだ。それぞれ、(デフォルトでは)最大2GBまでとなっている。ただしいずれのアドレス空間でも、実際にコードやデータが置かれている部分にのみ物理メモリが割り当てられている。PAEが利用できない場合、物理メモリは最大でも4GBまでしか使えないが、PAEが有効な場合は、4GB以上の物理メモリを用意して、それを各プロセスやカーネルに割り当てるため、より多くのプロセスを実行させることができる。

32bitプロセッサのPAEによるメモリアクセスの概念 32bitプロセッサのPAEによるメモリアクセスの概念
PAEが有効な場合は、4GB以上の物理メモリを用意して、それを各プロセスやカーネルに割り当て、より多くのプロセスを実行させることができる。なお64bit OSを利用する場合はこのような4GBや64GBの制限はなく、物理メモリをハードウェアの制限いっぱいの数十〜数百GBまで装着しても、全ての物理メモリに制限なくアクセスできる。

 このように32bitプロセッサであっても、4GBを超えた物理メモリが利用可能である。しかしPAEでは、メモリアクセス時に参照する内部的なテーブルの段数が2段から3段に増えるので、テーブル参照時の性能が低下するなどの不利な面がある。またマイクロソフトのPAEに関するドキュメントによると、デバイスドライバの中には、物理アドレスと32bit仮想アドレスの制限が同じであると仮定するものがあり、PAEを有効にすると不具合が発生するものもあるということだ。

 このPAEとは別の方法として、アプリケーションがAddress Windowing Extension(AWE)と呼ぶAPIに対応することで、単一アプリケーションでも2GBを超えたメモリが使えるようになる。AWE APIは、物理メモリの一部をユーザーアドレス空間のウィンドウにマッピングさせることで使用可能なメモリを拡大するもので、Windows Server 2003などがサポートしている。主にSQL ServerやOracleなど一部のサーバ向けアプリケーションがAWE APIをサポートしており、AWEで確保したメモリ上にキャッシュの一部を配置して性能の向上などを実現している。

32bitプロセッサのAWE APIによるメモリアクセスの概念 32bitプロセッサのAWE APIによるメモリアクセスの概念

 PAEやAWE APIが普及する前に64bitプロセッサが登場したこともあり、現在でもPAEはほとんど利用されていないのが現状である(AWE APIはSQL ServerやOracleといったデータベースソフトウェアなどが利用している)。64bitプロセッサが一般化した現在では、特別な理由がない限り、PAEやAWE APIなどの特殊な技術に頼るよりも、64bit環境の適用による自然な利用可能メモリ空間の拡大が優先される方向にある。

Q:64bitプロセッサにはどんなものがあるのか?

A:一口に64bitプロセッサといっても、64bit版Windows向けだけでなく、UNIX向けも含めればSun MicrosystemsのUltraSPARC、Hewlett-Packard(HP)のPA-RISC、IBMのPOWERやPowerPC、MIPS TechnologiesのMIPS64などさまざまな種類がある。

 一方、64bit版Windows向けには、IntelとAMDがそれぞれプロセッサを提供している(詳細は後述)。このうちAMDは、従来の32bitプロセッサのx86アーキテクチャを拡張したAMD64アーキテクチャを採用したOpteronやAthlon X2などを製品として提供している。

 これに対しIntelは、2種類の異なる命令セットアーキテクチャを持つ64bitプロセッサを提供している点に注意が必要だ。Intelが提供しているのは、AMDと同様、従来のx86アーキテクチャを拡張したIntel64アーキテクチャのIntel XeonやCore 2 Duoなどと、EPIC(Explicitly Parallel Instruction Computing:明示的な並列命令によるコンピューティング)アーキテクチャを採用したItanium(アイテニアム)である。困ったことにIntel64とEPICは互換性がないため、Intel64向けの64bitアプリケーションはItanium上で実行できないし、逆にItanium向けアプリケーションはIntel64上で実行できない。従ってOSにしろアプリケーションにしろ、それぞれに対応したバージョンを用意しなければならない。

Q:なぜIntelは、ItaniumとIntel64という2種類の64bitプロセッサをラインアップしているのか?

A:Intelは、1994年6月からHewlett-Packardと共同で新しい64bitプロセッサ向けアーキテクチャ(EPICアーキテクチャ)の共同開発を開始した。当初は、1999年にEPICアーキテクチャを採用した最初の製品が提供される予定であったが、開発が遅れ、2001年になってItaniumとして提供が開始されることになった。

 EPICアーキテクチャは、従来の32bitプロセッサ(x86アーキテクチャ)と互換性がないまったく新しい命令セットアーキテクチャとして開発された。過去からのソフトウェア資産を受け継がない代わりに、高い処理性能の実現するためのアーキテクチャとして、ゼロから設計することが可能になった。

 具体的には、これまでプロセッサ内部のハードウェアで処理していた分岐予測やループの最適化処理などをプログラムのコンパイル時に行い、同時実行可能な複数の命令をまとめて1クロックで実行可能にすることで、命令レベルでの高い並列性を実現するという設計方針が採用された。分岐予測などの最適化処理を実行時ではなく、コンパイル時に行うことで、より深いコード解析が可能になる。これにより予測精度が向上し、結果的に実行性能を高められる。

 前述した通り、その一方でEPICでは、x86アーキテクチャとは命令セットが異なることになり、バイナリレベルでの互換性はない。EPICアーキテクチャは、性能と互換性のトレードオフにおいて、性能を優先させたといえる。

 またEPICアーキテクチャを採用するItaniumは、当初からサーバ向けとして開発されたことから、主なデータ経路やキャッシュサブシステムにエラー検出/訂正機能を実装するなど、高い信頼性を実現している。例えば、宇宙からのガンマ線などの影響で、プロセッサ内部でデータの異常が発生した場合でも、エラー検出/訂正機能により、検知、訂正が行われるため、誤った演算結果が出力されたり、OSやアプリケーションが異常終了したりするなどの不具合発生が軽減されるということだ。しかしこうした信頼性機能の実装は、これまでの32bitプロセッサに比べて、多くのトランジスタを必要とし、結果として製造コストの高いプロセッサとなってしまっている。

 当時のIntelは、64bitプロセッサが求められる全ての用途にItaniumを適用し、x86アーキテクチャを採用する既存の32bitプロセッサは64bit化せずにアドレス拡張を行うことで4GBを超えたメモリに対応していく考えを持っていたようだ。64bitプロセッサを必要とする用途が広がるまでには時間がかかり、そのころになればItaniumの製造コストも下がり、ローエンドサーバなどであっても十分に採用可能なものになると予想していた。当面はハイエンドサーバやハイエンドワークステーションをターゲットとし、追ってローエンドサーバなどでも64bit OS+64bitアプリケーションが求められるようになった時点で、それに対応するローコストなItaniumを提供し、徐々にx86アーキテクチャからItaniumへの移行が可能であると考えていたといわれている。

 しかしItaniumは、前述のようにx86アーキテクチャと互換性がなかったこと、製品出荷が予定よりも2年遅れたこと、最初のItaniumの性能が期待ほど高くなかったことから、特に米国を中心にItaniumに対して否定的な論調が多く見られるようになってしまった。

 一方でAMDは、互換性を重要視し、既存のx86アーキテクチャを拡張することで64bit化を図ることを提唱、2000年にx86-64アーキテクチャ(その後、AMD64と名称変更)を一般に公開した。x86-64アーキテクチャは、x86アーキテクチャの拡張であり、既存の豊富なx86アプリケーションの動作が保証されることなどから、次世代64bitプロセッサの本命とみられるようになった。

 こうしたAMDの動きに対し、Intelも独自にx86アーキテクチャを64bit拡張することで対抗する計画を明らかにした。しかしAMDとIntelに対して異なる64bit版Windows OSが必要になるなど、開発上の問題や市場の混乱を懸念したMicrosoftとの話し合いにおいて、MicrosoftはIntelに対し、Intelの64bit拡張をAMDのそれと一本化するように要請した。これに応じIntelは、AMD64とほぼ同等のEM64T(その後、Intel64と名称変更)を開発することになった(ユーザープログラムレベルではAMD64とIntel64はほぼ互換性がある)。現在、AMD64とIntel64の両者は、総称してx64と呼ばれている。

 このIntel64の登場により、Intel社内でのItaniumの位置付けが変更になった。具体的には、ローエンドからハイエンドまで、全ての64bitプロセッサラインアップをItaniumでまかなうべく、ローエンドサーバにもItanium採用を拡大していくという当初の計画は変更された。現在では、Intel64をメインストリーム向け、ItaniumはSPARCやPOWER、メインフレームなどを対抗製品とするハイエンドサーバ向けとして、市場をすみ分ける戦略を採用している。

 IntelがItaniumとIntel64の2種類の64bitプロセッサをラインアップしているのは、このような歴史的な経緯があったからだ。

Q:x64版Windows OSが利用可能なプロセッサにはどのようなものがあるのか?

A:現在、販売されているほとんどのクライアント/サーバ向けプロセッサのうち、小型ノートPC向けの一部(IntelのA110など)を除き、既にほとんどのプロセッサが64bitに対応している。Intelは、小型ノートPC向けとして提供を開始した「Atom」においても、64bit対応を行っている。つまり小型ノートPCからハイエンドサーバに至るまで、x64版のWindows(Windows XP/Server 2003/Vista/Server 2008)が実行可能だということになる。

IntelとAMDの64bitプロセッサ IntelとAMDの64bitプロセッサ
IntelとAMDは、ほとんどの現行プロセッサにおいて64bit化を実現している。ノートPC向けからハイエンドサーバ向けまでさまざまな製品をラインアップしている。

プロセッサ名 特徴 Intel64/AMD64の採用
Intel
Itanium 9000番台 ハイエンドサーバ向けプロセッサ。x86アーキテクチャとは互換性のないEPICアーキテクチャを採用 ×
Intel Xeon 7000番台 4ソケット対応のサーバ向けプロセッサ。デュアルコアとクアッドコアが提供されている
Intel Xeon 5000番台 2ソケット対応のサーバ向けプロセッサ。デュアルコアとクアッドコアが提供されている
Intel Xeon 3000番台 1ソケット対応のサーバ向けプロセッサ。デュアルコアとクアッドコアが提供されている
Core 2 クライアント向けプロセッサ。デュアルコアのCore 2 Duo、クアッドコアのCore 2 Quad、ハイパフォーマンスPC向けでクアッドコアのCore 2 Extremeがある
Pentium D クライアント向けプロセッサ。デュアルコアとクアッドコアで提供されている。Core 2に対してプロセッサバスの動作クロックが低い、2次キャッシュの容量が小さいなどの違いがある
Celeron エントリクライアント向けプロセッサ。シングルコアのCeleronとデュアルコアのCeleron Dがある。Core 2/Pentium Dに対してプロセッサバスの動作クロックが低い、2次キャッシュの容量が小さいなどの違いがある
Atom 小型PC向けの低消費電力プロセッサ。シングルコアのみが提供されている。低価格で小型のノートPCなどをターゲットとして開発された
AMD
AMD Opteron 8000番台 8ソケット対応のサーバ向けプロセッサ。デュアルコアとクアッドコアが提供されている
AMD Opteron 2000番台 2ソケット対応のサーバ向けプロセッサ。デュアルコアとクアッドコアが提供されている
AMD Opteron 1000番台 1ソケット対応のサーバ向けプロセッサ。デュアルコアとクアッドコアが提供されている
AMD Phenom クライアント向けプロセッサ。トリプルコアのPhenom X3とクアッドコアのPhenom X4が提供されている
AMD Athlon クライアント向けプロセッサ。シングルコアのAthlonとデュアルコアのAthlon X2がある。またノートPC向けにはデュアルコアのAthlon 64 X2もある
AMD Turion X2 ノートPC向けプロセッサ。全てデュアルコアで提供されており、2次キャッシュの違いによりTurion X2 Ultra(2MB)とTurion X2(1MB)の2種類が提供されている
AMD Sempron エントリクライアント向けプロセッサ。全てシングルコアのSempron、デュアルコアのSempron X2が提供されている
IntelとAMDの各プロセッサの特徴

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。