(57)【特許請求の範囲】
【請求項１】
仮想アドレス変換テーブルを使用せずにセグメントおよびオフセットから物理アドレスを計算する第１動作モードと、前記セグメントおよびオフセットを含む仮想アドレスと仮想アドレス変換テーブルとを用いて物理メモリアドレスを計算する第２動作モードとを有するＣＰＵを備えたコンピュータシステムにおいて、
前記コンピュータシステムに設けられたディスク装置と前記コンピュータシステムのメモリとの間でＤＭＡ転送を実行するためのＤＭＡコントローラと、
前記ディスク装置に対するアクセスが上位プログラムから要求されたことに応答して前記ＣＰＵの動作モードが前記第１動作モードおよび前記第２動作モードのいずれであるかを判別する処理を実行すると共に、前記ＣＰＵの動作モードが前記第１動作モードであることが判別された場合には、前記ＣＰＵのレジスタにセットされている前記セグメントおよびオフセットから物理メモリアドレスを算出し、その算出した物理メモリアドレスおよび前記ＣＰＵの別のレジスタにセットされているディスクアドレスを前記ＤＭＡコントローラにセットすることにより、前記上位プログラムから要求された前記ディスク装置との間のデータ転送を前記ＤＭＡコントローラによるＤＭＡ転送によって実行し、前記ＣＰＵの動作モードが前記第２動作モードであることが判別された場合には、前記ＣＰＵに前記ディスク装置に対するアクセスを繰り返し実行させるＰＩＯ転送モードによって、前記上位プログラムから要求された前記ディスク装置との間のデータ転送を実行するディスクアクセス制御手段とを具備することを特徴とするコンピュータシステム。
【請求項２】
前記上位プログラムはオペレーティングシステムであり、前記オペレーティングシステムが、そのブートストラップシーケンスの途中でディスク装置に対するアクセスを行うディスクドライバを呼び出す際の前記ＣＰＵの動作モードが第１の動作モードであると判別された場合は、前記ＣＰＵの動作モードを前記第１動作モードから前記第２動作モードに切り替えるまでは、前記ディスクアクセス制御手段は、前記ブートストラップシーケンス中の前記オペレーティングシステムからの要求に応じて、前記オペレーティングシステムを構成するファイル群を前記ディスク装置からリードするためのデータ転送を前記ＤＭＡコントローラによるＤＭＡ転送によって実行することを特徴とする請求項１記載のコンピュータシステム。
【請求項３】
仮想アドレス変換テーブルを使用せずにセグメントおよびオフセットから物理アドレスを計算する第１動作モードと、前記セグメントおよびオフセットを含む仮想アドレスと仮想アドレス変換テーブルとを用いて物理メモリアドレスを計算する第２動作モードとを有するＣＰＵを備えたコンピュータシステムに適用されるデータ転送制御方法であって、
前記コンピュータシステムに設けられたディスク装置に対するアクセスが上位プログラムから要求されたことに応答して前記ＣＰＵの動作モードが前記第１動作モードおよび前記第２動作モードのいずれであるかを判別するステップと、
前記ＣＰＵの動作モードが前記第１動作モードであることが判別された場合、前記ＣＰＵのレジスタにセットされている前記セグメントおよびオフセットから物理メモリアドレスを算出し、その算出した物理メモリアドレスおよび前記ＣＰＵの別のレジスタにセットされているディスクアドレスを、前記コンピュータシステムに設けられたＤＭＡコントローラにセットすることにより、前記上位プログラムから要求された前記ディスク装置との間のデータ転送を前記ＤＭＡコントローラによるＤＭＡ転送によって実行するステップと、
前記ＣＰＵの動作モードが前記第２動作モードであることが判別された場合、前記ＣＰＵに前記ディスク装置に対するアクセスを繰り返し実行させるＰＩＯ転送モードによって、前記上位プログラムから要求された前記ディスク装置との間のデータ転送を実行するステップとを具備することを特徴とするデータ転送制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はコンピュータシステムおよび同システムで使用されるデータ転送制御方法に関し、特にディスク装置との間のデータ転送を効率よく実行できるように改良されたコンピュータシステムおよびデータ転送制御方法に関する。
【０００２】
【従来の技術】
近年、携帯可能なノートブックタイプまたはサブノートタイプの携帯型パーソナルコンピュータや、携帯情報端末などのポケットコンピュータが種々開発されている。
【０００３】
この種の携帯型コンピュータは、バッテリ駆動可能な時間を延ばすために、コンピュータシステムの電力を節約するための種々のパワーセーブモードが設けられている。サスペンドモードは、最も電力消費の少ないパワーセーブモードの１つである。すなわち、コンピュータシステムがサスペンドモードの時は、オペレーティングシステムやユーザプログラムなどの再スタートに必要なシステムデータが記憶されている主メモリを除く、システム内の他のほとんどのデバイスはパワーオフされる。
【０００４】
主メモリにセーブされるシステムデータは、コンピュータシステムがサスペンドモードに設定される直前のＣＰＵのステータスおよび各種周辺ＬＳＩのステータスである。また、この主メモリには、オペレーティングシステムおよびアプリケーションプログラムの実行状態やそのアプリケーションプログラムによって作成されたユーザデータも記憶されている。主メモリにセーブされた情報は、サスペンドモード直前の作業状態を復元するために用いられる。
【０００５】
システムデータのセーブは、システムＢＩＯＳ（基本入出力プログラム）に組み込まれたサスペンドルーチンによって実行される。システムＢＩＯＳはオペレーティングシステムからの要求にしたがってシステム内のハードウェアを制御するためのものであり、システム内の各種ハードウェアデバイスを制御するデバイスドライバ群を含んでいる。システムＢＩＯＳのサスペンドルーチンは、システムの電源オフ時などに起動され、ＣＰＵのレジスタおよび各種周辺ＬＳＩのステータスをメモリにセーブした後、システムをパワーオフする。
【０００６】
主メモリへの電源供給は、システムがパワーオフの期間中ずっとバッテリによって維持される。このため、システムのステータスおよびユーザデータは消失されることなく、サスペンド前の作業状態にシステムを高速に戻すことができる。
【０００７】
ところが、もしシステムがサスペンドモード状態の時にバッテリの容量が低下してローバッテリ状態となると、主メモリ内のデータは消失される。この場合、サスペンド前の状態にシステムを戻すことができ無くなるばかりか、主メモリに展開されているユーザデータも消失されてしまう。
【０００８】
そこで、最近では、サスペンドモードに代わる新たなパワーセーブモードとして、ハイバネーションが使用され始めている。ハイバネーションは、システム電源オフ時にＣＰＵおよび各種周辺ＬＳＩのステータス、および主メモリの内容などをハードディスクにセーブした後に主メモリを含むシステム内のほとんどすべてのデバイスをパワーダウンさせるモードであり、サスペンドモードよりも電力消費を低減できる。また、バッテリ容量が低下してもハードディスクにセーブした情報は消失されないので、システム状態をハイバネーション処理直前の状態に正常に復元することができる。したがって、ＡＣアダプタを使用できない外出先での使用が多い携帯型コンピュータの多くは、ハイバネーションをパワーセーブモードとして実装している。
【０００９】
ところで、近年のオペレーティングシステムおよびアプリケーションプログラムの機能向上に伴い、携帯型コンピュータにおいても、その主メモリとして実装されるメモリ容量は増大する一途にある。主メモリの記憶容量が増えると、その分、主メモリの内容をハードディスクにセーブするのに要する時間、およびハードディスクの内容を主メモリにリストアするのに要する時間も増大する。このため、ハイバネーションモードを使用するシステムでは、ハイバネーション処理に要する時間、つまりユーザが電源スイッチをオフしてからシステムが実際にパワーオフされるまでに要する時間、およびユーザが電源スイッチをオンしてからシステム状態が復元されるまでに要する時間が非常に大きくなりつつある。
【００１０】
また、従来では、ＢＩＯＳを介したハードディスク装置との間のデータ入出力動作は常にＰＩＯ（Programmed Input/Output）モードによって行われていた。
【００１１】
すなわち、携帯型コンピュータでは、ハードディスクドライブの接続に使用されるインターフェイスとして、ＡＴＡ（Ｅｎｈａｎｃｅｄ  ＩＤＥ）が使用されている。このＥｎｈａｎｃｅｄ  ＩＤＥで用いられている典型的な転送モードが前述のＰＩＯモードである。ＡＴＡでは、ＰＩＯモード０〜４まで定義されており、それぞれ最大転送速度が異なっている。ＰＩＯモードとは、ＣＰＵとハードディスクドライブとのハンドシェイクを用いた転送モードであり、ＣＰＵが直接ハードディスクドライブのＩ／Ｏポートを繰り返しアクセスすることによってデータ転送を行う。よって、その転送速度は決して高速ではないが、シーク動作やスピンドルの回転といった機械的動作を必要とするハードディスクドライブ自体のデータ転送能力を考慮すると、この転送方式で十分であったのである。
【００１２】
しかし、最近では、ハードディスクの高密度化が急速に進み、これに伴ってハードディスク自体のデータ転送能力も大幅に向上しており、ＰＩＯモード４に加え、現在ではＤＭＡモード、さらにはＵｌｔｒａＤＭＡモードに対応したディスクインターフェースを持つものが主流となっている。このため、常にＰＩＯモードのみを使用してディスク装置との間のデータ入出力を行うという従来のＢＩＯＳによるデータ転送方法では、ディスク装置の性能を十分に引き出すことが出来ないという問題が生じる。
【００１３】
【発明が解決しようとする課題】
しかし、オペレーティングシステムなどの上位プログラムからＢＩＯＳのディスクアクセスルーチン（ＩＮＴ１３ｈ）がコールされた時に、常にＤＭＡ転送を用いてデータ転送を行うようにすると、その時のＣＰＵの動作モードによっては重大なエラーが引き起こされる危険がある。
【００１４】
すなわち、ＤＭＡ転送（ＤＭＡモードまたはＵｌｔｒａＤＭＡ）を実行する場合には、ＣＰＵのアドレス変換機構を用いるのではなく、ＢＩＯＳ自体が転送先／転送元となる物理メモリアドレスを算出して、それを転送元／転送先メモリアドレスとしてバスマスタＩＤＥコントローラなどのＤＭＡ制御ロジックに設定することが必要となる。ＤＭＡ転送では、メモリアクセスはＣＰＵではなく、バスマスタＩＤＥコントローラなどのＤＭＡ制御ロジックによって実行されるからである。ところが、実際には物理メモリアドレスの算出方法はＣＰＵの動作モード（リアルモード、仮想アドレスモード）によって異なる。
【００１５】
すなわち、リアルモードでは、セグメント×１６＋オフセット＝物理メモリアドレスという計算によってセグメントおよびオフセットから物理アドレスへの変換が行われるが、Ｖ８６モードやプロテクトモードなどの仮想アドレスモードでは、ディスクプリタテーブルと称される仮想アドレス変換テーブルを参照することが必要となる。ディスクプリタテーブルの参照には特権レベルが必要であり、通常は、オペレーティングシステム以外の他のプログラム（ＢＩＯＳを含む）はそれをアクセスすることはできない。
【００１６】
したがって、もしＢＩＯＳがＣＰＵの動作モードに関係なく常にセグメント×１６＋オフセット＝物理メモリアドレスという計算によって物理メモリアドレスを計算して、それを用いてＤＭＡ転送のための処理を開始すると、ＣＰＵが仮想アドレスモード（例えばＶ８６モード）であった場合には誤った物理メモリアドレスが算出されてしまい、結果的に誤動作を引き起こすことになる。
【００１７】
本発明は上述の事情に鑑みてなされたものであり、ＣＰＵの動作モードを考慮してＤＭＡ転送モードの実行条件を決定できるようにし、動作の信頼性が高く、しかも十分にディスク装置との間のデータ転送効率の向上を図ることが可能なコンピュータシステムおよびデータ転送制御方法を提供することを目的とする。
【００１８】
【課題を解決するための手段】
上述の課題を解決するため、本発明は、仮想アドレス変換テーブルを使用せずにセグメントおよびオフセットから物理アドレスを計算する第１動作モードと、前記セグメントおよびオフセットを含む仮想アドレスと仮想アドレス変換テーブルとを用いて物理メモリアドレスを計算する第２動作モードとを有するＣＰＵを備えたコンピュータシステムにおいて、前記コンピュータシステムに設けられたディスク装置と前記コンピュータシステムのメモリとの間でＤＭＡ転送を実行するためのＤＭＡコントローラと、前記ディスク装置に対するアクセスが上位プログラムから要求されたことに応答して前記ＣＰＵの動作モードが前記第１動作モードおよび前記第２動作モードのいずれであるかを判別する処理を実行すると共に、前記ＣＰＵの動作モードが前記第１動作モードであることが判別された場合には、前記ＣＰＵのレジスタにセットされている前記セグメントおよびオフセットから物理メモリアドレスを算出し、その算出した物理メモリアドレスおよび前記ＣＰＵの別のレジスタにセットされているディスクアドレスを前記ＤＭＡコントローラにセットすることにより、前記上位プログラムから要求された前記ディスク装置との間のデータ転送を前記ＤＭＡコントローラによるＤＭＡ転送によって実行し、前記ＣＰＵの動作モードが前記第２動作モードであることが判別された場合には、前記ＣＰＵに前記ディスク装置に対するアクセスを繰り返し実行させるＰＩＯ転送モードによって、前記上位プログラムから要求された前記ディスク装置との間のデータ転送を実行するディスクアクセス制御手段とを具備することを特徴とする。
【００１９】
このコンピュータシステムにおいては、ディスク装置に対するアクセスが上位プログラムから要求された場合、そのときのＣＰＵの動作モードが判別され、セグメントおよびオフセットから物理メモリアドレスを直接的に計算できる第１動作モードであることことを条件に、ＤＭＡ転送のための処理が実行される。よって、誤った物理メモリアドレスの算出などの不具合を招くことなく、ディスク装置とメモリとの間のデータ転送を効率よく実行することが可能となり、通常のディスク入出力動作のみならず、オペレーティングシステムのブートストラップ処理、およびハイバネーションからの復帰処理の高速化を図ることが可能となる。
【００２０】
前記ディスクアクセス制御手段は、前記動作モード判別手段によって前記ＣＰＵの現在の動作モードが前記第２動作モードであると判別された場合には、前記ＣＰＵに前記ディスク装置に対するアクセスを繰り返し実行させるＰＩＯ転送モードによって、前記上位プログラムから要求された前記ディスク装置との間のデータ転送を実行するように構成することが好ましい。これにより、ＣＰＵの現在の動作モードに応じてＤＭＡ転送モードとＰＩＯ転送モードを選択的に実行することが可能となり、常に最適な転送モードを利用することができる。
【００２１】
【発明の実施の形態】
以下、図面を参照して本発明の実施形態を説明する。
図１には、本発明の一実施形態に係るコンピュータシステムの構成が示されている。このコンピュータシステムは、ノートブックタイプまたはサブノートタイプのポータブルパーソナルコンピュータであり、コンピュータ本体と、このコンピュータ本体に開閉自在に取り付けられたＬＣＤパネルユニットとから構成されている。このコンピュータは、内蔵バッテリを有しており、その内蔵バッテリからの電力によって動作可能に構成されている。また、ＡＣアダプタを介してＡＣ商用電源などの外部電源から電力供給を受けることもできる。外部電源から電力供給を受けているときは、その外部電源からの電力がコンピュータシステムの動作電源として用いられる。このとき、外部電源からの電力によって内蔵バッテリの充電も自動的に行われる。ＡＣアダプタが取り外されたり、あるいはＡＣ商用電源のブレーカが落とされたときなどは、内蔵バッテリからの電力がコンピュータシステムの動作電源として用いられる。
【００２２】
また、コンピュータ本体には、ＩＤＥインターフェイスを有するハードディスクドライブ（ＨＤＤ）１７が取り外し自在に装着されている。このＨＤＤ１７はコンピュータの二次記憶として使用されるものである。
【００２３】
また、このコンピュータのシステムボード上には、図示のように、ＣＰＵ１１、ホスト−ＰＣＩブリッジ１２、主メモリ１３、ＶＧＡコントローラ１４、ＰＣＩ−ＩＳＡブリッジ１５、バスマスタＩＤＥコントローラ１６、ＢＩＯＳ−ＲＯＭ１８、埋め込みコントローラ（ＥＣ）２０、電源コントローラ（ＰＳＣ）２１などが設けられている。
【００２４】
ＣＰＵ１１は、このシステム全体の動作制御およびデータ処理を実行する。このＣＰＵ１１としては、メモリセグメンテーション機構および仮想アドレッシング機構をサポートするもの、例えば、米インテル社により製造販売されているマイクロプロセッサ“Ｐｅｎｔｉｕｍ”などが使用される。この場合、ＣＰＵ１１は、次のような動作を持つ。
【００２５】
すなわち、ＣＰＵ１１は、アプリケーションプログラムやオペレーティングシステム（ＯＳ）などのプログラムを実行するための動作モードとしてリアルモード、プロテクトモード、仮想８０８６モード（Ｖ８６モード）を有している。リアルモードはメモリセグメンテーションを利用した実アドレスモードであり、プロテクトモードおよび仮想８６モードは仮想アドレスモードである。
【００２６】
すなわち、リアルモードは、最大で１Ｍバイトのメモリ空間をアクセスできるモードであり、論理アドレスから物理アドレスへの変換は、セグメントレジスタで表されるベースアドレスからのオフセット値で物理アドレスを決定するアドレス計算形式によって行われる。つまり、図２に示すように、セグメントはメモリ・セグメントを仮想的に表す１６ビットの値（セレクタと称する場合もある）であり、物理メモリアドレスは、セグメントの値を４ビット左にシフトした（１６倍）値をベースアドレスとし、それに１６ビットで表されるオフセット値を加えることによって算出される。
【００２７】
一方、プロテクトモードは１タスク当たり最大４Ｇバイトのメモリ空間をアクセスできるモードであり、ディスクプリタテーブルと称される仮想アドレス変換テーブルを用いてリニアアドレスが決定される。このリニアアドレスは、ページングによって最終的に物理アドレスに変換される。つまり、図３に示すように、セグメントの値はディスクプリタテーブルを参照するためのポインタとして使用され、そのディスクプリタテーブルから得られた値をベースアドレスとし、それに１６ビットで表されるオフセット値を加えることによってリニアアドレスが算出される。Ｖ８６モードはプロテクトモード環境下でリアルモードをエミュレーションするための動作モードであり、プロテクトモードと同じ仮想アドレス計算方式が用いられる。
【００２８】
ＣＰＵ１１の初期化時の動作モードはリアルモードであり、オペレーティングシステム等のソフトウェア制御の下に、プロテクトモード、Ｖ８６モードにスイッチされる。
【００２９】
ホスト−ＰＣＩブリッジ１２はＣＰＵバス１とＰＣＩバス２間を双方向でつなぐブリッジであり、ここには主メモリ１３を制御するためのメモリコントローラも内蔵されている。主メモリ１３はこのシステムの主記憶つまりシステムメモリとして使用されるものであり、オペレーティングシステム、処理対象のアプリケーションプログラム、およびアプリケーションプログラムによって作成されたユーザデータ等が格納される。この主メモリ１３はＤＲＡＭなどの半導体メモリによって実現されている。
【００３０】
ＢＩＯＳ−ＲＯＭ１８は、システムＢＩＯＳ（Ｂａｓｉｃ  Ｉ／Ｏ  Ｓｙｓｔｅｍ）を記憶するためのものであり、プログラム書き替えが可能なようにフラッシュメモリによって構成されている。システムＢＩＯＳは、このシステム内の各種ハードウェアをアクセスするためのファンクション実行ルーチンを体系化したものであり、リアルモードで動作するように構成されている。このシステムＢＩＯＳには、システムのパワーオン時にオペレーティングシステムをブートストラップするための処理ルーチンと、各種ハードウェア制御のためのＢＩＯＳドライバ群などが含まれている。各ＢＩＯＳドライバは、ハードウェア制御のための複数の機能をオペレーティングシステムやアプリケーションプログラムに提供するためにそれら機能に対応する複数のファンクション実行ルーチン群を含んでいる。上位プログラムからＩＮＴ１３ｈがコールされると、ＢＩＯＳのハードディスクドライバが実行される。このドライバ（ＩＮＴ１３ｈ）には、ＨＤＤ１７との間のデータ転送をＤＭＡ転送によって行うための機能とＰＩＯ転送によって行う機能とが含まれている。
【００３１】
ＥＣ２０は、システムが持つ付加機能を制御するためのコントローラであり、ＣＰＵ周辺温度などに応じてクーリングファンの回転制御などを行うための熱制御機能、システムの各種状態をＬＥＤの点灯やビープ音によってユーザに通知するためのＬＥＤ／ビープ音制御機能、電源コントローラ２１と共同してシステム電源のオン／オフなどを制御する電源シーケンス制御機能、および電源ステータス通知機能などを有している。ハイバネーション状態においても、ＥＣ２０および電源コントローラ２１には動作電源が供給されており、電源スイッチ２２およびパネルスイッチ２３のオン・オフが監視される。
【００３２】
ハイバネーションはシステム電源オフなどのパワーセーブモードへの移行イベントの発生時にＣＰＵ１１および各種周辺ＬＳＩのステータス、および主メモリ１３の内容などをハードディスク１７にセーブした後に主メモリ１７を含むシステム内のほとんどすべてのデバイスをパワーダウンさせるモードである。ハイバネーション状態においてシステム電源オフなどのウェイクアップイベントが発生すると、ハードディスク１７にセーブされているメモリイメージが主メモリ１３にリストアされ、ハイバネーション前の作業状態に復元される。ハイバネーションの実行および復帰処理の制御はＡＣＰＩ（Advanced Configuration and Power
Interface）対応のＯＳの管理下で実行される。
【００３３】
ＶＧＡコントローラ１４は、このシステムのディスプレイモニタとして使用されるＬＣＤおよび外部ＣＲＴを制御するためのものであり、ＶＲＡＭに描画された画面データをＬＣＤおよび外部ＣＲＴの一方または双方に表示する。
【００３４】
バスマスタＩＤＥコントローラ１６は、コンピュータ本体に装着されたＩＤＥデバイス（ここでは、ＨＤＤ１７）を制御するためのものであり、ＩＤＥデバイスと主メモリ１３との間のＤＭＡ転送を実行可能なバスマスタ機能（ＤＭＡコントローラ）を有している。このバスマスタ機能は、ＣＰＵ１１からのコマンドに応じて自らデータ転送のためのバスサイクル（ＤＭＡ転送）を実行するものであり、ＰＩＯモードよりもＣＰＵ負荷を低減した状態で、ＩＤＥデバイスと主メモリ１３との間のデータ転送を高速実行する事ができる。
【００３５】
次に、図４を参照して、ＢＩＯＳのディスクアクセス動作について説明する。
【００３６】
ここでは、オペレーティングシステムなどの上位プログラムからＢＩＯＳのディスクドライバ（ＩＮＴ１３ｈ）がコールされた場合を想定する。ＩＮＴ１３ｈのＢＩＯＳコールはＣＰＵ１１のソフトウェア割り込み機能を用いて実現されている。この場合、上位プログラムからＢＩＯＳのディスクドライバ（ＩＮＴ１３ｈ）には、ＣＰＵ１１のレジスタを通じて以下のＩ／Ｏパラメタが通知される。
【００３７】
Ｒ／Ｗファンクション：ディスクリードまたはディスクライトを示す
転送セクタ数：  ディスク装置との間でデータ転送すべきセクタ数
セグメント：    上述の１６ビットのセグメント値
オフセット：    上述の１６ビットのオフセット値
ＨＤＤアドレス：ディスクアクセスを行うべき開始アドレス
ドライブ番号：  アクセス対象のディスク装置のドライブ番号
上位プログラムは、これらＲ／Ｗファンクション、転送セクタ数、セグメント、オフセット、ＨＤＤアドレス、ドライブ番号をそれぞれＣＰＵ１１のＡＨレジスタ、ＡＬレジスタ、ＥＳレジスタ、ＢＸレジスタ、ＣＸ／ＤＨレジスタ、ＤＬレジスタなどにセットした後に、ＩＮＴ１３ｈをコールする。これにより、ＢＩＯＳのディスクドライバ（ＩＮＴ１３ｈ）に制御が移る。
【００３８】
ＢＩＯＳのディスクドライバ（ＩＮＴ１３ｈ）は、まず、上位プログラムが動作していたＣＰＵ１１の動作モード、つまり現在のＣＰＵ１１の動作モードをチェックし、仮想アドレスモードであるか、リアルモードであるかを判別する（ステップＳ１０１，Ｓ１０２）。上述したようにＢＩＯＳはリアルモードで動作するように構成されているので、上位プログラムからのＢＩＯＳコールは、リアルモード又はＶ８６モードで行われる。したがって、ＣＰＵ１１内のステータスレジスタのＶ８６フラグがオンであるか否かを調べることにより、仮想アドレスモードであるか、リアルモードであるかを判別することができる。
【００３９】
仮想アドレスモード、つまりＶ８６モードである場合、ＢＩＯＳのディスクドライバ（ＩＮＴ１３ｈ）は、ＣＰＵ１１にＨＤＤ１７に対するアクセスを繰り返し実行させるというＰＩＯ転送モードによってＨＤＤ１７との間のデータ転送を実行する（ステップＳ１０３）。
【００４０】
一方、リアルモードであれば、ＢＩＯＳのディスクドライバ（ＩＮＴ１３ｈ）は、ＤＭＡ転送モードによってＨＤＤ１７との間のデータ転送を実行する（ステップＳ１０４）。この場合、ＢＩＯＳのディスクドライバ（ＩＮＴ１３ｈ）は、まず、ＥＳレジスタのセグメントとＢＸレジスタのオフセットの値から物理メモリアドレスを計算し（セグメント×１６＋オフセット＝物理メモリアドレス）、そしてその物理メモリアドレスを計算する。そして、ＢＩＯＳのディスクドライバ（ＩＮＴ１３ｈ）は、その物理メモリアドレスと、ＣＸ／ＤＨにセットされているＨＤＤアドレスをそれぞれ転送元／転送先アドレスの初期値としてバスマスタＩＤＥコントローラ１６にセットすると共に、ＡＬレジスタの転送セクタ数をデータ転送幅としてバスマスタＩＤＥコントローラ１６にセットする。これにより、バスマスタＩＤＥコントローラ１６は、ＤＭＡ転送を開始する。例えば、ディスクから主メモリ１３のディスクリードの場合には、バスマスタＩＤＥコントローラ１６は、ＨＤＤアドレスで指定された位置のセクタデータから順にデータを読み出すと共に、その読み出したデータを物理メモリアドレスで指定される主メモリ１３のメモリ番地から順に書き込むバスサイクルを実行する。
【００４１】
図５は、仮想アドレスモードであるか否かだけではなく、ＨＤＤ１７がサポートする転送モードも考慮してデータ転送モードを決定する場合の処理例である。
【００４２】
即ち、ＢＩＯＳのディスクドライバ（ＩＮＴ１３ｈ）は、まず、上位プログラムが動作していたＣＰＵ１１の動作モード、つまり現在のＣＰＵ１１の動作モードをチェックし、仮想アドレスモードであるか、リアルモードであるかを判別する（ステップＳ１０１，Ｓ１０２）。ここまでは、図４と同じである。
【００４３】
仮想アドレスモード、つまりＶ８６モードである場合、ＢＩＯＳのディスクドライバ（ＩＮＴ１３ｈ）は、ＨＤＤ１７からリードしたドライブパラメータ情報に基づいて、ＨＤＤ１７がＲｅａｄ／Ｗｒｉｔｅ  Ｍｕｌｔｉｐｌｅコマンドをサポートしているかどうかを判断し（ステップＳ２０１）、その結果に基づいて、Ｒｅａｄ／Ｗｒｉｔｅ  Ｍｕｌｔｉｐｌｅコマンド、またはＲｅａｄ／Ｗｒｉｔｅ  Ｓｅｃｔｏｒコマンドを用いたデータ転送を実行する（ステップＳ２０２）。Ｒｅａｄ／Ｗｒｉｔｅ  Ｍｕｌｔｉｐｌｅは複数セクタ分のリード／ライトをまとめて指定可能なコマンドであり、このＲｅａｄ／Ｗｒｉｔｅ  Ｍｕｌｔｉｐｌｅコマンドをサポートしていない場合には、ＨＤＤアクセスには単一のセクタ単位でリード／ライトを指定するＲｅａｄ／Ｗｒｉｔｅ  Ｓｅｃｔｏｒコマンドを用いたデータ転送モードが使用される。Ｒｅａｄ／Ｗｒｉｔｅ  Ｍｕｌｔｉｐｌｅ、およびＲｅａｄ／Ｗｒｉｔｅ  Ｓｅｃｔｏｒのどちらも、ＰＩＯ転送モードである。
【００４４】
リアルモードである場合には、ＢＩＯＳのディスクドライバ（ＩＮＴ１３ｈ）は、ＨＤＤ１７からリードしたドライブパラメータ情報に基づいて、ＨＤＤ１７がＤＭＡをサポートしているかどうかを判断する（ステップＳ２０４）。サポートしていない場合は、ＨＤＤアクセスには前述のＲｅａｄ／Ｗｒｉｔｅ  Ｍｕｌｔｉｐｌｅコマンドを使用する。ＤＭＡをサポートしている場合には、次に、Ｕｌｔｒａ  ＤＭＡをサポートしているかどうかを判断する（ステップＳ２０５）。サポートしていない場合は、ＨＤＤアクセスにはＤＭＡ  Ｒｅａｄ／Ｗｒｉｔｅコマンドを使用する（ステップＳ２０７）。サポートしている場合は、Ｕｌｔｒａ  ＤＭＡ  Ｒｅａｄ／Ｗｒｉｔｅコマンドを使用する（ステップＳ２０８）。ＤＭＡ  Ｒｅａｄ／Ｗｒｉｔｅコマンド、およびＵｌｔｒａ  ＤＭＡ  Ｒｅａｄ／Ｗｒｉｔｅコマンドのどちらも前述のＤＭＡ転送のためのコマンドである。
【００４５】
多くのＨＤＤはＲｅａｄ／Ｗｒｉｔｅ  ＭｕｌｔｉｐｌｅおよびＵｌｔｒａ  ＤＭＡ  Ｒｅａｄ／Ｗｒｉｔｅをサポートしているので、転送セクター数が２以上であれは、実際には、仮想アドレスモードではＲｅａｄ／Ｗｒｉｔｅ  ＭｕｌｔｉｐｌｅコマンドによるＰＩＯ転送が実行され、リアルモードではＵｌｔｒａＤＭＡ  Ｒｅａｄ／Ｗｒｉｔｅコマンドを用いたＤＭＡ転送が実行されることになる。
【００４６】
データ転送レートは、Ｕｌｔｒａ  ＤＭＡ  Ｒｅａｄ／Ｗｒｉｔｅが最も高く、次いで、ＤＭＡ  Ｒｅａｄ／Ｗｒｉｔｅ、Ｒｅａｄ／Ｗｒｉｔｅ  Ｍｕｌｔｉｐｌｅ、Ｒｅａｄ／Ｗｒｉｔｅ  Ｓｅｃｔｏｒの順となる。
【００４７】
次に、図６を参照して、システム起動時、つまりオペレーティングシステム（ＯＳ）をブートストラップするときの動作について説明する。
【００４８】
電源スイッチ２２がオンされることによってシステムがパワーオンされると、ＢＩＯＳはそのディスクドライバ（ＩＮＴ１３ｈ）を用いて、ＨＤＤ１７のＭＢＲ（Master Boot Record）の内容を主メモリ１３に読み込むためのディスクアクセスを行う。ＭＢＲにはアクティブパーティションからブートコード（ＯＳローダ）を読み出してくるためのマスターブートコードが含まれており、マスターブートコードに制御が渡される。マスターブートコードは、ＣＰＵ１１のレジスタにＯＳローダの読み込みに必要なパラメータを設定した後、ＢＩＯＳのディスクドライバ（ＩＮＴ１３ｈ）をコールする。ディスクドライバ（ＩＮＴ１３ｈ）は、マスターブートコードから指定されたディスクリードを実行して、ＯＳローダを主メモリ１３に読み込む。この後、ＯＳローダに制御が渡され、ＯＳローダはＣＰＵ１１のレジスタにカーネルの読み込みに必要なパラメータを設定した後、ＢＩＯＳのディスクドライバ（ＩＮＴ１３ｈ）をコールする。
【００４９】
ディスクドライバ（ＩＮＴ１３ｈ）は、ＯＳローダから指定されたディスクリードを実行して、カーネルを主メモリ１３に読み込む。この後、ＯＳローダからカーネルに制御が渡される。カーネルは各種ドライバの読み込みをＢＩＯＳのディスクドライバ（ＩＮＴ１３ｈ）を用いて行うが、その途中で、リアルモードからプロテクトモードへの切り換えが行われる。ＢＩＯＳのディスクドライバ（ＩＮＴ１３ｈ）をコールする場合には、Ｖ８６モードが用いられる。ディスクドライバ（ＩＮＴ１３ｈ）がコールされる環境がリアルモードからＶ８６モードに切り替えられるまでは、ディスクドライバ（ＩＮＴ１３ｈ）によるディスク装置とメモリとの間のデータ転送は全てＤＭＡ転送によって行われる。そして、Ｖ８６モードに切り替えられた後は、ＰＩＯモードによるディスクアクセスが行われる。これにより、ディスクドライバ（ＩＮＴ１３ｈ）が常にＰＩＯモードによってディスクアクセスを行う場合に比べ、ＯＳのブートストラップシーケンスの高速化を図ることが可能となる。
【００５０】
次に、図７を参照して、ハイバネーション状態からの復帰時の動作について説明する。
【００５１】
電源スイッチ２２のオンなどのウェイクアップイベントが発生すると、ＢＩＯＳはそのディスクドライバ（ＩＮＴ１３ｈ）を用いて、ＨＤＤ１７のＭＢＲ（Master Boot Record）の内容を主メモリ１３に読み込むためのディスクアクセスを行う。ＭＢＲにはアクティブパーティションからブートコード（ＯＳローダ）を読み出してくるためのマスターブートコードが含まれており、マスターブートコードに制御が渡される。マスターブートコードは、ＣＰＵ１１のレジスタにＯＳローダの読み込みに必要なパラメータを設定した後、ＢＩＯＳのディスクドライバ（ＩＮＴ１３ｈ）をコールする。ディスクドライバ（ＩＮＴ１３ｈ）は、マスターブートコードから指定されたディスクリードを実行して、ＯＳローダを主メモリ１３に読み込む。この後、ＯＳローダに制御が渡される。ＯＳローダは、ハイバネーションからの復帰であるか通常のブートストラップであるかを判定する。この判定は、例えばハイバネーション状態への移行時にそれを示すフラグをＯＳ内部やＥＣ２０のレジスタなどに記憶しておき、ＯＳローダの実行時にそれを参照すること等によって行うことができる。
【００５２】
ハイバネーションからの復帰である場合には、ＯＳローダは、ＣＰＵ１１のレジスタに、ＨＤＤ１７にセーブされているメモリイメージの読み込みに必要なパラメータを設定した後、ＢＩＯＳのディスクドライバ（ＩＮＴ１３ｈ）をコールする。ディスクドライバ（ＩＮＴ１３ｈ）は、ＯＳローダから指定されたディスクリードを実行して、メモリイメージを主メモリ１３に読み込む。この時、ＣＰＵ１１はまだリアルモードであるので、ＨＤＤ１７から主メモリ１３へのメモリイメージの転送はＤＭＡ転送によって高速実行される。この後、ＯＳによって各主デバイスの状態復元に必要な処理等が実行されることにより、ハイバネーション移行前の作業環境が復元される。
【００５３】
以上のように、本実施形態によれば、上位プログラムからディスク入出力動作が要求された時のＣＰＵ１１の動作モードに応じてＤＭＡ転送とＰＩＯ転送を選択的に切り替えて実行することにより、誤った物理メモリアドレスの算出などの不具合を招くことなく、ディスク装置とメモリとの間のデータ転送を効率よく実行することが可能となる。特に、ハイバネーションからの復帰時には大量のメモリイメージデータを高速データ転送可能なＵｌｔｒａ  ＤＭＡ  Ｒｅａｄ／Ｗｒｉｔｅコマンドを用いることにより、ＰＩＯを用いる場合比べ、メモリイメージデータの読み込みに要する時間を大幅に短縮することができる。
【００５４】
【発明の効果】
以上説明したように、本発明によれば、動作の信頼性を損なうことなく、ディスク装置との間のデータ転送効率を十分に向上させることが可能となる。
【図面の簡単な説明】
【図１】本発明の一実施形態に係るコンピュータシステムの構成を示すブロック図。
【図２】同実施形態においてＣＰＵがリアルモード時における物理アドレス計算方式を説明するための図。
【図３】同実施形態においてＣＰＵがプロテクトモード時における物理アドレス計算方式を説明するための図。
【図４】同実施形態で実行されるディスクアクセス動作を説明するためのフローチャート。
【図５】同実施形態で実行されるディスクアクセス動作の第２の例を説明するためのフローチャート。
【図６】同実施形態におけるオペレーティングシステムのブートストラップ動作を説明するためのフローチャート。
【図７】同実施形態におけるハイバネーションからの復帰動作を説明するためのフローチャート。
【符号の説明】
１１…ＣＰＵ
１２…ホスト−ＰＣＩブリッジ
１３…主メモリ
１６…バスマスタＩＤＥコントローラ
１７…ＨＤＤ
１８…ＢＩＯＳ−ＲＯＭ
【図１】
0004155545.tif 000002
【図２】
0004155545.tif 000003
【図３】
0004155545.tif 000004
【図４】
0004155545.tif 000005
【図５】
0004155545.tif 000006
【図６】
0004155545.tif 000007
【図７】
0004155545.tif 000008