(57)【要約】【課題】  実行するプロセスに特定の命令の組み込みを要することなく、スループットを向上させることができる情報処理装置等を提供する。【解決手段】  情報処理装置は、第１の方式によって実行中のプロセスから第２の方式への切り替え指示を受けた場合にはプロセスを第２の方式に関連付けられる第２の格納領域に格納し、第２の方式によって実行中のプロセスから第１の方式への切り替え指示を受けた場合にはプロセスを第１の方式に関連付けられる第１の格納領域に格納する方式切替手段と、第２の方式への切り替え指示をしたプロセスを中断すると共に第１の格納領域に格納されるプロセスを第１の方式によってスケジューリングする第１のスケジューラと、第１の方式への切り替え指示をしたプロセスを中断すると共に第２の格納領域に格納されるプロセスを第２の方式によってスケジューリングする第２のスケジューラとを備える。【選択図】      図１
2015141584.tif 000002
【特許請求の範囲】
【請求項１】
第１の方式によって実行中のプロセスから第２の方式への切り替え指示を受けた場合には当該プロセスを前記第２の方式に関連付けられる第２の格納領域に格納し、前記第２の方式によって実行中のプロセスから前記第１の方式への切り替え指示を受けた場合には当該プロセスを前記第１の方式に関連付けられる第１の格納領域に格納する方式切替手段と、
前記第２の方式への切り替え指示を行ったプロセスを中断すると共に、前記第１の格納領域に格納されるプロセスを前記第１の方式によってスケジューリングする第１のスケジューラと、
前記第１の方式への切り替え指示を行ったプロセスを中断すると共に、前記第２の格納領域に格納されるプロセスを前記第２の方式によってスケジューリングする第２のスケジューラと
を備えた情報処理装置。
【請求項２】
前記第２のスケジューラは、１または複数のプロセスを含むプロセスグループに対して定められた目標プロセッサ配分率に従って各プロセスグループが実行されるように、前記第２の格納領域に格納されるプロセスを入れ替える
請求項１記載の情報処理装置。
【請求項３】
前記第２のスケジューラは、前記入れ替え後のプロセスにプロセッサが割り当てられた場合の前記プロセスグループに関するプロセッサ配分率に基づいて、前記第１の方式によってスケジューリングされるプロセスを含む、前記プロセスグループに関するプロセッサ配分率を計算する
請求項２記載の情報処理装置。
【請求項４】
前記第１のスケジューラは、前記第１の方式によってスケジューリングしたプロセスを含む前記プロセスグループのプロセッサ使用率が、前記第２のスケジューラが計算したプロセッサ配分率と比較して、最も低いプロセスグループに含まれるプロセスに、プロセッサを割り当てる
請求項３記載の情報処理装置。
【請求項５】
前記第１のスケジューラまたは前記第２のスケジューラにより中断されたプロセスが実行可能となったことに応じて、当該プロセスを、それぞれ前記第１の格納領域または前記第２の格納領域に格納する再開手段
をさらに備えた請求項１ないし４のいずれか１項記載の情報処理装置。
【請求項６】
前記第１のスケジューラが前記プロセスを割り当て可能な第１のプロセッサと、
前記第２のスケジューラが前記プロセスを割り当て可能な第２のプロセッサと
をさらに備えた請求項１ないし５のいずれか１項記載の情報処理装置。
【請求項７】
前記第１の方式はプリエンプティブ方式であり、前記第２の方式はノンプリエンプティブ方式である
請求項１ないし６のいずれか１項記載の情報処理装置。
【請求項８】
コンピュータによって、
第１の方式によって実行中のプロセスから第２の方式への切り替え指示を受けた場合には当該プロセスを前記第２の方式に関連付けられる第２の格納領域に格納し、前記第２の方式によって実行中のプロセスから前記第１の方式への切り替え指示を受けた場合には当該プロセスを前記第１の方式に関連付けられる第１の格納領域に格納し、
前記第２の方式への切り替え指示を行ったプロセスを中断すると共に、前記第１の格納領域に格納されるプロセスを前記第１の方式によってスケジューリングし、
前記第１の方式への切り替え指示を行ったプロセスを中断すると共に、前記第２の格納領域に格納されるプロセスを前記第２の方式によってスケジューリングする
を備えた情報処理方法。
【請求項９】
第１の方式によって実行中のプロセスから第２の方式への切り替え指示を受けた場合には当該プロセスを前記第２の方式に関連付けられる第２の格納領域に格納し、前記第２の方式によって実行中のプロセスから前記第１の方式への切り替え指示を受けた場合には当該プロセスを前記第１の方式に関連付けられる第１の格納領域に格納する処理と、
前記第２の方式への切り替え指示を行ったプロセスを中断すると共に、前記第１の格納領域に格納されるプロセスを前記第１の方式によってスケジューリングする処理と、
前記第１の方式への切り替え指示を行ったプロセスを中断すると共に、前記第２の格納領域に格納されるプロセスを前記第２の方式によってスケジューリングする処理と
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサにおけるスケジューリング技術に関する。
【背景技術】
【０００２】
一台のコンピュータで同時に複数の処理を実行するマルチタスク処理を実現するマルチプロセッサがある。マルチプロセッサによるマルチタスク処理の実現方法として、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）がＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の割り当てを管理するプリエンプティブマルチタスク方式と、ＯＳがＣＰＵを管理しないノンプリエンプティブマルチタスク方式がある。
【０００３】
一般に、マルチプロセッサにより複数の処理を含むアプリケーションプログラムを実行する場合、プリエンプティブマルチタスク方式またはノンプリエンプティブマルチタスク方式のいずれか一方によりアプリケーションプログラムを実行する。つまり、プリエンプティブマルチタスク方式を実現するプリエンプティブスケジューラ、またはノンプリエンプティブマルチタスク方式を実現するノンプリエンプティブスケジューラのいずれか一方を、スケジューラとして動作させている。
【０００４】
このため、係る一般的なマルチタスク方式では、１つのアプリケーションプログラムの中に、プリエンプティブの動作に適した処理とノンプリエンプティブの動作に適した処理とが混在する場合でも、プリエンプティブスケジューラまたはノンプリエンプティブスケジューラのいずれか一方で動作させている。例えば、特許文献１は、マルチプロセッサとノンプリエンプティブＯＳとで構成されたリアルタイムシステムを開示する。
【０００５】
ここで、プリエンプティブの動作に適した処理とノンプリエンプティブの動作に適した処理とが混在するアプリケーションプログラムを、プリエンプティブスケジューラで動作させることを考える。ノンプリエンプティブの動作に適した処理として、例えば排他処理が含まれるとする。このアプリケーションプログラムがプリエンプティブスケジューラで動作されると、上記排他処理の実行中にプリエンプションが発生しうる。排他処理の実行中にプリエンプションが発生すると、排他時間が長くなると共に、排他解除待ちの他プロセスの待ち時間も長くなるため、ロックネックを引き起こす。
【０００６】
そこで、当該アプリケーションプログラムをノンプリエンプティブスケジューラで動作させることを考える。この場合、プリエンプションが発生しないため、プリエンプティブスケジューラで動作させる場合よりも排他時間を短縮できる。また、排他処理はその実行中にプロセッサのキャッシュを占有することができる。したがって、キャッシュヒット率を向上することができるので、排他時間をさらに短縮することができる。
【０００７】
一方で、このように当該アプリケーションプログラムをノンプリエンプティブスケジューラで動作させる場合、プリエンプティブの動作に適した処理に、自発的にＣＰＵを解放する処理を実行する命令を組み込む等の配慮が必要となる。
【０００８】
特許文献１は、プロセッサの利用効率の低下を抑え、かつリアルタイム処理を迅速に実行することのできるマルチプロセッサによりリアルタイム処理を実行する情報処理装置およびスケジューリング方法を開示する。この情報処理装置では、第一のプロセッサで、リアルタイム性が高くかつ優先順位が高い第一の処理と、リアルタイム性が低くかつ優先順位が低い第二の処理を実行し、第二のプロセッサで、リアルタイム性が低くかつ優先順位が高い第三の処理を実行する。これにより、当該情報処理装置は、第一の処理のリアルタイム性を確保している。
【０００９】
第一の処理、第二の処理、および第三の処理は、それぞれ別々のプロセッサで実行され、また第一のプロセッサで実行するか、第二のプロセッサで実行するかはあらかじめシステムが定めている。
【００１０】
また、特許文献２は、スレッドがプリエンプト化可能なスレッドまたはプリエンプト不可能なスレッドのいずれであるかを示すステップを含むスレッドの実行方法を開示する。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００７−１９３７４４号公報
【特許文献２】特開２００４−２８８１６２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
上述のように、マルチプロセッサでは、一般に、プリエンプティブスケジューラまたはノンプリエンプティブスケジューラのいずれか一方でアプリケーションプログラムを動作させている。例えばプリエンプティブスケジューラで動作させる場合、ノンプリエンプティブの動作に適した排他処理の実行中にプリエンプションが発生し、ロックネックが引き起こされるので、システム全体のスループットが低下するという課題がある。一方、ノンプリエンプティブスケジューラで動作させる場合、プリエンプティブの動作に適した処理に、自発的にＣＰＵを解放する処理を実行する命令を組み込む等が必要になるという課題がある。
【００１３】
特許文献１に開示されるスケジュール方法は、リアルタイム性の高い処理とリアルタイム性の低い処理が混合しているようなプロセスには、有効ではない。また、第一の処理においても優先順位に差がある場合には、優先順位の低い方のプロセスは割り込まれる可能性があり、完全にノンプリエンプティブで動作するわけではなく、リアルタイム性は保証できない。
【００１４】
特許文献２には、プリエンプティブの動作に適した処理とノンプリエンプティブの動作に適した処理とが混在するアプリケーションプログラムを、ロックネックを引き起こすことなく実行する技術は開示されていない。
【００１５】
本願発明は、上記課題を鑑みてなされたものであり、実行するプロセスに特定の命令の組み込みを要することなく、スループットを向上させることができる情報処理装置等を提供することを主要な目的とする。
【課題を解決するための手段】
【００１６】
本発明の第１の情報処理装置は、第１の方式によって実行中のプロセスから第２の方式への切り替え指示を受けた場合には当該プロセスを前記第２の方式に関連付けられる第２の格納領域に格納し、前記第２の方式によって実行中のプロセスから前記第１の方式への切り替え指示を受けた場合には当該プロセスを前記第１の方式に関連付けられる第１の格納領域に格納する方式切替手段と、前記第２の方式への切り替え指示を行ったプロセスを中断すると共に、前記第１の格納領域に格納されるプロセスを前記第１の方式によってスケジューリングする第１のスケジューラと、前記第１の方式への切り替え指示を行ったプロセスを中断すると共に、前記第２の格納領域に格納されるプロセスを前記第２の方式によってスケジューリングする第２のスケジューラとを備える。
【００１７】
本発明の第１の情報処理方法は、コンピュータによって、第１の方式によって実行中のプロセスから第２の方式への切り替え指示を受けた場合には当該プロセスを前記第２の方式に関連付けられる第２の格納領域に格納し、前記第２の方式によって実行中のプロセスから前記第１の方式への切り替え指示を受けた場合には当該プロセスを前記第１の方式に関連付けられる第１の格納領域に格納し、前記第２の方式への切り替え指示を行ったプロセスを中断すると共に、前記第１の格納領域に格納されるプロセスを前記第１の方式によってスケジューリングし、前記第１の方式への切り替え指示を行ったプロセスを中断すると共に、前記第２の格納領域に格納されるプロセスを前記第２の方式によってスケジューリングする。
【００１８】
なお同目的は、上記の各構成を有する情報処理装置または情報処理方法を、コンピュータによって実現するコンピュータ・プログラム、およびそのコンピュータ・プログラムが格納されている、コンピュータ読み取り可能な記憶媒体によっても達成される。
【発明の効果】
【００１９】
本願発明によれば、実行するプロセスに特定の命令の組み込みを要することなく、スループットを向上させることができるという効果が得られる。
【図面の簡単な説明】
【００２０】
【図１】本発明の第１の実施形態に係る情報処理装置の構成の概要を示す図である。
【図２】本発明の第１の実施形態に係る情報処理装置が備えるプロセス開始部の動作を説明するフローチャートである。
【図３】本発明の第１の実施形態に係る情報処理装置が備えるプリエンプションキューにおけるエントリに設定される情報の一例を示す図である。
【図４】本発明の第１の実施形態に係る情報処理装置が備えるノンプリエンプションキューにおけるエントリに設定される情報の一例を示す図である。
【図５】本発明の第１の実施形態に係る情報処理装置が備えるプロセス管理テーブルの一例を示す図である。
【図６】本発明の第１の実施形態に係る情報処理装置が備えるノンプリエンプション設定部の動作を説明するフローチャートである。
【図７】本発明の第１の実施形態に係る情報処理装置が備えるプリエンプション設定部の動作を説明するフローチャートである。
【図８】本発明の第１の実施形態に係る情報処理装置が備えるプロセス再開部の動作を説明するフローチャートである。
【図９】本発明の第１の実施形態に係る情報処理装置が備えるプリエンプティブスケジュール部の動作を説明するフローチャートである。
【図１０】本発明の第１の実施形態に係る情報処理装置が備えるＣＰＵリソース管理情報格納領域に格納されるＣＰＵリソース管理情報の一例を示す図である。
【図１１】本発明の第１の実施形態に係る情報処理装置が備えるノンプリエンプティブスケジュール部に含まれるＣＰＵリソース調整プロセスの動作を示すフローチャートである。
【図１２】本発明の第１の実施形態に係る情報処理装置が備えるノンプリエンプションキューの一例を示す図である。
【図１３】本発明の第１の実施形態に係る情報処理装置が備えるＣＰＵリソース管理情報格納領域に格納されるＣＰＵリソース管理情報の一例を示す図である。
【図１４】本発明の第１の実施形態に係る情報処理装置が備えるノンプリエンプティブスケジュール部に含まれるディスパッチプロセスの動作を示すフローチャートである。
【図１５】本発明の第２の実施形態に係る情報処理装置の構成の概要を示す図である。
【図１６】本発明の各実施形態に係る情報処理装置のハードウエア構成を例示する図である。
【発明を実施するための形態】
【００２１】
以下、本発明の実施形態について図面を参照して詳細に説明する。
【００２２】
第１の実施形態
図１は、本発明の第１の実施形態に係る情報処理装置１００の構成を示すブロック図である。図１に示すように、情報処理装置１００は、プロセス開始部１０１、ノンプリエンプション設定部１０２、プリエンプション設定部１０３、プロセス再開部１０４、プロセススケジューラ１０５、プロセス管理テーブル格納領域１０６、プリエンプションキュー１１０、プリエンプティブスケジューラ１２０、ノンプリエンプションキュー１３０、ノンプリエンプティブスケジューラ１４０、ＣＰＵリソース管理情報格納領域１５０、ＯＳ２１０、ＣＰＵ２２０を備える。
【００２３】
情報処理装置１００では、ＯＳ２１０が全体的な動作の制御や、アプリケーションプログラムの実行管理等を行う。情報処理装置１００は、複数の処理にＣＰＵ２２０を割り当てることにより同時に実行するマルチタスク処理を実現する。
【００２４】
情報処理装置１００は、所定の業務を実現する１または複数のアプリケーションプログラム（以降、単に「プログラム」と称する）を実行する。ここで、プログラムを実行するための１または複数のプロセスの集まりで、情報処理装置１００におけるＣＰＵリソースを配分する単位を、「プロセスグループ」と称する。
【００２５】
プロセスグループには、実行の際にプリエンプティブの動作に適したプロセスと、ノンプリエンプティブの動作に適したプロセスとが混在する場合がある。本実施形態に係る情報処理装置１００では、このようなプリエンプティブの動作に適したプロセスとノンプリエンプティブの動作に適したプロセスとが混在するプロセスグループ（プログラム）を実行することを説明する。
【００２６】
情報処理装置１００の各構成要素の動作の概要について説明する。
【００２７】
プロセス開始部１０１は、プログラムの実行を指示するコマンドを受けると、当該プログラムに含まれる各プロセスを動作させるスケジューラに対応付けられたキュー（プリエンプションキュー１１０またはノンプリエンプションキュー１３０）に、各プロセスをキューイングする。
【００２８】
プリエンプションキュー１１０は、プリエンプティブで動作中のプロセスで、かつ、実行可能状態のプロセスがキューイングされる格納領域である。キューイングの順番は、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）であっても、優先順位順であってもよい。
【００２９】
ノンプリエンプションキュー１３０は、ノンプリエンプティブで動作中のプロセスで、かつ、実行可能状態のプロセスがキューイングされる格納領域である。
【００３０】
プリエンプティブスケジューラ１２０は、プリエンプティブスケジュール部１２１を備え、プリエンプションキュー１１０に格納されるプロセスを、プリエンプティブで動作するようにスケジューリングする。
【００３１】
ノンプリエンプティブスケジューラ１４０は、ノンプリエンプティブスケジュール部１４１を備え、ノンプリエンプションキュー１３０に格納されるプロセスを、ノンプリエンプティブで動作するようにスケジューリングする。
【００３２】
ノンプリエンプション設定部１０２は、プリエンプティブで動作中のプロセスまたはＯＳ２１０から、ノンプリエンプション設定要求を受けると、当該要求したプロセスをノンプリエンプションキュー１３０にキューイングする。
【００３３】
プリエンプション設定部１０３は、ノンプリエンプティブで動作中のプロセスまたはＯＳ２１０から、プリエンプション設定要求を受けると、当該要求したプロセスをプリエンプションキュー１１０にキューイングする。
【００３４】
プロセススケジューラ１０５は、各プロセスの実行状態を管理する。例えば、プロセススケジューラ１０５は、実行中のプロセスがファイルの入出力状態に移行したこと等を検出すると共に、当該プロセスの実行状態に関する情報をプロセス管理テーブルに格納する（詳細は後述する）。
【００３５】
プロセス再開部１０４は、プロセススケジューラ１０５からの呼び出しに応じて、実行待ち等により中断されていたプロセスの再開を管理する。
【００３６】
ＣＰＵリソース管理情報格納領域１５０は、ＣＰＵリソース管理情報の格納領域である（詳細は後述する）。
【００３７】
次に、情報処理装置１００の各構成要素の動作の詳細について説明する。
【００３８】
情報処理装置１００は、プログラムの実行を指示するコマンドに応じて当該プログラムの実行を開始する。コマンドには、開始するプログラムを構成する１または複数のプロセスについて、プロセス番号、プロセスグループ番号、各プロセスを動作させるスケジューラの種類（プリエンプティブスケジューラ１２０またはノンプリエンプティブスケジューラ１４０）等が含まれる。ここで、各プロセスは、一連の動作を行う１または複数の処理（命令群）、例えば排他処理を含む。
【００３９】
図２は、プロセス開始部１０１の動作を説明するフローチャートである。図２に示すように、プロセス開始部１０１は、動作させるスケジューラの種類に応じて、プロセスをキューイングする（ステップＳＴ３０１）。
【００４０】
すなわち、プリエンプティブスケジューラで動作させる（プリエンプションが指定される）、プロセス開始部１０１は、プリエンプションキュー１１０における未使用エントリに、開始するプロセスに関するプロセス番号、プロセスグループ番号を設定すると共に、使用エントリにそのプロセスをキューイングする（ステップＳＴ３０２）。キューイングする領域は、エントリの最後尾でもよいし、プロセスが優先順位順に実行される順となる領域でもよい。
【００４１】
図３は、プリエンプションキュー１１０における各エントリに設定される情報の一例を示す図である。図３に示すように、プリエンプションキュー１１０の各エントリには、プロセス番号、プロセスグループ番号が設定される。
【００４２】
一方、ノンプリエンプティブスケジューラで動作させる（ノンプリエンプションが指定される）場合、プロセス開始部１０１は、開始するプロセスに含まれる予測処理時間を取得する（ステップＳＴ３０３）。プロセス開始部１０１は、ノンプリエンプションキュー１３０における未使用エントリに、開始するプロセスに関するプロセス番号、プロセスグループ番号、予測処理時間を設定すると共に、使用エントリの最後尾にそのプロセスをキューイングする（ステップＳＴ３０４）。
【００４３】
図４は、ノンプリエンプションキュー１３０における各エントリに設定される情報の一例を示す図である。図４に示すように、ノンプリエンプションキュー１３０の各エントリには、プロセス番号、プロセスグループ番号および予測処理時間が設定される。
【００４４】
そして、プロセス開始部１０１は、各プロセスに関する情報をプロセス管理テーブル格納領域１０６に格納されるプロセス管理テーブルに書き込む。図５は、プロセス管理テーブルの一例を示す図である。図５に示すように、プロセス管理テーブルは、例えばプロセス番号、スケジューラの種類および実行状態を含む。スケジューラの種類は、そのプロセスがプリエンプティブスケジューラで動作するかノンプリエンプティブスケジューラで動作するかを示す情報を含む。実行状態は、実行中、中断、終了等、そのプロセスの実行状態を示す情報を含む。
【００４５】
プリエンプティブスケジューラ１２０は、プリエンプションキュー１１０にキューイングされたプロセスに、自スケジューラが割り当て可能なＣＰＵをプリエンプティブで割り当てる（詳細は後述する）。プロセスは、割り当てられたＣＰＵにより実行される。ＣＰＵの割り当て方法は、本実施形態では、プロセスグループに対してＣＰＵリソースを配分する方法を説明するが、ＦＩＦＯ方法であっても、優先順位が高いプロセスから実行する方法であっても、タイムシェアリングで実行する方法であってもよい。
【００４６】
同様に、ノンプリエンプティブスケジューラ１４０は、ノンプリエンプションキュー１３０にキューイングされたプロセスに、自スケジューラが割り当て可能なＣＰＵをノンプリエンプティブで割り当る（詳細は後述する）。プロセスは、割り当てられたＣＰＵにより実行される。ＣＰＵの割り当て方法は、本実施形態では、プロセスグループに対してＣＰＵリソースを配分する方法について説明するが、ＦＩＦＯ方法であっても、優先順位が高いプロセスから実行する方法であってもよい。
【００４７】
次に、例えばプリエンプティブで実行中のプロセス番号１Ａであるプロセス（以降、「プロセス１Ａ」と称する）に、ノンプリエンプティブの動作に適した処理（例えば排他処理）が含まれていた場合の動作について説明する。この場合、プロセス１Ａからノンプリエンプション設定要求が生じる。
【００４８】
ここで、ＯＳ２１０は、方式をプリエンプションからノンプリエンプションに切り替えるシステムコール（関数）、およびノンプリエンプションからプリエンプションに切り替えるシステムコールを予め備え、必要なタイミングで該当システムコールが呼び出されることにより方式を切り替える。システムコールを呼び出す命令は、プロセスを構成するプログラムコードに記述されていてもよい。
【００４９】
図６は、ノンプリエンプション設定部１０２の動作を示すフローチャートである。上述のようにノンプリエンプション設定要求が生じると、ノンプリエンプション設定部１０２は、ノンプリエンプション設定要求をしたプロセス１Ａから、ノンプリエンプションの処理にかかる時間（予測処理時間）を取得する（ステップＳＴ３１０）。
【００５０】
ノンプリエンプション設定部１０２は、ノンプリエンプションキュー１３０の未使用エントリに、ノンプリエンプション設定要求をしたプロセス１Ａのプロセス番号、プロセスグループ番号、および取得した予測処理時間を設定すると共に、使用エントリの最後尾にプロセス１Ａをキューイングする（ステップＳＴ３１１）。
【００５１】
そして、ノンプリエンプション設定部１０２は、プロセス１Ａの実行の中断を、当該プロセス１ＡにＣＰＵを割り当てているプリエンプティブスケジューラ１２０に通知する（ステップＳＴ３１２）。当該通知に応じて、プリエンプティブスケジューラ１２０はプロセス１Ａの実行を中断する。
【００５２】
ここで、プロセスが実行または中断等されると、プロセススケジューラ１０５はそれを検出すると共に、プロセスの実行状態等をプロセス管理テーブルに書き込む。ここでは、例えば、図５に示すように、プロセススケジューラ１０５は、プリエンプションで実行中のプロセス１Ａがノンプリエンプションで実行中になったことを書き込む。
【００５３】
なお、ノンプリエンプション設定部１０２は、プロセスに明示的に記述される設定要求に応じて動作してもよいし、排他処理に含まれるロック命令の実行を契機に動作してもよい。
【００５４】
次に、ノンプリエンプティブで実行中のプロセス番号２Ａであるプロセス（以降、「プロセス２Ａ」と称する）に、プリエンプティブの動作に適した処理が含まれていた場合について説明する。この場合、プロセス２Ａからプリエンプション設定要求が生じる。
【００５５】
図７は、プリエンプション設定部１０３の動作を示すフローチャートである。プリエンプション設定要求が生じると、プリエンプション設定部１０３は、プリエンプションキュー１１０の未使用エントリに、プリエンプション設定要求をしたプロセス２Ａに関するプロセス番号、プロセスグループ番号を設定すると共に、プロセス２Ａを使用エントリにキューイングする（ステップＳＴ３２０）。キューイングする領域は、エントリの最後尾でもよいし、プロセスが優先順位順に実行される順となる領域でもよい。
【００５６】
そして、プリエンプション設定部１０３は、プロセス２Ａの実行の中断を、当該プロセス２ＡにＣＰＵを割り当てているノンプリエンプティブスケジューラ１４０に通知する（ステップＳＴ３２１）。当該通知に応じて、ノンプリエンプティブスケジューラ１４０はプロセス２Ａの実行を中断する。
【００５７】
上述のように、プロセスが実行または中断等されると、プロセススケジューラ１０５はそれを検出すると共に、プロセスの実行状態等をプロセス管理テーブルに書き込む。
【００５８】
なお、プリエンプション設定部１０３は、プロセスに明示的に記述される設定要求に応じて動作してもよいし、排他処理に含まれるアンロック命令の実行を契機に動作してもよい。
【００５９】
このように、実行中のプロセスに、当該プロセスを動作させるスケジューラとは異なるスケジューラでの動作に適した処理が含まれると、ノンプリエンプション設定部１０２またはプリエンプション設定部１０３が動作する。そして、ノンプリエンプション設定部１０２またはプリエンプション設定部１０３は、当該プロセスを、それぞれノンプリエンプションキュー１３０またはプリエンプションキュー１１０にキューイングすると共に、当該プロセスを中断する。
【００６０】
図８は、プロセス再開部１０４の動作を示すフローチャートである。プロセススケジューラ１０５は、ファイルの入出力が完了した場合など、プロセスが中断から実行状態へ遷移する場合、それを検出すると共にプロセス再開部１０４を呼び出す。
【００６１】
プロセス再開部１０４は、プロセススケジューラ１０５からの呼び出しに応じてプロセス管理テーブルを参照し、当該プロセスが中断された際に動作させていたスケジューラの種類に応じて、プロセスをキューイングする（ステップＳＴ３３０）。すなわち、プロセス管理テーブルに格納される実行方式がプリエンプションである場合、プロセス再開部１０４は、プリエンプションキュー１１０の未使用エントリに当該プロセスに関するプロセス番号、プロセスグループ番号を設定すると共に、使用エントリにキューイングする（ステップＳＴ３３１）。キューイングする領域は、エントリの最後尾でもよいし、プロセスが優先順位順に実行される順となる領域でもよい。
【００６２】
一方、プロセス管理テーブルに格納される実行方式がノンプリエンプションである場合、プロセス再開部１０４は、当該プロセスに関してノンプリエンプション設定部１０２が取得した予測処理時間から、プロセス再開までにＣＰＵを消費した時間を減算する（ステップＳＴ３３２）。
【００６３】
プロセス再開部１０４は、ノンプリエンプションキュー１３０の未使用エントリに、再開するプロセスのプロセス番号、プロセスグループ番号、および予測処理時間を設定すると共に、使用エントリの最後尾にキューイングする（ステップＳＴ３３３）。
【００６４】
図９は、プリエンプティブスケジュール部１２１の動作を示すフローチャートである。図９を参照して、プリエンプティブスケジュール部１２１の動作について説明する。プリエンプティブスケジュール部１２１は、ＯＳ２１０実行中常に動作しており、プリエンプションキュー１１０にキューイングされたプロセスにＣＰＵリソースを割り当てる。ＣＰＵリソースの割り当てに際して、プリエンプティブスケジュール部１２１は、各プロセスグループに予め設定された、ＣＰＵリソースに対する目標実行比率で各プロセスグループが実行されるように、各プロセスにＣＰＵを割り当てる。
【００６５】
プリエンプティブスケジュール部１２１は、まず、ＣＰＵリソース管理情報格納領域１５０から、プリエンプションのスケジューリング配分率を取得する（ステップＳＴ３４０）。
【００６６】
図１０は、ＣＰＵリソース管理情報格納領域１５０に格納されるＣＰＵリソース管理情報を示す図である。図１０に示すように、ＣＰＵリソース管理情報は、ユーザが設定した、ＣＰＵリソースを配分するプロセスグループ毎の、ＣＰＵの目標実行比率と、ノンプリエンプションまたはプリエンプションのスケジューリング配分率とを含む。プリエンプティブスケジュール部１２１は、プロセスグループ１、プロセスグループ２、プロセスグループ３のプリエンプションのスケジューリング配分率として、それぞれ４０％、２０％、４０％を取得する。
【００６７】
プリエンプティブスケジュール部１２１は、ステップＳＴ３４０を実行してから次にステップＳＴ３４０を実行するまでの所定時間（以降、「シェアインターバル」と称する）内での各プロセスグループに関するＣＰＵ使用率を算出する。プリエンプティブスケジュール部１２１は、算出したＣＰＵ使用率が、上記取得したスケジューリング配分率に比べて最も小さいプロセスグループに含まれるプロセスを、プリエンプションキュー１１０からデキューする（ステップＳＴ３４１）。
【００６８】
例えば、プロセスグループ１、プロセスグループ２、プロセスグループ３のＣＰＵ使用率が、それぞれ３７％、２０％、３８％であった場合、プロセスグループ１が、上記取得したスケジューリング配分率に比べて最も小さいプロセスグループである。プリエンプティブスケジュール部１２１は、プロセスグループ１に含まれる、例えばプロセス番号１Ｆであるプロセス（以降、「プロセス１Ｆ」と称する）を、プリエンプションキュー１１０からデキューする。
【００６９】
プリエンプティブスケジュール部１２１は、ステップＳＴ３４１においてデキューしたプロセス（本実施形態では、プロセス番号１Ｆ）に、一定時間ＣＰＵを割り当てる（ステップＳＴ３４２）。割り当てられたＣＰＵにてプロセス１Ｆが実行される。
【００７０】
プロセス１Ｆの実行が、上記一定時間の最後まで実施された場合、すなわちプロセス１Ｆの実行は中断も終了もしなかった場合（ステップＳＴ３４３においてＮＯ）、プリエンプティブスケジュール部１２１は、ＣＰＵを割り当てたプロセス１Ｆを再びプリエンプションキュー１１０にエンキューする（ステップＳＴ３４４）。ここで、プロセスの実行の中断とは、ノンプリエンプション設定部１０２が動作した場合、すなわち当該プロセスからノンプリエンプティブ設定要求が生じた場合や、プロセスがファイル入出力などで待ち状態に遷移した場合を意味する。そして、ステップＳＴ３４０の実行からシェアインターバルの時間が経過している場合（ステップＳＴ３４５においてＹＥＳ）、プリエンプティブスケジュール部１２１は、処理をステップＳＴ３４０に戻す。
【００７１】
一方、上記一定時間の最後まで実施されなかった場合、すなわちプロセス１Ｆの実行が中断または終了した場合（ステップＳＴ３４３においてＹＥＳ）、かつステップＳＴ３４０の実行からシェアインターバルの時間が経過している場合（ステップＳＴ３４５においてＹＥＳ）、プリエンプティブスケジュール部１２１は、処理をステップＳＴ３４０に戻す。一方、ステップＳＴ３４０の実行からシェアインターバルの時間が経過していない場合（ステップＳＴ３４３においてＮＯ）、プリエンプティブスケジュール部１２１は、処理をステップＳＴ３４１に戻す。以上の動作により、プリエンプティブスケジューラ１２０は、プリエンプションのプロセスにＣＰＵを割り当てる。
【００７２】
なお、プリエンプティブスケジューラ１２０がプロセスを割り当て可能なＣＰＵが２台以上存在する場合、上記プリエンプティブスケジュール部１２１をＣＰＵ毎に実行させればよい。
【００７３】
図１１は、ノンプリエンプティブスケジュール部１４１に含まれるＣＰＵリソース調整プロセス１４１ａの動作を示すフローチャートである。ここで、ノンプリエンプティブスケジュール部１４１は、ＣＰＵリソース調整プロセス１４１ａとディスパッチプロセス１４１ｂとから構成される。ＣＰＵリソース調整プロセス１４１ａは、ＯＳ２１０実行中常に動作しており、ＣＰＵリソースの管理のための監視プロセスである。図１１を参照して、ＣＰＵリソース調整プロセス１４１ａの動作について説明する。
【００７４】
ＣＰＵリソース調整プロセス１４１ａは、ＣＰＵリソース管理情報（図１０）から、目標実行比率を取得する（ステップＳＴ３５０）。ＣＰＵリソース調整プロセス１４１ａは、プロセスグループ１、プロセスグループ２、プロセスグループ３の目標実行比率として、それぞれ４０％、２０％、４０％を取得する。
【００７５】
ＣＰＵリソース調整プロセス１４１ａは、ノンプリエンプションキュー１３０に格納されるプロセスグループ番号および予測処理時間をもとに、目標実行比率に近づくようにノンプリエンプションキュー１３０を入れ替える（ステップＳＴ３５１）。図１２は、図４に示したノンプリエンプションキュー１３０を、ＣＰＵリソースが目標実行比率に近づくように入れ替えた後の状態を示す図である。例えば、図４においてプロセスグループ番号３に含まれるプロセスは後方にキューイングされているが、キュー入れ替え後の図１２では、プロセスグループ番号３のプロセスは前方に移されている。
【００７６】
ＣＰＵリソース調整プロセス１４１ａは、ノンプリエンプションキュー１３０が目標実行比率に近づくまでの時間（以降、この時間を「調整インターバル」と称する）と、調整インターバルにおけるＣＰＵ配分比率を計算する（ステップＳＴ３５２）。
【００７７】
図１２に示す例では、ノンプリエンプションキュー１３０の１番目から５番目までを実行したときのプロセスグループ１、プロセスグループ２、プロセスグループ３の予測処理時間は、それぞれ２２（ｍｓ：ミリ秒）、１０（ｍｓ）、２２（ｍｓ）である。このときのＣＰＵ配分比率は、それぞれ４１％、１８％、４１％であり、最も目標実行比率に近い。このときの調整インターバルは、５４（＝２２＋１０＋２２）（ｍｓ）である。
【００７８】
続いてＣＰＵリソース調整プロセス１４１ａは、ステップＳＴ３５２において計算したＣＰＵ配分比率をもとに、情報処理装置１００全体のＣＰＵ使用率が目標実行比率となるように、プリエンプティブスケジューラ１２０のスケジューリング配分率を計算する（ステップＳＴ３５３）。
【００７９】
本実施形態では、プロセスグループ１、プロセスグループ２、プロセスグループ３に関するノンプリエンプティブスケジューラ１４０のＣＰＵ配分比率は、ステップＳＴ３５２にて計算したように、それぞれ４１％、１８％、４１％である。また本実施形態では、ノンプリエンプティブスケジューラ１４０により実行するＣＰＵが１台（ＣＰＵ１１）、プリエンプティブスケジューラ１２０により実行するＣＰＵが１０台（ＣＰＵ１乃至１０）である。
【００８０】
したがって、プロセスグループ１、プロセスグループ２、プロセスグループ３のプリエンプティブスケジューラ１２０のＣＰＵ配分比率は、それぞれ３９．９％（＝４０−（１／１０））、２０．２％（＝２０＋（２／１０））、３９．９％（＝４０−（１／１０））となる。
【００８１】
ＣＰＵリソース調整プロセス１４１ａは、ステップＳＴ３５２において計算されたノンプリエンプティブスケジューラ１４０のＣＰＵ配分比率、およびステップＳＴ３５３において計算されたプリエンプティブスケジューラ１２０のＣＰＵ配分比率を、ＣＰＵリソース管理情報格納領域１５０に設定する（ステップＳＴ３５４）。
【００８２】
本実施形態では、図１３に示すように、プロセスグループ１、プロセスグループ２、プロセスグループ３に関するノンプリエンプションのスケジューリング配分率に、それぞれ４１％、１８％、４１％が設定され、プリエンプションのスケジューリング配分率に、それぞれ３９．９％、２０．２％、３９．９％が設定される。
【００８３】
ＣＰＵリソース調整プロセス１４１ａは、ステップＳＴ３５２において計算した調整インターバル（本実施形態では、調整インターバルは５４（ｍｓ））の経過後に、処理をステップＳＴ３５０に戻す（ステップＳＴ３５５）。以上の動作により、ＣＰＵリソース調整プロセス１４１ａは、ＣＰＵリソースの管理を行う。
【００８４】
図１４は、ノンプリエンプティブスケジュール部１４１に含まれるディスパッチプロセス１４１ｂの動作を示すフローチャートである。図１４を参照して、ノンプリエンプティブスケジュール部１４１の動作について説明する。ディスパッチプロセス１４１ｂは、ＯＳ２１０実行中常に動作しており、ノンプリエンプディブで動作するプロセスを実行する。
【００８５】
ディスパッチプロセス１４１ｂは、ノンプリエンプティブキュー１３０に格納される先頭プロセスをデキューする（ステップＳＴ３６０）。続いてディスパッチプロセス１４１ｂは、デキューしたプロセスにＣＰＵを割り当てる（ステップＳＴ３６１）。割り当てられたＣＰＵにてプロセスが実行される。実行が中断または終了したら、ディスパッチプロセス１４１ｂは、処理をステップＳＴ３６０に戻す。なお、プロセスの実行の中断とは、プリエンプション設定部１０３が動作した場合、すなわち当該プロセスからプリエンプティブ設定要求が生じた場合や、プロセスがファイル入出力などで待ち状態に遷移した場合を意味する。
【００８６】
本実施形態では、ノンプリエンプティブスケジューラ１４０がプロセスを割り当て可能なＣＰＵは１台（ＣＰＵ１１）であるが、２台以上存在してもよい。この場合、上記ノンプリエンプティブスケジュール部１４１をＣＰＵ毎に実行させればよい。
【００８７】
また、ＣＰＵの負荷状況に応じて、プリエンプティブスケジューラ１２０がプロセスを割り当て可能なＣＰＵを、ノンプリエンプティブスケジューラ１４０がプロセスを割り当て可能なＣＰＵに変更してもよい。あるいは、ノンプリエンプティブスケジューラ１４０がプロセスを割り当て可能なＣＰＵを、プリエンプティブスケジューラ１２０がプロセスを割り当て可能なＣＰＵに変更してもよい。この場合、変更後のＣＰＵ構成にあわせて、プリエンプティブスケジューラ１２０およびノンプリエンプティブスケジューラ１４０を、ＣＰＵ毎に実行させればよい。
【００８８】
以上のように、本実施形態によれば、実行中のプロセスから、ノンプリエンプティブスケジューラ１４０とプリエンプティブスケジューラ１２０の切り替えを指示することができる。すなわち、プリエンプティブで動作するプロセスから、ノンプリエンプティブの動作に適した排他処理等をノンプリエンプティブで動作させることができる。
【００８９】
上記構成を採用することにより、本実施形態によれば、実行するプロセスにＣＰＵを解放する処理を組み込むことなく、排他処理にかかる時間および排他解除待ちの時間が短縮されるので、ロックネックを防止できると共に、全体のスループットを向上することができるという効果が得られる。
【００９０】
また、排他処理中にプリエンプションが発生しないため、排他処理はその実行中にプロセッサのキャッシュを占有することができるので、キャッシュのヒット率が向上し、さらに排他時間を短縮することができるという効果が得られる。
【００９１】
第２の実施形態
図１５は、第２の実施形態に係る情報処理装置４００の構成を示すブロック図である。図１５に示すように、情報処理装置４００は、方式切替部４０１、第１のスケジューラ４０２および第２のスケジューラ４０３を備える。
【００９２】
方式切替部４０１は、第１の方式によって実行中のプロセスから第２の方式への切り替え指示を受けた場合には当該プロセスを前記第２の方式に関連付けられる第２の格納領域に格納し、前記第２の方式によって実行中のプロセスから前記第１の方式への切り替え指示を受けた場合には当該プロセスを前記第１の方式に関連付けられる第１の格納領域に格納する。
【００９３】
第１のスケジューラ４０２は、前記第２の方式への切り替え指示を行ったプロセスを中断すると共に、前記第１の格納領域に格納されるプロセスを前記第１の方式によってスケジューリングする。
【００９４】
第２のスケジューラ４０３は、前記第１の方式への切り替え指示を行ったプロセスを中断すると共に、前記第２の格納領域に格納されるプロセスを前記第２の方式によってスケジューリングする。
【００９５】
上記構成を採用することにより、本第２の実施形態によれば、実行するプロセスに特定の命令の組み込みを要することなく、スループットを向上させることができるという効果が得られる。
【００９６】
なお、図１、図１５に示した情報処理装置１００、４００の各部は、図１６に例示するハードウエア資源において実現される。すなわち、図１６に示す構成は、ＣＰＵ２０、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２１、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２２、外部接続インタフェース２３および記憶媒体２４を備える。ＣＰＵ２０は、ＲＯＭ２２または記憶媒体２４に記憶された各種ソフトウエア・プログラム（コンピュータ・プログラム）を、ＲＡＭ２１に読み出して実行することにより、情報処理装置１００、４００の全体的な動作を司る。すなわち、上記各実施形態において、ＣＰＵ２０は、ＲＯＭ２２または記憶媒体２４を適宜参照しながら、情報処理装置１００、４００が備える各機能（各部）を実行するソフトウエア・プログラムを実行する。
【００９７】
また、上述した各実施形態では、図１、図１５に示した情報処理装置１００、４００における各ブロックに示す機能を、図１６に示すＣＰＵ２０が実行する一例として、ソフトウエア・プログラムによって実現する場合について説明した。しかしながら、図１、図１５に示した各ブロックに示す機能は、一部または全部を、ハードウエアとして実現してもよい。
【００９８】
また、各実施形態を例に説明した本発明は、情報処理装置１００、４００に対して、上記説明した機能を実現可能なコンピュータ・プログラムを供給した後、そのコンピュータ・プログラムを、ＣＰＵ２０がＲＡＭ２１に読み出して実行することによって達成される。
【００９９】
また、係る供給されたコンピュータ・プログラムは、読み書き可能なメモリ（一時記憶媒体）またはハードディスク装置等のコンピュータ読み取り可能な記憶デバイスに格納すればよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムを表すコード或いは係るコンピュータ・プログラムを格納した記憶媒体によって構成されると捉えることができる。
【産業上の利用可能性】
【０１００】
本発明は、例えば、同時に複数の処理をこなすマルチタスク処理を実現するマルチプロセッサシステムの分野に適用できる。
【符号の説明】
【０１０１】
２０  ＣＰＵ
２１  ＲＡＭ
２２  ＲＯＭ
２３  外部接続インタフェース
２４  記憶媒体
１００、４００  情報処理装置
１０１  プロセス開始部
１０２  ノンプリエンプション設定部
１０３  プリエンプション設定部
１０４  プロセス再開部
１０５  プロセススケジューラ
１０６  プロセス管理テーブル格納領域
１１０  プリエンプションキュー
１２０  プリエンプティブスケジューラ
１２１  プリエンプティブスケジュール部
１３０  ノンプリエンプションキュー
１４０  ノンプリエンプティブスケジューラ
１４１  ノンプリエンプティブスケジュール部
１５０  ＣＰＵリソース管理情報格納領域
２１０  ＯＳ
２２０  ＣＰＵ
４０１  方式切替部
４０２  第１のスケジューラ
４０３  第２のスケジューラ
【図１】
2015141584.tif 000003
【図２】
2015141584.tif 000004
【図３】
2015141584.tif 000005
【図４】
2015141584.tif 000006
【図５】
2015141584.tif 000007
【図６】
2015141584.tif 000008
【図７】
2015141584.tif 000009
【図８】
2015141584.tif 000010
【図９】
2015141584.tif 000011
【図１０】
2015141584.tif 000012
【図１１】
2015141584.tif 000013
【図１２】
2015141584.tif 000014
【図１３】
2015141584.tif 000015
【図１４】
2015141584.tif 000016
【図１５】
2015141584.tif 000017
【図１６】
2015141584.tif 000018