(57)【特許請求の範囲】
【請求項１】
所定のループ処理を繰り返すループ処理部と、
プロセッサのクロックに対応するカウンタのカウンタ値を取得する取得部と、
前記取得部によって取得されるカウンタ値に基づいて、所定の単位時間に前記ループ処理部によって繰り返されるループ処理の回数を算出する算出部と、
前記ループ処理部によるループ処理の回数を計数し、計数された回数と前記算出部によって算出された回数とに基づくタイムアウト通知を出力する通知部と、
前記通知部から出力されるタイムアウト通知に同期して、アプリケーションのスレッドを制御する制御部と
を有することを特徴とするタイマ制御装置。
【請求項２】
前記算出部は、
前記所定の単位時間よりも長い時間に相当する前記カウンタ値の増分と、前記ループ処理部によってループ処理が１回実行される時間に相当する前記カウンタ値の増分とに基づいて、前記所定の単位時間に繰り返されるループ処理の回数を算出することを特徴とする請求項１記載のタイマ制御装置。
【請求項３】
前記通知部は、
計数されたループ処理の回数が前記算出部によって算出されたループ処理の回数に到達する度に、タイムアウト通知を出力することを特徴とする請求項１記載のタイマ制御装置。
【請求項４】
前記通知部は、
計数されたループ処理の回数が前記制御部によって制御されるスレッドの動作時間に対応する回数に到達する度に、タイムアウト通知を出力することを特徴とする請求項１記載のタイマ制御装置。
【請求項５】
前記制御部は、
前記通知部から出力されるタイムアウト通知に同期して、複数のスレッドの優先度に応じたスレッドの切り替えをアプリケーションに指示することを特徴とする請求項１記載のタイマ制御装置。
【請求項６】
前記制御部は、
１つのスレッドが実行中に当該１つのスレッドよりも優先度が高い他のスレッドが実行対象となった場合、前記通知部から出力されるタイムアウト通知に同期して、前記１つのスレッドを停止させるとともに、前記他のスレッドを開始させることを特徴とする請求項１記載のタイマ制御装置。
【請求項７】
無線通信アプリケーションを実行する無線通信装置であって、
所定のループ処理を繰り返すループ処理部と、
プロセッサのクロックに対応するカウンタのカウンタ値を取得する取得部と、
前記取得部によって取得されるカウンタ値に基づいて、所定の単位時間に前記ループ処理部によって繰り返されるループ処理の回数を算出する算出部と、
前記ループ処理部によるループ処理の回数を計数し、計数された回数と前記算出部によって算出された回数とに基づくタイムアウト通知を出力する通知部と、
前記通知部から出力されるタイムアウト通知に同期して、前記無線通信アプリケーションのスレッドを制御する制御部と
を有することを特徴とする無線通信装置。
【請求項８】
所定のループ処理を繰り返し、
プロセッサのクロックに対応するカウンタのカウンタ値を取得し、
取得されるカウンタ値に基づいて、所定の単位時間に繰り返されるループ処理の回数を算出し、
前記ループ処理の回数を計数し、計数された回数と算出された前記所定の単位時間当たりの回数とに基づくタイムアウト通知を出力し、
出力されるタイムアウト通知に同期して、アプリケーションのスレッドを制御する
処理を有することを特徴とするタイマ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、タイマ制御装置、無線通信装置及びタイマ制御方法に関する。
【背景技術】
【０００２】
従来、モバイルネットワークに配置される基地局装置などのベースバンド機能部については、３ＧＰＰ（3rd  Generation  Partnership  Project）勧告によって厳密なフレームタイミングが規定されている。すなわち、例えば４ｍｓ（ミリ秒）以内に１フレームの処理を完了させることなどが定められている。このため、通常は、例えばＤＳＰ（Digital  Signal  Processor）などの専用プロセッサにリアルタイムＯＳ（Operating  System）を導入することでベースバンド機能部が構成される。
【０００３】
リアルタイムＯＳは、設定された時間通りに処理を実行するリアルタイム処理のためのＯＳであり、各種のソフトウェアによる処理時間を厳密に制御することができる。具体的には、専用プロセッサにリアルタイムＯＳを導入することにより、１μｓ（マイクロ秒）オーダーの精度で処理時間を制御することが可能となる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平４−１６３６３４号公報
【特許文献２】特開平７−６０４３号公報
【特許文献３】特開２００６−２１５９４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
一般に、専用プロセッサは高価であるため、専用プロセッサを用いて例えば基地局装置のベースバンド機能部を構成する場合には、基地局装置の製造コストが増大する。また、リアルタイムＯＳを導入する場合には、ベースバンド機能部による処理が固定的となり、多様化するサービスに柔軟に対応することが困難である。そこで、汎用プロセッサに非リアルアイムＯＳ（以下「汎用ＯＳ」という）を導入してベースバンド機能部を構成することが望まれている。
【０００６】
しかしながら、汎用ＯＳは、処理時間を厳密に制御することに特化したＯＳではないため、要求される精度を満たすことが困難であるという問題がある。具体的には、汎用ＯＳを用いる場合のタイマ処理は、例えばＣＰＵ（Central  Processing  Unit）のローカルタイマを用いたタイマ割り込みによって実装されるため、最高でも１ｍｓオーダーの精度となる。このため、汎用ＯＳを導入して基地局装置のベースバンド機能部を構成する場合には、３ＧＰＰ勧告による時間に関する規定を遵守することが困難である。
【０００７】
開示の技術は、かかる点に鑑みてなされたものであって、汎用ＯＳを用いる場合でも高精度に処理時間を制御することができるタイマ制御装置、無線通信装置及びタイマ制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本願が開示するタイマ制御装置は、１つの態様において、所定のループ処理を繰り返すループ処理部と、プロセッサのクロックに対応するカウンタのカウンタ値を取得する取得部と、前記取得部によって取得されるカウンタ値に基づいて、所定の単位時間に前記ループ処理部によって繰り返されるループ処理の回数を算出する算出部と、前記ループ処理部によるループ処理の回数を計数し、計数された回数と前記算出部によって算出された回数とに基づくタイムアウト通知を出力する通知部と、前記通知部から出力されるタイムアウト通知に同期して、アプリケーションのスレッドを制御する制御部とを有する。
【発明の効果】
【０００９】
本願が開示するタイマ制御装置、無線通信装置及びタイマ制御方法の１つの態様によれば、汎用ＯＳを用いる場合でも高精度に処理時間を制御することができるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、一実施の形態に係る基地局装置の構成を示すブロック図である。
【図２】図２は、一実施の形態に係るベースバンドプロセッサの機能を示すブロック図である。
【図３】図３は、一実施の形態に係るループ回数算出処理を示すフロー図である。
【図４】図４は、一実施の形態に係るスレッド開始処理を示すフロー図である。
【図５】図５は、スレッド管理データの構成を示す図である。
【図６】図６は、一実施の形態に係るスレッド制御処理を示すフロー図である。
【図７】図７は、スレッド制御の具体例を説明する図である。
【図８】図８は、スレッド管理データの具体例を示す図である。
【図９】図９は、スレッド制御の他の具体例を説明する図である。
【図１０】図１０は、スレッド管理データの他の具体例を示す図である。
【発明を実施するための形態】
【００１１】
以下、本願が開示するタイマ制御装置、無線通信装置及びタイマ制御方法の一実施の形態について、図面を参照して詳細に説明する。なお、この実施の形態により本発明が限定されるものではない。以下の一実施の形態おいては、タイマ制御装置を備えた無線通信装置として、基地局装置を例に挙げて説明する。
【００１２】
図１は、一実施の形態に係る基地局装置１００の構成を示すブロック図である。図１に示す基地局装置１００は、有線インタフェース（以下「有線Ｉ／Ｆ」と略記する）１１０、ベースバンドプロセッサ１２０、無線プロセッサ１３０、無線インタフェース（以下「無線Ｉ／Ｆ」と略記する）１４０及びメモリ１５０を有する。
【００１３】
有線Ｉ／Ｆ１１０は、例えばコアネットワークに有線接続され、コアネットワークとの間で信号を送受信する。
【００１４】
ベースバンドプロセッサ１２０は、例えばＣＰＵなどの汎用プロセッサを用いて構成され、基地局装置１００によって送受信される信号に対する種々のベースバンド処理を実行する。具体的には、ベースバンドプロセッサ１２０は、汎用ＯＳを用いて例えば所定の無線通信サービスを提供するためのアプリケーションを実行し、アプリケーションに応じたデータの符号化や変調などを実行する。このとき、ベースバンドプロセッサ１２０は、例えば３ＧＰＰ勧告に従った高い時間精度でアプリケーションの処理を制御する。すなわち、ベースバンドプロセッサ１２０は、例えば１μｓオーダーの精度で処理時間を制御する。ベースバンドプロセッサ１２０の構成及び機能については、後に詳述する。
【００１５】
無線プロセッサ１３０は、基地局装置１００によって送受信される信号に対する種々の無線処理を実行する。具体的には、無線プロセッサ１３０は、例えばベースバンドプロセッサ１２０によって符号化及び変調された信号のアップコンバートや増幅などを実行する。
【００１６】
無線Ｉ／Ｆ１４０は、例えば携帯端末装置との間で、アンテナを介して信号を無線送受信する。すなわち、無線Ｉ／Ｆ１４０は、例えば無線プロセッサ１３０によって増幅された信号をアンテナを介して無線送信する。
【００１７】
メモリ１５０は、ベースバンドプロセッサ１２０及び無線プロセッサ１３０に接続され、これらのプロセッサが実行する処理に用いられる情報を記憶する。具体的には、メモリ１５０は、例えばベースバンドプロセッサ１２０が実行するアプリケーションの処理に用いられる情報を記憶する。
【００１８】
図２は、一実施の形態に係るベースバンドプロセッサ１２０の機能を示すブロック図である。図２に示すように、ベースバンドプロセッサ１２０は、マルチコアプロセッサであり、コア＃１〜＃３を有する。
【００１９】
コア＃１は、基地局装置１００におけるベースバンド処理を司るアプリケーションを実行する。具体的には、コア＃１は、アプリケーションの個々の処理に対応するスレッドを実行する。このとき、コア＃１は、コア＃３によるタイマ制御及びスケジューリングに従って高い時間精度で各スレッドを実行する。
【００２０】
コア＃２は、基地局装置１００の基本的な処理を司る汎用ＯＳを実行する。したがって、コア＃２は、例えばコア＃１によって実行されるアプリケーションに対してカーネルを提供する。
【００２１】
コア＃３は、例えば１μｓオーダーの高い時間精度でタイマ制御を実行し、コア＃１におけるスレッドのスケジューリングを行う。具体的には、コア＃３は、タイムスタンプ取得部１２１、ループ回数算出部１２２、ループ処理部１２３、タイムアウト通知部１２４、動作時間判定部１２５、経過時間更新部１２６、スレッド制御部１２７及びスレッド状態登録部１２８を有する。
【００２２】
タイムスタンプ取得部１２１は、ループ回数算出部１２２及びループ処理部１２３から指示されたタイミングで、例えばＴＳＣ（Time  Stamp  Counter）などのクロックソースの値を読み出す。ＴＳＣは、コア＃３に供給されるクロック数をカウントする内部カウンタであり、例えば４００ＭＨｚ（メガヘルツ）のクロックがコア＃３へ供給される場合には、２．５ｎｓ（ナノ秒）に１インクリメントされる。
【００２３】
ループ回数算出部１２２は、１μｓの単位時間の間にループ処理部１２３が実行するループ処理の回数を算出する。具体的には、ループ回数算出部１２２は、例えばタイマ割り込みによって１ｍｓのスリープ処理を実行し、このスリープ処理の開始タイミング及び終了タイミングにおけるＴＳＣの値をタイムスタンプ取得部１２１に取得させる。これにより、ループ回数算出部１２２は、１ｍｓに相当するＴＳＣの値の増分をタイムスタンプ取得部１２１から取得する。
【００２４】
また、ループ回数算出部１２２は、ループ処理部１２３に対して、１回のループ処理の開始タイミング及び終了タイミングをタイムスタンプ取得部１２１へ通知するように指示する。これにより、ループ回数算出部１２２は、ループ処理部１２３がループ処理を１回実行する間のＴＳＣの値の増分をタイムスタンプ取得部１２１から取得する。そして、ループ回数算出部１２２は、１ｍｓに相当するＴＳＣの値の増分と１回のループ処理時間に相当するＴＳＣの値の増分とから、１μｓの間に実行されるループ処理の回数を算出する。
【００２５】
具体的には、例えば１ｍｓ（＝１０００μｓ）に相当するＴＳＣの増分が４９００００であり、１回のループ処理時間に相当するＴＳＣの値の増分が７である場合、ループ回数算出部１２２は、以下の式（１）から１μｓ当たりのループ回数Ｎを求める。
１（回）：７（tsc）＝Ｎ（回）：（４９００００／１０００）（tsc）  ・・・（１）
ここでは、式（１）からＮ＝７０と求まるため、ループ回数算出部１２２は、１μｓの間にループ処理部１２３が実行するループ回数を７０と算出したことになる。
【００２６】
ループ回数算出部１２２は、算出した１μｓ当たりのループ回数をタイムアウト通知部１２４へ通知する。なお、ループ回数算出部１２２によるループ回数の算出は、基地局装置１００の起動時に少なくとも１回実行される。その後は、比較的長い周期ごとに、１μｓ当たりのループ回数が算出されるようにしても良い。このように、１μｓ当たりのループ回数が算出される頻度が低いため、タイムスタンプ取得部１２１がＴＳＣの値を取得する頻度が低く、コア＃３の負荷増大を抑制することができる。
【００２７】
ループ処理部１２３は、所定のループ処理を継続して実行する。すなわち、ループ処理部１２３は、例えばメモリ１５０に対する４バイトのメモリアクセスなどの所定の処理をループして無限に繰り返す。また、ループ処理部１２３は、ループ回数算出部１２２からの指示に従って、１回のループ処理の開始タイミング及び終了タイミングをタイムスタンプ取得部１２１へ通知し、この開始タイミング及び終了タイミングにおけるＴＳＣの値を取得させる。上述したように、ループ処理部１２３が１回のループ処理の開始タイミング及び終了タイミングにおけるＴＳＣの値をタイムスタンプ取得部１２１に取得させることにより、ループ回数算出部１２２が１回のループ処理時間に相当するＴＳＣの値の増分を取得することができる。
【００２８】
タイムアウト通知部１２４は、１μｓ当たりのループ回数がループ回数算出部１２２から通知されると、ループ処理部１２３によって実行されるループ処理の回数をカウントする。そして、タイムアウト通知部１２４は、ループ処理の実行回数が１μｓ当たりのループ回数に到達する度に、所望の時間が経過したことを示すタイムアウト通知を動作時間判定部１２５へ出力する。
【００２９】
動作時間判定部１２５は、タイムアウト通知部１２４からタイムアウト通知が出力される度に、実行中のスレッドが開始してからの経過時間が所定の動作時間に達したか否かを判定する。すなわち、動作時間判定部１２５は、メモリ１５０に格納されたスレッド管理データを参照し、実行中のスレッドが開始してからの経過時間を取得するとともに、このスレッドについてあらかじめ定められた所定の動作時間を取得し、経過時間が所定の動作時間に等しいか否かを判定する。
【００３０】
そして、動作時間判定部１２５は、経過時間が所定の動作時間未満である場合は、経過時間更新部１２６に対して、スレッド管理データにおける経過時間を更新するように指示する。また、動作時間判定部１２５は、経過時間が所定の動作時間に達している場合は、スレッド制御部１２７に対して、実行中のスレッドを停止して次のスレッドを開始するように指示する。なお、動作時間判定部１２５は、タイムアウト通知部１２４からタイムアウト通知が出力された際に実行中のスレッドが存在しない場合も、スレッド制御部１２７に対して、スレッドを開始するように指示する。
【００３１】
経過時間更新部１２６は、動作時間判定部１２５から経過時間の更新が指示されると、メモリ１５０に格納されたスレッド管理データにおいて、実行中のスレッドの経過時間に１μｓ加算して更新する。
【００３２】
スレッド制御部１２７は、動作時間判定部１２５から次スレッドの開始が指示されると、メモリ１５０に格納されたスレッド管理データを参照し、待機中のスレッドの優先度に応じて次スレッドを決定する。そして、スレッド制御部１２７は、実行中のスレッドの停止と決定した次スレッドの開始とをコア＃２のＯＳを介してコア＃１のアプリケーションへ指示する。また、スレッド制御部１２７は、実行中のスレッドが存在せずスレッドの開始が指示された場合も、各スレッドの優先度に応じて開始するスレッドを決定し、スレッドの開始をアプリケーションへ指示する。
【００３３】
スレッド状態登録部１２８は、コア＃１においてアプリケーションが実行されると、このアプリケーションのスレッドに関する情報を含むスレッド管理データをメモリ１５０に格納する。また、スレッド状態登録部１２８は、スレッド制御部１２７によってスレッドの停止及び開始がアプリケーションへ指示されると、スレッド管理データにおいてスレッドの状態を更新する。具体的には、スレッド状態登録部１２８は、停止したスレッドについて待機状態又は休止状態と登録するとともに経過時間を０にクリアし、開始したスレッドについて実行状態と登録する。
【００３４】
なお、スレッドの状態には、例えば実行状態、待機状態及び休止状態の３つの状態がある。実行状態は、スレッドが実行中であることを示す。待機状態は、スレッドが実行されるのを待機中であることを示す。休止状態は、スレッドがまだ実行対象となっていないか、スレッドが完了したことを示す。
【００３５】
次いで、上記のように構成されたベースバンドプロセッサ１２０におけるループ回数算出処理について、図３に示すフロー図を参照しながら説明する。以下のループ回数算出処理は、例えば基地局装置１００の起動時などに、ベースバンドプロセッサ１２０のコア＃３によって実行される。
【００３６】
まず、ループ回数算出部１２２によって、例えばタイマ割り込みを用いた１ｍｓのスリープ処理が実行される。このスリープ処理の開始時と終了時には、タイムスタンプ取得部１２１によって、ＴＳＣの値が取得される。そして、ループ回数算出部１２２によって、スリープ処理の開始時及び終了時のＴＳＣの値の差分が算出されることにより、１ｍｓ当たりのＴＳＣの増分が取得される（ステップＳ１０１）。
【００３７】
１ｍｓ当たりのＴＳＣの増分が取得されると、ループ回数算出部１２２によって、取得された増分が１０００で除されることにより、１μｓ当たりのＴＳＣの増分が算出される（ステップＳ１０２）。なお、ここでは１ｍｓに相当するＴＳＣの増分が取得されているため１０００で除するものとしたが、より長い処理に相当するＴＳＣの増分を取得する場合には、処理時間に応じた値でＴＳＣの増分を除すれば良い。また、１ｍｓに相当するＴＳＣの増分を取得するために実行する処理は、スリープ処理に限定されない。
【００３８】
一方、ループ回数算出部１２２からの指示に従って、ループ処理部１２３による１回のループ処理の開始タイミング及び終了タイミングがタイムスタンプ取得部１２１へ通知される。この通知を受け、タイムスタンプ取得部１２１によって、１回のループ処理の開始時及び終了時のＴＳＣの値が取得される。そして、ループ回数算出部１２２によって、１回のループ処理の開始時及び終了時のＴＳＣの値の差分が算出されることにより、１回のループ処理時間に相当するＴＳＣの増分が取得される（ステップＳ１０３）。
【００３９】
そして、ループ回数算出部１２２によって、１μｓ当たりのＴＳＣの増分と１ループ処理当たりのＴＳＣの増分とから、１μｓ当たりのループ回数が算出される（ステップＳ１０４）。具体的には、１μｓ当たりのＴＳＣの増分をTSC_1とし、１ループ処理当たりのＴＳＣの増分をTSC_Lとし、１μｓ当たりのループ回数をＮとすると、以下の式（２）からＮが算出される。
１：TSC_L＝Ｎ：TSC_1  ・・・（２）
【００４０】
算出された１μｓ当たりのループ回数は、ループ回数算出部１２２からタイムアウト通知部１２４へ通知される。なお、ループ回数算出処理は、基地局装置１００の起動時に少なくとも１回実行され、その後は、比較的長い周期ごとに実行されても良い。このループ回数算出処理が実行されることにより、ループ処理部１２３におけるループ処理の回数をカウントすることによって、１μｓオーダーのタイマ制御をすることが可能となる。すなわち、１μｓオーダーの時間精度でアプリケーションのスレッドを開始及び停止することができる。
【００４１】
そこで、次に、アプリケーションのスレッドを開始する際の処理について、図４に示すフロー図を参照しながら説明する。以下のスレッド開始処理は、コア＃１がアプリケーションの実行を開始する際に、ベースバンドプロセッサ１２０のコア＃３によって実行される。
【００４２】
コア＃１においてアプリケーションの実行が開始される際には、コア＃１からコア＃３のスレッド状態登録部１２８に対して、アプリケーションの処理が開始される旨が通知される（ステップＳ２０１）。このとき、スレッド状態登録部１２８には、アプリケーションのすべてのスレッドに関する情報が通知される。この情報には、スレッドを識別するスレッドＩＤ、スレッドの優先度、一連の処理が完了するまでにスレッドが動作する時間を示す動作時間などが含まれる。これらの情報が用いられることにより、スレッド状態登録部１２８によって、各スレッドを管理するためのスレッド管理データが生成され、メモリ１５０に格納される。
【００４３】
図５は、メモリ１５０に格納されるスレッド管理データの構成を示す図である。図５に示すように、スレッド管理データには、プロセス内で実行されるスレッドに関する情報が記憶されている。具体的には、アプリケーションから通知されたスレッドＩＤ、優先度及び動作時間に加えて、スレッドが実際に開始されてからの経過時間と、スレッドの状態とが記憶される。
【００４４】
図５に示す例では、プロセスＸにはスレッドＡ及びスレッドＢが含まれ、これらのスレッドの動作時間はいずれも５μｓである。すなわち、スレッドＡ、Ｂは、５μｓ動作することにより一連の処理を完結させる。また、スレッドＡ、Ｂの優先度はそれぞれ２４、９であり、スレッドＢよりもスレッドＡの方が優先的に実行される。さらに、図５に示す例では、スレッドＢが実行中であり、開始されてから３μｓが経過している一方、スレッドＡが待機中であることがわかる。
【００４５】
このような構成のスレッド管理データは、アプリケーション開始時にスレッド状態登録部１２８によってメモリ１５０に格納され、実行対象となるスレッドの状態が待機状態に登録される（ステップＳ２０２）。また、すべてのスレッドの経過時間も０にクリアされる。このとき、まだ実行対象となっていないスレッドの状態は、休止状態となっている。
【００４６】
そして、スレッド制御部１２７によって、コア＃２のＯＳを介してコア＃１のアプリケーションに対する指示が出され、実行対象のスレッドが待機状態に制御される（ステップＳ２０３）。したがって、この時点では、すべてのスレッドが待機状態又は休止状態であり、停止している。
【００４７】
以上のようなスレッド管理データの格納などが実行される間も、ループ処理部１２３によってループ処理が繰り返し実行されている。そして、タイムアウト通知部１２４によって、ループ処理部１２３によるループ処理の実行回数が１μｓ当たりのループ回数に到達したことが検出されると、動作時間判定部１２５に対してタイムアウト通知が出力される（ステップＳ２０４）。
【００４８】
タイムアウト通知の出力を受け、動作時間判定部１２５によってスレッド管理データが参照され、実行中のスレッドの経過時間が動作時間に達したか否かが判定されるが、ここではすべてのスレッドが停止している。このため、動作時間判定部１２５からスレッド制御部１２７に対して、スレッドを開始するように指示される。そして、スレッド制御部１２７によってスレッド管理データが参照され、各スレッドの優先度が比較されて最初に開始するスレッドが決定される（ステップＳ２０５）。
【００４９】
具体的には、例えば、スレッド管理データにおいて待機状態と登録されたスレッドの優先度が比較され、最大の優先度を有するスレッドが最初に開始されるスレッドと決定される。そして、スレッド制御部１２７によって、決定されたスレッドを開始するようにコア＃１のアプリケーションへ指示が出され、スレッドが開始される（ステップＳ２０６）。同時に、スレッド状態登録部１２８がメモリ１５０に格納されたスレッド管理データにアクセスし、開始したスレッドの状態を実行状態に更新する。
【００５０】
これにより、タイムアウト通知部１２４から通知される１μｓ周期のタイムアウト通知に同期して、優先度が最も高いスレッドが開始され、スレッド管理データにおいては開始したスレッドが実行中であることが登録される。
【００５１】
次に、スレッド開始後のスレッド制御処理について、図６に示すフロー図を参照しながら説明する。以下のスレッド制御処理は、コア＃１がアプリケーションを実行中に、ベースバンドプロセッサ１２０のコア＃３によって実行される。
【００５２】
ループ処理部１２３では、常時ループ処理が実行されている。そして、タイムアウト通知部１２４によって、ループ処理部１２３によるループ処理の実行回数が１μｓ当たりのループ回数に到達したことが検出される度に、動作時間判定部１２５に対してタイムアウト通知が出力される（ステップＳ３０１）。
【００５３】
タイムアウト通知の出力を受け、動作時間判定部１２５によってスレッド管理データが参照され、実行中のスレッドの動作時間が満了したか否かが判定される（ステップＳ３０２）。すなわち、実行中のスレッドの経過時間と動作時間がスレッド管理データから読み出され、経過時間が動作時間に達したか否かが判定される。
【００５４】
この判定の結果、経過時間が動作時間未満であり動作時間が満了していない場合は（ステップＳ３０２Ｎｏ）、経過時間更新部１２６によって、スレッド管理データにおける経過時間の更新が実行される（ステップＳ３０６）。具体的には、経過時間更新部１２６によって、スレッド管理データに記憶された実行中のスレッドの経過時間に１μｓが加算される。そして、実行中のスレッドの動作時間が満了するまで、タイムアウト通知部１２４から動作時間判定部１２５に対してタイムアウト通知が出力される度に、実行中のスレッドの経過時間が１μｓずつ増加する。
【００５５】
一方、ステップＳ３０２の判定の結果、経過時間が動作時間に等しく動作時間が満了した場合は（ステップＳ３０２Ｙｅｓ）、スレッド制御部１２７によって、次に実行するスレッドが各スレッドの優先度に基づいて決定される（ステップＳ３０３）。具体的には、スレッド管理データの各スレッドの優先度と状態が参照され、待機状態のスレッドのうち優先度が最も高いスレッドが次のスレッドと決定される。
【００５６】
次スレッドが決定されると、スレッド制御部１２７によって、スレッドの切り替えが実行される（ステップＳ３０４）。具体的には、スレッド制御部１２７からコア＃１のアプリケーションに対して、実行中のスレッドを停止するとともに決定された次スレッドを開始するように指示される。
【００５７】
そして、コア＃１において次スレッドが開始されると、スレッド状態登録部１２８によって、スレッド管理データにおける各スレッドの状態が更新される（ステップＳ３０５）。すなわち、停止したスレッドの状態が待機状態に更新されるとともに、開始された次スレッドの状態が実行状態に更新される。また、停止したスレッドの経過時間が０にクリアされる。なお、停止したスレッドが完全に終了し、再度実行されることがない場合には、スレッド管理データにおいて該当スレッドの状態が休止状態に更新される。
【００５８】
このように、タイムアウト通知部１２４から通知される１μｓ周期のタイムアウト通知に同期して、スレッドごとの動作時間の満了が判定されてスレッドが切り替えられるため、１μｓオーダーの時間精度で処理を実行することができる。
【００５９】
次に、上記のスレッド制御処理の具体例を２つ挙げておく。１つ目の具体例では、２つのスレッドが交互に実行され、２つ目の具体例では、実行中のスレッドよりも優先度が高いスレッドが新たに実行対象となると即座にスレッドが切り替えられる。
【００６０】
図７は、スレッド制御の１つ目の具体例を説明する図である。図７に示す例では、スレッドＡ、Ｂがコア＃１によって実行される。スレッドＡはスレッドＢよりも優先度が高く、スレッドＡ、Ｂの動作時間はいずれも５μｓであるものとする。図７においては、横軸がμｓ単位の時間、縦軸が優先度を示しており、図中ハッチングで示された部分は、該当するスレッドが実行中であることを示す。また、コア＃２は汎用ＯＳを実行し、コア＃３は上述した１μｓオーダーでのスレッド制御処理を実行する。
【００６１】
処理開始時には、コア＃１からスレッドＡ、Ｂの情報がスレッド状態登録部１２８へ通知され、スレッド状態登録部１２８によってスレッド管理データがメモリ１５０へ格納される。そして、スレッド管理データにおいて、実行対象となっているスレッドＡ、Ｂの状態が待機状態と登録される。このときのスレッド管理データを図８（ａ）に示す。
【００６２】
図８（ａ）に示すように、スレッドＡ、Ｂの状態はいずれも待機状態であり、経過時間が０μｓとなっている。このスレッド管理データがスレッド制御部１２７によって参照されることにより、待機状態のスレッドＡ、Ｂの優先度が比較され、優先度が高いスレッドＡが開始される。これに伴って、スレッド状態登録部１２８によって、スレッドＡの状態が実行状態に更新される。
【００６３】
そして、タイムアウト通知部１２４からの１μｓ周期のタイムアウト通知によって、スレッドＡの経過時間が１μｓずつ増加し、経過時間が動作時間に等しい５μｓになるとスレッドの切り替えが実行される。このときのスレッド管理データを図８（ｂ）に示す。
【００６４】
図８（ｂ）に示すように、スレッドＡの状態は実行状態となっており、経過時間が動作時間に等しい５μｓとなっている。このスレッド管理データが動作時間判定部１２５によって参照されることにより、スレッド制御部１２７に対して、スレッドを切り替える旨の指示が出される。
【００６５】
スレッドの切り替えは、スレッド制御部１２７によってスレッド管理データが参照され、待機状態のスレッドのうち最も優先度が高いスレッドが次スレッドに決定されることによって実行される。ここでは、スレッドＢが次スレッドと決定されるため、スレッド制御部１２７からコア＃１に対して、スレッドＡを停止してスレッドＢを開始するように指示される。これに伴って、スレッド状態登録部１２８によって、スレッドＡの状態が待機状態に更新され、スレッドＢの状態が実行状態に更新される。また、スレッドＡの経過時間が０にクリアされる。
【００６６】
以下、このようにスレッドの切り替えが５μｓごとに繰り返され、コア＃１は、１μｓオーダーの時間精度でアプリケーションの処理を実行することができる。なお、このように２つのスレッドＡ、Ｂが繰り返して実行される処理の例としては、モータの電流フィードバックループなどが挙げられる。
【００６７】
図９は、スレッド制御の２つ目の具体例を説明する図である。図９に示す例では、スレッドＡ〜Ｅがコア＃１によって実行される。スレッドＡ〜Ｅは、この順で優先度が高く、スレッドＡ、Ｂの動作時間は６μｓ、スレッドＣの動作時間は７μｓ、スレッドＤの動作時間は４μｓ、スレッドＥの動作時間は５μｓであるものとする。図９においても、図７と同様に、横軸がμｓ単位の時間、縦軸が優先度を示しており、図中ハッチングで示された部分は、該当するスレッドが実行中であることを示す。また、コア＃２は汎用ＯＳを実行し、コア＃３は上述した１μｓオーダーでのスレッド制御処理を実行する。
【００６８】
処理開始時には、コア＃１からスレッドＡ〜Ｅの情報がスレッド状態登録部１２８へ通知され、スレッド状態登録部１２８によってスレッド管理データがメモリ１５０へ格納される。そして、スレッド管理データにおいて、実行対象となっているスレッドＥの状態が待機状態と登録される。すなわち、この例では、アプリケーション開始時に実行対象となっているスレッドはスレッドＥのみであり、スレッドＡ〜Ｄは休止状態となっている。
【００６９】
そして、タイムアウト通知部１２４からの１μｓ周期のタイムアウト通知によって、スレッドＥの経過時間が１μｓずつ増加するが、経過時間が２μｓとなった時点でスレッドＤが実行対象となったものとする。この場合、スレッドＤが実行対象となったことがコア＃１からスレッド状態登録部１２８へ通知され、スレッド管理データにおいてスレッドＤの状態が待機状態に更新される。また、実行中のスレッドＥの経過時間は動作時間の５μｓに達していないが、新たにスレッドＤが実行対象となったため、スレッド制御部１２７によって、実行状態のスレッドＥの優先度と待機状態のスレッドＤの優先度とが比較される。この結果、スレッドＤの優先度の方が高いため、スレッド制御部１２７からコア＃１に対して、スレッドＥを停止してスレッドＤを開始するように指示される。これに伴って、スレッド状態登録部１２８によって、スレッドＥの状態が待機状態に更新され、スレッドＤの状態が実行状態に更新される。このとき、スレッドＥの経過時間は、２μｓのままである。
【００７０】
その後、スレッドＤの経過時間が２μｓとなった時点でスレッドＢが実行対象となったものとする。この場合、上記と同様に、スレッドＢが実行対象となったことがコア＃１からスレッド状態登録部１２８へ通知され、スレッド管理データにおいてスレッドＢの状態が待機状態に更新される。また、実行中のスレッドＤの経過時間は動作時間の４μｓに達していないが、新たにスレッドＢが実行対象となったため、スレッド制御部１２７によって、実行状態のスレッドＤの優先度と待機状態のスレッドＢの優先度とが比較される。この結果、スレッドＢの優先度の方が高いため、スレッド制御部１２７からコア＃１に対して、スレッドＤを停止してスレッドＢを開始するように指示される。これに伴って、スレッド状態登録部１２８によって、スレッドＤの状態が待機状態に更新され、スレッドＢの状態が実行状態に更新される。このとき、スレッドＤ、Ｅの経過時間は、いずれも２μｓのままである。このときのスレッド管理データを図１０に示す。
【００７１】
図１０に示すように、スレッドＢの状態が実行状態となっており、スレッドＤ、Ｅの状態が待機状態となっている。また、スレッドＡ、Ｃは、まだ実行対象となっていないため、スレッドＡ、Ｃの状態が休止状態となっている。そして、スレッドＤ、Ｅは、実行開始から２μｓ経過した時点で中断されているため、スレッドＤ、Ｅの経過時間は２μｓとなっている。
【００７２】
以後、新たなスレッドが実行対象となると、このスレッドの優先度と実行中のスレッドの優先度とが比較され、新たに実行対象となったスレッドの優先度が高ければ、即座にスレッドが切り替えられる。したがって、図９に示すように、スレッドＢの経過時間が４μｓとなった時点でスレッドＢよりも優先度が高いスレッドＡが開始される。一方、スレッドＡの経過時間が２μｓとなった時点でスレッドＣが新たに実行対象となるが、スレッドＣの優先度はスレッドＡの優先度よりも低いため、スレッドの切り替えは発生しない。
【００７３】
また、各スレッドの経過時間が動作時間に達すると、上述した１つ目の例と同様に、待機状態のスレッドのうち優先度が最も高いスレッドが次スレッドとなる。このとき、次スレッドが中断されたスレッドである場合は、中断された時点での経過時間がスレッド管理データに記憶されているため、スレッドの再開後、中断前の経過時間を引き継ぐことができる。
【００７４】
このように、２つ目のスレッド制御処理の例では、優先度が高いスレッドが常に優先して実行されるため、１μｓオーダーの時間精度でスレッドの優先度を厳密に遵守するアプリケーションの処理を実行することができる。
【００７５】
以上のように、本実施の形態によれば、１つのコアがループ処理を繰り返し、ＴＳＣの値とループ処理に要する時間との関係から、１μｓ当たりのループ処理の回数を算出する。そして、ループ処理の回数が１μｓ当たりのループ処理の回数となる度にタイムアウト通知が出力されるようにし、このタイムアウト通知に同期して、アプリケーションの各スレッドを開始したり停止したりする。このため、タイマ割り込みに依存せずに、１μｓオーダーの時間精度で処理を実行することができ、汎用ＯＳを用いる場合でも高精度に処理時間を制御することができる。
【００７６】
なお、上記一実施の形態においては、タイムアウト通知部１２４によって、１μｓ周期でタイムアウト通知が出力されるものとした。しかし、タイムアウト通知は、必ずしも１μｓ周期でなくても良い。すなわち、例えばすべてのスレッドの動作時間が５μｓである場合には、５μｓ周期でタイムアウト通知が出力されるようにしても良い。この場合には、タイムアウト通知部１２４は、ループ処理の回数がループ回数算出部１２２から通知された回数の５倍に到達する度にタイムアウト通知を出力する。こうすることにより、スレッド制御部１２７は、タイムアウト通知の度にスレッドを切り替えれば良く、経過時間が動作時間に達したか否かの判定を省略することができる。
【００７７】
また、各スレッドの動作時間が異なる場合でも、スレッドの開始時にこのスレッドの動作時間をタイムアウト通知部１２４に設定し、タイムアウト通知部１２４は、設定された動作時間が経過した際にタイムアウト通知を出力するようにしても良い。この場合には、タイムアウト通知部１２４は、ループ処理の回数が実行中のスレッドの動作時間に対応する回数に到達する度にタイムアウト通知を出力する。さらに、ループ回数算出部１２２が１μｓ当たりのループ処理の回数ではなく、１μｓよりも短い時間当たりのループ回数を算出することにより、さらに高い時間精度でスレッドを切り替えることも可能である。
【００７８】
なお、上記一実施の形態においては、基地局装置１００におけるスレッド制御について説明したが、本発明は基地局装置以外の様々な装置に適用することが可能である。すなわち、汎用ＯＳによって動作し種々のアプリケーションを実行する装置に上記のタイマ制御方法を導入することにより、リアルタイムＯＳ及び専用プロセッサを用いることなく高精度に処理時間を制御することができる。具体的には、例えばパーソナルコンピュータの仮想化環境において複数の汎用ＯＳを稼働させて上記のタイマ制御方法を適用することにより、リアルタイムＯＳ用のアプリケーションを実行するシステム試験などを安価かつ容易に実現することができる。
【００７９】
また、上記一実施の形態においては、コア＃１がアプリケーションを実行するものとしたが、複数のコアが同時にアプリケーションを実行しても良い。ただし、この場合でも、１つのコア（コア＃３）は、上述したスレッド制御処理を含むタイマ制御方法を実施する専用のコアとする。また、スレッド制御部１２７が優先度に応じて各コアにおけるスレッドの停止及び開始を制御することにより、コア数以上のスレッドが同時に実行されることはない。
【００８０】
さらに、上記一実施の形態において説明したタイマ制御方法をコンピュータが実行可能なプログラムとして記述することも可能である。この場合、このプログラムをコンピュータが読み取り可能な記録媒体に格納し、コンピュータに導入することも可能である。コンピュータが読み取り可能な記録媒体としては、例えばＣＤ−ＲＯＭ、ＤＶＤディスク、ＵＳＢメモリなどの可搬型記録媒体や、例えばフラッシュメモリなどの半導体メモリが挙げられる。
【符号の説明】
【００８１】
１１０  有線Ｉ／Ｆ
１２０  ベースバンドプロセッサ
１２１  タイムスタンプ取得部
１２２  ループ回数算出部
１２３  ループ処理部
１２４  タイムアウト通知部
１２５  動作時間判定部
１２６  経過時間更新部
１２７  スレッド制御部
１２８  スレッド状態登録部
１３０  無線プロセッサ
１４０  無線Ｉ／Ｆ
１５０  メモリ
【図１】
0006409600.tif 000002
【図２】
0006409600.tif 000003
【図３】
0006409600.tif 000004
【図４】
0006409600.tif 000005
【図５】
0006409600.tif 000006
【図６】
0006409600.tif 000007
【図７】
0006409600.tif 000008
【図８】
0006409600.tif 000009
【図９】
0006409600.tif 000010
【図１０】
0006409600.tif 000011