(57)【要約】本発明は、オペレーションの保護モードスケジューリングのための方法、システム、およびコンピュータプログラム製品に及ぶ。保護モード（例えばユーザモード）スケジューリングは、ワークロード固有の実行アブストラクションを使用することにより、ワークロードの要件をよりよく反映するプログラミングフレームワークを開発することを容易にすることができる。加えて、利用可能なハードウェアリソースの特性およびワークロードの要件に対してチューニングされたスケジューリングポリシーを定義する能力は、より優れたシステムスケーリング特性の可能性を有する。さらに、保護モードスケジューリングは、スケジューリング機能のかなりの部分をスーパーバイザーモード（例えばカーネルモード）からアプリケーションに移動させることにより、スケジューリングの責任を分散させる。
2011526040.tif 000002
【特許請求の範囲】
【請求項１】
物理プロセッサ（１０９）と、保護モード（１０２）およびスーパーバイザーモード（１０３）を有するオペレーティングシステム（１０１）とを含むコンピュータシステムにおいて、スケジューリングの責任を前記スーパーバイザーモードから分散させるために、プロセッサリソースのスケジューリングを保護モードで行うように構成するための方法であって、前記保護モード（１０２）は、該保護モード（１０２）で実行されるプログラムの物理プロセッサリソースへのプログラムアクセスを制限し、前記スーパーバイザーモード（１０３）は、物理プロセッサリソースに対する無制限のアクセスを有し、１つまたは複数の機能が、スーパーバイザーモード（１０３）へのアクセスをゲート制御して、保護モード（１０２）のプログラムが物理プロセッサリソースにアクセスするのにスーパーバイザーモード（１０３）に遷移することを許可し、前記オペレーティングシステム（１０１）内で実行されるプログラムは、プログラム命令に応じて保護モード（１０２）からスーパーバイザーモード（１０３）に遷移すること、およびスーパーバイザーモード（１０３）から保護モード（１０２）に遷移することができ、スーパーバイザーモード（１０３）は、デフォルトのスーパーバイザーモードスケジューリングポリシーに従って時分割ベースで物理プロセッサリソースを消費する、デフォルトのスーパーバイザーモード実行オブジェクトフォーマットを有し、前記方法は、
前記オペレーティングシステム（１０１）の前記保護モード（１０２）で動作する保護モードスケジューリングドメイン（１０４）を作成する動作であって、
前記物理プロセッサ（１１２０）の少なくとも一部分を、前記保護モードスケジューリングドメイン（１０４）の実行オブジェクトによる使用にマップし、
スーパーバイザーモードの通知を処理し、実行オブジェクトをディスパッチするように構成される、保護モード仮想プロセッサ（１０８Ｐ）、および
前記物理プロセッサの少なくとも一部分を、前記保護モードスケジューリングドメインの実行オブジェクトによる使用のために予約するように構成される、スーパーバイザーモード仮想プロセッサ（１０８Ｓ）
を含む、仮想プロセッサ（１０８）を作成する動作と、
前記仮想プロセッサ上において前記保護モードスケジューリングドメインの実行オブジェクトを多重化するための、前記デフォルトのスーパーバイザーモードスケジューリングポリシーとは異なる少なくとも１つの保護モードスケジューリングポリシー（１０７）をロードする動作と、
前記保護モードスケジューリングドメイン（１０４）の実行オブジェクトの状態を記憶して、前記保護モードスケジューリングドメイン内で様々な実行オブジェクト間のコンテキスト切り替えを容易にするように構成される、実行オブジェクトストア（１０５）を作成する動作と
を含む、保護モードスケジューリングドメイン（１０４）を作成する動作を含むことを特徴とする方法。
【請求項２】
保護モードは、ユーザモードを含み、スーパーバイザーモードは、カーネルモードを含むことを特徴とする請求項１に記載の方法。
【請求項３】
保護モードスケジューリングドメインを作成する前記動作は、前記オペレーティングシステムのユーザモードにおいてユーザモードスケジューリングドメインを作成する動作を含むことを特徴とする請求項１に記載の方法。
【請求項４】
仮想プロセッサを作成する前記動作は、ユーザモードスケジューリングドメインの実行オブジェクトによる使用のために物理プロセスリソースをマップする、仮想プロセッサを作成する動作を含むことを特徴とする請求項１に記載の方法。
【請求項５】
ユーザモードスケジューリングドメイン内の実行オブジェクトによる使用のために物理プロセスリソースをマップする仮想プロセッサを作成する前記動作は、前記ユーザモードスケジューリングドメイン内のＴｏＤｏｓによる使用のために物理プロセスリソースをマップする仮想プロセッサを作成する動作を含むことを特徴とする請求項２に記載の方法。
【請求項６】
前記オペレーティングシステムの前記保護モードで動作する保護モードスケジューリングドメインを作成する前記動作は、１つまたは複数の他の保護モードスケジューリングドメインを既に含むプロセス内で、保護モードスケジューリングドメインを作成する動作を含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記保護モードスケジューリングドメインと前記１つまたは複数の他の保護モードスケジューリングドメインとの間にチャネルイベントを構成し、スーパーバイザーモードへ遷移させることなく前記プロセス内で、前記保護モードスケジューリングドメインのプロセス内同期を容易にする動作
をさらに含むことを特徴とする請求項６に記載の方法。
【請求項８】
前記デフォルトのスーパーバイザーモードスケジューリングポリシーとは異なる少なくとも１つの保護モードスケジューリングポリシーをロードする前記動作は、前記１つまたは複数の他の保護モードスケジューリングドメインとは異なる少なくとも１つの保護モードスケジューリングポリシーをロードする動作を含むことを特徴とする請求項６に記載の方法。
【請求項９】
前記スーパーバイザーモード仮想プロセッサが、スーパーバイザーモードのデフォルトスケジューリングポリシーに従って前記物理プロセッサの前記少なくとも一部分を予約する動作をさらに含むことを特徴とする請求項１に記載の方法。
【請求項１０】
物理プロセッサ（１０９）と、保護モード（１０２）およびスーパーバイザーモード（１０３）を有するオペレーティングシステム（１０１）とを含むコンピュータシステムにおいて、スケジューリングの責任をスーパーバイザーモードから分散させるために、プロセッサリソースの消費を保護モードでスケジューリングするための方法であって、保護モード（１０２）は、該保護モード（１０２）で実行されるプログラムの物理プロセッサリソースへのプログラムアクセスを制限し、スーパーバイザーモード（１０３）は、物理プロセッサリソースに対する無制限のアクセスを有し、１つまたは複数の機能がスーパーバイザーモード（１０３）へのアクセスをゲートして、保護モード（１０２）のプログラムが、物理プロセッサリソースにアクセスするのにスーパーバイザーモード（１０３）に遷移することを許可し、前記オペレーティングシステム（１０１）内で実行されるプログラムは、プログラム命令に応じて保護モード（１０２）からスーパーバイザーモード（１０３）に遷移すること、およびスーパーバイザーモード（１０３）から保護モード（１０２）に遷移することができ、スーパーバイザーモード（１０３）は、デフォルトのスーパーバイザーモードスケジューリングポリシーに従って時分割ベースで物理プロセッサリソースを消費するデフォルトのスーパーバイザーモード実行オブジェクトフォーマットを有し、前記方法は、
保護モードスケジューリングドメイン（１０４）内で、前記デフォルトのスーパーバイザーモードスケジューリングポリシーとは異なる保護モードスケジューリングポリシー（１０７）に従って、前記保護モードスケジューリングドメインの第１の実行オブジェクト（１３１）に物理プロセッサリソース（１１２）を割り当てる動作と、
前記割り当てられた物理プロセッサ（１１２）リソースを利用して、前記第１の実行オブジェクト（１３１）内で指示される完全な作業を分割する動作と、
前記保護モードスケジューリングポリシー（１０７）に従って、前記第１の実行オブジェクト（１３１）内で指示される前記作業を完全に完了する前に、物理プロセッサリソースの割当て（１１２）を前記保護モードスケジューリングドメイン内の第２の実行オブジェクト（１３２）に遷移させることを決定する動作と、
スーパーバイザーモードに遷移することなく保護モードにおいて、コンテキストを前記第１の実行オブジェクトから前記第２の実行オブジェクトに切り替える動作であって、
前記保護モードスケジューリングドメイン（１０４）内にある実行オブジェクトストア（１０５）に第１の実行オブジェクトの状態（１３３）を保持する動作と、
前記実行オブジェクトストア（１０５）から前記第２の実行オブジェクトの状態（１３４）をロードする動作と
を含む、動作と、
前記第２の実行オブジェクト（１３２）にコンテキストを切り替えた後、保護モードスケジューリングドメイン（１０４）において、前記保護モードスケジューリングドメインの前記第２の実行オブジェクト（１３２）に物理プロセッサリソースを割り当てる（１１２）動作と、
前記割り当てられた物理プロセッサリソース（１１２）を用いて、前記第２の実行オブジェクト内で指示される完全な作業を分割する動作と
を含むことを特徴とする方法。
【請求項１１】
保護モードはユーザモードを含み、スーパーバイザーモードはカーネルモードを含むことを特徴とする請求項１０に記載の方法。
【請求項１２】
カーネルモードはスレッドを使用し、前記保護モードスケジューリングドメインは、スレッド以外の実行オブジェクトフォーマットを使用するユーザモードスケジューリングドメインであることを特徴とする請求項１１に記載の方法。
【請求項１３】
前記保護モードスケジューリングドメイン内で、保護モードスケジューリングドメインの第１の実行オブジェクトに物理プロセッサリソースを割り当てる前記動作は、前記オペレーティングシステムのユーザモード内の実行オブジェクトに、物理プロセッサリソースを割り当てる動作を含むことを特徴とする請求項１に記載の方法。
【請求項１４】
第１の実行オブジェクトに物理プロセッサリソースを割り当てる動作は、カーネルモード仮想プロセッサによって予約された物理プロセッサリソースを割り当てる動作を含むことを特徴とする請求項１に記載の方法。
【請求項１５】
前記保護モードスケジューリングドメインと１つまたは複数の他の保護モードスケジューリングドメインとの間のチャネルイベントを使用し、スーパーバイザーモードに遷移することなくプロセス内において、前記保護モードスケジューリングドメインのプロセス内同期を容易にする動作をさらに含むことを特徴とする請求項１に記載の方法。
【請求項１６】
１つまたは複数の物理プロセッサと、
システムメモリと、
ユーザモードおよびカーネルモードを有するオペレーティングシステムを表すコンピュータ実行可能命令を記憶した１つまたは複数の物理記憶域媒体と
を備えたコンピュータシステムであって、
前記コンピュータ実行可能命令は、前記コンピュータシステムに、
スケジューリングをカーネルモードから分散させるために、ユーザモードで動作するユーザモードスケジューリングドメインを作成する動作であって、
前記ユーザモードスケジューリングドメイン内のユーザモード実行オブジェクトによる使用のために、前記１つまたは複数の物理プロセッサの少なくとも一部をマップし、および
カーネルモード通知を処理し、実行オブジェクトをディスパッチするように構成された保護モード仮想プロセッサと、
前記ユーザモード実行オブジェクトによる使用のために、前記１つまたは複数の物理プロセッサの少なくとも一部を予約するように構成された、スーパーバイザーモード仮想プロセッサと
を含む、仮想プロセッサを作成することと、
前記仮想プロセッサ上で前記ユーザモードスケジューリングドメイン内の実行オブジェクトを多重化するためのユーザモードスケジューリングポリシーをロードすることと、
カーネルモードがユーザモード実行オブジェクトのコンテキスト情報を記憶することから解放されるように、ユーザモード実行オブジェクトの状態を記憶して、カーネルモードに遷移することなく前記ユーザモードスケジューリングドメインにおいて、様々なユーザモード実行オブジェクト間のコンテキスト切り替えを容易にするように構成される、ユーザモード実行オブジェクトストアを作成することと
を含む、前記ユーザモードスケジューリングドメインを作成する動作と、
前記ユーザモードスケジューリングドメインを作成した後に、
前記ユーザモードスケジューリングポリシーに従って、前記カーネルモード仮想プロセッサによって予約された物理プロセッサリソースを第１のユーザモード実行オブジェクトに割り当てる動作と、
前記割り当てられた物理プロセッサリソースを用いて、前記第１の実行オブジェクト内で指示される完全な作業を分割する動作と、
前記ユーザモードスケジューリングポリシーに従って、前記第１のユーザモード実行オブジェクト内で指示される前記作業を完全に完了する前に、前記カーネルモード仮想プロセッサによって予約された物理プロセッサリソースの割当てを第２のユーザモード実行オブジェクトに遷移させることを決定する動作と、
カーネルモードに遷移することなくユーザモードにおいて、前記第１のユーザモード実行オブジェクトから前記第２のユーザモード実行オブジェクトにコンテキストを切り替える動作であって、
前記ユーザモード実行オブジェクトストア内に第１のユーザモード実行オブジェクトの前記状態を保持する動作と、
前記ユーザモード実行オブジェクトストアから前記第２の実行オブジェクトの前記状態をロードする動作と
を含む、前記コンテキストを切り替える動作と、
前記第２の実行オブジェクトにコンテキストを切り替えた後、前記ユーザモードスケジューリングドメイン内で、前記第２のユーザモード実行オブジェクトに物理プロセッサリソースを割り当てる動作と、
前記割り当てられた物理プロセッサリソースを利用して、前記第２のユーザモード実行オブジェクト内で指示される完全な作業を分割する動作と
を実行させることを特徴とするコンピュータシステム。
【請求項１７】
前記ユーザモードのスケジューリングアルゴリズムは、カーネルモードのスケジューリングアルゴリズムと同じであり、ユーザモード実行オブジェクトはスレッドであることを特徴とする請求項１６に記載のシステム。
【請求項１８】
前記ユーザモードのスケジューリングアルゴリズムは、カーネルモードのスケジューリングアルゴリズムと異なることを特徴とする請求項１６に記載のシステム。
【請求項１９】
カーネルモード実行オブジェクトはスレッドであり、前記ユーザモード実行オブジェクトはＴｏＤｏｓであることを特徴とする請求項１６に記載のシステム。
【請求項２０】
実行されると前記コンピュータシステムに、スーパーバイザーモードに遷移することなく前記プロセスにおいて、保護モードスケジューリングドメインのプロセス内同期を容易にするために、前記保護モードスケジューリングドメインと、前記保護モードスケジューリングドメインと同じプロセス内の１つまたは複数の他の保護モードスケジューリングドメインとの間のチャネルイベントを構成させるためのコンピュータ実行可能命令と、
実行されるとき前記コンピュータシステムに、保護モードスケジューリングドメインのプロセス間同期を容易にするために、前記保護モードスケジューリングドメインと、他のプロセス内のさらなる１つまたは複数の他の保護モードスケジューリングドメインとの間のチャネルイベントを構成させるためのコンピュータ実行可能命令と
をさらに備えることを特徴とする請求項１６に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オペレーションの保護モードスケジューリングに関する。
【背景技術】
【０００２】
コンピュータシステムおよび関連技術は、社会の多くの側面に影響を与える。実際、コンピュータシステムの情報を処理する能力は、我々が生活し、働く方法を変えた。コンピュータシステムは、コンピュータシステムが登場する前は手動で行われていた多くのタスク（例えば、ワードプロセッシング、データベース管理、会計など）を今では一般に実行する。最近になり、コンピュータシステムを相互に、および他の電子デバイスと結合して、それらのコンピュータシステムおよび他の電子デバイスが電子データを転送することができる有線コンピュータネットワークおよび無線コンピュータネットワークの双方を形成する。したがって、多くのコンピューティングタスクのパフォーマンスは、多数の様々なコンピュータシステムおよび／または多数の様々なコンピューティングコンポーネントにわたって分散される。
【０００３】
典型的には、コンピュータシステムをオンにし、あるいは「起動」すると、読み取り専用メモリ（例えば、フラッシュメモリチップ）から「ＢＩＯＳ」（基本入出力システム）が稼働される。このＢＩＯＳは、コンピュータシステムのオペレーションの準備をするための一連のアクティビティを実行する。その一連のアクティビティには、（起動がコールドブートであるかリブートであるかに応じて）カスタム設定用のＣＭＯＳセットアップをチェックすること、割り込みハンドラおよびデバイスドライバをロードすること、レジスタおよび電源管理を初期化すること、コンピュータシステムの様々なハードウェアコンポーネントが確実に正しく機能していることをテストすること（パワーオン・セルフテスト（Power on self test）、すなわち「ＰＯＳＴ」）、ならびに他のカード（例えば、ＳＣＳＩカードやグラフィックスカード）上のＢＩＯＳチップをアクティブにすることが含まれ得る。ＣＭＯＳ設定から、ＢＩＯＳは、ブート可能なデバイスを識別し、ブートストラップシーケンスを開始してオペレーティングシステムを起動することができる。
【０００４】
コンピュータシステムの動作中、ＢＩＯＳは、例えばキーボード、マウス、ビデオディスプレイ、ポートなどの、様々なハードウェアデバイスとインタフェースするためにオペレーティングシステムが使用することができる、下位レベルのルーチンのセットも提供する。したがって、典型的なコンピューティングタスクを実行するために、オペレーティングシステムは、（アプリケーションプログラムまたはユーザのいずれかから）コマンドを受け取り、それらのコマンドを適切な物理リソースに転送する。それを受けて、その物理リソースは、下位レベルのオペレーションを実装してそのコンピューティングタスクを実行する。
【０００５】
オペレーティングシステムは、典型的に２つの互いに異なる動作モードを含む。すなわち、スーパーバイザーモード（supervisor mode）（「カーネルモードと呼ばれることもある）と、保護モード（protected mode）（「ユーザモード」と呼ばれることもある）とを含む。スーパーバイザーモードで動作するとき、プロセスは、すべてのリソースに対して無制限のアクセスを有しており、全ての命令を実行することができ、任意のメモリロケーションを参照することができる。一方、保護モードで動作するとき、リソースへのアクセスは制限され、一部の命令の実行は禁止され、一部のメモリロケーションの参照は禁止される。オペレーティングシステムは、典型的に、中央コンポーネント、すなわち、「カーネル」を有し、このカーネルはカーネルモードで動作するよう信頼されている。オペレーティングシステムの他の部分ならびに他のプログラムは信頼されておらず、特権的なリソースおよび命令に直接アクセスすることはできない。したがって、保護モードで動作するソフトウェアは、特権的なオペレーションを実行するために、（例えば、システムコールにより）カーネルの使用を要求しなければならない。
【０００６】
概して、オペレーティングシステムは、該オペレーティングシステムが含まれるコンピュータシステムが、柔軟であるが予測可能な方法で動作するように、ハードウェアリソースおよびソフトウェアリソースを管理する。典型的なコンピュータシステムでは、これらのリソースには、プロセッサ、メモリ、ディスクスペースなどが含まれ得る。オペレーティングシステムは、例えば、アプリケーションプログラムなどの他のソフトウェアを呼び出すための一貫性のあるアプリケーションも提供する。典型的には、アプリケーションプログラムは、実行されると、様々なコンピューティングタスクを実行するための１つまたは複数のプロセスを作成する。さらに、ほとんどのオペレーティングシステムは、１つのコンピュータシステム上で複数の独立したアプリケーションを同時に実行することを許可する。したがって、任意の所与の時点において、コンピュータシステムは、同時に実行される複数の様々なアプリケーションに対応する複数のプロセスを有することができる。
【０００７】
プロセスの作成は、実装するためにアプリケーションプログラムがカーネルを呼び出すことを必要とする特権的なオペレーションである。カーネルは、メモリをプロセスに割り当て、プログラムコードをディスクからロードし、そのプロセスの実行を開始することができる。
【０００８】
作成された複数のプロセスはそれぞれ、指定のコンピューティングタスクを実行するのに、プロセッサ（ＣＰＵ）、入出力、メモリ、およびストレージリソースのうちの１つまたは複数を必要とすることがある。しかし一部のリソースは、１度に少量の限られた数のプロセスのためのタスク、およびしばしば１つのプロセスのためのタスクのみを実行する可能性がある。例えば、多くのＣＰＵは、１度に１つのプロセスの命令を実行するよう制限される。したがって、多くのオペレーティングシステムは、マルチタスキングを使用して、複数のコンピューティングタスクを同時に実行しているように見せている。マルチタスキングは、複数のプロセスによって、例えばＣＰＵなどの共通の処理リソースが共有される機構である。
【０００９】
一部のオペレーティングシステムでは、１つのプロセスが、実行のスレッド（もしくは単に「スレッド」）またはファイバ（fiber）と呼ばれることもある、多くのサブプロセスを含むことができる。スレッドまたはファイバは、１つのプロセスのコード内の別個の独立した実行シーケンスである、サブプロセスである。スレッドおよびファイバは、プロセスが、該プロセス自身を２つまたはそれ以上の同時に（または擬似同時的に）実行されるタスクに分岐（または分割）するための機構を提供する。スレッドおよびファイバ、ならびにプロセスは、オペレーティングシステムによって異なる。しかしながら、通常、スレッドまたはファイバはプロセスの中に含まれ、同じプロセス内の異なるスレッドまたはファイバは、一部のリソースを共有し、異なるプロセスはリソースを共有しない。しかしながら、スレッドおよびファイバは、特権的リソースへのアクセスをまだ有していない場合は、この特権的リソースへのアクセスを個別に要求することができる。スレッドとファイバは、典型的に、スレッドがプリエンプティブマルチタスキング（pre-emptive multitasking）を使用するのに対し、ファイバは共同マルチタスキング（cooperative multitasking）を使用する点で異なる。
【００１０】
典型的には、所望のタイプのマルチタスキングを実装するために、オペレーティングシステムカーネルは、スケジューラと呼ばれる１つのソフトウェアを含み、このスケジューラは、各プロセスおよび／またはスレッド（およびそれほどではないにせよ、それらの環境内のファイバ）が実行にどれだけの時間を費やすことができるか、および実行制御をどの順序で渡すべきかを決定する。プロセス／スレッドがＣＰＵおよびメモリにアクセスすることを許可する制御は、カーネルによってプロセスおよび／またはスレッドに渡される。後の時点で、それらの他のプロセスおよび／またはスレッドがＣＰＵおよびメモリにアクセスすることができるようにする制御は、何らかの機構を介してカーネルに返される。例えば、「ＢＶＴ」（Borrowed-Virtual-Time）スケジューリング、マルチレベルフィードバックキュースケジューリング、インターバルスケジューリング、完全公平（completely fair）スケジューリングなど、ＣＰＵリソースを複数のプロセス／スレッド／ファイバに多重化するためにオペレーティングシステムカーネル内に実装することができる、様々な種類のスケジューリングアルゴリズムが存在する。
【００１１】
カーネルとプロセス／スレッド／ファイバとの間、およびその反対の間で制御を渡すことは、コンテキスト切り替え（context switching）と呼ばれることがある。コンテキスト切り替えは、複数のプロセスが単一のＣＰＵリソースを共有することができるようにＣＰＵの状態（コンテキスト）を記憶して復元（restore）することを含む。コンテキスト切り替えは、典型的に計算コストが高い。例えば、コンテキスト切り替えの間、実行中のプロセスが停止され、実行する機会は別のプロセスに与えられる。オペレーティングシステムのカーネルは、実行中のプロセスの実行を停止し、ハードウェアレジスタ内の値を、そのプロセス制御ブロック（「ＰＣＢ」：process control block）にコピーして、新たなプロセスのＰＣＢからの値を用いてハードウェアレジスタを更新する必要がある。ＰＣＢは、オペレーティングシステムに応じて様々な異なる情報を含むことができる。しかしながら、通常、ＰＣＢは、プロセス識別子（ＰＩＤ：process identifier）、そのプロセスのプログラムカウンタを含むレジスタ値、そのプロセスのアドレス空間、優先度、プロセスアカウント情報（例えば、そのプロセスが最後に実行されたのはいつか、そのプロセスがどれだけのＣＰＵ時間を累計したか等）、および次に実行すべきプロセスのＰＣＢへのポインタを含む。この情報はすべて、コンテキスト切り替え毎に、現在のプロセスについてはアンロードし、新たなプロセスについてはロードする必要がある。
【発明の概要】
【発明が解決しようとする課題】
【００１２】
したがって、ほとんどのオペレーティングシステムにおいて、カーネルは、本質的に、システム全体のポリシーを実行するスレッドのための集中型レポジトリおよび機関（authority）として機能する。すなわち、カーネルは、すべてのスケジューリングおよびコンテキストの管理を行う。そのため、カーネルは、スケーラビリティを潜在的に制限するボトルネックとなる。大量のスレッドがアクティブであるとき、少なくとも部分的に実質的なコンテキストデータのロードおよびアンロードに起因して、パフォーマンスも潜在的に低下する。
【００１３】
さらに、オペレーティングシステムカーネルは、そのカーネルが使用すべき実行アブストラクション（例えばスレッド、ファイバ等）およびスケジューリングアルゴリズムの双方を定義する。したがって、オペレーティングシステムを実行するすべてのアプリケーションは、基本的に、その定義された実行アブストラクションおよびスケジューリングアルゴリズムを使用することを強いられる。一部のアプリケーションは、他の実行アブストラクションおよび／またはスケジューリングアルゴリズムとともに使用するのにより適していることがあるので、このことは最適ではないことがある。例えば、あるアプリケーションは、ＴｏＤｏｓ（実行アブストラクションの一種）およびマルチレベルフィードバックキュースケジューリングを使用するのにより適している可能性がある。しかし、カーネルが、ＢＶＴスケジューリングを用いるようにスレッドを定義している場合、そのアプリケーションは、それにもかかわらず、その組合せを使用することを強いられることとなる。
【００１４】
多くのアプリケーションは異なる要件を有するので、本質的に、すべてのアプリケーションに最適な単一の（または画一的）スケジューリングアルゴリズムを導き出すことは不可能である。例えば、ワードプロセッサアプリケーション、メディアプレイヤプリケーション、およびディスクバックアップアプリケーションは、それぞれ異なる最適なスケジューリングアルゴリズムを有する可能性がある。しかし、トレードオフを行って、様々なアプリケーションの間で、たとえ最適でなくとも少なくとも機能するスケジューリングアルゴリズムを定義することができる。
【課題を解決するための手段】
【００１５】
本発明は、オペレーションの保護モードスケジューリングに関する方法、システム、およびコンピュータプログラム製品に及ぶ。一部の実施形態では、コンピュータシステムが、プロセッサリソースのスケジューリングを保護（例えばユーザ）モードで行うように構成して、スケジューリングの責任をスーパーバイザー（例えばカーネル）モードから分散させる。このコンピュータシステムは、オペレーティングシステムの保護モードで動作する保護モードスケジューリングドメインを作成する。保護モードスケジューリングドメインを作成することには、仮想プロセッサを作成することが含まれる。この仮想プロセッサは、保護モードスケジューリングドメインの実行オブジェクトによる使用のために、物理プロセッサの少なくとも一部分をマップする。
【００１６】
この仮想プロセッサには、保護モード仮想プロセッサが含まれる。保護モード仮想プロセッサは、スーパーバイザーモードの通知を処理し、実行オブジェクトをディスパッチするように構成される。この仮想プロセッサには、スーパーバイザーモード仮想プロセッサも含まれる。スーパーバイザーモード仮想プロセッサは、物理プロセッサの少なくとも一部分を、保護モードスケジューリングドメインの実行オブジェクトによる使用のために予約するように構成される。
【００１７】
保護モードスケジューリングドメインを作成することには、デフォルトのスーパーバイザーモードスケジューリングポリシーとは異なる少なくとも１つの保護モードスケジューリングポリシーをロードすることも含まれる。この少なくとも１つの保護モードスケジューリングポリシーは、仮想プロセッサ上で、保護モードスケジューリングドメインの実行オブジェクトを多重化するためのものである。保護モードスケジューリングドメインを作成することには、保護モードスケジューリングドメインの実行オブジェクトの状態を記憶するように構成される実行オブジェクトストアを作成することも含まれる。この実行オブジェクトストアは、コンテキストを保護モードスケジューリングドメイン内の異なる実行オブジェクト間で切り替えることを容易にする。
【００１８】
他の実施形態では、コンピュータシステムが、プロセッサリソースの消費を保護モードでスケジュールして、スケジューリングの責任をスーパーバイザーモードから分散させる。このコンピュータシステムは、保護モードスケジューリングドメインにおいて、物理プロセッサリソースを、その保護モードスケジューリングドメインの第１の実行オブジェクトに割り当てる。この物理プロセッサリソースは、デフォルトのスーパーバイザーモードスケジューリングポリシーとは異なる保護モードスケジューリングポリシーに従って割り当てられる。このコンピュータシステムは、割り当てられた物理プロセッサリソースを用いて、第１の実行オブジェクト内で指示される完全な作業を分割する。
【００１９】
このコンピュータシステムは、第１の実行オブジェクト内で指示される作業を完全に完了する前に、保護モードスケジューリングポリシーに従って、物理プロセッサリソースの割当てを、保護モードスケジューリングドメイン内の第２の実行オブジェクトに遷移させることを決定する。このコンピュータシステムは、スーパーバイザーモードに遷移することなく保護モードにおいて、コンテキストを第１の実行オブジェクトから第２の実行オブジェクトに切り替える。
【００２０】
コンテキストを切り替えることには、第１の実行オブジェクトの状態を、保護モードスケジューリングドメイン内にある実行オブジェクトストアに保持することが含まれる。コンテキストを切り替えることには、第２の実行オブジェクトの状態を実行オブジェクトストアからロードすることも含まれる。このコンピュータシステムは、第２の実行オブジェクトにコンテキストを切り替えた後、保護モードスケジューリングドメインにおいて、物理プロセッサリソースをその保護モードスケジューリングドメインの第２の実行オブジェクトに割り当てる。このコンピュータシステムは、割り当てられた物理プロセッサリソースを用いて、第２の実行オブジェクト内で指示される完全な作業を分割する。
【００２１】
この発明の概要は、以下の発明を実施するための形態においてさらに説明する概念の選択を簡略化した形で紹介するために提供されている。この発明の概要は、特許請求される主題の主要な特徴または本質的な特徴を特定するようには意図されておらず、特許請求される主題の範囲を決定する際の助けとして使用されるようにも意図されていない。
【００２２】
本発明のさらなる特徴および利点は以下の記載で説明され、その説明から部分的に明らかになり、または本発明を実施することにより知ることができる。本発明の特徴および利点は、添付の特許請求の範囲の中で特に示される機器および組合せによって実現し、得ることができる。本発明のこれらのおよび他の特徴は、以下の説明および添付の特許請求の範囲からより完全に明らかになり、または本明細書で以下に記載するように本発明を実施することによって知ることができよう。
【図面の簡単な説明】
【００２３】
【図１Ａ】スケジューリングの責任をスーパーバイザーモードから分散させるために、プロセッサリソースのスケジューリングを保護モードで行うように構成することを助ける例示的なコンピュータキテクチャの一部を示す図である。
【図１Ｂ】スケジューリングの責任をスーパーバイザーモードから分散させるために、プロセッサリソースの消費を保護モードでスケジュールする例示的なコンピュータキテクチャの一部を示す図である。
【図１Ｃ】仮想プロセッサのさらなるコンポーネントを示す、例示的なコンピュータキテクチャの一部を示す図である。
【図１Ｄ】保護モードスケジューリングドメイン内の複数の仮想プロセッサを示す、例示的なコンピュータキテクチャの一部を示す図である。
【図１Ｅ】保護モードスケジューリングドメイン間で同期するためのコンポーネントを示す、例示的なコンピュータキテクチャの一部を示す図である。
【図２Ａ】保護モードスケジューリングドメインに機能を提供する、例示的なスーパーバイザーモードインフラストラクチャを示す図である。
【図２Ｂ】保護モードスケジューリングドメインに機能を提供する、例示的なスーパーバイザーモードインフラストラクチャを示す図である。
【図３】ユーザモードスケジューリングアーキテクチャの一例を示す図である。
【図４】プロセッサリソースのスケジューリングを保護モードで行うように構成するための例示的な方法を示すフローチャートである。
【図５】保護モードでプロセッサリソースをスケジューリングするための例示的な方法のフローチャートである。
【発明を実施するための形態】
【００２４】
本発明の上記に挙げた利点および特徴ならびに他の利点および特徴が得られる方法を説明するために、上記に簡潔に述べた本発明のより詳細な説明は、添付の図面に図示される特定の実施形態を参照することによって提供される。これらの図面は本発明の典型的な実施形態を示しているに過ぎず、したがって本発明の範囲の限定とみなすべきでないことを理解されたい。添付の図面の使用を通じて本発明をさらに具体的かつ詳細に記載し、説明する。
【００２５】
本発明は、オペレーションの保護モードスケジューリングのための方法、システム、およびコンピュータプログラム製品に及ぶ。一部の実施形態では、コンピュータシステムは、プロセッサリソースのスケジューリングが保護（例えばユーザ）モードで行われるように構成し、スケジューリングの責任（responsibility）をスーパーバイザー（例えばカーネル）モードから分散させる。このコンピュータシステムは、オペレーティングシステムの保護モードで動作する、保護モードスケジューリングドメインを作成する。保護モードスケジューリングドメインを作成することには、仮想プロセッサを作成することが含まれる。この仮想プロセッサは、物理プロセッサの少なくとも一部分を、保護モードスケジューリングドメインの実行オブジェクトによる使用のためにマップする。
【００２６】
この仮想プロセッサには、保護モード仮想プロセッサが含まれる。保護モード仮想プロセッサは、スーパーバイザーモードの通知を処理し、実行オブジェクトをディスパッチするように構成される。この仮想プロセッサには、スーパーバイザーモード仮想プロセッサも含まれる。スーパーバイザーモード仮想プロセッサは、保護モードスケジューリングドメインの実行オブジェクトによる使用のために、物理プロセッサの少なくとも一部分を予約するように構成される。
【００２７】
保護モードスケジューリングドメインを作成することには、デフォルトのスーパーバイザーモードスケジューリングポリシーとは異なる、少なくとも１つの保護モードスケジューリングポリシーをロードすることも含まれる。この少なくとも１つの保護モードスケジューリングポリシーは、仮想プロセッサ上で、保護モードスケジューリングドメインの実行オブジェクトを多重化するためのものである。保護モードスケジューリングドメインを作成することには、保護モードスケジューリングドメインの実行オブジェクトの状態を記憶するように構成される実行オブジェクトストアを作成することも含まれる。この実行オブジェクトストアは、保護モードスケジューリングドメイン内の異なる実行オブジェクト間でコンテキストを切り替えることを容易にする。
【００２８】
他の実施形態では、コンピュータシステムは、プロセッサリソースの消費を保護モードでスケジュールして、スケジューリングの責任をスーパーバイザーモードから分散させる。このコンピュータシステムは、保護モードスケジューリングドメインにおいて、物理プロセッサリソースを、その保護モードスケジューリングドメインの第１の実行オブジェクトに割り当てる。この物理プロセッサリソースは、デフォルトのスーパーバイザーモードスケジューリングポリシーとは異なる保護モードスケジューリングポリシーに従って、割り当てられる。このコンピュータシステムは、割り当てられた物理プロセッサリソースを用いて、第１の実行オブジェクトで指示された完全な作業（complete work）を分割する。
【００２９】
このコンピュータシステムは、第１の実行オブジェクト内で指示される作業を完全に完了する前に、保護モードスケジューリングポリシーに従って、物理プロセッサリソースの割当てを、保護モードスケジューリングドメイン内の第２の実行オブジェクトに遷移させることを決定する。このコンピュータシステムは、保護モードの範囲内でかつスーパーバイザーモードへ遷移させることなく、コンテキストを第１の実行オブジェクトから第２の実行オブジェクトに切り替える。
【００３０】
コンテキストを切り替えることには、第１の実行オブジェクトの状態を、保護モードスケジューリングドメイン内にある実行オブジェクトストアに保持することが含まれる。コンテキストを切り替えることには、第２の実行オブジェクトの状態を、その実行オブジェクトストアからロードすることも含まれる。このコンピュータシステムは、コンテキストを第２の実行オブジェクトに切り替えた後、保護モードスケジューリングドメインにおいて、物理プロセッサリソースを、その保護モードスケジューリングドメインの第２の実行オブジェクトに割り当てる。このコンピュータシステムは、割り当てられた物理プロセッサリソースを用いて、第２の実行オブジェクトで指示される完全な作業を分割する。
【００３１】
本発明の実施形態は、以下により詳細に論じるように、コンピュータハードウェアを含む専用コンピュータまたは汎用コンピュータを備えること、または用いることができる。本発明の範囲内の実施形態には、コンピュータ実行可能命令および／またはデータ構造を搬送または記憶するための物理媒体および他のコンピュータ読取可能媒体も含まれる。そのようなコンピュータ読取可能媒体は、汎用コンピュータシステムまたは専用コンピュータシステムによってアクセスすることができる任意の利用可能な媒体とすることができる。コンピュータ実行可能命令を記憶するコンピュータ読取可能媒体は、物理記憶媒体である。コンピュータ実行可能命令を搬送するコンピュータ読取可能媒体は、伝送媒体である。したがって、限定ではなく例として、本発明の実施形態は少なくとも２つの明らかに異なる種類のコンピュータ読取可能媒体、すなわち物理記憶媒体と伝送媒体とを含むことがある。
【００３２】
物理記憶媒体には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気記憶装置、またはコンピュータ実行可能命令もしくはデータ構造の形で所望のプログラムコード手段を記憶するために使用することができ、汎用コンピュータまたは専用コンピュータによってアクセスすることができる他の任意の媒体が含まれる。
【００３３】
この説明および添付の特許請求の範囲に関して、「ネットワーク」は、コンピュータシステムおよび／またはモジュールおよび／または他の電子デバイスの間で電子データを転送できるようにする、１つまたは複数のデータリンクとして定義される。情報がネットワークまたは他の通信接続（有線、無線、または有線と無線の組合せ）を介してコンピュータに転送または提供されるとき、そのコンピュータは適切に、その接続を伝送媒体とみなす。伝送媒体には、搬送するために使用することができるネットワークおよび／またはデータリンク、あるいは汎用コンピュータまたは専用コンピュータによってアクセスすることができるコンピュータ実行可能命令またはデータ構造の形の所望のプログラムコード手段ネットワークおよび／またはデータリンクが含まれ得る。上記のものの組合せも、コンピュータ読取可能媒体の範囲内に含まれるべきである。
【００３４】
さらに、様々なコンピュータシステムコンポーネントに到達するとき、コンピュータ実行可能命令またはデータ構造の形のプログラムコード手段は、伝送媒体から物理記憶媒体に（または逆の場合も同様に）自動的に転送できることを理解されたい。例えば、ネットワークまたはデータリンクを介して受信されるコンピュータ実行可能命令もしくはデータ構造を、ネットワークインタフェースモジュール（例えば「ＮＩＣ」）内のＲＡＭにバッファし、その後、最終的にコンピュータシステムのＲＡＭおよび／またはコンピュータシステムの揮発性がより低い物理記憶媒体に転送することができる。したがって、同様に（または主に）伝送媒体を利用するコンピュータシステムコンポーネント内に物理記憶媒体を含めることができることを理解すべきである。
【００３５】
コンピュータ実行可能命令は、例えば、汎用コンピュータ、専用コンピュータ、または専用処理デバイスに特定の機能もしくは機能群を実行させる命令およびデータを含む。このコンピュータ実行可能命令は、例えばバイナリ、アセンブリ言語などの中間形式命令、またはソースコードともすることができる。本主題を構造的特徴および／または方法論的アクトに特有の言語で説明してきたが、添付の特許請求の範囲において定義される本主題は、必ずしも上記に記載した特徴またはアクトに限定されないことを理解すべきである。むしろ、記載した特徴およびアクトは特許請求の範囲を実施する形態例として開示されているものである。
【００３６】
当業者には、本発明を、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、メッセージプロセッサ、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースのまたはプログラム可能な家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、携帯電話、ＰＤＡ、ポケットベル、ルータ、スイッチなどを含め、多くの種類のコンピュータシステム構成を有するネットワークコンピューティング環境において実装することができることが理解されよう。本発明は、ネットワークを介して（有線データリンク、無線データリンクにより、または有線と無線データリンクとの組合せによって）リンクされるローカルコンピュータシステムとリモートコンピュータシステムの双方がタスクを実行する、分散システム環境において実施することができる。分散システム環境では、プログラムモジュールを、ローカルメモリ記憶装置とリモートメモリ記憶装置の双方に配置することができる。
【００３７】
この説明および添付の特許請求の範囲において、「実行オブジェクト」は、プロセッサ上でリソースを消費し、時分割される（多重化される）ワークロードアブストラクションのインスタンスとして定義される。実行オブジェクトの例には、スレッド、雑事（chore）、ファイバ、プロミス（promise）、Ｔｏｄｏｓ等が含まれる。
【００３８】
この説明および添付の特許請求の範囲において、「スケジューラ」、「スケジューリングアルゴリズム」、および「スケジューリングポリシーアルゴリズム」は、プロセッサ上で実行オブジェクトを多重化するための１組のコンポーネントとして定義される。スケジューラ、スケジューリングアルゴリズム、およびスケジューリングポリシーアルゴリズムは、「ＢＶＴ」（Borrowed-Virtual-Time）スケジューリング、「ＣＦＳ」（完全公平スケジューリング）、様々な種類のラウンドロビンスケジューリング、キューベーススケジューリング（ＦＩＦＯ、マルチレベル等）、スタックベーススケジューリング（ＬＩＦＯ）、ギャングスケジューリング、インターバルスケジューリング、ターンディスパッチング（Turn Dispatching）等を含む、様々な異なる種類のスケジューリングを実施することができる。
【００３９】
図１Ａは、スケジューリングの責任をスーパーバイザーモードから分散させるように、プロセッサリソースのスケジューリングが保護モードで行われるように構成することを容易にするコンピュータキテクチャ１００の一部を図示している。図示されるように、コンピュータキテクチャ１００は、プロセッサ１０９（および、場合によっては１つまたは複数の追加のプロセッサ）およびオペレーティングシステム１０１を含む。オペレーティングシステム１０１は、アプリケーションを保護モード１０２（例えばユーザモード）およびスーパーバイザーモード１０３（例えばカーネルモード）で実行することができる。保護モード１０２は、物理プロセッサ１０９のリソースへのプログラムアクセスを制限することができる。一方、スーパーバイザーモード１０３は、物理プロセッサ１０９のリソースに対する無制限のアクセスを有する。１つまたは複数の機能は、スーパーバイザーモード１０３へのアクセスをゲートによりコントロールして、保護モード１０２のプログラムを、物理プロセッサ１０９のリソースへのスーパーバイザーモード１０３に遷移することを可能にする。
【００４０】
したがって、オペレーティングシステム１０１内で実行されるプログラムは、プログラム命令に応じて、保護モード１０２からスーパーバイザーモード１０３に、およびスーパーバイザーモード１０３から保護モード１０２に遷移させることができる。スーパーバイザーモード１０３は、デフォルトのスーパーバイザーモードスケジューリングポリシー（例えば「ＢＶＴ」スケジューリング）に従って時分割ベースで物理プロセッサ１０９のリソースを消費するデフォルトのスーパーバイザーモード実行オブジェクトフォーマット（例えばスレッド）を有する。
【００４１】
図４は、プロセッサリソースのスケジューリングが保護モードで行われるように構成するための方法４００の一例の流れ図を示す。方法４００を、図１Ａに示すコンポーネントおよびデータに関して説明する。
【００４２】
方法４００は、オペレーティングシステムの保護モードで動作する保護モードスケジューリングドメインを作成するアクトを含む（アクト４０１）。例えば、オペレーティングシステム１０１は、保護モード１０２内で保護モードスケジューリングドメイン１０４を作成することができる。
【００４３】
保護モードスケジューリングドメインを作成することには、仮想プロセッサを作成するアクトが含まれ、この仮想プロセッサは、物理プロセッサの少なくとも一部分を、保護モードスケジューリングドメインの実行オブジェクトによる使用にマップする（アクト４０２）。例えば、オペレーティングシステム１０１は、仮想プロセッサ１０８を作成することができる。通常、仮想プロセッサ１０８は、スーパーバイザーモード１０３のデフォルトの実行オブジェクトフォーマットおよびスケジューラを、保護モードスケジューリングドメイン１０４から抽出する。例えば、仮想プロセッサ１０８は、リソース割当て１１２（物理プロセッサ１０９のリソースの一部分）を、保護モードスケジューリングドメイン１０４内の実行オブジェクトによる使用にマップする。
【００４４】
仮想プロセッサ１０８は、保護モード仮想プロセッサ１０８Ｐを含む。保護モード仮想プロセッサ１０８は、スーパーバイザーモード１０３からのスーパーバイザーモード通知を処理し、保護モードスケジューリングドメイン１０４内の実行オブジェクトをディスパッチするように構成される。仮想プロセッサ１０８には、スーパーバイザーモード仮想プロセッサ１０８Ｓも含まれる。スーパーバイザーモード仮想プロセッサ１０８Ｓは、保護モードスケジューリングドメイン１０４の実行オブジェクトによる使用のために、物理プロセッサ１０９の少なくとも一部分（例えばリソース割当て１１２）を予約するように構成される。
【００４５】
保護モードスケジューリングドメインを作成することには、デフォルトのスーパーバイザーモードスケジューリングポリシーとは異なる少なくとも１つの保護モードスケジューリングポリシーをロードすることも含まれ、この少なくとも１つの保護モードスケジューリングポリシーは、仮想プロセッサ上で、保護モードスケジューリングドメインの実行オブジェクトを多重化するためのものである（アクト４０３）。例えば、オペレーティングシステム１０１は、保護モードスケジューリングドメイン１０４内の実行オブジェクトを多重化するためのスケジューリングポリシーアルゴリズム１０７をロードすることができる。スケジューリングポリシーアルゴリズム１０７は、スーパーバイザーモード１０３のデフォルトのスケジューリングポリシーとは異なる、例えばスケジューリング、マルチレベルフィードバックキュースケジューリング、インターバルスケジューリング、完全公平スケジューリングなどの、事実上任意のスケジューリングポリシーとすることができる。ポリシー状態１１６は、スケジューリングポリシーアルゴリズム１０７のポリシー状態を保持するためのデータ構造とすることができる。
【００４６】
保護モードスケジューリングドメインを作成することには、保護モードスケジューリングドメインの実行オブジェクトの状態を記憶して、保護モードスケジューリングドメイン内の様々な実行オブジェクト間のコンテキスト切り替えを容易にするように構成される、実行オブジェクトストアを作成することも含まれる（アクト４０４）。例えば、オペレーティングシステム１０１は、保護モードスケジューリングドメイン１０４の実行オブジェクトの状態を記憶して、保護モードスケジューリングドメイン１０４内のオブジェクト間の切り替えを容易にするための実行オブジェクトストア１０５を作成することができる。保護モードスケジューリングドメイン１０４の実行オブジェクト（例えばＴｏＤｏｓ）は、スーパーバイザーモード１０３で使用される実行オブジェクト（スレッド）と異なるものとすることができる。
【００４７】
保護モードスケジューリングドメイン１０４を構成した後、保護モードスケジューリングドメイン１０４内の様々な実行オブジェクトの間で、物理プロセッサ１０９のリソース（例えば、リソース割当て１１２）を多重化することができる。図１Ｂは、スケジューリングの責任をスーパーバイザーモードから分散させるために、プロセッサリソースの消費を保護モードでスケジュールするコンピュータキテクチャ１００の一例の一部を図示している。
【００４８】
図１Ｂに図示するように、保護モードスケジューリングドメイン１０４は、同期モジュール１１４をさらに含む。通常、保護モードスケジューリングドメイン１０４のコンポーネントは、例えば、同期、放棄（yielding）、または強制終了によるブロッキング／ブロック解除などのスケジューリングオペレーション、およびコンテキスト切り替えがプロセス内で行われることを許可する。指定されたタイプの実行オブジェクトとともに使用するために同期モジュール１１４を構成することができる。同期オペレーションは、ポリシー状態１１６に影響を与える実行オブジェクトの状態遷移を引き起こす可能性があるので、同期モジュール１１４とスケジューリングポリシーアルゴリズム１０７との間には固有の関係（intrinsic relationship）が存在する可能性がある。使用すべき実行オブジェクトのタイプに少なくとも部分的に応じて、保護モードスケジューリングドメイン１０４の作成中または作成後に、同期モジュール１１４を生成／ロードすることができる。
【００４９】
図５は、保護モードでプロセッサリソースをスケジューリングするための例示的な方法５００のフローチャートを図示している。方法５００を、図１Ｂに示すコンポーネントおよびデータに関して説明する。
【００５０】
方法５００は、保護モードスケジューリングドメインにおいて、物理プロセッサリソースを、その保護モードスケジューリングドメインの第１の実行オブジェクトに割り当てるアクトを含み、物理プロセッサリソースは、デフォルトのスーパーバイザーモードスケジューリングポリシーとは異なる保護モードスケジューリングポリシーに従って割り当てられる（アクト５０１）。例えば、オペレーティングシステム１０１は、スケジューリングポリシーアルゴリズム１０７に従って、リソース割当て１１２を実行オブジェクト１３１に割り当てることができる。方法５００は、割り当てられた物理プロセッサリソースを用いて、第１の実行オブジェクトにおいて指示される完全な作業を分割するアクトを含む（アクト５０２）。例えば、実行オブジェクト１３１は、リソース割当て１１２を用いて、実行オブジェクト１３１において指示される完全な作業を分割することができる。
【００５１】
方法５００は、第１の実行オブジェクトにおいて指示される作業を完全に完了する前に、保護モードスケジューリングポリシーに従って、物理プロセッサリソースの割当てを保護モードスケジューリングドメイン内の第２の実行オブジェクトに遷移させることを決定するアクトを含む（アクト５０３）。例えば、オペレーティングシステム１０１は、実行オブジェクト１３１において指示される作業を完了する前に、スケジューリングポリシーアルゴリズム１０７に従って、リソース割当て１１２を実行オブジェクト１３２に遷移させることを決定することができる。
【００５２】
方法５００は、スーパーバイザーモードに遷移にすることなく保護モードにおいて、第１の実行オブジェクトから第２の実行オブジェクトにコンテキストを切り替えるアクトを含む（アクト５０４）。例えば、オペレーティングシステム１０１は、スーパーバイザーモード１０３に切り替えることなく、保護モードスケジューリングドメイン１０４内で、コンテキストを実行オブジェクト１３１から実行オブジェクト１３２に切り替えることができる。
【００５３】
コンテキストを切り替えることには、第１の実行オブジェクトの状態を、保護モードスケジューリングドメイン内にある実行オブジェクトストアに保持するアクトが含まれる（アクト５０５）。例えば、コンテキスト切り替えのときに、実行オブジェクト１３１はＥＯ状態１３３を有する場合がある。同期モジュール１１４は、ＥＯ状態１３３を実行オブジェクトストア１０５内に保持することができる。コンテキストを切り替えることには、第２の実行オブジェクトの状態を実行オブジェクトストアからロードするアクトも含まれる（アクト５０６）。例えば、同期モジュール１１４は、ＥＯ状態１３４を実行オブジェクトストア１０５からロードすることができる。ＥＯ状態１３４は以前に、コンテキストが実行オブジェクト１３２から切り替えられたときに保持された可能性がある。
【００５４】
方法５００は、第２の実行オブジェクトにコンテキストを切り替えた後、保護モードスケジューリングドメインにおいて、物理プロセッサリソースを保護モードスケジューリングドメインの第２の実行オブジェクトに割り当てるアクトを含む（アクト５０７）。例えば、オペレーティングシステム１０１は、コンテキストを実行オブジェクト１３２に切り替えた後、リソース割当て１１２を、保護モードスケジューリングドメイン１０４の実行オブジェクト１３２に割り当てることができる。方法５００は、割り当てられた物理プロセッサリソースを用いて、第２の実行オブジェクト内で指示される完全な作業を分割するアクトを含む（アクト５０８）。例えば、リソース割当て１１２を用いて、実行オブジェクト１３２内で指示される作業を部分的に完了することができる。
【００５５】
通常、保護モード（例えば、ユーザモード）スケジューリングは、スケジューリングオペレーションをスーパーバイザーモード（例えば、カーネルモード）から分散させる。この分散化により、本質的に、スーパーバイザーモードからスケジューリングの負担のかなりの部分を除去する２つのレベルのスケジューリングインフラストラクチャがもたらされることになる。特権化されるかまたはシステム全体のリソースを必要とする基本的なオペレーション、例えば、予約に対して物理プロセッサを多重化すること、およびタイマー割り込みを処理することなどが、（スーパーバイザーモードの実行オブジェクトフォーマット／スケジューラを利用して）スーパーバイザーモードで提供される。例えば、スーパーバイザーモード仮想プロセッサは、スーパーバイザーモードで物理プロセッサリソースを予約することができる。保護モードスケジューリングドメインは、保護モードで実行され、仮想プロセッサ上で実行オブジェクトを多重化する。したがって、そうでなければスーパーバイザーモードで実行されるであろう、かなりの量のスケジューリングオペレーションを代わりに保護モードで実行する。
【００５６】
さらに、デフォルトの実行オブジェクトフォーマットスーパーバイザーモード１０３とは異なる実行オブジェクトを使用して、および／またはスーパーバイザーモード１０３のデフォルトのスケジューラとは異なるスケジューラを使用して、アプリケーションの作業を実行することができる。例えば、指定されたアプリケーションの作業により適したスケジューラおよび実行オブジェクトフォーマットを用いて、保護モードスケジューリングドメインを構成することができる。
【００５７】
本発明の実施形態は、スーパーバイザーモードの実行オブジェクトフォーマットおよび／またはスーパーバイザーモードのスケジューリングアルゴリズムを、保護されたスケジューリングドメインで使用することも含む。例えば、実行オブジェクト１３１および１３２は、スーパーバイザーモード１０３で使用される実行オブジェクトフォーマット（例えばスレッド）のフォーマットとすることができ、スケジューリングポリシーアルゴリズム１０７は、スーパーバイザーモード１０３で使用されるもの（例えば、ＢＶＴ）とすることができる。この環境であっても、分散化スケジューリングは依然として、スケジューリングの負担の一部をスーパーバイザーモード１０３から軽減する。
【００５８】
図１Ｃは、仮想プロセッサのさらなるコンポーネントを示す、例示的なコンピュータキテクチャ１００の一部を図示している。保護モード仮想プロセッサ１０８Ｐは、物理プロセッサ１０９の動作を本質的にシミュレートする。保護モード仮想プロセッサ１０８は、非同期イベントに関して２つの通知モデル、割り込みおよび完了ポート（completion port）パラダイムを使用することができる。コンテキスト切り替えは、スーパーバイザーモード１０３に対していかなる呼び出しも必要とせずに、ディスパッチャ１２６内で行われる。ディスパッチャ１２６は、コンテンツを、例えば、実行可能な（runable）キューの最上部にある実行オブジェクトに切り替えることができる。
【００５９】
通常、通知ハンドル（notification handle）は、例えばタイマーや保護モードスケジューリングドメイン１０４の外部の同期など、オペレーティングシステム１０１によって生成される通知要求を処理する役割を担う。保護モードスケジューリングドメイン１０４は、プリエンプションまたはワークロードのためのタイマーを設定することができる。スーパーバイザーモード１０３は、このタイマーが終了するとき、仮想割り込みを発生させることができる。タイマー通知ハンドラ１２３は、終了したタイマーに起因する仮想割り込みを処理する。保護モードスケジューリングドメイン１０４外部の同期イベントも、仮想割り込みを発生させる可能性がある。同期通知ハンドル１２４は、同期イベントに起因する仮想割り込みを処理することができる。
【００６０】
Binary Interface
非ブロッキングアプリケーションバイナリインタフェース（「ＡＢＩ」：Application Binary Interface）呼び出しは、仮想プロセッサ１０８に、オペレーションが完了するのを待つことを停止させることができる。したがって、これらのタイプの呼び出しをスーパーバイザーモード１０３で発行して、完了時に割り込みを発生させることができる。コールバック通知ハンドル１２５は、非ブロッキングＡＢＩ呼び出しに起因する仮想割り込みを処理することができる。
【００６１】
割り込みベクトル１２２は、タイマー通知ハンドル１２３、同期通知ハンドル１２４、およびコールバック通知ハンドラ１２５のメモリアドレスまたはインデックスを（メモリアドレスを含む）割り込みベクトルテーブル内に記憶する。したがって、仮想割り込みを受け取ると、コントローラ１２１は、割り込みベクトル１２２を参照して、その仮想割り込みに応答して適切なハンドラを実行することができる。スーパーバイザーモード仮想プロセッサ１０８Ｓは、仮想割り込みインタフェース１３６を介して、割り込みを保護モード仮想プロセッサ１０８Ｐに伝達することができる。
【００６２】
完了データを、スーパーバイザーモード仮想プロセッサ１０８Ｓから保護モードスケジューリングドメイン１０４に完了ポートインタフェース１３８を介して伝達することができる。完了ポートパラダイムを使用するとき、通知ハンドルは仮想割り込みを用いてディスパッチャ１２６に通知する。それに応答して、現在の実行オブジェクトの実行が停止され、制御がスケジューリングポリシーアルゴリズム１０７に渡される。非同期イベントが完了ポートインタフェース１３８に送られるように構成されたとき、そのイベントが完了すると、スーパーバイザーモード仮想プロセッサ１０８Ｓは、そのイベントを自身の通知キューにエンキューすることができる。
【００６３】
スケジューリングポリシーアルゴリズム１０７は、次の機会が生じるとき、そのキュー内の未処理の完了イベントを処理することができる。プリエンプションが起こらず、完了したイベントからの割り込みなく、実行中の実行オブジェクトの実行が継続される。プロセスの初期化中、スケジューリングポリシーアルゴリズム１０７は、この様々なタイプのイベントで用いられる通知機構を構成する。
【００６４】
したがって、スーパーバイザーモード仮想プロセッサ１０８Ｓは、非同期イベントが完了すると、コントローラ１２１へのＫ−ＶＰを呼び出しまたはイベントを完了ポート内にエンキューすることができる。コントローラ１２１は、現在の実行オブジェクトのスタック内で効果的に実行される。次いで、スケジューリングポリシーアルゴリズム１０７は、通知が開始された後、そのスタックおよびコンテキスト切り替えを管理することができる。スケジューリングポリシーアルゴリズム１０７は、通知を処理する間または実行オブジェクトの状態変更コードを実行する間、仮想割り込みを無効化／有効化することができる。例外に対処するために、フォールトを２倍にする、および３倍にするための同様のモデルを実装することができる。
【００６５】
通常、予約物理プロセッサのスケジューリングは、仮想プロセッサを割り当てるために少なくとも２つの方法を処理する。プロセスは、（例えば、物理プロセッサ１０９の）物理プロセッサリソースを予約し、スーパーバイザーモード仮想プロセッサ（例えば１０８Ｓ）を実装する保護モードスケジューラスタブを付加することができる。この保護モードスケジューラスタブは、カーネルベースの実行オブジェクト（例えばスレッド）を作成し、その実行オブジェクトを仮想プロセッサ（例えば１０８）としてプロセスに公開する。さらに、この保護モードスケジューラスタブは、保護モード仮想プロセッサのコントローラ（例えば１２１）に通知するための仮想割り込みを生成する。仮想プロセッサは、予約に割り振られたリソースのすべてを消費する。したがって、予約利用パターン（reservation usage pattern）を使用して、単一の仮想プロセッサがスーパーバイザーモードによって公開される。
【００６６】
一部の実施形態では、高速予約（express reservation）は利用されず、仮想プロセッサがデフォルトの予約から代わりに要求される。これらの実施形態では、ポリシーに基づいて、スーパーバイザーモードのデフォルトのスケジューラを表すスーパーバイザーモード実行オブジェクト（例えばカーネルスレッド）にリソースが割り振られる。例えば、ラウンドロビンアルゴリズムを適用する場合、スーパーバイザーモード仮想プロセッサは、デフォルトの予約内で動作する他のすべてのスーパーバイザーモード実行オブジェクトおよびスーパーバイザーモード仮想プロセッサと、デフォルトの予約内で等しく共用することができる。スーパーバイザーモードのスケジューラポリシーは、例えばプロセスに仮想プロセッサを公開することや、仮想割り込みを生成することなど、保護モードスケジューラスタブ機能を組み込むように拡張することができる。
【００６７】
保護モードスケジューリングドメインは、複数の仮想プロセッサをカプセル化することができる。本出願の諸要件によれば、仮想プロセッサを、様々な物理プロセッサ、または同一のプロセッサに割り当てることができる。様々な予約オペレーションとともに様々な仮想プロセッサを割り当てることもできる。一部の実施形態では、ギャング予約（gang reservation）を使用して複数の仮想プロセッサが割り当てられる。この予約は、リソース要件に加え、同時実行要素（concurrency factor）を指定する。スーパーバイザーモードは、複数の物理プロセッサに対してリソースを予約して、それらのリソースを割り当てるため、仮想プロセッサがすべてのプロセスにおいて同時に実行される。しかし、デフォルトの予約の仮想プロセッサと、高速予約の仮想プロセッサとの組合せを割り当てることもできる。
【００６８】
図１Ｄは、保護モードスケジューリングドメイン内の複数の仮想プロセッサを示す、例示的なコンピュータキテクチャ１００の一部を図示している。図示のように、保護モードスケジューリングドメイン１０４は、保護モード仮想プロセッサ１０８Ｐおよび１２８Ｐを含む。保護モード仮想プロセッサ１０８Ｐおよび１２８Ｐは、対応するスケジューリングポリシーアルゴリズム１０７および１２７をそれぞれ利用する。スケジューリングポリシーアルゴリズム１０７および１２７のそれぞれは、実行オブジェクトの状態を実行オブジェクトストア１０５内に保持し、その対応するポリシーの状態をポリシー状態１１６内に保持する。
【００６９】
保護モードスケジューリングドメイン１０４のセマンティクスを使用して、実行オブジェクトストア１０５およびポリシーストア１１６を編成し、情報をスケジューリングポリシーアルゴリズム１０７と１２７との間で共有することができる。例えば、あるポリシーが仮想プロセッサ間の動的負荷分散をサポートする場合、共通ストアを使用することができる。しかし、あるポリシーが複数の実行オブジェクトに対するグループ化（affinitization）をサポートする場合、別個のストアを使用することができる。ワークロードの要件に応じて、効果的に同じスケジューラが、すべての仮想プロセッサ上で実行されることがあり、あるいは専用のスケジューラが、様々な仮想プロセッサ上で実行されることもある。
【００７０】
図１Ｅは、保護モードスケジューリングドメイン間で同期するためのコンポーネントを示す、例示的なコンピュータキテクチャ１００の一部を図示している。図示のようにプロセス１８１およびプロセス１８２が、保護モード１０２で実行中である。プロセス１８１は、保護モードスケジューリングドメイン１０４および１４４、保護モード仮想プロセッサ１０８Ｐおよび１４８Ｐ、ならびに同期レイヤ１４１を含む。プロセス１８２は、保護モードスケジューリングドメイン１５４、および保護モード仮想プロセッサ１５８Ｐを含む。スーパーバイザーモード１０３では、スーパーバイザーモード仮想プロセッサ１０８Ｓ、１４８Ｓ、および１５８Ｓが実行され、仮想プロセッサ１０８Ｐ、１４８Ｐ、および１５８Ｐにそれぞれ対応する。スーパーバイザーモード１０３は、同期レイヤ１４２も含む。
【００７１】
保護モードスケジューリングドメインにおける同期オペレーションは、スーパーバイザーモードが関与せずに、保護モードスケジューラによって処理される。例えば、外部の同期レイヤを参照することなく、保護モードスケジューリングドメイン１０４、１４４、または１５４における同期を処理することができる。一部の実施形態では、保護モードスケジューラ間の実行オブジェクトの同期も、スーパーバイザーモードの関与なしに実行される。例えば、保護モードスケジューリングドメイン１０４と保護モードスケジューリングドメイン１４４との間の同期を、プロセス１８２内の同期レイヤ１４１において処理することができる。
【００７２】
他の実施形態では、プロセス間の実行オブジェクトの同期も実行される。例えば、保護モードスケジューリングドメイン１０４および１４４のいずれかと保護モードスケジューリングドメイン１５４との間の同期を、スーパーバイザーモード１０３内の同期レイヤ１４２において処理することができる。
【００７３】
同期を容易にするために、チャネルイベントを使用することができる。チャネルイベントは、特定の保護モードスケジューリングドメインから２つの実行オブジェクトが参加するイベントである。例えば、プロセス１８１とプロセス１８２との間のチャネルでは、保護モードスケジューリングドメイン１４４からの実行オブジェクトと、保護モードスケジューリングドメイン１５４からの実行オブジェクトとが、プロセス間の通信をサポートするチャネルイベントに参加することができる。プロセス間のチャネルイベントを、スーパーバイザーモード１０３内の同期レイヤ１４２として実装することができる。チャネルイベントが信号で伝えられると、スーパーバイザーモード１０３はスーパーバイザーモード仮想プロセッサに通知し、それを受けてそのスーパーバイザーモード仮想プロセッサは、仮想割り込みを発生させて、保護モード仮想プロセッサ（例えば１４８または１５８）にそのイベントを通知する。
【００７４】
同様に、同じプロセス内の保護モードスケジューリングドメイン間で、同じオペレーションを行うことができる。例えば、保護モードスケジューリングドメイン１０４および保護モードスケジューリングドメイン１４４が、同期オペレーションを必要とすることがある。チャネルイベントを使用して、保護モードスケジューリングドメイン１０４と１４４との間で使用される潜在的に異なる実行オブジェクトのフォーマットを補償することができる。プロセス内チャネルイベントを、プロセス１８１内の同期レイヤ１４１として実装することができる。同期レイヤ１４１は、仮想プロセッサ（例えば１０８または１４８）内で、新たなイベントに関して通知される仮想割り込みを作成することができる。保護モードスケジューラは、自身の同期モデルのコンテキストでこのチャネルイベントを適用することができる。
【００７５】
スーパーバイザーモードスケジューリングインフラストラクチャは、保護モードスケジューリングドメインを作成するための適切な機能を保護モードに提供するために、様々な異なる方法で柔軟に実装され得る。図２Ａおよび図２Ｂは、保護モードスケジューリングドメインに機能を提供する、例示的なスーパーバイザーモードインフラストラクチャ２００および２５０を図示している。
【００７６】
図示のように、スーパーバイザーモードインフラストラクチャ２００は、ディスパッチャ２０１、デフォルトスケジューリングポリシー２０２、スーパーバイザーモード仮想プロセッサ２０３、スーパーバイザーモードスケジューリングポリシー２０４、同期２０５、実行オブジェクトストア２０６、およびチャネルイベント同期２０７を含む。図示するコンポーネントのそれぞれは、スーパーバイザー（例えばカーネル）モード２３１で動作している。スーパーバイザーモード２３１は、デフォルトの実行オブジェクト（例えばスレッド）を使用してオペレーションを実行することができる。
【００７７】
スーパーバイザーモードインフラストラクチャ２００は、専用予約を使用して、スーパーバイザーモード実行オブジェクト（例えばカーネルスレッド）を処理することができる。スーパーバイザーモードの実行オブジェクトストア２０６および同期２０５のオペレーションは、高速スーパーバイザーモードスケジューリングポリシー２０４に関連付けられている。一方、デフォルトスケジューリングポリシー２０２は、仮想プロセッサ２０３を割り当てて（例えばリソースの予約を行い）多重化するのに使用される。したがって、ディスパッチャ２０１は、デフォルトスケジューリングポリシー２０２を使用して、仮想プロセッサ２０３を割り当てて、これらの仮想プロセッサの間で多重化し、スーパーバイザーモードの実行オブジェクトストア２０６および同期２０５との通信を処理する。スーパーバイザーモードスケジューリングポリシー２０４を使用する。スーパーバイザーモードインフラストラクチャ２００内で、スーパーバイザーモード２３１およびデフォルトスケジューリングポリシー２０２を特に、それぞれのワークロードの特性に合わせて設計することができる。
【００７８】
図示のように、スーパーバイザーモードインフラストラクチャ２５０は、ディスパッチャ２０１、デフォルトスケジューリングポリシー２０２、スーパーバイザーモード仮想プロセッサ２０３、同期２０５、実行オブジェクトストア２０６、およびチャネルイベント同期２０７を含む。図示されるコンポーネントのそれぞれは、スーパーバイザー（例えばカーネル）モード２３１で動作している。スーパーバイザーモードインフラストラクチャ２５０は、スーパーバイザーモード実行オブジェクトと、デフォルトの予約に割り当てられる仮想プロセッサとの双方を処理するために、デフォルトスケジューリングポリシー２０２を使用する。
【００７９】
図３は、例示的なユーザモードスケジューリングアーキテクチャ３００を図示している。ユーザモードスケジューリングアーキテクチャ３００は、コンピュータキテクチャ１００内の様々なコンポーネントをどのように組み合わせて、ユーザモードスケジューリングを実行オブジェクトに提供することができるかの一例を示している。図示のように、ユーザモードスケジューラ３０４は、実行オブジェクトストア３０５、ポリシー状態３１６、アカウンティング３０９、ポリシーアルゴリズム３０７、および同期（ドメイン）３０８を含む。ユーザモードスケジュール３０４は、プロセッサリソースを、実行オブジェクト１８１または他の実行オブジェクトに割り当てることができる。同期（ドメイン）３０８は、ユーザモードスケジューラ３０４内で実行オブジェクト間の状態遷移を調整することができる。
【００８０】
ユーザ仮想プロセッサ３２１Ｕは、カーネルモード３０３からのカーネルモード通知を処理し、ユーザモードスケジューラ３０４内で実行オブジェクトをディスパッチするように構成される。ユーザ仮想プロセッサ３２１Ｕは、物理プロセッサ１０９の動作をシミュレートすることができる。ユーザ仮想プロセッサ３２１Ｕは、非同期イベントに関して２つの通知モデル、割り込みおよび完了ポートパラダイムのいずれかを使用することができる。コンテキスト切り替えは、スーパーバイザーモード１０３に対するいかなる呼び出しも必要とせず、ユーザモードディスパッチャ３１１内で行われる。ディスパッチャ３１１は、コンテンツを、実行可能なキューの最上部の実行オブジェクト（例えばＴｏＤｏｓ）に切り替えることができる。
【００８１】
通常、通知ハンドル３１２は、例えばタイマーやユーザモードスケジューラ３０４の外部の同期など、オペレーティングシステムによって生成される通知要求を処理する役割を担う。ユーザモードスケジューラ３０４は、プリエンプションまたはワークロードのためのタイマーを設定することができる。カーネルモード３０３は、このタイマーが終了するとき、仮想割り込みを発生させることができる。ユーザモードスケジューラ３０４外部の同期イベントが、仮想割り込みを発生させることもできる。非ブロッキング「ＡＢＩ」（アプリケーションバイナリインタフェース）をカーネルモード３０３で発行して、完了時に割り込みを発生させる。通知ハンドル３１２は、これらのタイプの割り込みのうちの任意のものを処理することができる。
【００８２】
割り込みベクトル３１４は、メモリアドレスまたはインデックスを、通知ハンドル３１２の割り込みベクトルテーブル内（メモリアドレスを含む）に記憶する。したがって、仮想割り込みを受け取ると、仮想プロセッサコントローラ３１３は割り込みベクトル３１４を参照して、その仮想割り込みに応答して適切なハンドラを実行することができる。
【００８３】
カーネルディスパッチャ３２３は、カーネル仮想プロセッサ３２１Ｋとカーネルスレッドとの間で、（例えば、スーパーバイザーモードアーキテクチャ２００および２５０にあるように）デフォルトスケジューリングポリシーに従って、またはデフォルトスケジューリングポリシーとカーネルスケジューリングポリシー３２４との組合せに従ってディスパッチすることができる。
【００８４】
チャネル同期（プロセス内）３１８は、ユーザモードスケジューラ３０４と、ユーザモードスケジューラ３０４と同じプロセス内の他のユーザモードスケジュールとの間で同期することができる。チャネル同期（プロセス間）３２８は、ユーザモードスケジューラ３０４と、別のプロセス内のユーザモードスケジュールとの間で同期することができる。
【００８５】
アカウンティング３０９およびシステムアカウント３２２は、相互に動作して、例えば物理プロセッサリソースの使用などのアカウンティング機能を管理する。
【００８６】
したがって、保護モード（例えばユーザモード）スケジューリングは、ワークロード固有の実行アブストラクションを使用することにより、ワークロードの要件をよりよく反映するプログラミングフレームワークを開発することを容易にすることができる。加えて、利用可能なハードウェアリソースの特性およびワークロードの要件に対してチューニングされたスケジューリングポリシーを定義する能力は、より優れたシステムスケーリング特性の可能性を有する。さらに、および前述した保護モードスケジューリングは、スケジューリング機能のかなりの部分をスーパーバイザーモード（例えばカーネルモード）からアプリケーションに移動させることにより、スケジューリングの責任を分散させる。
【００８７】
本発明は、その趣旨または本質的な特徴から逸脱することなく他の特定の形態で実施することができる。説明した諸実施形態は、あらゆる点で限定的でなく、単に例示的なものであるとみなわれるべきである。したがって本発明の範囲は、上記の説明ではなく、添付の特許請求の範囲によって示される。特許請求の範囲と等価の意味および範囲に含まれるすべての変更は、特許請求の範囲に包含されるべきである。
【図１Ａ】
2011526040.tif 000003
【図１Ｂ】
2011526040.tif 000004
【図１Ｃ】
2011526040.tif 000005
【図１Ｄ】
2011526040.tif 000006
【図１Ｅ】
2011526040.tif 000007
【図２Ａ】
2011526040.tif 000008
【図２Ｂ】
2011526040.tif 000009
【図３】
2011526040.tif 000010
【図４】
2011526040.tif 000011
【図５】
2011526040.tif 000012
【国際調査報告】
2011526040.tif 000013
2011526040.tif 000014
2011526040.tif 000015