拡大表示])。Intelも同様の機構を「LaGrande」というコードネームで以前から公表しているが,その詳細は明らかにしていない。
Pacificaに組み込まれた仮想化とセキュリティの機構は,米Microsoft社がWindowsの新版「Longhorn」に搭載予定のNGSCB(Next-Generation Secure Computing Base)をターゲットとしている(本誌2004年1月号に関連記事)。このことは,Longhornの出荷開始予定が2006年末なのに対し,AMDがPacificaに対応したマイクロプロセッサの出荷を同年上半期に予定していることからもうかがえる。
NGSCB構想に応える仕様
NGSCBの狙いは,不正なプログラムが重要なデータにアクセスできない環境を作り出すこと*1(図2[拡大表示])。これを実現するために,LonghornではセキュアOS*2を動作させ,その上で信用できるプログラムだけを動かす。ただこの状況ではユーザーの使い勝手が下がるうえ,従来のWindowsのように自由にプログラムをインストールできない。そこでNGSCBは,セキュアなOSだけでなく,従来型OSを動かす仕組みも用意する。従来型OSからセキュアOS側が持つデータにアクセスする場合は認証を受ける。
このような仕組みを実現するためには,次の三つの機構が必要になる。まず,セキュアなOSと従来型OSが同じプラットフォーム上で同時に動作する機構。二つ目は,OSが改ざんされていないことを保証する仕組み。OSが不正なプログラムを含んでいるようでは,根本部分でセキュリティを保てない。最後に,セキュアなOSが利用しているメモリー領域に従来型OSがアクセスできない仕組みである。いくらOSがセキュアでも,別のプログラムから直接メモリーにアクセスされれば不正なプログラムを埋め込まれたり,データが漏れるといった事態が起こり得る。
複数OSの実行を支援
では,Pacificaは具体的にどういう仕組みを備えているのか。
まず,複数のOSを一つのプラットフォーム上で動作させる仕組みは仮想化支援機構で実現する。具体的には,VMM(Virtual Machine Monitor)と呼ぶプログラムがその上で動作する複数のOS(ゲストOSと呼ぶ)を順番に切り替えることで,システムを仮想化する。実際の動作では,VMMがゲストOSを起動し,タイマーやハードウェア/ソフトウェアの割り込みによってVMMに制御を戻すことを繰り返す。
VMMからゲストOSへの移行時は,起動するゲストOSが前回使用していたレジスタの値を所定のテーブルから取り出しプロセッサに設定する。ゲストOSからVMMに制御が移る場合は,ゲストOSの現在のレジスタ値を所定のテーブルに保存し,前回VMMが利用していたレジスタの値をセットする。Pacificaは,こうした切り替え動作を数個の命令実行で行えるように設計されている。
OSローダーの改ざんをチェック
二つ目のOSのセキュアさを保証するために,Pacificaは「SKINIT」と呼ぶ動作モードを用意する。SKINITはOSローダーの改ざんをチェックする動作モードである。OSローダーは,OSをメモリー上に読み込み,起動するためのプログラム。これが不正なプログラムだった場合,システム全体の信頼性が損なわれる。
一般にAT互換機ではBIOSがハードディスク・ドライブのMaster Boot Record(MBR)を読み出し,ここに書かれているブート・プログラムがOSローダーを読み出して実行する。ここで,OSローダーが改ざんされているかどうかはチェックしない。次にOSローダーがOSを読み出してこれに制御を渡す。
SKINITでは,OSローダーが主記憶上に展開されてもすぐに実行せずに,改ざんがないかをまずチェックする(図3[拡大表示])。具体的にはプログラム全体をTPM(Trusted Platform Module)チップに送信する。TPMは,ハッシュ関数を用いて送られてきたデータからハッシュ値を作り,TPM内に格納してある正規のOSローダーのハッシュ値と比べる。ハッシュ値が同じなら改ざんがないと見なし,成功した旨をチップセットやマイクロプロセッサに通知する。成功ならマイクロプロセッサはOSローダーを実行する。
デバイスが直接触れない領域を作る
ゲストOSが管理するデータを他のゲストOSからアクセスさせない仕組みは,二つの機構で実現する。一つは先の仮想化支援機構。仮想化支援機構では,仮想的なメモリー空間と物理的なメモリー空間との間の変換テーブルをゲストOSごとに用意し,切り替えて利用する。VMMがそれぞれのゲストOSに対して重複のない物理メモリー空間を割り当てれば,与えられた空間から逸脱してアクセスすることはなくなる。
もう一つは,DMA(Direct Memory Access)機構を使った主記憶への直接アクセスを防止する機構「External Access Protection」である。逸脱した部分へのDMAを防ぐ。
この防止機構では,I/OデバイスごとにDMAできないメモリー領域をあらかじめ定めておく(図4[拡大表示])。ただ,I/Oデバイスごとに定めるとデータが膨大になってしまうので,メモリーのアクセスリストをグループ化する。Pacificaではこのグループをドメインと呼んでいる。例えば,ハードディスクとDVD-ROMドライブはドメイン1,サウンドとグラフィックス・カードはドメイン2に属するという具合に設定する。ドメインの数の制限は仕様上ないが,「一般的に四つ」としている。
DMA転送要求があった場合,まず対象となるI/OデバイスのデバイスIDからどのドメインに属するかを判断する。次に,そのドメインに対応したメモリー・アクセス禁止マップを読み込み,要求されたアドレス範囲と比べ,一致した場合はアクセスを拒否する。処理はノースブリッジ内で行われる。