(57)【要約】 【課題】  複数のプロセッサコアによる並列処理を実行するマルチプロセッサコアを搭載したシステムにおいて、起床させたプロセスの処理時間を低減する。【解決手段】  プロセスがリソースの使用を開始する際に、当該プロセスを示すプロセス識別情報と、プロセスが使用するリソースを示すリソース識別情報と、プロセスが割り当てられているプロセッサを示すプロセッサ識別情報と、を対応づけて管理情報として記録する。プロセスを起床させる際に、管理情報において、該起床させるプロセスに対応づけられているプロセッサを当該プロセスに割り当てる。【選択図】  図１
2013149108.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサを有する情報処理装置であって、
プロセスがリソースの使用を開始する際に、当該プロセスを示すプロセス識別情報と、前記プロセスが使用するリソースを示すリソース識別情報と、前記プロセスが割り当てられているプロセッサを示すプロセッサ識別情報と、を対応づけて管理情報として記録する第１制御手段と、
前記プロセスを起床させる際に、前記管理情報において、該起床させるプロセスに対応づけられているプロセッサを当該プロセスに割り当てる第２制御手段と
を備えることを特徴とする情報処理装置。
【請求項２】
前記第２制御手段は、起床させるプロセスである第１のプロセスのプロセス識別情報が前記管理情報に存在し、当該第１のプロセスが使用するリソースを使用する第２のプロセスのプロセス識別情報が前記管理情報に存在する場合には、前記第２のプロセスのプロセス識別情報に対応するプロセッサを前記第１のプロセスに割り当てる
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第２制御手段は、前記管理情報に、起床させるプロセスである第１のプロセスのプロセス識別情報が存在するが、該第１のプロセスが使用するリソースを使用する第２のプロセスのプロセス識別情報が存在しない場合には、ＯＳによって特定されるプロセッサを前記第１のプロセスに割り当てる
ことを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記第２制御手段は、前記管理情報に、前記起床させるプロセスのプロセス識別情報が存在しない場合、ＯＳによって特定されるプロセッサを前記起床させるプロセスに割り当てる
ことを特徴とする請求項１に記載の情報処理装置。
【請求項５】
前記プロセスが休止する際に、当該プロセスのプロセス識別情報を含む管理情報を更新するプロセス休止手段を更に備える
ことを特徴とする請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
前記プロセス休止手段は、前記管理情報に、前記休止するプロセスのプロセス識別情報が存在する場合に、該プロセス識別情報に対応するプロセッサ識別情報をクリアする
ことを特徴とする請求項５に記載の情報処理装置。
【請求項７】
前記リソースは、共有メモリである
ことを特徴とする請求項１乃至６のいずれか１項に記載の情報処理装置。
【請求項８】
前記リソースは、ファイルである
ことを特徴とする請求項１乃至６のいずれか１項に記載の情報処理装置。
【請求項９】
複数のプロセッサを有する情報処理装置の制御方法であって、
プロセスがリソースの使用を開始する際に、当該プロセスを示すプロセス識別情報と、前記プロセスが使用するリソースを示すリソース識別情報と、前記プロセスが割り当てられているプロセッサを示すプロセッサ識別情報と、を対応づけて管理情報として記録する第１制御工程と、
前記プロセスを起床させる際に、前記管理情報において、該起床させるプロセスに対応づけられているプロセッサを当該プロセスに割り当てる第２制御工程と
を備えることを特徴とする情報処理装置の制御方法。
【請求項１０】
複数のプロセッサを有する情報処理装置に実行させるためのプログラムであって、
前記情報処理装置を、
プロセスがリソースの使用を開始する際に、当該プロセスを示すプロセス識別情報と、前記プロセスが使用するリソースを示すリソース識別情報と、前記プロセスが割り当てられているプロセッサを示すプロセッサ識別情報と、を対応づけて管理情報として記録する第１制御手段と、
前記プロセスを起床させる際に、前記管理情報において、該起床させるプロセスに対応づけられているプロセッサを当該プロセスに割り当てる第２制御手段と
して機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサコアによる並列処理を実行するマルチプロセッサコアを搭載したシステムに関し、特に、プロセス起床時の実行プロセッサコアの選択技術に関するものである。
【背景技術】
【０００２】
近年の情報処理装置においては、複数のプロセッサコアを使用して並列処理を実行するマルチプロセッサコアを搭載したシステムが一般的になっている。このシステムでは、並列処理を実行するプロセスが複数存在し、ＯＳ（オペレーティングシステム）に備わっているスケジューリング機能によって、各プロセスをどのプロセッサで実行するかを選択する。
【０００３】
プロセスが新しく生成された場合、ＯＳは、生成した親のプロセスを実行するプロセッサを新しく生成されたプロセスへ優先的に割り当てる。しかし、プロセスが休止状態になった場合、そのプロセスに対するプロセッサの割当は無くなってしまう。休止状態のプロセスは、起床時にどのプロセッサで実行するかが再度選択される。ＯＳは、休止中のプロセスを起床する場合、メモリのキャッシュの有効性を考慮してそのプロセスが前回実行していたプロセッサでの実行を優先する。但し、システムに搭載される各プロセッサの負荷バランスが不均衡である場合には、均衡をとるために別プロセッサでの実行を選択することがある。
【０００４】
特許文献１では、マルチプロセッサコアを搭載したシステムで、リソース競合の要因となるリソースを検出し、検出したリソース競合を回避するようにスケジューリングを行う方法が開示されている。具体的には、起床したプロセスがリソース競合した場合に、そのリソースに対するロック要求及びロック要求後の待ち時間に基づき、複数のプロセッサの中からその待ち時間に対応するプロセッサを選択するというものである。
【０００５】
また、特許文献２では、プロセスの依存関係に基づき、スケジューリング方式を変更する方法が開示されている。具体的には、時分割スケジューリングをするプロセスの起床から休止までの処理をノードとして扱い、各ノード同士の依存関係の解析を実施する。解析した依存関係情報に基づき、プロセス単位でグループスケジューリングをする方式に変更するというものである。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−１２８６６４号公報
【特許文献２】特開２００９−４８３５８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
並列処理を実行するプロセスが複数存在する場合では、複数のプロセスが同一の共有メモリを使用してプロセス間を通信したり、複数のプロセスで同一のファイルを読み書きしたりすることがある。このような場合、複数のプロセスが同一内容のデータをキャッシュメモリに保持することになる。キャッシュヒット率やキャッシュコヒーレンシ処理時間を考慮すると、これら複数のプロセスは同一プロセッサに存在した方が効率は良い。
【０００８】
しかしながら、従来のマルチプロセッサコアを搭載したシステム用のスケジューリング機能では、プロセス起床時に、プロセスが扱うキャッシュメモリを考慮せずにプロセッサを選択する。そのため、複数のプロセスが同一内容のデータをキャッシュメモリに保持する場合でも、別々のプロセッサで動作するという問題が有る。
【０００９】
また、特許文献１に記載された技術においては、リソース競合によってプロセッサを選択することはできるが、キャッシュメモリを考慮してプロセッサを選択することができないという問題が有る。
【００１０】
また、特許文献２に記載された技術においては、プロセスの依存関係でスケジューリングを変更することはできるが、その依存関係に応じてプロセッサを選択することができないという問題が有る。
【００１１】
本発明は上記の課題を解決するためになされたものであり、複数のプロセッサコアによる並列処理を実行するマルチプロセッサコアを搭載したシステムにおいて、起床させたプロセスの処理時間を低減することを目的とする。
【課題を解決するための手段】
【００１２】
上記の目的を達成するための本発明による情報処理装置は、複数のプロセッサを有する情報処理装置であって、プロセスがリソースの使用を開始する際に、当該プロセスを示すプロセス識別情報と、前記プロセスが使用するリソースを示すリソース識別情報と、前記プロセスが割り当てられているプロセッサを示すプロセッサ識別情報と、を対応づけて管理情報として記録する第１制御手段と、前記プロセスを起床させる際に、前記管理情報において、該起床させるプロセスに対応づけられているプロセッサを当該プロセスに割り当てる第２制御手段とを備えることを特徴とする。
【発明の効果】
【００１３】
本発明によれば、複数のプロセッサによる並列処理を実行するシステムにおいて、プロセス起床時にプロセスが起床前に扱っていたメモリ領域やファイル等のリソースを考慮してプロセッサを選択する。これにより、キャッシュヒット率を向上させたり、キャッシュコヒーレンシ処理時間を低減させたりすることができる。
【図面の簡単な説明】
【００１４】
【図１】本発明に係る情報処理装置の主要な構成を示す図である。
【図２】実施形態１の情報処理装置の利用例を示す図である。
【図３】実施形態１の情報処理装置の主要な構成を示す図である。
【図４】実施形態１の情報処理装置でのＣＰＵの選択を表す図である。
【図５】実施形態１の共有メモリの使用開始処理を示すフローチャートである。
【図６】実施形態１の共有メモリアクセスリストの一例を示す図である。
【図７】実施形態１のプロセスの休止処理を示すフローチャートである。
【図８】実施形態１のプロセスの起床処理を示すフローチャートである。
【図９】実施形態２の情報処理装置の主要な構成を示す図である。
【図１０】実施形態２の情報処理装置でのＣＰＵの選択を表す図である。
【図１１】実施形態２のファイルの使用開始処理を示すフローチャートである。
【図１２】実施形態２のファイルアクセスリストの一例を示す図である。
【図１３】実施形態２のプロセスの休止処理を示すフローチャートである。
【図１４】実施形態２のプロセスの起床処理を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、本発明の実施の形態について図面を用いて詳細に説明する。
【００１６】
ここで、本発明は多くの異なる形態で実施可能であるが、本発明に係る情報処理装置の基本的な構成を、図１を参照して説明する。
【００１７】
同図において、１００は複数のプロセッサを使用して並列処理を実行するシステム（情報処理装置）である。一般的なマルチプロセッシングは、シングルコアのＣＰＵを複数個用いるケースや、マルチコアのＣＰＵを用いるケースが多いとされ、ＣＰＵは演算処理チップと同義に扱われることが多い。しかし、組み込み技術の分野ではマルチコアＣＰＵの備えるプロセッサコア自体をＣＰＵ０〜ｎと呼称することが多いので、以降の説明ではプロセッサをＣＰＵと呼称する。尚、本明細書ではプロセッサとプロセッサコア、コプロセッサはほぼ同義であるとする。
【００１８】
１０１はプロセスがあるリソース（例えば、データ、ファイル、共有メモリ領域）を使用開始する時に実行するリソース使用開始部（第１制御部）である。プロセスがリソース使用開始部１０１を実行すると、そのリソースの使用が可能になる。そして、リソース使用開始部１０１は、プロセスを特定するためのプロセス識別情報（以降、プロセスＩＤ）、そのプロセスに割り当てられているＣＰＵを特定するためのＣＰＵ識別情報（プロセッサ識別情報と同義、以降、ＣＰＵ  ＩＤ）、そのリソースを特定するリソース識別情報（以降、リソースＩＤ）を一組とした管理情報をリソース管理リスト１０２に記録する。
【００１９】
１０３はプロセスを休止する時に実行するプロセス休止部である。プロセスがプロセス休止部１０３を実行すると、対象のプロセスはＣＰＵの割当が無くなり、ウェイトキューにつながれて休止状態になる。そして、プロセス休止部１０３は、リソース管理リスト１０２に記録されている管理情報の中から休止したプロセスのプロセスＩＤを探索し、該当する管理情報のＣＰＵ  ＩＤを「割当無し」に変更する（クリアする）。
【００２０】
１０４はプロセスを起床する時に実行するプロセス起床部である。プロセス起床部１０４は、あるプロセスに対し起床命令を出すと、リソース管理リスト１０２に、起床させるプロセスのプロセスＩＤ（第１のプロセスＩＤ）が存在し、かつ、そのプロセスが使用するリソースと同一のリソースを使用するプロセスのプロセスＩＤ（第２のプロセスＩＤ）が存在するかを判定する。存在する場合、プロセス起床部１０４は、リソース管理リスト１０２から、同一のリソースを使用するプロセスに割り当てられているＣＰＵ  ＩＤを取得する。
【００２１】
プロセス起床部１０４の実行後に実行されるＣＰＵ割当部１０５（第２制御部）では、起床させるプロセスにＣＰＵの割当を行う。プロセス起床部１０４でＣＰＵ  ＩＤを取得している場合は、ＣＰＵ割当部１０５は、そのＣＰＵ  ＩＤに対応するＣＰＵを特定し、起床させるプロセスにそのＣＰＵを割り当てる。一方、ＣＰＵ  ＩＤを取得していない場合は、ＣＰＵ割当部１０５は、ＯＳに備わるＣＰＵ特定部で実行するＣＰＵを特定し、特定したＣＰＵを起床させるプロセスに割り当てる。尚、ＯＳに備わるＣＰＵ特定機能の例としては、ＣＰＵ０〜ｎのＩＤが小さいものから順に割り当てる方法や、ＣＰＵの負荷が小さいものを優先的に割り当てる方法など、種々の機能がある。
【００２２】
ＣＰＵ割当後、ＣＰＵ割当部１０５は、起床させるプロセスをウェイトキューから割り当てたＣＰＵに移動させ、プロセスの状態を実行可能状態に変更（更新）する。そして、ＣＰＵ割当部１０５は、リソース管理リスト１０２の管理情報の中から起床するプロセスのプロセスＩＤを探索し、該当する管理情報のＣＰＵ  ＩＤを特定したＣＰＵ  ＩＤに変更する。
【００２３】
以上が本発明に係る情報処理装置の基本的な構成である。図１の説明では使用するリソースの内容について触れていないが、以下の各実施形態では具体的なリソース（例えば、共有メモリ、ファイル等のデータ）を用いて、本発明に係る情報処理装置の主要な構成とその処理手順（制御方法）について説明する。
＜実施形態１＞
以下、図面を参照して本発明の実施形態１を詳細に説明する。
【００２４】
実施形態１は、リソースとして共有メモリ（複数プロセス間で共有可能なメモリ領域）の情報を元に、ＣＰＵの選択を行う構成について説明する。
【００２５】
図２は本発明を適用可能な情報処理装置の利用例を示す図である。同図において、２００は情報処理装置、２０１はＣＰＵ、２０２は一次記憶装置、２０３はＩ／Ｏコントローラ、２０４は二次記憶装置、２０５は入力装置、２０６は表示装置である。情報処理装置２００においては、通常、ＣＰＵ２０１が複数のプロセスを一つずつ処理し、処理は一定期間毎に切り替えて実施される。ＣＰＵ２０１には、演算処理等を行なうプロセッサコアが１つ以上存在し、ＣＰＵ２０１自体が情報処理装置２００に複数存在する場合もある。
【００２６】
一次記憶装置２０２は、プログラム及びデータを記録する。複数のプロセスが同時並行的にアクセス可能な共有メモリの領域は、一次記憶装置２０２に確保される。２０３はＩ／Ｏコントローラである。２０４は二次記憶装置である。ファイルやディレクトリ等のデータは、二次記憶装置２０４に記録される。二次記憶装置２０４にあるデータの操作は、オペレーティングシステムからＩ／Ｏコントローラ２０３に対して、ＲＥＡＤ要求、ＷＲＩＴＥ要求を行うことで実現する。
【００２７】
入力装置２０５は、キーボード、ポインティングデバイス（マウス等）で構成され、ユーザからの操作指示を受け付ける。表示装置２０６は、情報処理装置２００を操作するためのＧＵＩ（カーソル、ウィンドウ等）を表示する。
【００２８】
図３は実施形態１に係る情報処理装置の主要な構成を示す図である。同図において、３００は図１のシステム１００に対応し、その説明は省略する。
【００２９】
３０１は複数のプロセスが同時並行的にアクセス可能な共有メモリを、使用開始する時に実行する共有メモリ使用開始部である。プロセスが共有メモリを特定する共有メモリＩＤを指定して共有メモリ使用開始部３０１を実行すると、そのプロセスのデータセグメントに指定した共有メモリがマップされる。そして、共有メモリ使用開始部３０１は、プロセスＩＤ、そのプロセスに割り当てられているＣＰＵのＣＰＵ  ＩＤ、マップした共有メモリＩＤの情報を一組とした管理情報を共有メモリアクセスリスト３０２に記録する。共有メモリアクセスリスト３０２は、一次記憶装置２０２もしくは二次記憶装置２０４に存在する。
【００３０】
３０３はプロセスを休止する時に実行するプロセス休止部である。プロセスがプロセス休止部３０３を実行すると、対象のプロセスはＣＰＵの割当が無くなり、ウェイトキューにつながれて休止状態になる。そして、プロセス休止部３０３は、共有メモリアクセスリスト３０２の管理情報の中から休止したプロセスのプロセスＩＤを探索し、該当する管理情報のＣＰＵ  ＩＤを「割当無し」に変更する。
【００３１】
３０４はプロセスを起床する時に実行するプロセス起床部である。プロセス起床部３０４は、あるプロセスに対し起床命令を出すと、共有メモリアクセスリスト３０２に、起床させるプロセスのプロセスＩＤが存在し、かつ、そのプロセスが使用する共有メモリと同一の共有メモリを使用するプロセスのプロセスＩＤが存在するかを判定する。存在する場合、プロセス起床部３０４は、共有メモリアクセスリスト３０２から、同一の共有メモリを使用するプロセスに割り当てられているＣＰＵ  ＩＤを取得する。尚、同一の共有メモリであるかどうかは、共有可能なメモリ領域に領域ＩＤを振っている場合は領域ＩＤで判断してもよいし、アドレスの連続性、メモリチップに固有の情報（チップＩＤや、アドレスの一部など）から判断するなど種々の方法を用いることができる。
【００３２】
プロセス起床部３０４の実行後に実行されるＣＰＵ割当部３０５では、起床させるプロセスにＣＰＵの割当を行う。ＣＰＵ割当とプロセスの移動については、図１のＣＰＵ割当部１０５で説明したものと同一であり省略する。プロセスの移動後、ＣＰＵ割当部３０５は、共有メモリアクセスリスト３０２の管理情報の中から起床するプロセスのプロセスＩＤを探索し、該当する管理情報のＣＰＵ  ＩＤを特定したＣＰＵ  ＩＤに変更する。
【００３３】
図４は、図３の構成において、２つのＣＰＵを搭載したシステムの場合に、複数のプロセスが同一の共有メモリを使用しているかどうかでＣＰＵを選択することを示す図である。
【００３４】
４００は１つ目のＣＰＵ＃Ａであり、複数のプロセスが存在する。４０１は２つ目のＣＰＵ＃Ｂであり、複数のプロセスが存在し、その中のプロセスＡは共有メモリ４０２を使用している。４０３はウェイトキューであり、共有メモリ４０２を使用するプロセスＢと使用していないプロセスＣが存在する。
【００３５】
この状態でウェイトキュー４０３のプロセスＢを起床させると、プロセスＡと同一の共有メモリ４０２を使用しているため、プロセスＢは２つ目のＣＰＵ＃Ｂ４０１に移動され、プロセスＢの状態は実行可能状態に変更される。
【００３６】
ウェイトキュー４０３のプロセスＣを起床させると、共有メモリ４０２を使用していないため、プロセスＣはＯＳに備わるＣＰＵ特定部によって１つ目のＣＰＵ＃Ａ４００か２つ目のＣＰＵ＃Ｂ４０１のどちらかに移動される。その後、移動したＣＰＵでプロセスの状態が実行可能状態に変更される。
【００３７】
次に、図５、図６、図７、図８を用いて、実施形態１を適用可能なシステムを備えた情報処理装置を、ユーザが利用した時の処理手順について説明する。
【００３８】
まず、図５を用いて、共有メモリを使用開始する処理手順について説明する。
【００３９】
ステップＳ５００で、共有メモリ使用開始部３０１は、プロセスが指定した共有メモリが既に存在するかどうかを判定する。存在する場合（ステップＳ５００でＹＥＳ）、ステップＳ５０１に移り、共有メモリ使用開始部３０１は、プロセスが指定した共有メモリの共有メモリＩＤを取得する。一方、存在しない場合（ステップＳ５００でＮＯ）、ステップＳ５０２に移り、共有メモリ使用開始部３０１は、共有メモリを一次記憶装置２０２の領域に新規に作成し、作成した共有メモリの共有メモリＩＤを取得する。
【００４０】
ステップＳ５０３で、共有メモリ使用開始部３０１は、取得した共有メモリＩＤを指定して、使用開始するプロセスを共有メモリにマップする。ステップＳ５０４で、共有メモリ使用開始部３０１は、使用開始したプロセスのプロセスＩＤ、そのプロセスが実行しているＣＰＵのＣＰＵ  ＩＤ、取得した共有メモリＩＤを一組とした管理情報を共有メモリアクセスリスト３０２に記録する。
【００４１】
共有メモリアクセスリスト３０２を、具体的に図６を用いて説明する。
【００４２】
図６は共有メモリアクセスリストの具体例であり、同図の６００がステップＳ５０４で管理情報を記録した共有メモリアクセスリストを示す図である。この例では、ＣＰＵ  ＩＤ「０」のプロセスＩＤ「１０」が共有メモリ「１０００」を使用している。ＣＰＵ  ＩＤ「０」のプロセスＩＤ「１１」が共有メモリ「３０００」を使用している。ＣＰＵ  ＩＤ「１」のプロセスＩＤ「１２」が共有メモリ「１０００」を使用している。共有メモリアクセスリスト３０２は、新しく共有メモリをマップする度に情報が追加される。
【００４３】
次に、図７を用いて、プロセスを休止する手順について説明する。
【００４４】
ステップＳ７００で、プロセス休止部３０３は、休止するプロセスのプロセスＩＤを取得し、取得したプロセスＩＤが共有メモリアクセスリスト３０２に存在するかを判定する。存在する場合（ステップＳ７００でＹＥＳ）、ステップＳ７０１に移り、プロセス休止部３０３は、取得したプロセスＩＤに該当する項目のＣＰＵ  ＩＤの部分を「無し」に変更する。一方、存在しない場合（ステップＳ７００でＮＯ）、ステップＳ７０２に移り、プロセス休止部３０３は、休止するプロセスをＣＰＵからウェイトキューに移し、プロセスを休止状態にする。
【００４５】
ステップＳ７００からステップＳ７０２の処理を、具体的に図６を用いて説明する。図６の６００は図５のステップＳ５０４の処理後の共有メモリアクセスリスト３０２の状態を示す図である。共有メモリアクセスリスト３０２がこの状態６００である時に、プロセスＩＤ「１２」のプロセスを休止させる。この場合、プロセスＩＤ「１２」の情報は存在するため、ＣＰＵ  ＩＤの部分を「無し」に変更する。その結果、共有メモリアクセスリスト３０２は図６の状態６０１となる。
【００４６】
次に、図８を用いて、休止しているプロセスを起床させる手順について説明する。
【００４７】
ステップＳ８００で、プロセス起床部３０４は、起床させるプロセスのプロセスＩＤを取得する。そして、プロセス起床部３０４は、共有メモリアクセスリスト３０２を参照し、取得したプロセスＩＤが共有メモリアクセスリスト３０２に存在するかどうかを判定する。
【００４８】
存在しない場合（ステップＳ８００でＮＯ）、ステップＳ８０４に移り、プロセス起床部３０４は、ＯＳに備わるＣＰＵ特定部でＣＰＵを特定する。その後、ＣＰＵ割当部３０５が、起床させるプロセスをウェイトキューから特定したＣＰＵに移動し、起床させるプロセスの状態を実行可能状態に変更する。
【００４９】
一方、ステップＳ８００において、存在する場合（ステップ８００でＹＥＳ）、ステップＳ８０１に移る。ステップＳ８０１で、プロセス起床部３０４は、共有メモリアクセスリスト３０２を参照し、取得したプロセスＩＤが使用する共有メモリＩＤを特定し、その共有メモリＩＤを使用する他のプロセスが存在するかを判定する。
【００５０】
存在しない場合（ステップＳ８０１でＮＯ）、ステップＳ８０４に移る。一方、存在する場合（ステップＳ８０１でＹＥＳ）、ステップＳ８０２に移り、プロセス起床部３０４は、起床させるプロセスと同一の共有メモリを使用するプロセスが存在するＣＰＵを特定する。その後、ＣＰＵ割当部１０５が、起床させるプロセスをウェイトキューから特定したＣＰＵに移動させ、起床させるプロセスの状態を実行可能状態に変更する。
【００５１】
ステップＳ８０３で、プロセス起床部３０４は、共有メモリアクセスリスト３０２にある起床させるプロセスに対応するＣＰＵ  ＩＤを、ステップＳ８０２で特定したＣＰＵ  ＩＤに変更する。
【００５２】
ステップＳ８００からステップＳ８０３の処理を、具体的に図６を用いて説明する。図６の６０１は図７のステップＳ７０１でプロセスを休止状態にした後に変更した共有メモリアクセスリスト３０２の状態を示す図である。共有メモリアクセスリスト３０２がこの状態６０１である時に、プロセスＩＤ「１２」のプロセスを起床させる。この場合、プロセスＩＤ「１２」の情報は存在するため、プロセスＩＤ「１２」に対応する共有メモリＩＤを参照する。共有メモリＩＤは「１０００」であり、その共有メモリＩＤを使用する他のプロセスは、プロセスＩＤ「１０」のプロセスが存在する。そして、プロセスＩＤ「１０」のＣＰＵ  ＩＤは「０」であるため、起床させるプロセスのプロセスＩＤ「１２」に対応するＣＰＵ  ＩＤを「無し」から「０」に変更する。その結果、共有メモリアクセスリスト３０２は図６の状態６０２となる。
【００５３】
以上説明したように、実施形態１では、プロセスが共有メモリを使用開始するために共有メモリ使用開始部３０１を実行すると、その情報を共有メモリアクセスリスト３０２に追加する。プロセスがプロセスを休止するためにプロセス休止部３０３を実行すると、そのプロセスの情報を元に共有メモリアクセスリスト３０２を変更する。プロセスが特定のプロセスを起床させるためにプロセス起床部３０４を実行すると、共有メモリアクセスリスト３０２にあるそのプロセスの情報を参照する。そして、参照した情報を元にＣＰＵ割当部３０５でＣＰＵの割当を行い、割当結果を元に共有メモリアクセスリスト３０２を変更する。
【００５４】
これにより、共有メモリを扱うプロセスは、同一の共有メモリを扱うプロセスと同一のＣＰＵで起床することになる。そのため、キャッシュコヒーレンシ保持のための処理時間が低減され、キャッシュヒット率の向上も見込めるため、起床させたプロセスの処理時間を低減することが可能になる。
【００５５】
＜実施形態２＞
以下、図面を参照して本発明の実施形態２を詳細に説明する。
【００５６】
実施形態２は、リソースの１つであるファイルの情報を元に、ＣＰＵの選択を行う構成について説明する。この点で、実施形態２は実施形態１と異なる。
【００５７】
図９は本発明を適用可能な情報処理装置の利用例を示す図である。同図において、９００は図１のシステム１００に対応し、その説明は省略する。
【００５８】
９０１はファイルを使用開始する時に実行するファイル使用開始部である。プロセスがファイル名を指定してファイル使用開始部９０１を実行すると、そのファイル名のファイルがオープンされ、プロセスはオープンしたファイルのファイルＩＤを取得する。そして、ファイル使用開始部９０１は、プロセスＩＤ、そのプロセスに割り当てられているＣＰＵのＣＰＵ  ＩＤ、オープンしたファイルＩＤの情報を一組とした管理情報をファイルアクセスリスト９０２に記録する。ファイルアクセスリスト９０２は、一次記憶装置２０２もしくは二次記憶装置２０４に存在する。
【００５９】
９０３はプロセスを休止する時に実行するプロセス休止部である。プロセスがプロセス休止部９０３を実行すると、対象のプロセスはＣＰＵの割当が無くなり、ウェイトキューにつながれて休止状態になる。そして、プロセス休止部９０３は、ファイルアクセスリスト９０２の管理情報の中から休止したプロセスのプロセスＩＤを探索し、該当する管理情報のＣＰＵ  ＩＤを「割当無し」に変更する。
【００６０】
９０４はプロセスを起床する時に実行するプロセス起床部である。プロセス起床部９０４は、あるプロセスに対し起床命令を出すと、ファイルアクセスリスト９０２に、起床させるプロセスのプロセスＩＤが存在し、かつ、起床させるプロセスが使用するファイルと同一のファイルを使用するプロセスが存在するかを判定する。存在する場合、プロセス起床部９０４は、同一のファイルを使用するプロセスに割り当てられているＣＰＵ  ＩＤを取得する。
【００６１】
プロセス起床部９０４の実行後に実行されるＣＰＵ割当部９０５では、起床させるプロセスにＣＰＵの割当とプロセスの移動を行う。ＣＰＵ割当とプロセスの移動については、図１のＣＰＵ割当部１０５で説明したものと同一であり省略する。プロセスの移動後、ＣＰＵ割当部９０５は、ファイルアクセスリスト９０２の管理情報の中から起床するプロセスのプロセスＩＤを探索し、該当する管理情報のＣＰＵ  ＩＤを特定したＣＰＵ  ＩＤに変更する。
【００６２】
図１０は、図９の構成において、２つのＣＰＵを搭載したシステムの場合に、複数のプロセスが同一のファイルにアクセスしているかどうかでＣＰＵを選択することを示す図である。１０００は図４のＣＰＵ＃Ａ４００、１００１は図４のＣＰＵ＃Ｂ４０１、１００３は図４のウェイトキュー４０３と同一であり、その説明は省略する。図４と異なるのはファイル１００２がある点である。
【００６３】
ファイル１００２は、ＣＰＵ＃Ｂ１００１のプロセスＡとウェイトキュー１００３のプロセスＢからのみアクセスされている。この状態で、ウェイトキュー１００３のプロセスＢを起床させると、プロセスＡと同一のファイル１００２にアクセスしているため、プロセスＢは２つ目のＣＰＵ＃Ｂ１００１に移動され、プロセスＢの状態は実行可能状態に変更される。
【００６４】
また、ウェイトキュー１００３のプロセスＣを起床させると、ファイル１００２にアクセスしていないため、プロセスＣはＯＳに備わるＣＰＵ特定部によって１つ目のＣＰＵ＃Ａ１０００か２つ目のＣＰＵ＃１００１のどちらかに移動される。その後、移動したＣＰＵでプロセスの状態が実行可能状態に変更される。
【００６５】
次に、図１１、図１２、図１３、図１４を用いて、実施形態２を適用可能なシステムを備えた情報処理装置を、ユーザが利用した時の処理手順について説明する。
【００６６】
まず、図１１を用いて、ファイルを使用開始する処理手順について説明する。
【００６７】
ステップＳ１１００では、ファイル使用開始部９０１は、プロセスが指定するファイル名のファイルが既に存在するかどうかを判定する。存在する場合（ステップＳ１１００でＹＥＳ）、ステップＳ１１０１に移り、ファイル使用開始部９０１は、指定するファイル名のファイルをオープンし、そのファイルファイルＩＤを取得する。一方、存在しない場合（ステップＳ１１００でＮＯ）、ステップＳ１１０２に移り、ファイル使用開始部９０１は、プロセスが指定するファイル名のファイルを一次記憶装置２０２あるいは二次記憶装置２０４の領域に作成し、オープンする。そして、ファイル使用開始部９０１は、オープンしたファイルのファイルＩＤを取得する。
【００６８】
ステップＳ１１０３で、ファイル使用開始部９０１は、実行しているプロセスのプロセスＩＤ、そのプロセスが実行しているＣＰＵのＣＰＵ  ＩＤ、オープンしたファイルのファイルＩＤを一組とした管理情報をファイルアクセスリスト９０２に記録する。
【００６９】
ファイルアクセスリスト９０２を、具体的に図１２を用いて説明する。
【００７０】
図１２は、ファイルアクセスリストの具体例であり、同図の１２００がステップＳ１１０３で管理情報を記録したファイルアクセスリスト９０２を示す図である。この例では、ＣＰＵ  ＩＤ「０」のプロセスＩＤ「１０」がファイルＩＤ「３」を使用している。ＣＰＵ  ＩＤ「０」のプロセスＩＤ「１１」がファイルＩＤ「４」を使用している。ＣＰＵ  ＩＤ「１」のプロセスＩＤ「１２」がファイルＩＤ「３」を使用している。ファイルアクセスリスト９０２は、新規にファイルをオープンする度に情報が追加される。
【００７１】
次に、図１３を用いて、プロセスを休止する手順について説明する。
【００７２】
ステップＳ１３００で、プロセス休止部９０３は、休止するプロセスのプロセスＩＤを取得し、取得したプロセスＩＤがファイルアクセスリスト９０２に存在するかを判定する。存在する場合（ステップＳ１３００でＹＥＳ）、ステップＳ１３０１に移り、プロセス休止部９０３は、取得したプロセスＩＤに該当する項目のＣＰＵ  ＩＤの部分を「無し」に変更する。一方、存在しない場合（ステップＳ１３００でＮＯ）、ステップＳ１３０２に移り、プロセス休止部９０３は、休止するプロセスをＣＰＵからウェイトキューに移し、プロセスを休止状態にする。
【００７３】
ステップＳ１３００からステップＳ１３０２の処理を、具体的に図１２を用いて説明する。図１２の１２００は図１１のステップＳ１１０３の処理後のファイルアクセスリスト９０２の状態を示す図である。ファイルアクセスリスト９０２がこの状態１２００である時に、プロセスＩＤ「１２」のプロセスを休止させる。この場合、プロセスＩＤ「１２」の情報は存在するため、ＣＰＵ  ＩＤの部分を「無し」に変更する。その結果、ファイルアクセスリスト９０２は図１２の状態１２０１となる。
【００７４】
次に、図１４を用いて、休止しているプロセスを起床させる手順について説明する。
【００７５】
ステップＳ１４００で、プロセス起床部９０４は、起床させるプロセスのプロセスＩＤを取得する。そして、プロセス起床部９０４は、ファイルアクセスリスト９０２を参照し、取得したプロセスＩＤがファイルアクセスリスト９０２に存在するかどうかを判定する。
【００７６】
存在しない場合（ステップＳ１４００でＮＯ）、ステップＳ１４０４に移り、プロセス起床部９０４は、ＯＳに備わるＣＰＵ特定部でＣＰＵを特定する。その後、ＣＰＵ割当部９０５が、起床させるプロセスをウェイトキューから特定したＣＰＵに移動し、起床させるプロセスの状態を実行可能状態に変更する。
【００７７】
一方、ステップＳ１４００において、存在する場合（ステップＳ１４００でＹＥＳ）、ステップＳ１４０１に移る。ステップＳ１４０１で、プロセス起床部９０４は、ファイルアクセスリスト９０２を参照し、取得したプロセスＩＤが使用するファイルＩＤを特定し、そのファイルＩＤを使用する他のプロセスが存在するかを判定する。
【００７８】
存在しない場合（ステップＳ１４０１でＮＯ）、ステップＳ１４０４に移る。一方、存在する場合（ステップＳ１４０１でＹＥＳ）、ステップＳ１４０２に移り、プロセス起床部９０４は、起床させるプロセスと同一のファイルにアクセスするプロセスが存在するＣＰＵを特定する。その後、ＣＰＵ割当部９０５が、起床させるプロセスをウェイトキューから特定したＣＰＵに移動し、起床させるプロセスの状態を実行可能状態に変更する。
【００７９】
ステップＳ１４０３で、プロセス起床部９０４は、ファイルアクセスリスト９０２にある起床させるプロセスに対応するＣＰＵ  ＩＤを、ステップＳ１４０２で特定したＣＰＵ  ＩＤに変更する。
【００８０】
ステップＳ１４００からステップＳ１４０３の処理を、具体的に図１２を用いて説明する。図１２の１２０１は図１３のステップＳ１３０１でプロセスを休止状態にした後に変更したファイルアクセスリスト９０２の状態を示す図である。ファイルアクセスリスト９０２がこの状態１２０１である時に、プロセスＩＤ「１２」のプロセスを起床させる。この場合、プロセスＩＤ「１２」の情報は存在するため、プロセスＩＤ「１２」に対応するファイルＩＤを参照する。ファイルＩＤは「３」であり、そのファイルＩＤを使用する他のプロセスは、プロセスＩＤ「１０」が存在する。そして、プロセスＩＤ「１０」に対応するＣＰＵ  ＩＤは「０」であるため、起床させるプロセスであるプロセスＩＤ「１２」のＣＰＵ  ＩＤを「無し」から「０」に変更する。その結果、ファイルアクセスリスト９０２は図１２の状態１２０２となる。
【００８１】
以上説明したように、実施形態２によれば、プロセスがファイルを使用開始するためにファイル使用開始部９０１を実行すると、その情報をファイルアクセスリスト９０２に追加する。プロセスがプロセスを休止するためにプロセス休止部９０３を実行すると、その情報を元にファイルアクセスリスト９０２を変更する。プロセスが特定のプロセスを起床させるためにプロセス起床部９０４を実行すると、ファイルアクセスリスト９０２にあるそのプロセスの情報を参照する。そして、参照した情報を元にＣＰＵ割当部９０５でＣＰＵの割当を行い、割当結果を元にファイルアクセスリスト９０２を変更する。
【００８２】
これにより、ファイルを扱うプロセスは、同一のファイルを扱うプロセスと同一のＣＰＵで起床することになる。同一ＣＰＵで同一ファイルを扱うことで、一次キャッシュのヒット率の向上が見込めるため、起床させたプロセスの処理時間を低減することが可能になる。
【００８３】
尚、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステムまたは装置に供給し、そのシステムまたは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
2013149108.tif 000003
【図２】
2013149108.tif 000004
【図３】
2013149108.tif 000005
【図４】
2013149108.tif 000006
【図５】
2013149108.tif 000007
【図６】
2013149108.tif 000008
【図７】
2013149108.tif 000009
【図８】
2013149108.tif 000010
【図９】
2013149108.tif 000011
【図１０】
2013149108.tif 000012
【図１１】
2013149108.tif 000013
【図１２】
2013149108.tif 000014
【図１３】
2013149108.tif 000015
【図１４】
2013149108.tif 000016