(57)【要約】      （修正有）【課題】コプロセッサを有するマルチプロセッサ上でタスクがプロセッサを移動するタスクスイッチ時に、コプロセッサのコンテキスト転送を削減する。【解決手段】タスクスイッチを判定する場合に、タスクスイッチによるコプロセッサのレジスタ退避を抑制するように制御する。【選択図】図５
2014078072.tif 000002
【特許請求の範囲】
【請求項１】
割り当てられたタスクを第１レジスタの内容に基づいて処理を実行する第１処理部と、当該タスクを第２レジスタの内容に基づいて処理を実行する第２処理部と、を含むプロセッサを複数備えるマルチプロセッサを有する情報処理装置であって、
前記マルチプロセッサの備えるプロセッサの１つを着目プロセッサとし、当該着目プロセッサに割り当てるタスクを変更する際に、当該着目プロセッサの第１レジスタおよび当該着目プロセッサの第２レジスタが保持している内容をメモリに転送する転送手段と、
前記着目プロセッサに割り当てられたタスクが、当該着目プロセッサの第２処理部によって処理を開始されることに応じて、当該第２処理部に対応する第２レジスタの内容を前記転送手段によって前記メモリに転送することを抑制する制御手段とを有することを特徴とする情報処理装置。
【請求項２】
プロセッサコアとコプロセッサとを備えている複数のプロセッサを有するマルチプロセッサにおいて、前記プロセッサコアまたは前記コプロセッサに実行させるタスクを割り当てる情報処理装置であって、
前記コプロセッサによる前記タスクの処理の開始を検出すると、前記コプロセッサが利用するコプロセッサコンテキストをメモリに転送することを抑制する制御手段を備えることを特徴とする情報処理装置。
【請求項３】
前記制御手段は、タスクスイッチ後に前記コプロセッサによる前記タスクの処理開始を検出する開始検出手段と、当該開始検出手段が前記コプロセッサの処理開始を検出すると、処理を開始したタスクについて前記プロセッサ間を移動することを制限する制限手段とを備えることを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記コプロセッサが第１タスクについて処理を開始する際に、当該コプロセッサが第２タスクについてのコプロセッサコンテキストを保持していると、当該第２タスクのコプロセッサコンテキストをメモリに退避する転送手段を更に備える請求項２または３に記載の情報処理装置。
【請求項５】
前記コプロセッサが第１タスクについて処理を開始する際に、当該第１タスクのコプロセッサコンテキストが前記メモリに存在すると、当該第１タスクのコプロセッサコンテキストを前記メモリから前記第１タスクを処理するコプロセッサコンテキストに復帰させる転送手段をさらに備えることを特徴とする請求項２乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
前記制御手段は、前記コプロセッサによって処理が開始されるタスクの識別情報を、前記メモリにコプロセッサ毎に保持させることを特徴とする請求項２乃至記載の５のいずれか１項に記載の情報処理装置。
【請求項７】
前記制御手段は、前記コプロセッサが処理するタスクの変更が前記プロセッサコアに通知されるように前記コプロセッサを制御することを特徴とする請求項２乃至６のいずれか１項に記載の情報処理装置。
【請求項８】
前記制御手段は、タスクスイッチをする際に前記コプロセッサが処理中のタスクとスイッチ後のタスクとが異なると、当該タスクスイッチが行われるプロセッサのコプロセッサを無効化し、タスクスイッチ後に前記コプロセッサを利用する命令が発行された際に例外が前記プロセッサコアに通知されるように前記コプロセッサを制御することを特徴とする請求項２乃至７のいずれか１項に記載の情報処理装置。
【請求項９】
前記制御手段は、前記コプロセッサによる処理の開始を、前記タスクを実行するプロセッサコアからのシステムコールにより検出することを特徴とする請求項２乃至８のいずれか１項に記載の情報処理装置。
【請求項１０】
前記制御手段は、前記タスクを割り当て可能なプロセッサの識別情報をプロセッサ割り当て情報として前記メモリに保持させ、移動が制限されるタスクに関するプロセッサ割り当て情報について、当該タスクを処理中のコプロセッサを有するプロセッサの識別情報のみが当該プロセッサ割り当て情報に保持されるように変更することを特徴とする請求項２乃至９のいずれか１項に記載の情報処理装置。
【請求項１１】
前記制御手段は、前記タスクについて前記コプロセッサによる処理の終了を検出する終了検出手段と、当該終了検出手段の検出に応じて当該タスクのプロセッサ間の移動を許可する許可手段と、を備えることを特徴とする請求項２乃至１０のいずれか１項に記載の情報処理装置。
【請求項１２】
前記制御手段は、前記タスクについて前記コプロセッサによる処理の終了を検出する終了検出手段と、当該終了検出手段の検出に応じて当該タスクのプロセッサ間の移動を許可する許可手段と、当該タスクについて前記メモリに保持されているコプロセッサコンテキストを破棄するクリア手段と、をさらに備えることを特徴とする請求項２乃至１１のいずれか１項に記載の情報処理装置。
【請求項１３】
前記クリア手段は、前記終了検出手段により利用終了が検出されたコプロセッサが処理していた前記タスクの識別情報を前記メモリからクリアすることを特徴とする請求項１２に記載の情報処理装置。
【請求項１４】
前記終了検出手段は、前記コプロセッサによるタスクの処理の終了を、前記コプロセッサの利用終了として検出することを特徴とする請求項１１乃至１３のいずれか１項に記載の情報処理装置。
【請求項１５】
前記終了検出手段は、前記コプロセッサによるタスクの処理の終了を、前記タスクを実行するプロセッサコアからのシステムコールにより検出することを特徴とする請求項１１乃至１３のいずれか１項に記載の情報処理装置。
【請求項１６】
前記許可手段は、移動が許可されるタスクのプロセッサ割り当て情報を、当該該タスクの移動が制限される前の状態に復帰することを特徴とする請求項１１乃至１５のいずれか１項に記載の情報処理装置。
【請求項１７】
前記コプロセッサコンテキストは、前記コプロセッサのレジスタが保持する値であり、前記タスクの移動とは、当該タスクに関わるコプロセッサコンテキストを前記メモリに退避させ、退避したコプロセッサコンテキストを別のプロセッサのコプロセッサのレジスタに復帰させる処理を示すことを特徴とする請求項２乃至１６のいずれか１項に記載の情報処理装置。
【請求項１８】
割り当てられたタスクを第１レジスタの内容に基づいて処理を実行する第１処理部と、当該タスクを第２レジスタの内容に基づいて処理を実行する第２処理部と、を含むプロセッサを複数備えるマルチプロセッサを有する情報処理装置による情報処理方法であって、
前記マルチプロセッサの備えるプロセッサの１つを着目プロセッサとし、当該着目プロセッサに割り当てるタスクを変更する際に、当該着目プロセッサの第１レジスタおよび当該着目プロセッサの第２レジスタが保持している内容をメモリに転送する転送工程と、
前記着目プロセッサに割り当てられたタスクが、当該着目プロセッサの第２処理部によって処理を開始されることに応じて、当該第２処理部に対応する第２レジスタの内容を前記メモリに転送することを抑制する制御工程とを有することを特徴とする情報処理方法。
【請求項１９】
プロセッサコアとコプロセッサとを備えている複数のプロセッサを有するマルチプロセッサにおいて、前記プロセッサコアまたは前記コプロセッサに実行させるタスクを割り当てる情報処理装置による情報処理方法であって、
前記コプロセッサによる前記タスクの処理の開始を検出すると、前記コプロセッサが利用するコプロセッサコンテキストをメモリに転送することを抑制する制御工程を有することを特徴とする情報処理方法。
【請求項２０】
割り当てられたタスクを第１レジスタの内容に基づいて処理を実行する第１処理部と、当該タスクを第２レジスタの内容に基づいて処理を実行する第２処理部と、を含むプロセッサを複数備えるマルチプロセッサを有する情報処理装置を、
前記マルチプロセッサの備えるプロセッサの１つを着目プロセッサとし、当該着目プロセッサに割り当てるタスクを変更する際に、当該着目プロセッサの第１レジスタおよび当該着目プロセッサの第２レジスタが保持している内容をメモリに転送する転送手段と、
前記着目プロセッサに割り当てられたタスクが、当該着目プロセッサの第２処理部によって処理を開始されることに応じて、当該第２処理部に対応する第２レジスタの内容を前記転送手段によって前記メモリに転送することを抑制する制御手段として機能させることを特徴とするコンピュータが読取り可能なプログラム。
【請求項２１】
プロセッサコアとコプロセッサとを備えている複数のプロセッサを有するマルチプロセッサにおいて、前記プロセッサコアまたは前記コプロセッサに実行させるタスクを割り当てる情報処理装置を、
前記コプロセッサによる前記タスクの処理の開始を検出すると、前記コプロセッサが利用するコプロセッサコンテキストをメモリに転送することを抑制する制御手段として機能させることを特徴とするコンピュータが読取り可能なプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンテキストを管理する情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【０００２】
プロセッサ（ｐｒｏｃｅｓｓｏｒ）を機能的に拡張、あるいは補助するための処理を実現する従属的な処理装置としてコプロセッサ（ｃｏ  ｐｒｏｃｅｓｓｏｒ）がある。例えばプロセッサに、基本的な処理を実施するプロセッサコア（ｐｒｏｃｅｓｓｏｒ  ｃｏｒｅ）とは別に、浮動小数点演算、ベクトル演算、画像処理、デバッグ機構制御、システム制御機能などの少なくとも１つを割り当てたコプロセッサを実装することが多い。
【０００３】
コプロセッサは、コプロセッサ毎にレジスタと対応づけられており、レジスタに保持されている設定値やコプロセッサの演算で利用されるレジスタの中間値はコプロセッサコンテキストと呼ばれ、プロセッサコアに対応づけられているレジスタに保持されているコンテキストとは区別される。また、コプロセッサコンテキストはタスク毎に管理する場合がある。例えば、複数のタスクの処理に関して同一の浮動小数点演算器を利用する場合に、浮動小数点演算器のコプロセッサコンテキストはタスク毎に管理されていることが好ましい。
【０００４】
そのため、一般的にタスク毎のコプロセッサコンテキストはオペレーティングシステムが管理する。単純な管理方法ではタスクスイッチ時に、それまで実行していたタスクのコプロセッサコンテキストをレジスタからメモリへ一時退避させ、次に実行するタスクのコプロセッサコンテキストがあればメモリ上からプロセッサ内のレジスタに復帰させる。このような動作をコンテキストスイッチ（またはプリエンプション）と呼ぶ。
【０００５】
しかし、コプロセッサのコンテキストスイッチは必ずしもタスクスイッチ毎に行う必要がない。そこで、特許文献１は、タスクスイッチ時にコプロセッサを無効化しておき、コプロセッサアクセスによる例外通知時にコプロセッサの有効化とコプロセッサコンテキストのスイッチを行う方法を開示している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平３−９４３６２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、例えば、タスクに対するプロセッサの再割り当てが生じる構成において特許文献１で示される方式を行うと、あるタスクのコプロセッサコンテキストと関連付けられているコプロセッサとは別のコプロセッサに、このタスクのコプロセッサ用の演算処理が割り当てられてしまうことがある。ここで、一般的に、コプロセッサに対して、そのコプロセッサが属するプロセッサ外からのアクセスは、プロセッサ内からのアクセスに比べてレイテンシが大きい。詳細には、コプロセッサコンテキストを共有メモリなどに移して、タスクを実行しようとするプロセッサがアクセスしたとしても、コプロセッサコンテキストを共有メモリに移動させるのに要する時間だけシステムの処理効率が低下してしまう。
【課題を解決するための手段】
【０００８】
上記課題を達成するために本発明に係る情報処理装置は、割り当てられたタスクを第１レジスタの内容に基づいて処理を実行する第１処理部と、当該タスクを第２レジスタの内容に基づいて処理を実行する第２処理部と、を含むプロセッサを複数備えるマルチプロセッサを有する情報処理装置であって、前記マルチプロセッサの備えるプロセッサの１つを着目プロセッサとし、当該着目プロセッサに割り当てるタスクを変更する際に、当該着目プロセッサの第１レジスタおよび当該着目プロセッサの第２レジスタが保持している内容をメモリに転送する転送手段と、前記着目プロセッサに割り当てられたタスクが、当該着目プロセッサの第２処理部によって処理を開始されることに応じて、当該第２処理部に対応する第２レジスタの内容を前記転送手段によって前記メモリに転送することを抑制する制御手段とを有することを特徴とすることを特徴とする。
【発明の効果】
【０００９】
本発明によれば、コンテキストの転送回数を低減させ、システムの処理効率を向上させることができる。
【図面の簡単な説明】
【００１０】
【図１】情報処理装置の全体構成を示すブロック図である。
【図２】システム構成の概略を示すブロック図である。
【図３】タスクスイッチ時の処理を示すフローチャートである。
【図４】タスク終了時処理を示すフローチャートである。
【図５】ＦＰＵ例外時の処理を示すフローチャートである。
【図６】従来技術のスケジューリング例を示す概念図である。
【図７】本発明によるスケジューリング例を示す概念図である。
【図８】システムコールＦＰＳｔａｒｔの処理を示すフローチャートである。
【図９】システムコールＦＰＦｉｎｉｓｈの処理を示すフローチャートである。
【図１０】システムコールを用いた疑似コードによるタスクプログラムの例である。
【図１１】本発明によるスケジューリング例を示す概念図である。
【図１２】情報処理装置１００の概略動作を示すフローチャートである。
【図１３】（ａ）ＦＰＵ制御ブロックの概略図であり、（ｂ）プロセッサ割り当て情報の概略図であり、（ｃ）タスク毎に退避させたメインコンテキストとサブコンテキストの概略図である。
【発明を実施するための形態】
【００１１】
＜実施形態１＞
まず、図１を参照して、本発明の実施形態１に係る情報処理装置１００の概略構成を示す。マルチプロセッサチップ１０１は、プロセッサコア（第１処理部、主処理ユニット）１１１と、コプロセッサ（第２処理部、副処理ユニット）としてＦＰＵ（浮動小数点演算ユニット：Ｆｌｏａｔｉｎｇ  Ｐｏｉｎｔ  ｎｕｍｂｅｒ  ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１０と、を備えるｎ個のプロセッサ１０９を複数備える（ここで、ｎは２以上の整数）。プロセッサコア１１１とＦＰＵ１１０とはそれぞれ、デコーダー論理、演算回路を備えている。ここでＦＰＵ１１０は、単精度および倍精度の浮動小数点形式において、加算、減算、乗算除算、積和演算、平方根演算が可能であり、ダイサイズやゲート数および平均消費電力がプロセッサコア１１１よりも小さい。そして、ＦＰＵ１１０は、ＩＥＥＥ  ７５４（ＩＥＥＥ：Ｔｈｅ  Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｅｎｇｉｎｅｅｒｓ、  ＩＥＥＥ７５４は浮動小数点数演算標準）で定義されている浮動小数点例外（無効操作、０による除算、オーバフロー、アンダーフロー、不正確）をサポートしているものとする。
【００１２】
また、本実施形態では、ＦＰＵ１１０は無効、有効の状態を、自身の属するプロセッサ１０９のプロセッサコア１１１によって制御される。例えば、ＦＰＵ１１０が無効状態である場合は、ＦＰＵ１１０に供給するクロックを下げたり、ＦＰＵ１１０に供給する電圧をさげたり、ＦＰＵ１１０への演算命令を無視する設定をしたりする等しているため、有効状態に切り替えるまでＦＰＵ１１０は演算命令を受け付けて処理しない。そこで、ＦＰＵ１１０が無効状態のときにＦＰＵ１１０の機能を利用しようとすると、ＦＰＵ１１０を利用可能な有効の状態に設定し直す必要が有る。例えば、無効状態のＦＰＵ１１０に浮動小数点演算命令が発行されると、ＦＰＵ１１０は例外を自身の属するプロセッサ１０９のプロセッサコア１１１に通知する、そして通知を受けたプロセッサコア１１１が例外通知を発行したＦＰＵ１１０を有効状態に切り替える。有効状態と無効状態とを切り替える詳細な状況については後述する。
【００１３】
各プロセッサコア１１１はバス１０８を介してＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０２およびＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０３にアクセスできる。ＲＯＭ１０２にはＯＳプログラム１０４およびタスクプログラム１０５が製品出荷時などに保持される。また、情報処理装置１００は起動時にマルチプロセッサ１０１などによってＲＯＭ１０２やＨＤＤが保持している圧縮データを解凍してＲＡＭ上に、後述の処理を実現するためのプログラム（ＯＳプログラム１０４やタスクプログラム１０５）を配置する。また、タスク制御ブロック１０６およびＦＰＵ制御ブロック１０７を保持するための領域をＲＡＭ上に確保する。なお、オペレーションシステムとは、ＯＳプログラム１０４に属するバイナリコードがプロセッサコア１１１の少なくとも１つで実行することで実現される。微視的にはＯＳプログラム１０４のバイナリコードとタスクプログラム１０５のバイナリコードは、時分割的にプロセッサコア１１１によって実行されるが、巨視的にはタスクプログラムの実行中もＯＳは起動状態にあるとされる。
【００１４】
なお、各プロセッサ１０９はコンテキストを保持するためのレジスタセット１１２（第２レジスタ）およびレジスタセット１１３（第１レジスタ）を備えている。レジスタセット１１３は、３２ビットのレジスタを複数含む。この複数のレジスタには、汎用レジスタや、プログラムカウンタ（１命令毎に１ワードずつインクリメントした値を格納する）、状態レジスタ（論理演算装置のステータスフラグのコピー、現在のプロセッサモード、割込み無効化フラグ等を格納する）が含まれる。
【００１５】
また、レジスタセット１１２は、６４ビットのレジスタを１６本備えるものとする。こ１６本のレジスタのうちには、単精度浮動小数点数値や６４ビット整数をそれぞれ保持できる複数のＦＰＵ汎用レジスタと、ＦＰＵ１１０のモード（ユーザアクセス、特権アクセス）などを保持するＦＰＵシステムレジスタと、を少なくとも含む。
【００１６】
図に示すように、レジスタセットのうち、ＦＰＵ１１０と対応づけられＦＰＵ１１０が主に利用するレジスタ群（通常は浮動小数点レジスタなど）と、プロセッサコア１１１と対応づけられプロセッサコア１１１が主に利用するレジスタ群（汎用レジスタなど）は区別されている。ここで、プロセッサコア１１１は、同一のプロセッサ１０９内のＦＰＵ１１０のレジスタセット１１２には直接アクセス（読出した内容を自レジスタにコピー、書込み、読出した内容を用いて演算）できる。同様に、ＦＰＵ１１０についても同一のプロセッサ１０９内のプロセッサコア１１１のレジスタセット１１３には直接アクセスできる。
【００１７】
レジスタセット１１２やレジスタセット１１３で保持するコンテキストは、設定値（プログラムカウンタの内容、プロセスのステータス、ポインタ等の状態や設定を示す値、ＯＳ固有の情報）や中間値（タスクプログラム１０５でアクセスする値、中間処理結果、条件コード）を含むデータ構造体である。なお、以降の説明では、プロセッサコア１１１が実行するタスクに関するコンテキストをメインコンテキスト、ＦＰＵ１１０が実行するタスクに関するコンテキストをサブコンテキスト（またはＦＰＵコンテキスト）と呼称する。
【００１８】
タスク制御ブロック１０６は、タスクを割り当て可能（移動可能）なプロセッサの識別情報を保持するプロセッサ割り当て情報（図１３ｂ参照）と、退避させたメインコンテキストと退避させたサブコンテキスト（図１３ｃ参照）と、を含む。ＦＰＵコンテキストはタスク制御ブロック１０６内ではなくタスク毎のスタック領域内に設けてもよい。ＦＰＵ制御ブロック１０７は、ＦＰＵ１１０を利用中のタスク（ＦＰＵ１１０が処理中のタスク）を識別するためのＦＰＵ利用タスク識別情報（図１３ａ参照）を保持する。図１３（ａ）〜（ｃ）の詳細は後述する。
【００１９】
本実施形態では、起動時にＦＰＵ１１０を無効状態にしておくことでＦＰＵが処理を開始することをＦＰＵ例外によって検出する。そして検出に応じて、後述のオペレーティングシステムがＦＰＵを利用しているタスクの識別情報をＦＰＵの識別情報と対応づけてＦＰＵ制御ブロック１０７に登録する。このようにすることで、例えば、ＦＰＵを利用するタスクからＦＰＵを利用しないタスクにスイッチ（変更）する時に、ＦＰＵコンテキストを転送しないようにすることができる。
【００２０】
図２を参照して、本実施形態に係るオペレーティングシステム２０１の機能構成の模式図を示す。ｍ個のタスクは、前述のタスクプログラム１０５に複数含まれるプログラム単位であり、実行待ちのタスクは優先度の高い順にオペレーティングシステム２０１によって、各プロセッサ１０９に割り当てられる。オペレーティングシステム２０１は、予め記憶されている「タスクの種類と優先度との対応」を参照し、各タスクの優先度を判断する。
【００２１】
オペレーティングシステム（以下、ＯＳと称す）２０１はプロセッサ１０９の少なくとも１つで実行され、コンテキスト管理機能２０３、プロセッサ割り当て管理機能２０４およびコプロセッサコンテキスト管理機能２０５を実現する（これらの機能は理解がし易いようにＯＳの機能を分類し、抽象化したものである。各機能を実現するための詳細は後述する）。
【００２２】
好ましくは、ＯＳ２０１を実現するためのバイナリコードは複数のプロセッサ１０９の各々が実行する。各プロセッサ１０９のプロセッサコア１１１は、タスク処理の合間などにＯＳのコードを実行し、コンテキスト管理機能２０３、プロセッサ割り当て管理機能２０４およびコプロセッサコンテキスト管理機能２０５を実現する。ここで、プロセッサ割り当て管理機能２０４はいわゆる一般的なスケジューラである。ここで、スケジューラが起動されるタイミングとしては、プロセッサコア１１１のキュー（不図示）の状態が変化したときや、スケジューリングの禁止が解除されたとき、プロセッサコア１１１が割込み処理から復帰するときなどがある。また、スケジューラは各プロセッサ１０９で独立的に動作することもできるし、プロセッサ０のスケジューラがプロセッサ間割込みをプロセッサ１、３に発行してプロセッサ１、３のスケジューラを起動することもできる。
【００２３】
図２の例では、ＯＳ２０１が、タスク０をプロセッサ０に割り当て、タスク１をプロセッサ１に、そしてタスクｍをプロセッサｎに割り当てている。
【００２４】
次に、図１２のフローチャートを参照して情報処理装置１００の概略動作を説明する。
【００２５】
情報処理装置１００の電源がＯＮになると、ハードウェアレベルで情報処理装置１００の各構成を初期化する。この時点で、ＯＳプログラム１０４のバイナリコードをＲＯＭ１０２やＨＤＤなどの不揮発性記憶媒体から揮発性媒体のＲＡＭ１０３へ転送する。また、プロセッサコア１１１およびＦＰＵ１１０を初期化し、さらに各ＦＰＵ１１０を無効状態に設定する。プロセッサコア１１１とＦＰＵ１１０の初期化に際して、レジスタセット１１２およびレジスタセット１１３も初期化する。
【００２６】
次にステップＳ１２０２において、マルチプロセッサ１０１のプロセッサ１０９がＲＡＭ１０３に転送されたＯＳプログラム１０４のバイナリコードを実行してＯＳを起動する。さらにＯＳプログラム１０４を実行するマルチプロセッサ１０１の処理によって、タスク制御ブロック１０６およびＦＰＵ制御ブロック１０７を保持するための領域をＲＡＭ上に確保する。次に、タスクプログラム１０５のバイナリコードをＲＯＭ１０２やＨＤＤなどの不揮発性記憶媒体から揮発性媒体のＲＡＭ１０３へ転送する。
【００２７】
そして、ＯＳ２０１によって、スケジューリングする対象の複数のタスク２０２をマルチプロセッサ１０１のプロセッサ１０９に割り当てる。
【００２８】
次にステップＳ１２０３において、マルチプロセッサ１０１のプロセッサコア１１１は、ＦＰＵ例外が発生したかどうかを判断する。タスクスイッチの発生は不図示のタイマからの割込みや、スケジューラからの通知、
ＦＰＵ例外が発生していれば、ステップＳ１２０７において、コプロセッサコンテキスト管理機能２０５が、後述の「ＦＰＵ例外時処理」を実施する。
【００２９】
ＦＰＵ例外が発生していなければ、ステップＳ１２０４において、プロセッサ１０９に割り当てているタスクが終了したかどうかをマルチプロセッサ１０１が判断する。タスクが終了したかどうかの判断は、タスクを実行しているプロセッサコア１１１が実行中のタスクの最後の命令まで処理したかどうかで自律的に判断できる。
【００３０】
タスクが終了していれば、ステップＳ１２０８において、コプロセッサコンテキスト管理機能２０５が、後述の「タスク終了時処理」を実施する。
【００３１】
タスクが終了していなければ、ステップＳ１２０５において、タスクスイッチを発生させるかどうかをマルチプロセッサ１０１で実現されるプロセッサ割り当て管理機能２０４が、判断する。
【００３２】
タスクスイッチさせるかどうかは不図示のタイマからの割込みや、実行中のタスクがブロックされたことや、ユーザやアプリからのタスク切り替え指示の有無によって判断できる。タスクのブロックとは、タスクがＩ／Ｏ待ちや、タスク間の同期や、タスク間のメッセージ受信待ちに起因して、タスクの処理が進められない状態である。
【００３３】
タスクスイッチさせる場合は、ステップＳ１２０９において、コプロセッサコンテキスト管理機能２０５が、後述の「タスクスイッチ時処理」を実施する。
【００３４】
タスクスイッチさせない場合、ステップＳ１２０６において、マルチプロセッサ１０１が情報処理装置１０１の終了を判断する。例えば、マルチプロセッサ１０１で実施しているタスクのうちＯＳ２０１以外の全てのタスクの処理が完了したことに応じてシャットダウンするように設定されている条件下でＯＳ２０１以外のタスクが完了したり、ユーザからの強制シャットダウン指示を受けたりすれば、シャットダウンする。
【００３５】
終了すべきでなければ、ステップＳ１２１０でＯＳ２０１が、スケジューラの他の機能を実施する。例えば、新しいタスクが発生すれば、その新しいタスクをステップＳ１２０２と同様にしてプロセッサ１０９に割り当てる。
【００３６】
なお、図１２についてステップＳ１２０２〜Ｓ１２１０は各プロセッサ１０９で独立して並行的に処理されることが好ましい。このとき、各プロセッサ１０９は自プロセッサを着目プロセッサとして処理を実施する。また、ステップＳ１２０３〜ステップＳ１２０５（ステップＳ１２０７〜Ｓ１２１０）は並列的な関係であり、どの順に処理してもよい。
【００３７】
（タスク割り当て）
次に、ステップＳ１２０２やステップＳ１２１０における、ＯＳ２０１のプロセッサ割り当て管理機能２０４によるタスク２０２の割り当て処理について詳細を説明する。ここで、複数のタスク２０２は、ＦＰＵ１１０を利用する浮動所数点演算命令を含むタスク（図１０参照）や、含まないタスクが混在しているプロセッサ割り当て管理機能２０４は「Ｆｉｘｅｄ−ｐｒｉｏｒｉｔｙ  ｐｒｅ−ｅｍｐｔｉｖｅ  ｓｃｈｅｄｕｌｉｎｇ」と呼ばれる方式でレディ状態（実行可能な待ち状態）のタスク２０２をプロセッサ１０９に割り当てる。
【００３８】
コンテキスト管理機能２０３はプロセッサコア１１１のコンテキストをタスク毎にタスク制御ブロック１０６上で管理し、プロセッサ割り当て管理機能２０４は予め設定されている情報から定まる優先度に基づいてタスク２０２−０〜ｍを割り当てるプロセッサ１０９を決定する。例えば、コンテキスト管理機能２０３が図１０に示すタスクＡをプロセッサ０に割り当てると、プロセッサコア０がタスクＡのバイナリコードを解釈し、所定単位毎のバイナリコードを転送命令によってＲＡＭ１０３からプロセッサ０のプロセッサコア０へ転送する。プロセッサコア０のフェッチ論理、デコーダー論理によってプロセッサコア０へ読み込んだ命令の中に浮動小数点演算命令があれば、プロセッサコア０は浮動小数点演算命令を含むＦＰＵ用の命令をＦＰＵ０に転送して、ＦＰＵ０で処理させる。
【００３９】
ＦＰＵ０は浮動小数点演算の結果をレジスタセット１１２に格納し、ＦＰＵ０かプロセッサコア０がレジスタセット１１２の演算結果をレジスタセット１１３に転送する。レジスタセット１１３に保持した浮動小数点演算結果を利用した処理が、プロセッサコア０に残っていればプロセッサコア０はさらに処理を行う。プロセッサコア０で処理が残っていなければ、プロセッサコア０は演算結果をＲＡＭ１０３へ出力する。
【００４０】
そして、コンテキスト管理機能２０３は、プロセッサ割り当て管理機能２０４が割り当てを決定したタスクの識別情報（タスクＩＤ）と、割り当て先のプロセッサ１０９の識別情報（プロセッサＩＤ）とを関連づけて、タスク制御ブロック１０６に保持させる。また、コンテキスト管理機能２０３は、タスク制御ブロック１０６のプロセッサ割り当て情報を更新する。ここで、情報処理装置１００が起動してから１回もタスクスイッチが発生していない段階では、メインコンテキストおよびＦＰＵコンテキストはタスク制御ブロック１０６に退避されていない。
【００４１】
そして、コプロセッサコンテキスト管理機能２０５は、プロセッサ割り当て管理機能２０４が割り当てを決定したタスクの識別情報と、割り当て先のＦＰＵ１１０の識別情報（ＦＰＵ＿ＩＤ）とを関連づけて、ＦＰＵ制御ブロック１０７に保持させる。
【００４２】
（ＦＰＵ例外時処理）
次に、ステップＳ１２０７における、ＯＳ２０１のＦＰＵ例外時処理について詳細を説明する。図５はＦＰＵ１１０からの例外通知を用いる場合のコプロセッサコンテキスト管理機能２０５によるＦＰＵ例外時の動作を示すフローチャートである。本フローチャートの説明では例外通知を発行したＦＰＵ１１０を含むプロセッサ１０９の動作に着目して説明する。
【００４３】
まず、ステップＳ５０１において例外通知を発行したＦＰＵ１１０と同じプロセッサ１０９に属するプロセッサコア１１１が、例外通知を発行したＦＰＵ１１０を有効化する。
【００４４】
コプロセッサコンテキスト管理機能２０５はステップＳ５０２においてＦＰＵ制御ブロック１０７を参照し、例外通知を発行したＦＰＵ１１０を利用中のタスクが存在するかどうかを確認する。
【００４５】
例外通知を発行したＦＰＵ１１０を利用中のタスクとは、例外通知を発行したＦＰＵ１１０についてＦＰＵコンテキストがタスク制御ブロック１０６に退避されずにＦＰＵ１１０に残っているタスクのことである。従って、ステップＳ５０２は、例外通知を発行したＦＰＵ１１０と同じプロセッサ１０９に属するプロセッサコア１１１が、例外通知を発行したＦＰＵ１１０のＦＰＵコンテキストがレジスタセット１１２に残っているかどうかを判定していることに相当する。
【００４６】
ステップＳ５０２で例外通知を発行したＦＰＵ１１０を利用中のタスクが存在した場合は、ステップＳ５０３において、ステップＳ５０２で確認したＦＰＵ利用中のタスクの識別情報と実行中のタスクの識別情報が一致するかどうかを確認し、一致した場合は処理を終了する。一致した場合は、例外通知を発行したＦＰＵ１１０のレジスタセット１１２に残っているＦＰＵコンテキストに沿ってそのまま処理を再開すればよいためである。
【００４７】
一方で、ステップＳ５０３において一致しなかった場合は、ステップＳ５０４において例外通知を発行したＦＰＵ１１０を利用中のタスクのＦＰＵコンテキストを、例外通知を発行したＦＰＵ１１０と同じプロセッサに属するプロセッサコア１１１が、タスク制御ブロック１０６内の当該タスク用の領域に退避（転送）する。これは、プロセッサ１０９がスイッチ前のタスク（第２タスク）からスイッチ後のタスク（第１タスク）へタスクスイッチしたことに起因することが多い。
【００４８】
そして、ステップＳ５０５では例外通知を発行したＦＰＵ１１０を利用中のタスク（ＦＰＵコンテキストを退避したタスク）についてプロセッサ間移動を許可する。ＦＰＵ１１０を利用中のタスクが存在しなかった場合は、ステップＳ５０３〜Ｓ５０５を実行しない。
【００４９】
ステップＳ５０６では、実行中タスクのＦＰＵコンテキストとして、タスク制御ブロック１０６内に退避していたＦＰＵコンテキストをＦＰＵ１１０のレジスタセット１１２に転送することでＦＰＵコンテキストを復帰する。
【００５０】
ステップＳ５０７では、例外が通知されたプロセッサ１０９について実行中のタスクの識別情報をＦＰＵ利用タスクの識別情報としてＦＰＵ制御ブロック１０７に設定する。
【００５１】
ステップＳ５０８では、この実行中タスクのプロセッサ間移動を禁止し、ＦＰＵ例外時処理を終了する。
【００５２】
プロセッサ間のタスクの移動の許可や禁止は、コプロセッサコンテキスト管理機能２０５が、タスク制御ブロック１０６内に割り当て可能なプロセッサ１０９の識別情報（プロセッサＩＤ）だけを保持させることにより行う。
【００５３】
つまり、タスクをプロセッサ１０９に割り当てる場合（割り当て直す場合）は、タスク制御ブロック１０６を参照し、タスク制御ブロック１０６に識別情報が登録されているプロセッサ１０９の中からタスクを割り当てるプロセッサを決定する。従って、タスク制御ブロック１０６に識別情報が登録されていないプロセッサへのタスク割り当てを制限することで、登録されていないプロセッサへのタスクの移動を抑制する。仮に、すべてのプロセッサ１０９の識別情報をタスク制御ブロック１０６に登録すると、どのプロセッサ間についてもタスクの移動が許可（抑制が解除）されることになる。
【００５４】
（タスクスイッチ時処理）
次に、図３のフローチャートを参照して、ステップＳ１２０９における、コプロセッサコンテキスト管理機能２０５によるタスクスイッチを発生させる際の処理について説明する。なお、タスクスイッチにともなうプロセッサコアのメインコンテキストについてのコンテキストスイッチの詳細な説明は省略する。
【００５５】
ステップＳ３０１において、コプロセッサコンテキスト管理機能２０５はＦＰＵ制御ブロック１０７を参照し、タスクスイッチを発生させるプロセッサ１０９について、ＦＰＵ１１０を利用中のタスクが存在するかどうかを確認する。ＦＰＵ１１０を利用中のタスクが存在しなかった場合は処理を終了する。ＦＰＵ１１０を利用中のタスクとは、ＦＰＵコンテキストがタスクスイッチを発生させるプロセッサのレジスタセット１１２に残っているタスクに相当する。
【００５６】
一方で、ＦＰＵ１１０を利用中のタスクが存在した場合は、ステップＳ３０２に遷移し、ＦＰＵ１１０を利用中のタスクの識別情報と次に実行するタスク（スイッチ直後に実行するタスク）の識別情報とが等しいかどうかを確認する。
【００５７】
ＦＰＵを利用中のタスクの識別情報と次に実行するタスクの識別情報とが等しくなかった場合は、ステップＳ３０３に遷移してタスクスイッチを発生させるプロセッサ１０９のＦＰＵ１１０を無効化する（無効化したＦＰＵ１１０が保持するコプロセッサコンテキストは、別タスクがＦＰＵ１１０を利用開始する際に例外によって、メモリに退避する）。一方で、等しかった場合は、スイッチ直後にＦＰＵ１１０で浮動小数点演算を含む処理を実施する可能性があるためステップＳ３０４においてタスクスイッチの発生したプロセッサ１０９のＦＰＵ１１０を有効化し、タスクスイッチ時の処理を終了する。なお、ＦＰＵ利用中タスクの確認のオーバヘッドが大きい場合などは、タスクスイッチ時に一旦、ＦＰＵを常に無効化するように制御してもよい。その場合であっても、実際に無効状態のＦＰＵ１１０に浮動小数点演算命令が発行されると、ＦＰＵ例外によってＦＰＵ１１０が有効状態に設定される。
【００５８】
（タスク終了時処理）
図４はコプロセッサコンテキスト管理機能２０５によるタスク終了時の動作を示すフローチャートである。タスク終了時にはＦＰＵ制御ブロック１０７からこのタスクに関するエントリ（ＦＰＵ利用タスク情報保持領域）をクリア（破棄）し、終了したタスクが利用していたＦＰＵ１１０を無効化する。
【００５９】
ステップＳ４０１においてコプロセッサコンテキスト管理機能２０５は、終了したタスクに関するＦＰＵ利用タスク情報保持領をクリアする。さらにコプロセッサコンテキスト管理機能２０５は、ステップＳ４０２において終了したタスクに関わるＦＰＵ１１０を無効化し、タスク終了時処理を終了する。
【００６０】
（タスク制御ブロックとＦＰＵ制御ブロック）
図１３（ａ）は、ＦＰＵ１１０を利用中のタスク（ＦＰＵ１１０が処理中のタスク）を識別するためのＦＰＵ利用タスク識別情報である。ここでは理解の簡便のためテーブルで示しているが、プロセッサコア１１１で解釈できる形式であれば単純なデータ列であってもよい。また、プロセッサ１０９の識別情報など、ＦＰＵ１１０を抽象的に指摘できるその他の情報をＦＰＵ利用タスク識別情報として用いてもよい。
【００６１】
図１３（ｂ）は、プロセッサ割り当て情報であり、タスク毎にそのタスクを割り当て可能（移動可能）なプロセッサの識別情報を保持する。プロセッサ１〜ｎが同等の機能を備えるプロセッサで、タスク１について移動が制限されていない場合は、タスク１について全てのプロセッサの識別情報をプロセッサ割り当て情報として保持する。
【００６２】
図１３（ｃ）は、タスク毎に、退避させたメインコンテキストと退避させたサブコンテキストとである。図中のメインコンテキストとサブコンテキストの番号はプロセッサコア１１１の番号やＦＰＵ１１０の番号である。この例であると、タスクＩＤが３のタスクについて、プロセッサコア１のメインコンテキスト１と、ＦＰＵ１のサブコンテキスト１と、を保持している。また、タスクＩＤが４のタスクと８のタスクについて、プロセッサコア２のメインコンテキスト２と、ＦＰＵ１のサブコンテキスト２と、を保持している。ここで、タスクＩＤが異なれば実施する処理が異なることが多いので、同じプロセッサコア１１１やＦＰＵ１１０に関するコンテキストであっても、その内容が異なる場合が殆どである。
【００６３】
（スケジューリングの例）
次に、従来技術によるスケジューリングと本実施形態によるスケジューリングを比較し、本実施形態におけるＦＰＵコンテキストの扱いを説明する。
【００６４】
図６はマルチプロセッサのひとつのプロセッサに着目し、着目したプロセッサについて複数のタスク（タスク０、タスク１）が実行される様子を示す。横軸は実行時間の遷移を示し、図６の例であるとタスク０の実行から開始され、３回のタスクスイッチが行われる。なお、ＦＰＵは常に有効状態にあり、図中のタスクにおいてＦＰＵを利用する箇所を両矢印で表記する。ＦＰＵを利用するかどうかは、タスクのプログラムにＦＰＵで実行する命令が含まれているかどうかによって判別すればよい。
【００６５】
従来技術によるスケジューリングでは、各タスクでＦＰＵを利用するかどうかを考慮しておらず、タスクスイッチの度にメインコンテキストと一緒にＦＰＵコンテキストが転送（退避、復帰）される。例えば、ＦＰＵコンテキストとして８バイト（６４ビット）のレジスタが１６本ある場合を考えると、例として挙げたスケジュールでは、３回のタスクスイッチにより合計で７６８バイトのＦＰＵコンテキストに相当するデータの転送が行われていることになる。しかし、図６の例においてタスク０からタスク１にタスクスイッチを行ってから次のタスクスイッチが発生するまでの間、タスク０はＦＰＵの利用が中断されている状態であるが、タスク１ではＦＰＵを利用していない。従って、タスク０からタスク１にタスクスイッチを行う際に、タスク０に関するＦＰＵコンテキストを退避させる処理が無駄になってしまっている。
【００６６】
図７は、マルチプロセッサのひとつのプロセッサ（第１プロセッサ）上でふたつのタスク（タスク０、タスク１）が実行される場合（図６と同様）の本実施形態によってスケジューリングし処理させた例である。図７では、ＦＰＵが無効状態でシステムを開始するので、タスク０がＦＰＵの利用を開始した時点でＦＰＵ例外がプロセッサコア１１１に通知される。
【００６７】
そして、本実施形態では、このＦＰＵ例外によりＦＰＵの利用開始（処理開始）を検出し、ＦＰＵ１１０を有効化（有効状態に変更）する。そして、図７の三回のタスクスイッチでは、ＦＰＵ１１０は順に「無効化、有効化、無効化」と設定されるが、このタスクスイッチではＦＰＵコンテキストの転送（退避、復帰）は行われない。そのため、ＦＰＵコンテキストの退避、復帰を行わないタスクスイッチにおいては、ＦＰＵコンテキストの内容を転送する時間を削減できる。
【００６８】
ＦＰＵコンテキストの退避、復帰が行われるのは、三回目のタスクスイッチの後にタスク１がＦＰＵ演算を行ったことにより発生したＦＰＵ例外時の処理のタイミングだけである。従って、ＦＰＵコンテキストとして８バイトのレジスタが１６本ある場合を考えると、図７の例では、ＦＰＵコンテキストの管理において２５６バイトのＦＰＵコンテキストに相当するデータの転送だけですむ。
【００６９】
以上のように、実施形態１によれば、タスクスイッチ毎に転送するＦＰＵコンテキストの転送回数を低減し、コプロセッサのコンテキストスイッチに伴うオーバヘッドを低減できる。
【００７０】
なお、図１の例ではコプロセッサとしてＦＰＵを図示しているが、本発明におけるコプロセッサはＦＰＵに限定されるものではなく、ベクトル演算器、画像処理器（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔなど）、デバッグ機構制御器、ＩＯ処理装置、メモリ管理装置（ＭＭＵ）、ＤＭＡ（ダイレクトメモリアセクス制御装置）として機能するコプロセッサであってもよい。また、プロセッサ１０９毎に複数のコプロセッサを備えてもよいし、プロセッサ１０９毎に機能の異なるコプロセッサを備えてもよい。
【００７１】
なお、上述の説明では、説明の簡便のためタスク制御ブロック１０６が、タスクを割り当て可能なプロセッサ１０９の識別番号のみを保持する例について説明したが、各プロセッサの識別番号と割り当て可否（移動可否）とを対応づけたテーブルを、プロセッサ割り当て情報として保持させてもよい。
【００７２】
なお、上述の説明では説明の簡便のため、ＲＯＭ１０２がＯＳプログラム１０４とタスクプログラム１０５だけを保持している例を説明したが、ＲＯＭ１０２には情報処理装置１００が立ちあがった時にハードウェアレベルの初期設定を実施するＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）やファームウェアを保持させてもよい。また、ＲＯＭ１０２としてはマスクロムであってもよいし、フラッシュメモリであってもよい。また、その場合は、ステップＳ１２０１において、マルチプロセッサ１０１がブートローダを読み込み、ＢＩＯＳまたはファームウェアの処理によって、起動時にハードウェアレベルで情報処理装置１００の各構成を初期化（プロセッサコア１１１およびＦＰＵ１１０を初期化し、ＦＰＵ１１０を無効状態に設定することを含む）するようにすればよい。なお、組込みＯＳなどでは、ＢＩＯＳとファームウェアとＯＳとが一体的なデータ構造であることがあり、ステップＳ１２０１とステップＳ１２０２の境界が不明瞭なこともある。
【００７３】
＜実施形態２＞
実施形態２では、実施形態１について例外処理の代わりにシステムコールを用いる。具体的には、プロセッサコア１１１が、ＦＰＵ１１０の利用開始を通知するシステムコールと、利用終了を通知するシステムコールとを、ＦＰＵ１１０の開始検出または終了検出に利用する。実施形態１と同一機能を有する構成や工程には同一符号を付すとともに、構成的、機能的にかわらないものについてはその説明を省略する。
【００７４】
まず、図８のフローチャートを参照して、本実施形態の動作を説明する。
【００７５】
図８はコプロセッサコンテキスト管理機能２０５によるＦＰＵの利用開始を通知するためのシステムコールＦＰＳｔａｒｔ発行時の動作を示すフローチャートである。ステップＳ８０１においてコプロセッサコンテキスト管理機能はＦＰＵが無効かどうかを確認する。ＦＰＵが有効であった場合は、処理を終了する。一方で、ＦＰＵが無効であった場合は、ステップＳ８０２においてＦＰＵを有効化する。ステップＳ８０３においてはＦＰＵ利用タスク識別情報保持領域を参照し、ＦＰＵを利用中のタスクが存在するかどうか確認する。
【００７６】
ＦＰＵ利用中タスクが存在した場合は、ステップＳ８０４においてそのタスクのＦＰＵコンテキストをタスク制御ブロック１０６に退避し、ステップＳ８０５においてプロセッサ間移動を許可する。プロセッサ間の移動制御は実施形態１と同様であるため詳細を省略する。一方で、ＦＰＵ利用中タスクが存在しなかった場合は、ステップＳ８０４およびステップＳ８０５を実行しない。ステップＳ８０６においてはＦＰＵ利用タスク識別情報保持領域にシステムコールＦＰＳｔａｒｔを発行したタスクを設定し、ステップＳ８０７においてこのタスク（発行タスク）のプロセッサ間移動を禁止し、システムコールＦＰＳｔａｒｔ発行時処理を終了する。
【００７７】
図９はコプロセッサコンテキスト管理機能２０５によるＦＰＵの利用終了を通知するためのシステムコールＦＰＦｉｎｉｓｈ発行時の動作を示すフローチャートである。ステップＳ９０１においてコプロセッサコンテキスト管理機能はＦＰＵが有効かどうかを確認する。ＦＰＵが無効であった場合、処理を終了する。一方で、ＦＰＵが有効であった場合、ステップＳ９０２においてＦＰＵを無効化する。ステップ９０３においてＦＰＵ利用タスク識別情報保持領域をクリアする。ステップＳ９０４においてシステムコールを発行したタスクのプロセッサ間移動を許可し、システムコールＦＰＦｉｎｉｓｈ発行時処理を終了する。
【００７８】
次に、図１０の疑似コードを参照して実施形態２によるオペレーティングシステムのシステムコールを利用したタスクプログラムの記述例を説明する。タスクプログラムでは、浮動小数点演算範囲をシステムコール「ＦＰＳｔａｒｔ（）；」とシステムコール「ＦＰＦｉｎｉｓｈ（）；」により囲む（以降これらのシステムコールを、単にＦＰＳｔａｒｔ、ＦＰＦｉｎｉｓｈと表記する）。タスクがＦＰＳｔａｒｔを発行するよりも前に仮にＦＰＵを利用した場合には、ＦＰＵ例外が発生し、プロセッサコア１１１によりＦＰＵが有効化される。一方、タスクがシステムコールＦＰＦｉｎｉｓｈを発行した時点よりも後にＦＰＵを利用した場合、ＦＰＵコンテキストが破壊される可能性がある。したがって、本実施形態では、ＦＰＵの利用が確実に完了してからシステムコールＦＰＦｉｎｉｓｈを発行するようにタスクプログラムを構成している。
【００７９】
次に、実施形態１と実施形態２によるスケジューリングを比較し、実施形態２におけるＦＰＵコンテキストの扱いを説明する。
【００８０】
図１１は、図７と同等のタスクを本実施形態による情報処理装置でスケジューリングさせた例である。図１１では浮動小数点演算が行われる前にシステムコールＦＰＳｔａｒｔが発行される。実施形態２では、このシステムコールによりコプロセッサ利用開始が検出され、ＦＰＵ例外を発生させずにＦＰＵが有効化される。そして、タスク０による浮動小数点演算が終了した後にシステムコールＦＰＦｉｎｉｓｈが発行される。このシステムコールによりコプロセッサ利用終了が検出される。そのため、三回目のタスクスイッチ後にもＦＰＵコンテキストの転送（退避、復帰）が行われていない。従って、図１１の例では、ＦＰＵコンテキストの管理においてＦＰＵコンテキストに相当するデータを全く転送しなくてすむ。
【００８１】
以上のように、実施形態２によれば、システムコールをプログラムに埋め込むことにより、タスクスイッチ毎に転送するＦＰＵコンテキストの転送回数をさらに少なくできる。また、一般的に、組込みオペレーティングシステムではシステムコールは関数コールとして実現され、例外処理を用いる場合よりもオーバヘッドを軽減できる。さらに、システムコールＦＰＦｉｎｉｓｈは、確実にコンテキストの退避が不要になったことを通知するので、その直後のＦＰＵ利用開始時に必要となっていたＦＰＵコンテキストの退避をしなくてすむ。また、システムコールＦＰＦｉｎｉｓｈの発行タスクは発行時にプロセッサ間を移動可能になるので、システムとしてのスケジュール生成における制約をより短時間で排除できる。
【００８２】
＜その他の実施形態＞
なお、上述の実施形態ではコンテキストスイッチに従って、メインコンテキストやサブコンテキストをメモリ（ＲＡＭ１０３）に退避させる例について説明したが、プロセッサ１０９内に退避させるコンテキストを保持するシャドーレジスタセット（裏レジスタとも呼称する）を配置してもよい。
【００８３】
シャドーレジスタセットは、レジスタセット１１２とレジスタセット１１３との其々について同等のサイズのものを複数、プロセッサ１０９毎に設けることが好ましい。同等のサイズであれば、ハード的なスイッチングによってコンテキストスイッチが可能となる。例えば、レジスタセット１１２（表レジスタ）とシャドーレジスタセット（裏レジスタ）とをセレクタで物理的に切り替えることで、コンテキストの退避のためのデータ転送を発生させずに、ハードコンテキストスイッチが可能となる。ハードコンテキストスイッチをするためには、マルチコアプロセッサ１０１について、ハードコンテキストスイッチ命令を解釈して、セレクタを動作させることで表レジスタと裏レジスタとを切り替えることができる。ハードコンテキストスイッチ自体はザイログ（ＺＩＬＯＧ）社のＺ８０（１９７６年発表）などのプロセッサにおいて古くから実装されている機能であり、その詳細は省略する。
【００８４】
また、上述の実施形態ではプロセッサコア１１１の方がＦＰＵ１１０よりダイサイズが大きいと説明しているが、複数のコアと１つのコプロセッサとを１つのプロセッサ１０９とする構成などでは、必ずしも、ＦＰＵ１１０のダイサイズの方が小さくなるわけではない。
【００８５】
また、上述の実施形態では、ＯＳプログラム１０４や図１２のステップＳ１２０２〜Ｓ１２１０の処理を各プロセッサ１０９において並行的に処理されることも説明したが、プロセッサコア１１１の少なくとも１つで他のプロセッサコア１１１についての処理を実行してもよい。Ｗｉｎｄｏｗｓ（登録商標）系のＯＳのように、複数のプロセッサの負荷に応じて、ＯＳプログラム１０４のバイナリコードを次に実行させる１つ以上のプロセッサを選択して処理をさせてもよい。
【００８６】
また上述の実施形態では、典型的な例として、全プロセッサが同等であるホモジニアスなマルチプロセッサを例として説明したが、一部のプロセッサのみがコプロセッサを有するヘテロジニアスなマルチプロセッサについても本発明は適用可能である。ここで、少なくとも２つ以上のプロセッサが同等なコプロセッサを備えている方が本発明の効果をより顕著にえることができる。
【００８７】
ヘテロジニアスなマルチプロセッサを対象にする場合、ひとつの方法としては、タスクプログラムにおいて、コプロセッサを利用するかどうかを記述し、プロセッサ割り当て管理装置がコプロセッサを備えるプロセッサを、コプロセッサを利用するタスクに割り当てるようにする。別の方法としては、コプロセッサの利用開始を検出した時点で、コプロセッサを必要とするタスクにコプロセッサを備えないプロセッサが割り当てられていた場合、コプロセッサを備えるプロセッサにそのタスクを移動する。これらの方法によれば、本発明は、ヘテロジニアスなマルチプロセッサにも適用可能である。
【００８８】
また、上述の実施形態ではコプロセッサコンテキストの移動を制限するように説明しているが、単純にコアを複数そなえるプロセッサ１０９を複数有するマルチプロセッサ１０１について、コアの１つのコンテキストを他のプロセッサに移動させないようにすることもできる。例えば、汎用的に用意されているマルチコアの１つをＦＰＵ等として設定して使うプロセッサを複数備えるマルチプロセッサ１０１についても、本発明を適用して上述の効果を得ることができる。
【００８９】
また、上述の実施形態ではプロセッサコアやコプロセッサの備えるレジスタセットの内容について一例を説明したが、ＭビットのレジスタをＫ本備えるレジスタセットであればよい（ここでＭ、Ｋの其々は２のべき乗でなくてもよい）。
【００９０】
また、前述の実施形態の構成を成すコンピュータが読取り可能なプログラムコードを外部記憶装置や機能拡張ユニット、記憶媒体から読み込みシステムあるいは装置のコンピュータが実行する形態も考えられる。
【００９１】
上述の実施形態ではＯＳプログラム１０４とタスクプログラム１０５について説明を補足する。ＯＳプログラム１０４とは一般的にＯＳ提供メーカーがＯＳ提供するもので、更新差分（メーカーにより提供されるアップデート部分）も含む。タスクプログラム１０５とは、情報処理装置１００のユーザがＯＳプログラム１０４インストール後に、ＯＳプログラム１０４よりも自由にインストール・アンインストールすることができるものを含む。タスクプログラム１０５とは情報処理装置１００を製造するメーカーが、情報処理装置１００をユーザに提供する前にプリインストールするものであってもよい。
【図１】
2014078072.tif 000003
【図２】
2014078072.tif 000004
【図３】
2014078072.tif 000005
【図４】
2014078072.tif 000006
【図５】
2014078072.tif 000007
【図６】
2014078072.tif 000008
【図７】
2014078072.tif 000009
【図８】
2014078072.tif 000010
【図９】
2014078072.tif 000011
【図１０】
2014078072.tif 000012
【図１１】
2014078072.tif 000013
【図１２】
2014078072.tif 000014
【図１３】
2014078072.tif 000015