(57)【特許請求の範囲】
【請求項１】
マルチタスク・オペレーティングシステムのカーネルを、他のプロセッサがアクセスできないプライベートメモリに実装するステップと、
マルチタスク・オペレーティングシステムのタスク情報を、各プロセッサの内部に設けられるとともに他のプロセッサがアクセス可能である共有メモリに実装するステップと、
ディスパッチを行うプロセッサと前記タスク情報が実装されているプロセッサとの間のデータ転送時間の情報に基づいてディスパッチ対象タスクを決定するステップと、
前記ディスパッチ対象タスクをディスパッチする自プロセッサの共有メモリに、前記ディスパッチ対象タスクのタスク情報が実装されているか否かを判定するステップと、
自プロセッサ以外の他のプロセッサの共有メモリに前記ディスパッチ対象タスクのタスク情報が実装されている場合には、自プロセッサにて前記ディスパッチ対象タスクを実行する前に、前記ディスパッチ対象タスクのタスク情報を前記他のプロセッサの共有メモリから自プロセッサの共有メモリにデータ転送するステップと、
を具備することを特徴とするマルチプロセッサタスク制御方法。
【請求項２】
前記タスク情報に含まれる保存プロセッサ識別子により、前記タスク情報が保存されているプロセッサを管理することを特徴とする請求項１記載のマルチプロセッサタスク制御方法。
【請求項３】
プロセッサ間のデータ転送時間を記述したデータ転送時間テーブルを前記共有メモリ上にシステムで管理し、各プロセッサはディスパッチを行うプロセッサの情報及び前記タスク情報が実装されているプロセッサの情報を用いて、複数のプロセッサ間のデータ転送時間の情報を記憶したデータ転送時間テーブルを参照して、前記データ転送時間が最小になるプロセッサに実装されている前記タスク情報のタスクを前記ディスパッチ対象タスクとして決定することを特徴とする請求項１または請求項２記載のマルチプロセッサタスク制御方法。
【請求項４】
システム起動時に全てのプロセッサのプライベートメモリ上にアプリケーションプログラムをダウンロードし、マスタプロセッサはアプリケーションプログラムのエントリタスクを起動し、残りの全てのプロセッサはアイドルタスクを起動してタスクが割り込まれるのを待つことを特徴とする請求項１から請求項３のいずれかに記載のマルチプロセッサタスク制御方法。
【請求項５】
システムコール発行時にコンテクストの保存及びシステムコール処理を行うステップと、
前記システムコール処理によりタスクの状態が遷移した場合に、ディスパッチを行うプロセッサとタスク情報が実装されているプロセッサとの間のデータ転送時間の情報に基づいてディスパッチ対象タスクを実行可能タスクの中から選択するステップと、
選択した前記ディスパッチ対象タスクのタスク情報が、自プロセッサの共有メモリに実装されているか否かを判定するステップと、
前記ディスパッチ対象タスクのタスク情報が自プロセッサ以外の他のプロセッサの内部に設けられている共有メモリに保存されている場合には、前記他のプロセッサの共有メモリから自プロセッサの内部に設けられている共有メモリに、前記ディスパッチ対象タスクのタスク情報をデータ転送するステップと、
前記タスク情報が転送された前記共有メモリを有するプロセッサにて、前記ディスパッチ対象タスクのディスパッチを行うステップと、
前記ディスパッチ対象タスクをディスパッチした後にコンテクストの復帰とシステムコールからの復帰を行うステップと、
を具備することを特徴とするマルチプロセッサタスク制御方法。
【請求項６】
前記ディスパッチ対象タスクの選択方法は、実行可能状態のタスクのうち最高優先度のタスク全てに対して、ディスパッチを行うプロセッサの情報及び前記タスク情報が実装されているプロセッサの情報を用いて、複数のプロセッサ間のデータ転送時間の情報を記憶したデータ転送時間テーブルを参照して、前記データ転送時間が最小になるプロセッサに実装されている前記タスク情報のタスクを前記ディスパッチ対象タスクとして選択することを特徴とする請求項５記載のマルチプロセッサタスク制御方法。
【請求項７】
ディスパッチ方法は、前記ディスパッチ対象タスクが前記自プロセッサに保存されている場合は、実行可能キューより前記ディスパッチ対象タスクを取り出して実行キューに接続し、前記ディスパッチ対象タスクが前記他のプロセッサに保存されている場合は、実行可能キューより前記ディスパッチ対象タスクを取り出して前記自プロセッサにデータ転送して実行キューに接続する一方、前記タスク情報に含まれるタスク制御ブロックの前方リンク及び後方リンクに対して取り出し接続を行い、前記タスク制御ブロック上の保存プロセッサ識別子を変更することを特徴とする請求項５記載のマルチプロセッサタスク制御方法。
【請求項８】
オペレーティングシステムのタスク情報を実装する共有メモリに対して複数のプロセッサがアクセスすることにより、１つのアプリケーションプログラムを構成する複数のタスクを各プロセッサにて実行するマルチプロセッサタスク制御装置であって、
オペレーティングシステムのカーネルが実装されるとともにプロセッサ毎に他のプロセッサがアクセスできないプライベートメモリを具備し、前記共有メモリは各プロセッサの内部に設けられ、ディスパッチを行うプロセッサと前記タスク情報が実装されているプロセッサとの間のデータ転送時間の情報に基づいて決定された実行タスクの前記タスク情報が前記タスクを実行する自プロセッサ以外の他のプロセッサの共有メモリに実装されている場合には、前記他のプロセッサの共有メモリから前記自プロセッサの共有メモリに、実行されるタスクの前記タスク情報が転送されることを特徴とするマルチプロセッサタスク制御装置。
【請求項９】
アプリケーションプログラムを前記プロセッサの外部から複数のプロセッサの夫々へダウンロードするための共通の入出力手段と、
前記複数のプロセッサの夫々に存在するダウンローダと、
前記複数のプロセッサのうちのマスタプロセッサではアプリケーションプログラムのエントリタスクを起動し、スレーブプロセッサではアイドルタスクを起動するイニシャルプログラムローダと、
を具備することを特徴とする請求項８記載のマルチプロセッサタスク制御装置。
【請求項１０】
各プロセッサの内部に設けられるとともに、マルチタスク・オペレーティングシステムのタスク情報を実装するタスク情報記憶手段と、
システムコール処理によって遷移されたタスク状態によって各種キュー制御を行い、自プロセッサがディスパッチ対象タスクを実行しない場合には、自プロセッサの前記タスク情報記憶手段に実装されている前記ディスパッチ対象タスクのタスク情報を、前記ディスパッチ対象タスクを実行する他のプロセッサの前記タスク情報記憶手段へデータ転送するためのタスク情報転送要求を発行するタスク・スケジューリング手段と、
前記タスク・スケジューリング手段によりキュー制御された後の実行状態のタスクの情報及び実行可能状態のタスクの情報と、ディスパッチを行うプロセッサと前記タスク情報が実装されているプロセッサとの間のデータ転送時間の情報に基づいて前記ディスパッチ対象タスクを決定するマッチング決定手段と、
前記タスク情報転送要求により前記ディスパッチ対象タスクのタスク情報の転送を要求された場合には、前記他のプロセッサにて前記ディスパッチ対象タスクの実行を行う前に、前記自プロセッサの前記タスク情報記憶手段から前記他のプロセッサの前記タスク情報記憶手段に対して、前記ディスパッチ対象タスクのタスク情報を転送するタスク情報転送手段と、
を具備することを特徴とするマルチプロセッサタスク制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複数のプロセッサを有するマルチプロセッサシステム上で、複数のタスクから成る１つのアプリケーションプログラム（以後アプリケーションと記述する）を実行させるマルチプロセッサタスク制御方法及びタスク制御装置に関する。
【０００２】
【従来の技術】
従来、マルチプロセッサタスク制御方法は、例えば特開平８―３６５５３号公報に記載されたものが知られている。これは複数のプロセッサと、各プロセッサから共通にアクセス可能な１つの共有メモリと、各プロセッサと共有メモリを接続するシステムバスとから構成されている。マルチタスク・オペレーティングシステムは共有メモリ上に実装される。共有メモリ上のスケジューラは割り込み駆動でマルチプロセッサタスク制御を行う。
【０００３】
【発明が解決しようとする課題】
しかしながら、上記従来のマルチプロセッサタスク制御方法においては、各プロセッサがタスクを実行する際に必ず共有メモリにアクセスしなければならず、システムバスの能力がシステム全体の能力のボトルネックとなり、思ったほどスループットが上がらないという問題がある。
【０００４】
本発明はかかる点に鑑みてなされたものであり、各プロセッサがカーネル及び実行タスクのタスク情報にアクセスする場合であっても、プロセッサ間でバス競合が生ずることのないマルチプロセッサタスク制御方法及びタスク制御装置を提供することを目的とする。
【０００５】
【課題を解決するための手段】
本発明のマルチプロセッサタスク制御方法は、マルチタスク・オペレーティングシステムのカーネルを、他のプロセッサがアクセスできないプライベートメモリに実装するステップと、マルチタスク・オペレーティングシステムのタスク情報を、各プロセッサの内部に設けられるとともに他のプロセッサがアクセス可能である共有メモリに実装するステップと、ディスパッチを行うプロセッサと前記タスク情報が実装されているプロセッサとの間のデータ転送時間の情報に基づいてディスパッチ対象タスクを決定するステップと、前記ディスパッチ対象タスクをディスパッチする自プロセッサの共有メモリに、前記ディスパッチ対象タスクのタスク情報が実装されているか否かを判定するステップと、自プロセッサ以外の他のプロセッサの共有メモリに前記ディスパッチ対象タスクのタスク情報が実装されている場合には、自プロセッサにて前記ディスパッチ対象タスクを実行する前に、前記ディスパッチ対象タスクのタスク情報を前記他のプロセッサの共有メモリから自プロセッサの共有メモリにデータ転送するステップと、を具備するようにした。
【０００６】
この方法によれば、各プロセッサがカーネルにアクセスする場合であっても、プロセッサ間でバスが競合することがないので、スループットを上げることができる。
また、既存のマルチタスク・オペレーティングシステムを、タスク情報等プロセッサ間で共有する必要のある情報だけを特定のメモリ（共有メモリ）に格納するように変更するだけで、容易にマルチプロセッサシステムを実現することができる。
また、各プロセッサが実行中のタスクのタスク情報にアクセスする場合であっても、プロセッサ間でバスが競合することがないので、スループットを上げることができる。
【０００９】
また、本発明のマルチプロセッサタスク制御方法は、上記マルチプロセッサタスク制御方法において、前記タスク情報に含まれる保存プロセッサ識別子により、前記タスク情報が保存されているプロセッサを管理するようにした。
【００１０】
この方法によれば、タスク情報が保存されているプロセッサをタスク情報の１要素として一元管理することができるので、管理が容易になる。
【００１１】
また、本発明のマルチプロセッサタスク制御方法は、上記マルチプロセッサタスク制御方法において、プロセッサ間のデータ転送時間を記述したデータ転送時間テーブルを前記共有メモリ上にシステムで管理し、各プロセッサはディスパッチを行うプロセッサの情報及び前記タスク情報が実装されているプロセッサの情報を用いて、複数のプロセッサ間のデータ転送時間の情報を記憶したデータ転送時間テーブルを参照して、前記データ転送時間が最小になるプロセッサに実装されている前記タスク情報のタスクを前記ディスパッチ対象タスクとして決定するようにした。
【００１２】
この方法によれば、ディスパッチ時に発生するタスク情報のデータ転送時間を小さく抑えることができるので、スループットを上げることができる。
【００１３】
また、本発明のマルチプロセッサタスク制御方法は、上記マルチプロセッサタスク制御方法において、システム起動時に全てのプロセッサのプライベートメモリ上にアプリケーションプログラムをダウンロードし、マスタプロセッサはアプリケーションプログラムのエントリタスクを起動し、残りの全てのプロセッサはアイドルタスクを起動してタスクが割り込まれるのを待つようにした。
【００１４】
この方法によれば、各プロセッサがタスクの実行コード（ソース）にアクセスする場合であっても、プロセッサ間でバスが競合することがないので、スループットを上げることができる。
また、アプリケーションプログラム開発者は、マルチプロセッサタスク制御を全く意識する必要はなく、通常のコンパイラを使用してマルチタスクプログラミングを行えば良いので、プログラミングが容易になる。
【００１５】
また、本発明のマルチプロセッサタスク制御方法は、システムコール発行時にコンテクストの保存及びシステムコール処理を行うステップと、前記システムコール処理によりタスクの状態が遷移した場合に、ディスパッチを行うプロセッサとタスク情報が実装されているプロセッサとの間のデータ転送時間の情報に基づいてディスパッチ対象タスクを実行可能タスクの中から選択するステップと、選択した前記ディスパッチ対象タスクのタスク情報が、自プロセッサの共有メモリに実装されているか否かを判定するステップと、前記ディスパッチ対象タスクのタスク情報が自プロセッサ以外の他のプロセッサの内部に設けられている共有メモリに保存されている場合には、前記他のプロセッサの共有メモリから自プロセッサの内部に設けられている共有メモリに、前記ディスパッチ対象タスクのタスク情報をデータ転送するステップと、前記タスク情報が転送された前記共有メモリを有するプロセッサにて、前記ディスパッチ対象タスクのディスパッチを行うステップと、前記ディスパッチ対象タスクをディスパッチした後にコンテクストの復帰とシステムコールからの復帰を行うステップと、を具備するようにした。
【００１６】
この方法によれば、各プロセッサがカーネル及びタスク情報にアクセスする場合であっても、プロセッサ間でバスが競合することがなく、またプロセッサ間のタスク情報のデータ転送時間を小さく抑えることができるので、スループットを上げることができる。
【００１７】
また、本発明のマルチプロセッサタスク制御方法は、上記マルチプロセッサタスク制御方法において、前記ディスパッチ対象タスクの選択方法は、実行可能状態のタスクのうち最高優先度のタスク全てに対して、ディスパッチを行うプロセッサの情報及び前記タスク情報が実装されているプロセッサの情報を用いて、複数のプロセッサ間のデータ転送時間の情報を記憶したデータ転送時間テーブルを参照して、前記データ転送時間が最小になるプロセッサに実装されている前記タスク情報のタスクを前記ディスパッチ対象タスクとして選択するようにした。
【００１８】
この方法によれば、タスク優先度制御を行いつつ、同一優先度の場合はタスク情報のデータ転送時間を小さく抑えることができるので、スループットを上げることができる。これは、同一優先度のタスクが多数存在するアプリケーションの場合に特に効果が大きい。
【００２３】
また、本発明のマルチプロセッサタスク制御方法は、上記マルチプロセッサタスク制御方法において、ディスパッチ方法は、前記ディスパッチ対象タスクが前記自プロセッサに保存されている場合は、実行可能キューより前記ディスパッチ対象タスクを取り出して実行キューに接続し、前記ディスパッチ対象タスクが前記他のプロセッサに保存されている場合は、実行可能キューより前記ディスパッチ対象タスクを取り出して前記自プロセッサにデータ転送して実行キューに接続する一方、前記タスク情報に含まれるタスク制御ブロックの前方リンク及び後方リンクに対して取り出し接続を行い、前記タスク制御ブロック上の保存プロセッサ識別子を変更するようにした。
【００２４】
この方法によれば、タスク情報のプロセッサ間の移動を簡素な方法で実現することができるので、プロセッサの実行タスクのタスク情報へのアクセスを常にプロセッサ内に閉じて行うことができる。
【００２５】
本発明のマルチプロセッサタスク制御装置は、オペレーティングシステムのタスク情報を実装する共有メモリに対して複数のプロセッサがアクセスすることにより、１つのアプリケーションプログラムを構成する複数のタスクを各プロセッサにて実行するマルチプロセッサタスク制御装置であって、オペレーティングシステムのカーネルが実装されるとともにプロセッサ毎に他のプロセッサがアクセスできないプライベートメモリを具備し、前記共有メモリは各プロセッサの内部に設けられ、ディスパッチを行うプロセッサと前記タスク情報が実装されているプロセッサとの間のデータ転送時間の情報に基づいて決定された実行タスクの前記タスク情報が前記タスクを実行する自プロセッサ以外の他のプロセッサの共有メモリに実装されている場合には、前記他のプロセッサの共有メモリから前記自プロセッサの共有メモリに、実行されるタスクの前記タスク情報が転送される構成を採る。
【００２６】
この構成によれば、各プロセッサがカーネルにアクセスする場合であっても、プロセッサ間でバスが競合することがないので、スループットを上げることができる。
【００２７】
また、本発明のマルチプロセッサタスク制御装置は、上記マルチプロセッサタスク制御装置において、アプリケーションプログラムを前記プロセッサの外部から複数のプロセッサの夫々へダウンロードするための共通の入出力手段と、前記複数のプロセッサの夫々に存在するダウンローダと、前記複数のプロセッサのうちのマスタプロセッサではアプリケーションプログラムのエントリタスクを起動し、スレーブプロセッサではアイドルタスクを起動するイニシャルプログラムローダと、を具備する構成を採る。
【００２８】
この構成によれば、マスタプロセッサはエントリタスクを起動し、スレーブプロセッサはアイドルタスクを起動するので、マルチタスクシステムの応用としてマルチプロセッサシステムを容易に構築することができる。
【００２９】
また、本発明のマルチプロセッサタスク制御装置は、各プロセッサの内部に設けられるとともに、マルチタスク・オペレーティングシステムのタスク情報を実装するタスク情報記憶手段と、システムコール処理によって遷移されたタスク状態によって各種キュー制御を行い、自プロセッサがディスパッチ対象タスクを実行しない場合には、自プロセッサの前記タスク情報記憶手段に実装されている前記ディスパッチ対象タスクのタスク情報を、前記ディスパッチ対象タスクを実行する他のプロセッサの前記タスク情報記憶手段へデータ転送するためのタスク情報転送要求を発行するタスク・スケジューリング手段と、前記タスク・スケジューリング手段によりキュー制御された後の実行状態のタスクの情報及び実行可能状態のタスクの情報と、ディスパッチを行うプロセッサと前記タスク情報が実装されているプロセッサとの間のデータ転送時間の情報に基づいて前記ディスパッチ対象タスクを決定するマッチング決定手段と、前記タスク情報転送要求により前記ディスパッチ対象タスクのタスク情報の転送を要求された場合には、前記他のプロセッサにて前記ディスパッチ対象タスクの実行を行う前に、前記自プロセッサの前記タスク情報記憶手段から前記他のプロセッサの前記タスク情報記憶手段に対して、前記ディスパッチ対象タスクのタスク情報を転送するタスク情報転送手段と、を具備する構成を採る。
【００３０】
この構成によれば、各プロセッサがカーネル及びタスク情報にアクセスする場合であっても、プロセッサ間でバスが競合することがなく、またプロセッサ間のタスク情報のデータ転送時間を小さく抑えることができるので、スループットを上げることができる。
【００３１】
【発明の実施の形態】
本発明の骨子は、複数のプロセッサ夫々のローカルメモリに同一のマルチタスク・オペレーティングシステムを実装してマルチプロセッサシステムを実現すると共に、マルチタスク・オペレーティングシステムをカーネル部分とタスク情報部分に分割して、そのカーネル部分を自プロセッサのみがアクセス可能なプライベートメモリに実装し、タスク情報部分を他のプロセッサからも共通にアクセス可能な共有メモリに実装するようにしたものである。
【００３２】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
図１は、本発明の実施の形態に係るマルチプロセッサタスク制御装置１００の構成を示すブロック図である。
本実施の形態では、マルチプロセッサタスク制御装置１００は、図２のブロック図に示すようなハードウェア構成の３つのプロセッサ（プロセッサ１、プロセッサ２、プロセッサ３）から構成されるシステムを例に挙げている。なお、プロセッサ１〜３のＣＰＵ１０−１〜ＣＰＵ１０−３から見たメモリマップは図４に示す通りであり、ソフトウェア構成は図３に示す通りである。
【００３３】
図２において、プロセッサ１はマスタプロセッサであり、残りのプロセッサ２及びプロセッサ３はスレーブプロセッサである。プロセッサ１〜プロセッサ３の夫々は、ＣＰＵ（プロセッサ１はＣＰＵ１０−１、プロセッサ２はＣＰＵ１０−２、プロセッサ３はＣＰＵ１０−３）と、プライベートメモリ１１と、共有メモリ１２と、割り込みコントローラ１３と、バスブリッジ１４とを有して構成されており、これらＣＰＵ、プライベートメモリ１１、共有メモリ１２及び割り込みコントローラ１３はローカルバス１５を介して互いに接続されている。また、プロセッサ１〜３は、夫々のバスブリッジ１４を介してグローバルバス１６に接続されている。
グロバールバス１６には、プロセッサ１〜３で共通使用される共通Ｉ／Ｏ４がバスブリッジ１４を介して接続されている。
【００３４】
図１において、マルチプロセッサタスク制御装置１００は、アプリケーションロード手段１１０と、プリエンプト・ディスパッチ手段１２０と、タスク情報記憶手段１４０と、システムコール処理手段１３０と、タスクスケジューリング手段１５０と、実行可能タスク管理手段１４１と、実行タスク管理手段１４２と、データ転送時間記憶手段１６０と、マッチング決定手段１７０と、割り込み発生手段１８１と、割り込み受付け手段１８２と、タスク情報転送手段１９０とを有して構成されている。この場合、実行可能タスク管理手段１４１と、実行タスク管理手段１４２と、データ転送時間記憶手段１６０がマスタプロセッサであるプロセッサ１にのみ存在し、その他の手段は全てのプロセッサ１〜３に共通して存在する。
【００３５】
アプリケーションロード手段１１０は、アプリケーションを共通Ｉ／Ｏ４よりダウンロードしてマルチタスク・オペレーティングシステムとリンクし、プロセッサがマスタの場合はアプリケーションのエントリタスクを起動し、スレーブの場合はアイドルタスクを起動する。ディスパッチ・プリエンプト手段１２０は、システムコール発行時、コンテクストの保存及び復帰を行う。ここで、図５に示すように、タスク状態を、待ち状態、実行可能状態、実行状態の３つ定義し、タスク状態を実行可能状態から実行状態へ遷移させる動作をディスパッチ、実行状態から実行可能状態に遷移させる動作をプリエンプトと定義する。
【００３６】
タスク情報記憶手段１４０は、図６に示すようなコンテクスト保存領域を含むタスク制御ブロック（ＴＣＢ）とタスク・スタックエリアをタスク情報として記憶する。システムコール処理手段１３０は、要求されているシステムコール処理を行う。なお、本実施の形態では詳細を割愛しているが、システム資源の制御（各プロセッサ１〜３に存在する）及び管理（システムで１つ存在する）もシステムコール処理手段１３０に含まれるものとする。タスク・スケジューリング手段１５０は、システムコール処理手段１３０によって遷移されたタスク状態によって各種キュー制御を行い、決定されたタスク・スイッチング情報に基づいて割込み制御要求、タスク情報転送要求及びディスパッチ・プリエンプト要求を発行する。
【００３７】
実行可能タスク管理手段１４１は、タスク情報記憶手段１４０に記憶されているタスク情報より、実行可能状態のタスクを図７に示すようにキュー管理する。実行タスク管理手段１４２は、タスク情報記憶手段１４０に記憶されているタスク情報より、実行状態のタスクを図８に示すようにキュー管理する。データ転送時間記憶手段１６０は、図９に示すように各プロセッサとその他のプロセッサとの間のデータ転送時間を管理する。マッチング決定手段１７０は、実行可能タスク管理手段１４１と実行タスク管理手段１４２及びデータ転送時間記憶手段１６０により図１０に示すようなマッチングテーブルを作成し、プリエンプト・ディスパッチ対象タスクを決定する。
【００３８】
割り込み発生手段１８１は、タスク・スケジューリング手段１５０からの要求に応じて他のプロセッサにプリエンプト・ディスパッチ要求を送信する。割り込み受付け手段１８２は、逆に他プロセッサからのプリエンプト・ディスパッチ要求を受信し、プリエンプト・ディスパッチ手段１２０に報告する。タスク情報転送手段１９０は、タスク・スケジューリング手段１５０によって要求されてディスパッチ対象のタスクのタスク情報をディスパッチ対象のプロセッサに転送する。
【００３９】
また、プロセッサ１〜３のＣＰＵ１０−１〜ＣＰＵ１０−３から見たメモリマップは図４に示すように、ローカルバス空間にはプライベートメモリ１１と共有メモリ１２と割り込みコントローラ１３が割り当てられており、グローバルバス空間には各プロセッサ１〜３に対して共有メモリ１２と、割り込みコントローラ１３と、共通Ｉ／Ｏ４が割り当てられている。
一方、ソフトウェア構成は図３に示すように、プロセッサ１では、プライベートメモリ１１、共有メモリう１２からなるハードウェア層と、カーネル、タスク情報、キューエントリ、データ転送時間テーブルからなるＯＳ（オペレーティングシステム）層と、アプリケーション、ローダからなるアプリケーション層とから成り、プロセッサ２及びプロセッサ３では、プライベートメモリ１１、共有メモリう１２からなるハードウェア層と、カーネル、タスク情報からなるＯＳ層と、アプリケーション、ローダからなるアプリケーション層とから成る。
【００４０】
以上のように構成されたマルチプロセッサタスク制御装置１００について、図１１〜図１９を用いてその動作を説明する。
マルチプロセッサタスク制御動作は、大きく分けて図１１に示すシステム起動動作と、図１２〜図１９に示すシステムコール動作の２つから構成される。システムコール動作は、図１２に示すメイン動作と、図１３〜図１５に示すプリエンプト及びディスパッチ対象タスク選択動作と、図１６〜図１８に示すプリエンプト及びディスパッチ動作と、図１９に示すマッチング動作の４つから成る。
図２に示すような３つのプロセッサからなるマルチプロセッサタスク制御装置を例にとって説明する。
【００４１】
〈システム起動動作〉
図１１はシステム起動動作を示すフローチャートである。
まず、ステップ１００１でアプリケーションを共通Ｉ／Ｏ２０より各プロセッサ１〜３のプライベートメモリ１１上にダウンロードし、次いでステップ１００２で、ダウンロードしたアプリケーションをマルチタスクオペレーティングシステムとリンクする。次に、ステップ１００３でプロセッサがマスタプロセッサであるか否かを判定し、マスタである場合はステップ１００４に進み、アプリケーションのエントリタスクを起動する。これに対して、プロセッサがスレーブプロセッサである場合はステップ１００５に進み、アイドルタスク（何もしないタスク）を起動して処理を終了する。
【００４２】
〈システムコール動作〉
図１２はシステムコール動作を示すフローチャートである。
まず、ステップ２０１でコンテクストを保存した後、ステップ２０２で、要求されているシステムコールの処理を行う。そして、ステップ２２１でシステムコール処理により自タスクの状態が遷移したか否かを判定し、システムコール処理によって自タスクの状態が遷移した（実行状態から待ち状態へ）場合は、ステップ２２２に進み、実行キューから自タスクを取り出す。これにより、プロセッサが空き状態になることから、ステップ２３１でディスパッチ対象タスクを選択して、ステップ２４１でディスパッチを行う。ディスパッチを行った後は、ステップ２８１でコンテクストの復帰を行い、システムコール処理を終了する。
【００４３】
一方、上記ステップ２２１の判定において、システムコール処理によって自タスクの状態が遷移しなかった（実行状態のまま）場合は、ステップ２５１に進み、システムコール処理によって他タスクの状態が遷移したかどうかを判定する。他タスクの状態が遷移した（待ち状態から実行状態へ）場合は、ステップ２５２に進み、実行可能状態になった他のタスクを実行可能キューに接続する。そして、ステップ２５３で、実行キューの最低優先度のタスクより実行可能キューの最高優先度のタスクの方が優先度が高いか否かを判定する。実行キューの最低優先度のタスクより実行可能キューの最高優先度のタスクの方が優先度が高い場合は、ステップ２６１に進み、プリエンプト・ディスパッチ対象タスク選択を行い、さらにステップ２７１でプリエンプト・ディスパッチを行う。そして、ステップ２８１でコンテクストの復帰を行ってシステムコール処理を終了する。
【００４４】
上記ステップ２５３において、実行キューの最低優先度のタスクより実行可能キューの最高優先度のタスクの方が優先度が低いと判断した場合は、即座にステップ２８１でコンテクストの復帰を行ってシステムコール処理を終了する。
一方、上記ステップ２５１において、他タスクの状態が遷移しなかった（待ち状態のまま）と判断した場合は、即座にステップ２８１でコンテクストの復帰を行ってシステムコール処理を終了する。
【００４５】
〈ディスパッチ対象タスク選択動作〉
図１３はディスパッチ対象タスク選択動作を示すフローチャートである。
まず、ステップ３０１で、実行可能キューの最高優先度のタスク（同一優先度のタスクが存在する場合それらすべて）をディスパッチ候補タスクとする。そして、ステップ３０２で、ディスパッチ候補タスクが保存されているプロセッサとディスパッチ対象プロセッサ間のデータ転送時間を全ての組み合わせについてデータ転送時間テーブルより計算する。この計算による結果が得られると、ステップ３０３で、データ転送時間が最も小さいタスクをディスパッチ対象タスクとして選択して処理を終了する。
【００４６】
〈プリエンプト・ディスパッチ対象タスク選択動作〉
図１４はプリエンプト・ディスパッチ対象タスク選択動作を示すフローチャートである。
まず、ステップ４０１でプリエンプト・ディスパッチ候補タスク選択を行う。次に、ステップ４１１で、ディスパッチ候補タスクが保存されているプロセッサとプリエンプト候補タスクが実行されているプロセッサ間のデータ転送時間を全ての組み合わせについてデータ転送時間テーブルより計算して図１０に示すようなマッチングテーブルを作成する。マッチングテーブルを作成した後、ステップ４２１で、作成したマッチングテーブルよりプリエンプト対象タスクとディスパッチ対象タスクのマッチングを行う。そして、ステップ４３１でマッチングによって決定された組み合わせをディスパッチ対象タスクとプリエンプト対象タスクとして選択して処理を終了する。
【００４７】
〈プリエンプト・ディスパッチ候補タスク選択動作〉
図１５はプリエンプト・ディスパッチ候補タスク選択動作を示すフローチャートである。
まず、ステップ５０１で実行キューエントリを選択すると共に、実行可能キューエントリよりキューの先頭タスクを選択する。実行キューエントリとキューの先頭タスクを選択した後、ステップ５０２で実行キューのタスクと実行可能キューのタスクの優先度を比較する。そして、その比較結果からステップ５０３の判定において、実行可能キューのタスクの方が優先度が高い場合は、ステップ５０４に進み、実行キューのタスクをプリエンプト候補タスクに、実行可能キューのタスクをディスパッチ候補タスクとする。
【００４８】
次に、ステップ５０５で実行キュー及び実行可能キューのタスクを１つ進める。次いで、ステップ５０６の判定において、実行キューエンド又は実行可能キューエンドに到達した場合は、ステップ５０７に進み、プリエンプト候補タスクの優先度と同じ優先度を持つ実行キュー上のタスクをプリエンプト候補タスクに追加し、ディスパッチ候補タスクの優先度と同じ優先度を持つ実行可能キュー上のタスクをディスパッチ候補タスクに追加して処理を終了する。
【００４９】
一方、上記ス５０３の判定において、実行可能キューのタスクの方が優先度が低い場合は、直ちにステップ５０７に進み、プリエンプト候補タスクの優先度と同じ優先度を持つ実行キュー上のタスクをプリエンプト候補タスクに追加し、ディスパッチ候補タスクの優先度と同じ優先度を持つ実行可能キュー上のタスクをディスパッチ候補タスクに追加して処理を終了する。
【００５０】
実行キュー及び実行可能キューのタスクを１つ進めた結果、ステップ５０６の判定において、実行キューエンド又は実行可能キューエンドに到達しなかった場合は、ステップ５０２に戻り、実行キューのタスクと実行可能キューのタスクの優先度を比較する処理を行う。
【００５１】
〈プリエンプト・ディスパッチ動作〉
図１６はプリエンプト・ディスパッチ動作を示すフローチャートである。
まず、ステップ６０１の判定において、プリエンプト対象タスクが自プロセッサで実行されている場合は、ステップ６１１に進み、プリエンプト処理を行う。そして、ステップ６２１でディスパッチ処理を行った後、ステップ６３１の判定において、選択したタスクを全てプリエンプト・ディスパッチした場合は処理を終了し、まだ選択したタスクを全てプリエンプト・ディスパッチしていない場合は、ステップ６０１に戻って、プリエンプト対象タスクが自プロセッサで実行されているかの判定処理を行う。
【００５２】
一方、ステップ６０１の判定において、プリエンプト対象タスクが自プロセッサで実行されていない場合は、ステップ６４１に進み、ディスパッチ対象プロセッサに対してプリエンプト・ディスパッチ要求を示す割り込みを発生させて、ステップ６３１に進み、選択したタスクを全てプリエンプト・ディスパッチしているかの判定処理を行う。
【００５３】
プリエンプト・ディスパッチ要求を示す割り込みを発生させられたプロセッサでは、ステップ６５１でコンテクストの保存を行い、さらにステップ６６１でプリエンプト処理を行う。その後、ステップ６７１でディスパッチ処理を行い、次いでステップ６８１でコンテクストの保存を行って処理を終了する。
【００５４】
〈ディスパッチ動作〉
図１７はディスパッチ動作を示すフローチャートである。
まず、ステップ７０１の判定において、ディスパッチ対象タスクが自プロセッサ上にある場合は、ステップ７０２に進み、実行可能キューより選択したタスクを取り出し、それを実行キューに接続して処理を終了する。ディスパッチ対象タスクが自プロセッサ上にない（他プロセッサ上にある）場合は、ステップ７０３に進み、実行可能キューより選択したタスクを取り出して、そのときのタスク情報をディスパッチ対象プロセッサの共有メモリに転送し、それを実行キューに接続する。また、その他のキューのリンク（タスク制御ブロックの前方及び後方リンク等）に対しても取り出し接続を行う。そして、最後にタスク制御ブロック（ＴＢＣ、図６参照）内の保存プロセッサ識別子２０を変更して処理を終了する。
【００５５】
〈プリエンプト動作〉
図１８はプリエンプト動作を示すフローチャートである。
ステップ８０１で、実行キューより選択したタスクを取り出し、それを実行可能キューに接続して処理を終了する。
【００５６】
〈マッチング動作〉
図１９はマッチング動作を示すフローチャートである。
まず、ステップ９０１でディスパッチ候補タスク数とプリエンプト候補タスク数の差分を最低優先度制限個数として算出する。次に、ステップ９０２の判定において、ディスパッチ候補タスク数の方がプリエンプト候補タスク数より多い場合は、ステップ９１１に進み、プリエンプト候補タスクをマッチングテーブルより選択する。プリエンプト候補タスクを選択した後、ステップ９１２で、選択したプリエンプト候補タスクに対して最小のデータ転送時間を持つディスパッチ候補タスクを選択する。
【００５７】
そして、ステップ９１３で、ディスパッチ候補タスク数とプリエンプト候補タスク数が異なる場合は、ス９１４で、最低優先度のディスパッチ候補タスクが最低優先度制限個数分マッチングされたかどうかを判定し、最低優先度制限個数分マッチングされた場合は、ステップ９１５で、まだマッチングされていない最低優先度ディスパッチ候補タスクをマッチングテーブルから削除する。
【００５８】
次に、ステップ９１６の判定において、全てのプリエンプト候補タスクがマッチングされていた場合は処理を終了し、全てのプリエンプト候補タスクがまだマッチングされていない場合は、ステップ９１１に戻ってプリエンプト候補タスクをマッチングテーブルより選択する。
ディスパッチ候補タスク数とプリエンプト候補タスク数が同じ場合（ステップ９１３）と、ディスパッチ候補タスク数とプリエンプト候補タスク数が異なる場合（ステップ９１３）且つ最低優先度のディスパッチ候補タスクが最低優先度制限個数分マッチングされていない場合（ステップ９１４）は、ステップ９１６に進み、全てのプリエンプト候補タスクがマッチングされているかの判定処理を行う。
【００５９】
一方、上記ステップ９０２の判定において、ディスパッチ候補タスク数の方がプリエンプト候補タスク数より少ない場合は、ステップ９２１からステップ９２６のように、ディスパッチ候補タスクをプリエンプト候補タスクに置き換え、プリエンプト候補タスクをディスパッチ候補タスクに置き換えて、以上説明したステップ９１１からステップ９１６と同様の動作をする。
【００６０】
次に、図２０を用いて本発明の実施の形態によるタスクの実行の様子について説明する。以下に説明するように、本発明によりデータ転送時間を極力小さく抑えることができることが分かる。
プロセッサ１がマスタで、時刻ｔ０でアプリケーションのエントリタスクであるｔａｓｋ＿Ａを起動する。プロセッサ２及びプロセッサ３はスレーブで、時刻ｔ０でアイドルタスクｉｄｌｅを起動し、タスクが割り当てられる（割り込まれる）のを待っている。時刻ｔ１でタスクｔａｓｋ＿Ａはタスクｔａｓｋ＿Ｂを生成し、優先度制御に従ってプロセッサ２がディスパッチ対象プロセッサに選択され、プロセッサ１はプロセッサ２に対してプリエンプト・ディスパッチ要求を示す割り込みを発生させ、プロセッサ２はタスクｔａｓｋ＿Ｂをプリエンプト・ディスパッチする。その際、タスクｔａｓｋ＿Ｂのタスク情報をプロセッサ１からプロセッサ２にデータ転送を行う。
【００６１】
その後、同様に時刻ｔ２でタスクｔａｓｋ＿Ａはタスクｔａｓｋ＿Ｃを生成し、優先度制御に従ってプロセッサ３がディスパッチ対象プロセッサに選択され、プロセッサ１はプロセッサ３に対してプリエンプト・ディスパッチ要求を示す割り込みを発生させ、プロセッサ３はタスクｔａｓｋ＿Ｂをプリエンプト・ディスパッチする。その際、タスクｔａｓｋ＿Ｃのタスク情報をプロセッサ１からプロセッサ３にデータ転送を行う。時刻ｔ８でタスクｔａｓｋ＿Ａが待ち状態に遷移し、プロセッサ１はその時点で実行可能なタスクのうち最高優先度のタスクｔａｓｋ＿Ｇをディスパッチする。
【００６２】
その後、時刻ｔ９でタスクｔａｓｋ＿Ａが待ち状態から実行可能状態に遷移し、本発明のマルチプロセッサタスク制御方法に従って、データ転送時間の小さいプロセッサ１がディスパッチ対象プロセッサに選択され、データ転送処理なしに（タスクｔａｓｋ＿Ａのタスク情報はプロセッサ１にもともとあったため）プロセッサ１がタスクｔａｓｋ＿Ａをプリエンプト・ディスパッチする。時刻ｔ１０でタスクｔａｓｋ＿Ｅが待ち状態に遷移し、プロセッサ３は優先度制御に従ってタスクｔａｓｋ＿Ｇをディスパッチ対象タスクに選択し、データ転送を伴ってディスパッチする。
【００６３】
また、時刻ｔ１１ではタスクｔａｓｋ＿Ｆが待ち状態に遷移し、プロセッサ２は優先度制御に従ってタスクｔａｓｋ＿Ｄをディスパッチ対象タスクに選択し、データ転送をなしに（偶然データ転送が起こらなかった）ディスパッチする。時刻ｔ１２でタスクｔａｓｋ＿Ａが再び待ち状態に遷移し、プロセッサ１は優先度制御に従ってタスクｔａｓｋ＿Ｂをディスパッチ対象タスクに選択し、データ転送を伴ってディスパッチする。
【００６４】
そして、時刻ｔ１３でタスクｔａｓｋ＿Ａとタスクｔａｓｋ＿Ｅが待ち状態から実行可能状態に遷移し、本発明のマルチプロセッサタスク制御方法に従って、データ転送時間が小さくなるようにマッチングが行われ、プロセッサ１がタスクｔａｓｋ＿Ａを、プロセッサ２がタスクｔａｓｋ＿Ｅをディスパッチするようにマッチングされる。プロセッサ１のタスクｔａｓｋ＿Ａに対するプリエンプト・ディスパッチはデータ転送処理なしに（タスクｔａｓｋ＿Ａのタスク情報はプロセッサ１にもともとあったため）行われ、プロセッサ２のタスクｔａｓｋ＿Ｅに対するプリエンプト・ディスパッチはデータ転送処理を伴って行われる。
【００６５】
以上のように本発明の実施の形態によれば、システムのバス構成をローカルバス１５と、バスブリッジ１４を介したグローバルバス２５の２段構成とし、各プロセッサ１〜３のローカルバス１５上に、自プロセッサのみがアクセス可能なプライベートメモリ１１と、その他のプロセッサからもグローバルバス２５、バスブリッジ１４を介して共通にアクセス可能な共有メモリ１２の用途の異なる２種類のメモリを実装する。そして、マルチタスク・オペレーティングシステムをシステム全体で共有する必要のないカーネル部分と、共有する必要のあるシステム資源（例えばセマフォ、メッセージキュー等）の管理情報及びタスク情報部分に分割し、そのうちのカーネル部分はプライベートメモリ１５に、タスク情報部分は共有メモリ１２に実装する。
【００６６】
また、各プロセッサ１〜３の共有メモリ１２間のデータ転送時間を記憶し、プロセッサ間のタスク情報のデータ転送時間が小さくなるようにタスクスケジューリングを行う。
【００６７】
したがって、各プロセッサ１〜３がカーネルアクセスする場合であっても、プロセッサ間でバスが競合することがなく、またタスク情報にアクセスする場合も各タスクを実行する前にタスク情報が他プロセッサ上に保存されていれば、タスク情報のデータ転送処理を行わなければならないが、その後のタスク情報のアクセスに対してもプロセッサ間でバスが競合することはないので、スループットを上げることができる。
【００６８】
また、タスク情報のデータ転送処理も、データ転送時間記憶手段１６０と、マッチング決定手段１７０とを設けて、記憶しているデータ転送時間をもとにタスクスケジューリングを行うので、短時間で終えることができ、これを行うことによって更にスループットを上げることができる。
【００６９】
なお、本発明は、一般的なマルチプロセッサタスク制御に関するものであるが、対象とするアプリケーションを例えば呼制御系アプリケーションと考えた場合、移動通信システム（特に基地局装置）にも適用可能であり、その場合、例えば各タスクは、夫々の呼を制御する呼制御タスクとなる。
【００７０】
【発明の効果】
以上のように本発明は、システムのバス構成をローカルバスとグローバルバスの２段構成とし、各プロセッサのローカルバス上に自プロセッサのみがアクセス可能なプライベートメモリと、その他のプロセッサからも共通にアクセス可能な共有メモリの２種類のメモリを実装し、カーネル部分はプライベートメモリに、タスク情報部分は共有メモリに実装することにより、各プロセッサがカーネル及び実行タスクのタスク情報にアクセスする場合であっても、プロセッサ間でバスが競合することがないので、スループットを上げることができるという効果が得られる。
【００７１】
また、データ転送時間テーブルを参照してタスクスケジューリングを行うことにより、プロセッサ間のタスク情報のデータ転送時間を小さく抑えることができ、これを行うことで更にスループットを上げることができる。
【図面の簡単な説明】
【図１】本発明の実施の形態に係るマルチプロセッサタスク制御装置の構成を示すブロック図
【図２】本発明の実施の形態に係るマルチプロセッサタスク制御装置を用いたマルチプロセッサシステムの構成を示すブロック図
【図３】本発明の実施の形態に係るマルチプロセッサタスク制御装置におけるソフトウェア構成を示す図
【図４】本発明の実施の形態に係るマルチプロセッサタスク制御装置の各ＣＰＵから見たメモリマップの例を示す図
【図５】本発明の実施の形態に係るマルチプロセッサタスク制御装置におけるマルチタスクオペレーティングシステム上のタスク状態遷移を説明するための図
【図６】本発明の実施の形態に係るマルチプロセッサタスク制御装置におけるタスク情報を示す図
【図７】本発明の実施の形態に係るマルチプロセッサタスク制御装置を用いたマルチプロセッサシステムにおける実行可能キューを説明するための図
【図８】本発明の実施の形態に係るマルチプロセッサタスク制御装置を用いたマルチプロセッサシステムにおける実行キューを説明するための図
【図９】本発明の実施の形態に係るマルチプロセッサタスク制御装置を用いたマルチプロセッサシステムにおけるデータ転送時間テーブルを示す図
【図１０】本発明の実施の形態に係るマルチプロセッサタスク制御装置を用いたマルチプロセッサシステムにおけるマッチングテーブルを示す図
【図１１】本発明の実施の形態に係るマルチプロセッサタスク制御装置を用いたマルチプロセッサシステムにおけるシステム起動動作を示すフロー図
【図１２】本発明の実施の形態に係るマルチプロセッサタスク制御装置を用いたマルチプロセッサシステムにおけるシステムコール動作を示すフロー図
【図１３】本発明の実施の形態に係るマルチプロセッサタスク制御装置を用いたマルチプロセッサシステムにおけるディスパッチ対象タスク選択動作を示すフロー図
【図１４】本発明の実施の形態に係るマルチプロセッサタスク制御装置を用いたマルチプロセッサシステムにおけるプリエンプト・ディスパッチ動作を示すフロー図
【図１５】本発明の実施の形態に係るマルチプロセッサタスク制御装置を用いたマルチプロセッサシステムにおけるプリエンプト・ディスパッチ候補タスク選択動作を示すフロー図
【図１６】本発明の実施の形態に係るマルチプロセッサタスク制御装置を用いたマルチプロセッサシステムにおけるプリエンプト・ディスパッチ動作を示すフロー図
【図１７】本発明の実施の形態に係るマルチプロセッサタスク制御装置を用いたマルチプロセッサシステムにおけるディスパッチ動作を示すフロー図
【図１８】本発明の実施の形態に係るマルチプロセッサタスク制御装置を用いたマルチプロセッサシステムにおけるプリエンプト動作を示すフロー図
【図１９】本発明の実施の形態に係るマルチプロセッサタスク制御装置を用いたマルチプロセッサシステムにおけるマッチング動作を示すフロー図
【図２０】本発明の実施の形態に係るマルチプロセッサタスク制御装置を用いたマルチプロセッサシステムにおける実行タスクのスイッチング動作を説明するための図
【符号の説明】
１、２、３  プロセッサ
４  共通Ｉ／Ｏ
１０−１、１０−２、１０−３  ＣＰＵ
１１  プライベートメモリ
１２  共有メモリ
１３  割り込みコントローラ
１４  バスブリッジ
１５  ローカルバス
１６  グローバルバス
２０  保存プロセッサ識別子
１００  マルチプロセッサタスク制御装置
１１０  アプリケーションロード手段
１２０  プリエンプト・ディスパッチ手段
１３０  システムコール処理手段
１４０  タスク情報記憶手段
１４１、１４２  実行可能タスク管理手段
１５０  タスク・スケジューリング手段
１６０  データ転送時間記憶手段
１７０  マッチング決定手段
１８１  割り込み発生手段
１８２  割り込み受付け手段
１９０  タスク情報転送手段
【図１】
0003576437.tif 000002
【図２】
0003576437.tif 000003
【図３】
0003576437.tif 000004
【図４】
0003576437.tif 000005
【図５】
0003576437.tif 000006
【図６】
0003576437.tif 000007
【図７】
0003576437.tif 000008
【図８】
0003576437.tif 000009
【図９】
0003576437.tif 000010
【図１０】
0003576437.tif 000011
【図１１】
0003576437.tif 000012
【図１２】
0003576437.tif 000013
【図１３】
0003576437.tif 000014
【図１４】
0003576437.tif 000015
【図１５】
0003576437.tif 000016
【図１６】
0003576437.tif 000017
【図１７】
0003576437.tif 000018
【図１８】
0003576437.tif 000019
【図１９】
0003576437.tif 000020
【図２０】
0003576437.tif 000021