(57)【特許請求の範囲】
【請求項１】
デバイスに接続され、ＯＳ（オペレーティングシステム）を実行するＯＳ実行部であって、次回起動される時刻である次回割込み時刻までの残り時間であって割込みタイマのカウンタ値に設定される残り時間が、タイムアウトキューに設定されているＯＳ依存タスクを起動するＯＳ依存割込みを起こすＯＳ実行部を備えた計算機装置において、
フラグを記憶する記憶部と、
前記デバイスの状態に起因するＯＳ独立割込みが発生すると、前記デバイスに対応するＯＳ独立タスクを起動するか否かを判定し、前記ＯＳ独立タスクを起動する場合に、前記フラグをオンにすると共に、前記割込みタイマのカウンタ値を上書きすることにより前記ＯＳ実行部に前記ＯＳ依存割込みを起こさせるＯＳ独立割込み処理部と、
前記ＯＳ実行部により前記ＯＳ依存割込みが起こされると、前記フラグがオンであるか否かを判定し、前記フラグがオンである場合に、前記ＯＳ独立タスクを起動すると共に前記フラグをオフにするＯＳ依存割込み処理部と
を備え、
前記ＯＳ依存割込み処理部は、
前記ＯＳ独立タスクを起動すると、前回、前記ＯＳ依存タスクが起動された時刻である前回実行時刻と現在時刻とを取得し、前回実行時刻から現在時間までの経過時間を算出し、前記経過時間と前記ＯＳ依存タスクのうち最初に実行される先頭タスクの前記残り時間とに基づいて、前記先頭タスクが前記次回割込み時刻に実行されるように前記割込みタイマのカウンタ値を再設定するタイムアウト設定部を備えた計算機装置。
【請求項２】
前記タイムアウト設定部は、
前記残り時間から前記経過時間を減じた値が０より大きい場合に、前記残り時間から前記経過時間を減じた値を前記カウンタ値に再設定し、前記残り時間から前記経過時間を減じた値が０以下の場合に、前記先頭タスクが直ちに実行されるように前記割込みタイマのカウンタ値を再設定する請求項１に記載の計算機装置。
【請求項３】
デバイスに接続され、ＯＳ（オペレーティングシステム）を実行するＯＳ実行部であって、次回起動される時刻である次回割込み時刻までの残り時間であって割込みタイマのカウンタ値に設定される残り時間が、タイムアウトキューに設定されているＯＳ依存タスクを起動するＯＳ依存割込みを起こすＯＳ実行部を備えた計算機装置のタスク起動方法において、
ＯＳ独立割込み処理部が、前記デバイスの状態に起因するＯＳ独立割込みが発生すると、前記デバイスに対応するＯＳ独立タスクを起動するか否かを判定し、前記ＯＳ独立タスクを起動する場合に、フラグをオンにすると共に、前記割込みタイマのカウンタ値を上書きすることにより前記ＯＳ実行部に前記ＯＳ依存割込みを起こさせ、
ＯＳ依存割込み処理部が、前記ＯＳ実行部により前記ＯＳ依存割込みが起こされると、前記フラグがオンであるか否かを判定し、前記フラグがオンである場合に、前記ＯＳ独立タスクを起動すると共に前記フラグをオフにし、
前記ＯＳ依存割込み処理部が、前記ＯＳ独立タスクを起動すると、前回、前記ＯＳ依存タスクを起動した時刻である前回実行時刻と現在時刻とを取得し、前回実行時刻から現在時刻までの経過時間を算出し、前記経過時間と前記ＯＳ依存タスクのうち最初に実行される先頭タスクの前記残り時間とに基づいて、前記先頭タスクが前記次回割込み時刻に実行されるように前記割込みタイマのカウンタ値を再設定するタスク起動方法。
【請求項４】
デバイスに接続され、ＯＳ（オペレーティングシステム）を実行するＯＳ実行部であって、次回起動される時刻である次回割込み時刻までの残り時間であって割込みタイマのカウンタ値に設定される残り時間が、タイムアウトキューに設定されているＯＳ依存タスクを起動するＯＳ依存割込みを起こすＯＳ実行部を備えた計算機装置のタスク起動プログラムにおいて、
前記デバイスの状態に起因するＯＳ独立割込みが発生すると、前記デバイスに対応するＯＳ独立タスクを起動するか否かを判定し、前記ＯＳ独立タスクを起動する場合に、フラグをオンにすると共に、前記割込みタイマのカウンタ値を上書きすることにより前記ＯＳ実行部に前記ＯＳ依存割込みを起こさせるＯＳ独立割込み処理と、
前記ＯＳ実行部により前記ＯＳ依存割込みが起こされると、前記フラグがオンであるか否かを判定し、前記フラグがオンである場合に、前記ＯＳ独立タスクを起動すると共に前記フラグをオフにするＯＳ依存割込み処理と、
前記ＯＳ独立タスクを起動すると、前回、前記ＯＳ依存タスクを起動した時刻である前回実行時刻と現在時刻とを取得し、前回実行時刻から現在時刻までの経過時間を算出し、前記経過時間と前記ＯＳ依存タスクのうち最初に実行される先頭タスクの前記残り時間とに基づいて、前記先頭タスクが前記次回割込み時刻に実行されるように前記割込みタイマのカウンタ値を再設定する処理と
をコンピュータである前記計算機装置に実行させるタスク起動プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機装置、タスク起動プログラムおよびタスク起動方法に関する。
【背景技術】
【０００２】
非特許文献１には、組込み機器向けリアルタイムＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を利用した計算機システムが開示されている。非特許文献１の計算機システムは、ＯＳに依存するカーネル管理割込みハンドラと、ＯＳから独立したカーネル管理外割込みハンドラとの２種類の割込みハンドラを持つ。カーネル管理割込みハンドラは、ＯＳ依存割込みハンドラともいう。また、カーネル管理外割込みハンドラは、ＯＳ独立割込みハンドラともいう。
ＯＳ依存割込みハンドラは、ＯＳ依存割込みハンドラ内でＯＳのサービスコールを発行することができる。しかし、サービスコール処理中に発生したＯＳ依存割込みは、ＯＳ依存割込みを受け付け可能となるまで遅延する。
ＯＳ独立割込みハンドラは、ＯＳ独立割込みハンドラ内でＯＳのサービスコールを発行することができない。しかし、サービスコール処理中に発生したＯＳ独立割込みは、ＯＳ依存割込みを受け付けられない区間であっても受け付けられる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００１−０９２６７６号公報
【非特許文献】
【０００４】
【非特許文献１】Ｍ３Ｔ−ＭＲ３０／４  Ｖ．４．０１ユーザーズマニュアル（３．６  割り込み）
【非特許文献２】三菱電機技報  ２００３年２月号「第３世代携帯電話技術」（特集論文：Ｗ−ＣＤＭＡ携帯機の基本ソフトウェア）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
家電製品およびモータ制御といった小規模な組込み機器では、ＯＳ依存割込みを用いることによる割込みの遅延が許容できない場合、ＯＳ独立割込みを用いる必要がある。
そこで、ＯＳ独立割込みハンドラが、ＯＳ依存割込みハンドラを介して、ＯＳが管理しているタスクの処理を起動する技術がある。具体的には、特許文献１のように、ＯＳ独立割込みによってタスクを起動したい場合に更新されるフラグの状態監視を、周期的なタイマ割込みによって発生するＯＳ依存割込みで実施し、必要に応じてタスクを起動する技術がある。【０００６】
しかしながら、特許文献１の技術は、フラグが立っていない、すなわちタスクを起動する必要がない時でも定期的にＯＳ依存割込みを起動させなければならない。よって、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）使用率に無駄が生じる。
また、常にＯＳ依存割込みを周期的に発生させなければならないことから、非特許文献２に開示されたティックレスタイマ方式を採用することができず、計算機装置の消費電力に無駄がある。ティックレスタイマ方式とは、必要な時にのみシステムクロック割込みを発生させることができる方式である。【０００７】
本発明は、ＯＳの時間管理方式としてティックレスタイマ方式を採用し、ＯＳ独立割込みハンドラから周期的でないＯＳ依存割込みハンドラを介してＯＳが管理しているタスクを起動することを目的とする。
【課題を解決するための手段】
【０００８】
本発明に係る計算機装置は、デバイスに接続され、ＯＳを実行するＯＳ実行部であってＯＳ依存割込みを起こすＯＳ実行部を備えた計算機装置において、
フラグを記憶する記憶部と、
前記デバイスの状態に起因するＯＳ独立割込みが発生すると、タスクを起動するか否かを判定し、前記タスクを起動する場合に、前記フラグをオンにすると共に前記ＯＳ実行部に前記ＯＳ依存割込みを起こさせるＯＳ独立割込み処理部と、
前記ＯＳ実行部により前記ＯＳ依存割込みが起こされると、前記フラグがオンであるか否かを判定し、前記フラグがオンである場合に、前記タスクを起動すると共に前記フラグをオフにするＯＳ依存割込み処理部とを備えた。
【発明の効果】
【０００９】
本発明に係る計算機装置では、ＯＳ独立割込み処理部が、ＯＳ独立割込みが発生すると、タスクを起動するか否かを判定し、タスクを起動する場合に、フラグをオンにすると共にＯＳ実行部にＯＳ依存割込みを起こさせる。また、ＯＳ依存割込み処理部は、ＯＳ依存割込みが起こされると、フラグがオンであるか否かを判定し、フラグがオンである場合に、タスクを起動すると共にフラグをオフにする。よって、本発明に係る計算機装置によれば、ＯＳ独立割込みが発生した場合に不定期にＯＳ依存割込みを起こさせて、ＯＳ依存割込み処理部によりタスクを起動することができるので、ＣＰＵの使用効率を向上させること共に消費電力も削減することができる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１に係る計算機装置１００の構成図。
【図２】実施の形態１に係るフラグ１４１の配列の構成例。
【図３】実施の形態１に係るフラグ１４１の要素番号とフラグ値との対応図。
【図４】実施の形態１に係る計算機装置１００のタスク起動方法５１０およびタスク起動プログラム５２０のタスク起動処理Ｓ１００を示すフローチャート。
【図５】実施の形態１に係るＯＳ依存割込み処理Ｓ１０を示すフローチャート。
【図６】実施の形態１に係るＯＳ独立割込み処理Ｓ２０を示すフローチャート。
【図７】実施の形態１に係るＯＳ依存割込み処理Ｓ１０の具体例で仮定する割込みの発生タイミングを示す図。
【図８】図７に対応するタイムアウトキューとタスク管理情報とを示す図。
【図９】ＯＳ依存割込みのみが発生した場合のＯＳ依存割込み処理の具体例を示す図。
【図１０】図９の処理の後、周期の開始時点から３ｍｓのＴ１時点においてＯＳ独立割込みが発生した場合のＯＳ依存割込み処理の具体例を示す図。
【図１１】実施の形態１の変形例に係る計算機装置１００の構成図。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態について、図を用いて説明する。なお、各図中、同一または相当する部分には、同一符号を付している。実施の形態の説明において、同一または相当する部分については、説明を適宜省略または簡略化する。
【００１２】
実施の形態１．
＊＊＊構成の説明＊＊＊
図１を用いて、本実施の形態に係る計算機装置１００の構成について説明する。
計算機装置１００は、デバイス２００に接続される。デバイス２００は、デバイス２００の状態に起因するＯＳ独立割込み２０１を発生させる。デバイス２００は、具体的には、モータ２１０あるいはセンサ２２０である。モータ２１０あるいはセンサ２２０といったデバイス２００は、動作完了あるいはエラーを含む状態変更による割込みをＯＳ独立割込み２０１として発生させる。また、計算機装置１００は、デバイス２００にＯＳ独立割込み２０１を発生させる代わりに、タイマを用いて周期的にＯＳ独立の割込みを発生させ、デバイス２００の状態変更を監視してもよい。
【００１３】
図１に示すように、計算機装置１００は、コンピュータである。
計算機装置１００は、プロセッサ９１０、記憶装置９２０、入出力インタフェース９３０、割込みタイマ１６０、および計時タイマ１７０といったハードウェアを備える。記憶装置９２０は、メモリ９２１と補助記憶装置９２２とを含む。
【００１４】
計算機装置１００は、機能構成として、ＯＳ依存割込み処理部１１０と、ＯＳ独立割込み処理部１３０と、ＯＳ実行部１２０と、記憶部１４０とを備える。ＯＳ依存割込み処理部１１０は、タスク起動判定部１１１と、システム時刻管理部１１２と、タイムアウト処理部１１３と、タイムアウト設定部１１４とを備える。ＯＳ独立割込み処理部１３０は、タスク起動要求部１３１と、タイマ設定部１３２とを備える。
ＯＳ依存割込み処理部１１０は、ＯＳ依存割込みハンドラである。ＯＳ独立割込み処理部１３０は、ＯＳ独立割込みハンドラである。
【００１５】
タスク起動判定部１１１と、システム時刻管理部１１２と、タイムアウト処理部１１３と、タイムアウト設定部１１４とは、ＯＳ依存割込みハンドラであるＯＳ依存割込み処理部１１０により呼び出される。タスク起動要求部１３１と、タイマ設定部１３２とは、ＯＳ独立割込みハンドラであるＯＳ独立割込み処理部１３０により呼び出される。
【００１６】
タスク起動判定部１１１と、システム時刻管理部１１２と、タイムアウト処理部１１３と、タイムアウト設定部１１４と、タスク起動要求部１３１と、タイマ設定部１３２と、ＯＳ実行部１２０との機能は、ソフトウェアで実現される。
記憶部１４０は、メモリ９２１および補助記憶装置９２２により実現される。また、記憶部１４０は、メモリ９２１のみ、あるいは、補助記憶装置９２２のみで実現されてもよい。記憶部１４０の実現方法は任意である。フラグ１４１と前回実行時刻Ｔｐとタイムアウトキュー１４３とはメモリ９２１に記憶される。タイムアウトキュー１４３には残り時間１４４が設定される。タスク１４５は補助記憶装置９２２に記憶される。
【００１７】
プロセッサ９１０は、信号線を介して他のハードウェアと接続され、これら他のハードウェアを制御する。プロセッサ９１０は、演算処理を行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。プロセッサ９１０は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）あるいはＭＰＵ（Ｍｉｃｒｏ−Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
【００１８】
補助記憶装置９２２は、具体的には、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、フラッシュメモリ、または、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）である。メモリ９２１は、具体的には、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【００１９】
入出力インタフェース９３０は、入力インタフェースとして機能するとともに出力インタフェースとして機能する。
入力インタフェースとして機能する場合、入出力インタフェース９３０は、マウス、キーボード、タッチパネルといった入力装置と接続されるポートである。入出力インタフェース９３０は、具体的には、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）端子である。なお、入出力インタフェース９３０は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）と接続されるポートであってもよい。入出力インタフェース９３０は、デバイス２００と接続され、デバイス２００からＯＳ独立割込み２０１を受け付ける。
入力インタフェースとして機能する場合、入出力インタフェース９３０は、ディスプレイといった表示機器のケーブルが接続されるポートである。出力インタフェースは、具体的には、ＵＳＢ端子またはＨＤＭＩ（登録商標）（Ｈｉｇｈ  Ｄｅｆｉｎｉｔｉｏｎ  Ｍｕｌｔｉｍｅｄｉａ  Ｉｎｔｅｒｆａｃｅ）端子である。ディスプレイは、具体的には、ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）である。
【００２０】
補助記憶装置９２２には、タスク起動判定部１１１と、システム時刻管理部１１２と、タイムアウト処理部１１３と、タイムアウト設定部１１４と、タスク起動要求部１３１と、タイマ設定部１３２と、ＯＳ実行部１２０との機能を実現するプログラムが記憶されている。タスク起動判定部１１１と、システム時刻管理部１１２と、タイムアウト処理部１１３と、タイムアウト設定部１１４と、タスク起動要求部１３１と、タイマ設定部１３２と、ＯＳ実行部１２０との機能を実現するプログラムをタスク起動プログラム５２０ともいう。このプログラムは、メモリ９２１にロードされ、プロセッサ９１０に読み込まれ、プロセッサ９１０によって実行される。また、補助記憶装置９２２には、ＯＳが記憶されている。ＯＳの少なくとも一部がメモリ９２１にロードされる。そして、プロセッサ９１０はＯＳを実行しながら、タスク起動プログラム５２０を実行する。タスク１４５は、ＯＳが割込みタイマ１６０を用いて提供するサービスコールにより起動される。
【００２１】
計算機装置１００は、１つのプロセッサ９１０のみを備えていてもよいし、複数のプロセッサ９１０を備えていてもよい。複数のプロセッサ９１０がタスク起動判定部１１１と、システム時刻管理部１１２と、タイムアウト処理部１１３と、タイムアウト設定部１１４と、タスク起動要求部１３１と、タイマ設定部１３２と、ＯＳ実行部１２０との機能を実現するプログラムを連携して実行してもよい。
【００２２】
タスク起動判定部１１１と、システム時刻管理部１１２と、タイムアウト処理部１１３と、タイムアウト設定部１１４と、タスク起動要求部１３１と、タイマ設定部１３２と、ＯＳ実行部１２０との処理の結果を示す情報、データ、信号値、および、変数値は、計算機装置１００の補助記憶装置９２２、メモリ９２１、または、プロセッサ９１０内のレジスタまたはキャッシュメモリに記憶される。
【００２３】
タスク起動判定部１１１と、システム時刻管理部１１２と、タイムアウト処理部１１３と、タイムアウト設定部１１４と、タスク起動要求部１３１と、タイマ設定部１３２と、ＯＳ実行部１２０との機能を実現するプログラムは、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）といった可搬記録媒体に記憶されてもよい。
なお、タスク起動プログラムプロダクトとは、タスク起動プログラム５２０が記録された記憶媒体および記憶装置である。タスク起動プログラムプロダクトとは、外観に関わらず、コンピュータ読み取り可能なプログラムをロードしているものを指す。
【００２４】
＊＊＊機能構成の説明＊＊＊
次に、図１の各機能構成について説明する。
ＯＳ実行部１２０は、計算機装置１００において、タスク１４５の実行管理を行う。また、ＯＳ実行部１２０は、計算機装置１００において、タスク１４５を起動する機能を提供する。
デバイス２００は、動作完了あるいはエラーを含む状態変更によって、ＯＳ独立割込み２０１を発生させる。
割込みタイマ１６０は、ＯＳ実行部１２０にＯＳ依存割込み２０２を起こさせるために用いられる。つまり、ＯＳ依存割込み２０２は割込みタイマ１６０の機能によって発生する。割込みタイマ１６０は、システムクロック割込み用タイマともいう。
計時タイマ１７０は、システム時刻を計時するタイマである。計時タイマ１７０は、システム時刻計時用タイマともいう。計時タイマ１７０は、具体的には、フリーランニングタイマ機能を用いたタイマである。
【００２５】
タスク起動要求部１３１は、デバイス２００の状態に起因するＯＳ独立割込み２０１が発生すると、タスク１４５を起動するか否かを判定する。タスク起動要求部１３１は、タスク１４５を起動する場合に、フラグ１４１をオンにすると共にＯＳ実行部１２０にＯＳ依存割込み２０２を起こさせる。タスク１４５は、ＯＳが管理する任意のタスクである。フラグ１４１をオンにするとは、フラグを立てることであり、具体的には、値を「１」に設定する。
フラグ１４１は、それがタスク起動要求部１３１によって立てられた場合に、どのデバイス２００に対応するものか判定可能なデータ構造で構成される。また、フラグ１４１のデータ構造は、タスク１４５が複数存在する場合にどのタスク１４５を起動すべきかについても判定可能にする。また、フラグ１４１は、複数存在してもよい。フラグ１４１は、通知要求フラグともいう。
【００２６】
図２を用いて、本実施の形態に係るフラグ１４１の配列の構成例について説明する。図２に示すように、フラグ１４１には、要素番号とフラグ値とが対応付けられている。ここで、要素番号は、予め各デバイスに紐付けられている。各デバイスについてタスク起動が必要な場合に、各デバイスに対応する要素番号のフラグ値を「１」にする。
図３は、本実施の形態に係るフラグ１４１による要素番号とフラグ値との対応について示す図である。図３に示すように、要素番号に対応するフラグ値が「０」の場合は、要素番号に紐付けられたデバイスの通知要求が無いことを意味する。また、要素番号に対応するフラグ値が「１」の場合は、要素番号に紐付けられたデバイスの通知要求が有ることを意味する。
フラグ１４１を上述したような構成にすることで、タスク起動判定部１１１が通知要求がどのデバイスに関するものかを特定でき、そして適切なタスクを起動させることが可能となる。
【００２７】
タイマ設定部１３２は、割込みタイマ１６０にカウンタ値を設定することによりＯＳ実行部１２０にＯＳ依存割込み２０２を起こさせる。具体的には、タイマ設定部１３２は、割込みタイマ１６０にカウンタ値として、０ｍｓ、１ｍｓあるいは０．５ｍｓのように直ちにカウンタ値が０になるような値を設定する。
【００２８】
ＯＳ実行部１２０は、割込みタイマ１６０を用いてＯＳ依存割込み２０２を起こす。具体的には、ＯＳ実行部１２０は、割込みタイマ１６０のカウンタ値が０になった場合にＯＳ依存割込み２０２を起こす。
タスク起動判定部１１１は、ＯＳ実行部１２０によりＯＳ依存割込み２０２が起こされると、フラグ１４１がオンであるか否かを判定する。タスク起動判定部１１１は、フラグ１４１がオンである場合に、タスク１４５を起動すると共にフラグ１４１をオフにする。フラグ１４１をオフにするとは、フラグを落とすことであり、具体的には、値を「０」に設定する。すなわち、タスク起動判定部１１１は、フラグ１４１の状態によってタスク１４５を起動させるとともにフラグ１４１をオフにする。具体的には、フラグ１４１に「０」を設定する。
【００２９】
システム時刻管理部１１２は、計時タイマ１７０から取得した現在のシステム時刻である現在時刻と、前回取得したシステム時刻である前回実行時刻Ｔｐとから、経過時間を算出する。
タイムアウト処理部１１３は、タスクあるいはタイマイベントハンドラのタイムアウト処理を行う。計算機装置１００は、タスクあるいはタイマイベントハンドラの残り時間１４４を管理するタイムアウトキュー１４３を備える。タイムアウト処理部１１３は、タスクを前回起動した前回実行時刻Ｔｐと現在時刻とに基づいて、タイムアウトキュー１４３の残り時間１４４を再設定する。タイマイベントハンドラは、具体的には、μＩＴＲＯＮ仕様リアルタイムＯＳにおける周期ハンドラあるいはアラームハンドラといったハンドラである。
タイムアウト設定部１１４は、タスクのタイムアウトキューあるいはタイマイベントハンドラキューを管理する。以下において、タイムアウトキュー１４３とは、タスクのタイムアウトキューあるいはタイマイベントハンドラキューを意味するものとする。タイムアウト設定部１１４は、ＯＳ依存割込み２０２を起こさせる次回割込み時刻を算出し、次回割込み時刻にＯＳ依存割込み２０２を起こすように割込みタイマ１６０にカウンタ値を設定する。
【００３０】
＊＊＊動作の説明＊＊＊
図４は、本実施の形態に係る計算機装置１００のタスク起動方法５１０およびタスク起動プログラム５２０のタスク起動処理Ｓ１００を示すフローチャートである。タスク起動プログラム５２０は、以下に示す各処理をコンピュータである計算機装置１００に実行させる。
タスク起動処理Ｓ１００は、ＯＳ依存割込み処理Ｓ１０と、ＯＳ独立割込み処理Ｓ２０とを備える。
ステップＳ１において、計算機装置１００は、ＯＳ依存割込み２０２が発生した場合にＯＳ依存割込み処理Ｓ１０に進む。また、計算機装置１００は、ＯＳ独立割込み２０１が発生した場合にＯＳ独立割込み処理Ｓ２０に進む。また、計算機装置１００は、いずれの割込みも発生していない場合はステップＳ１を繰り返す。
【００３１】
＜ＯＳ依存割込み処理Ｓ１０＞
図５は、本実施の形態に係るＯＳ依存割込み処理Ｓ１０を示すフローチャートである。
ＯＳ依存割込み処理Ｓ１０は、システムクロックの割込みタイマ１６０によるＯＳ依存割込み２０２が発生すると開始される。割込みタイマ１６０によりＯＳ依存割込み２０２が発生すると、プロセッサ９１０のＯＳ実行部１２０が持つ割込み機能によりＯＳ依存割込みハンドラが起動する。そして、ＯＳ依存割込みハンドラは、タスク起動判定部１１１を呼び出す。
ＯＳ依存割込み処理Ｓ１０では、ＯＳ依存割込み処理部１１０が、ＯＳ実行部１２０によりＯＳ依存割込み２０２が起こされると、フラグ１４１がオンであるか否かを判定する。ＯＳ依存割込み処理部１１０が、フラグ１４１がオンである場合に、タスク１４５を起動すると共にフラグ１４１をオフにする。
【００３２】
ステップＳ１１において、タスク起動判定部１１１は、フラグ１４１が立っているか否かを判定する。フラグ１４１が立っている場合、処理はステップＳ１２に進む。フラグ１４１がオフの場合、処理はステップＳ１３に進む。
ステップＳ１２において、タスク起動判定部１１１は、実行すべきタスク１４５をＯＳが提供するサービスコールを用いて起動させ、フラグ１４１をオフにする。処理はシステム時刻管理部１１２により実行されるステップＳ１３に移る。
【００３３】
次に、ステップＳ１３において、システム時刻管理部１１２は、システム時刻の計時タイマ１７０から、現在のシステム時刻を実行時刻Ｔｎとして取得する。
ステップＳ１４において、システム時刻管理部１１２は、前回の割込み発生時に予め記憶部１４０に記憶しておいた前回実行時刻Ｔｐを取得する。システム時刻管理部１１２は、前回実行時刻Ｔｐと実行時刻Ｔｎとを比較し、前回実行時刻Ｔｐから実行時刻Ｔｎまでの経過時間Ｔｋを算出する。前回実行時刻Ｔｐの初期値は０である。処理はタイムアウト処理部１１３により実行されるステップＳ１５に移る。
【００３４】
ステップＳ１５において、タイムアウト処理部１１３は、システム時刻管理部１１２により算出された経過時間Ｔｋに基づいて、タスクあるいはアラームハンドラのタイムアウト処理を行う。タイムアウト処理の具体例については後で説明する。処理はタイムアウト設定部１１４により実行されるステップＳ１６に移る。
【００３５】
ステップＳ１６において、タイムアウト設定部１１４は、システム時刻管理部１１２において取得した実行時刻Ｔｎを、前回実行時刻Ｔｐとして記憶部１４０に記憶する。
そして、ステップＳ１７において、タイムアウト設定部１１４は、タイムアウトキュー１４３の先頭要素に設定された残り時間１４４を調べ、最も残り時間１４４の小さいものから次回割込み時刻Ｔｆを割り出す。
最後に、ステップＳ１８において、タイムアウト設定部１１４は、次回割込み時刻Ｔｆにシステムクロックの割込みタイマ１６０の割込みが発生するように、割込みタイマ１６０のカウンタ値を設定する。
以上で、ＯＳ依存割込み処理Ｓ１０を終了する。
【００３６】
＜ＯＳ独立割込み処理Ｓ２０＞
図６は、本実施の形態に係るＯＳ独立割込み処理Ｓ２０を示すフローチャートである。
タスク起動要求処理Ｓ２１では、デバイス２００からＯＳ独立割込み２０１が発生すると、ＯＳ独立割込みハンドラが起動する。そして、ＯＳ独立割込みハンドラは、タスク起動要求部１３１を呼び出す。
ＯＳ独立割込み処理Ｓ２０では、ＯＳ独立割込み処理部１３０が、デバイス２００の状態に起因するＯＳ独立割込み２０１が発生すると、タスク１４５を起動するか否かを判定する。ＯＳ独立割込み処理部１３０が、タスク１４５を起動する場合に、フラグ１４１をオンにすると共にＯＳ実行部１２０にＯＳ依存割込み２０２を起こさせる。
【００３７】
ステップＳ２１において、タスク起動要求部１３１は、タスク１４５の起動の要否を判定する。タスク起動要求部１３１は、任意の条件に基づいて、タスク１４５の起動の要否を判定する。タスク１４５の起動が必要な場合、処理はステップＳ２２に進む。タスク１４５の起動が不要な場合、処理は終了する。
ステップＳ２２において、タスク起動要求部１３１は、フラグ１４１を立てる。処理はタイマ設定部１３２により実行されるステップＳ２３に移る。
ステップＳ２３において、タイマ設定部１３２は、直ちにＯＳ依存割込み２０２が発生するように割込みタイマ１６０のカウンタ値を上書き設定する。具体的には、タイマ設定部１３２は、直ちにＯＳ依存割込み２０２が発生するように、割込みタイマ１６０を０ｍｓ、１ｍｓあるいは２ｍｓといったカウンタ値に設定する。
以上でＯＳ独立割込みハンドラ処理Ｓ２０を終了する。
【００３８】
なお、タイマ設定部１３２により設定される割込みタイマ１６０のカウンタ値は、任意の条件に応じて動的に決定してもよい。具体的には、前回、カウンタ値を書き換えた時点から経過時間が短い場合は、タイマ設定部１３２は、意図的に大きいカウンタ値を設定してもよい。あるいは、タイマ設定部１３２は、カウンタ値の上書き処理を実施しないとしてもよい。このようなカウンタ値の設定処理は、タイマ設定部１３２の機能の一部として提供してもよい。あるいは、カウンタ値の決定を実施するか否かを判定するための処理部が、カウンタ値の設定処理を実行してもよい。また、カウンタ値の書き換えを実施するか否かを判定するための処理部が、カウンタ値の設定処理を実行してもよい。
また、本実施の形態では、タスク起動判定部１１１がタスクの起動の要否を判定する処理を、タイマ割込みに伴って発生するＯＳ依存割込みの処理内で実施していた。しかし、タスク起動判定部１１１は、タスクの起動の要否を判定する処理を、他の要因で発生する割込みの処理内で実施してもよい。
【００３９】
ここで、図７から図１０を用いて、本実施の形態に係る計算機装置１００によるＯＳ依存割込み処理Ｓ１０の具体例について説明する。
図７では、本具体例で仮定する割込みの発生タイミングを示している。割込みタイマ１６０に周期１０ｍｓが設定されており、周期の開始時点から３ｍｓの時点Ｔ１でＯＳ独立割込み２０１が発生した様子を示している。なお、図７から図１０において、ＯＳ依存割込み２０２をｋｅｒｎｅｌ＿ｉｎｔと表記し、ＯＳ独立割込み２０１をｎｏｎｋｅｒｎｅｌ＿ｉｎｔと表記する。
また、図８では、タイムアウトキューとタスク管理情報とを示している。タスク管理情報はＴＣＢ（Ｔａｓｋ  Ｃｏｎｔｒｏｌ  Ｂｌｏｃｋ）と表記する。タイムアウトキューは、タイムアウト順にＴＣＢをつなげた情報である。ＯＳは、タイムアウトキューの残り時間に基づいて、タスクの実行が必要と設定したタイミングにおいて対応するＴＣＢの内容を参照し、タスクの処理を実行する。
【００４０】
図９は、ＯＳ依存割込みのみが発生した場合のＯＳ依存割込み処理の具体例を示す図である。図９を用いて、ＯＳ依存割込みのみが発生した場合の図５のステップＳ１５からステップＳ１８の処理の具体例について説明する。また、以下の（１１）から（１３）は、図９に示した（１１）から（１３）に対応する。
ステップＳ１５において、タイムアウト処理部１１３は、実行時間を過ぎているタスクの有無を確認し、実行時間を過ぎているタスクがある場合は、そのタスクの処理をＯＳに実行させる。タイムアウト処理部１１３は、残り時間−経過時間≦０に該当するタスクがあれば、そのタスクの処理をＯＳに実行させる。図９の（１１）に示すように、タイムアウトキューの先頭の残り時間が１０ｍｓであり、経過時間Ｔｋが１０ｍｓであり、１０−１０＝０となるため、タイムアウト処理部１１３はタスク１の処理をＯＳに実行させる。そして、タイムアウト処理部１１３は、タイムアウトキューの先頭ポインタの指すアドレスを次の要素へ更新する。図９の（１２）に示すように、タイムアウト処理部１１３は、タイムアウトキューの先頭ポインタの指すアドレスを要素０のアドレスから要素１のアドレスに変更する。
ステップＳ１６において、タイムアウト処理部１１３は、実行時刻Ｔｎを前回実行時刻Ｔｐとして記憶部１４０に記憶する。
ステップＳ１７において、タイムアウト処理部１１３は、次回割込み時刻Ｔｆの割り出しを行う。タイムアウトキューにはタイマイベントハンドラ用およびアラームハンドラ用といった複数のタイムアウトキューが存在する場合がある。よって、タイムアウト処理部１１３は、全てのタイムアウトキューの先頭ブロックの残り時間を比較して次回割込み時刻Ｔｆを割り出す。
ステップＳ１８において、タイムアウト処理部１１３は、割込みタイマ１６０にカウンタ値を設定する。次回割込み時刻ＴｆにＯＳ依存割込みが発生するように割込みタイマ１６０のカウンタ値を設定する。図９の（１３）に示すように、タイムアウト処理部１１３は、割込みタイマ１６０に７ｍｓを設定する。
【００４１】
図１０は、図９の処理の後、周期の開始時点から３ｍｓのＴ１時点においてＯＳ独立割込みが発生した場合のＯＳ依存割込み処理の具体例を示す図である。
図１０を用いて、Ｔ１時点においてＯＳ独立割込みが発生した場合の図５のステップＳ１５からステップＳ１８の処理の具体例について説明する。また、以下の（２１）から（２３）は、図１０の（２１）から（２３）に対応する。なお、図１０の場合、周期の開始時点からの経過時間Ｔｋは、３ｍｓとなる。
ステップＳ１５において、タイムアウト処理部１１３は、実行時間を過ぎているタスクの有無を確認し、実行時間を過ぎているタスクがある場合は、そのタスクの処理をＯＳに実行させる。タイムアウト処理部１１３は、（残り時間−経過時間）≦０に該当するものがあれば、そのタスクの処理をＯＳに実行させる。図１０の（２１）に示すように、タイムアウトキューの先頭の残り時間が７ｍｓであり、経過時間Ｔｋが３ｍｓであり、７−３＝４となるため、タイムアウト処理部１１３が実行すべきタスクはない。タイムアウト処理部１１３は、タイムアウトキューの残り時間を更新する。図１０の（２２）に示すように、前回実行時刻ＴｐからＴｋ＝３ｍｓ経過しているため、残り時間を７ｍｓから（７−３）＝４ｍｓに更新する。
ステップＳ１６において、タイムアウト処理部１１３は、実行時刻Ｔｎを前回実行時刻Ｔｐとして記憶部１４０に記憶する。
ステップＳ１７において、タイムアウト処理部１１３は、次回割込み時刻Ｔｆの割り出しを行う。
ステップＳ１８において、タイムアウト処理部１１３は、割込みタイマ１６０にカウンタ値を設定する。次回割込み時刻ＴｆにＯＳ依存割込みが発生するように割込みタイマ１６０にカウンタ値を設定する。図１０の（２３）に示すように、タイムアウト処理部１１３は、割込みタイマ１６０に、４ｍｓを設定する。
以上で、本実施の形態に係る計算機装置１００によるＯＳ依存割込み処理Ｓ１０の具体例についての説明を終わる。
【００４２】
＊＊＊他の構成＊＊＊
なお、計算機装置１００は、通信装置を備えていてもよい。通信装置はレシーバとトランスミッタとを備える。具体的には、通信装置は通信チップまたはＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）である。通信装置はデータを通信する通信部として機能する。レシーバはデータを受信する受信部として機能し、トランスミッタはデータを送信する送信部として機能する。
【００４３】
また、本実施の形態では、タスク起動判定部１１１と、システム時刻管理部１１２と、タイムアウト処理部１１３と、タイムアウト設定部１１４と、タスク起動要求部１３１と、タイマ設定部１３２と、ＯＳ実行部１２０との機能がソフトウェアで実現される。しかし、変形例として、タスク起動判定部１１１と、システム時刻管理部１１２と、タイムアウト処理部１１３と、タイムアウト設定部１１４と、タスク起動要求部１３１と、タイマ設定部１３２と、ＯＳ実行部１２０との機能がハードウェアで実現されてもよい。
【００４４】
図１１を用いて、本実施の形態の変形例に係る計算機装置１００の構成について説明する。
図１１に示すように、計算機装置１００は、処理回路９０９、入出力インタフェース９３０、割込みタイマ１６０および計時タイマ１７０といったハードウェアを備える。
【００４５】
処理回路９０９は、上述したタスク起動判定部１１１と、システム時刻管理部１１２と、タイムアウト処理部１１３と、タイムアウト設定部１１４と、タスク起動要求部１３１と、タイマ設定部１３２と、ＯＳ実行部１２０との機能および記憶部１４０を実現する専用の電子回路である。処理回路９０９は、具体的には、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックＩＣ、ＧＡ、ＡＳＩＣ、または、ＦＰＧＡである。ＧＡは、Ｇａｔｅ  Ａｒｒａｙの略語である。ＡＳＩＣは、Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略語である。ＦＰＧＡは、Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略語である。
【００４６】
タスク起動判定部１１１と、システム時刻管理部１１２と、タイムアウト処理部１１３と、タイムアウト設定部１１４と、タスク起動要求部１３１と、タイマ設定部１３２と、ＯＳ実行部１２０との機能は、１つの処理回路９０９で実現されてもよいし、複数の処理回路９０９に分散して実現されてもよい。
【００４７】
別の変形例として、計算機装置１００の機能がソフトウェアとハードウェアとの組合せで実現されてもよい。すなわち、計算機装置１００の一部の機能が専用のハードウェアで実現され、残りの機能がソフトウェアで実現されてもよい。
【００４８】
計算機装置１００のプロセッサ９１０、記憶装置９２０、および、処理回路９０９を、総称して「プロセッシングサーキットリ」という。つまり、計算機装置１００の構成が図１および図１１のいずれに示した構成であっても、タスク起動判定部１１１と、システム時刻管理部１１２と、タイムアウト処理部１１３と、タイムアウト設定部１１４と、タスク起動要求部１３１と、タイマ設定部１３２と、ＯＳ実行部１２０との機能および記憶部１４０は、プロセッシングサーキットリにより実現される。
【００４９】
「部」を「工程」または「手順」または「処理」に読み替えてもよい。また、「部」の機能をファームウェアで実現してもよい。
【００５０】
＊＊＊本実施の形態の効果の説明＊＊＊
本実施の形態に係る計算機装置１００によれば、フラグを立てるとともにＯＳ依存割込みを発生させる。そのため、周期的なＯＳ依存割込みでフラグを監視しなくても、任意の時にタスクを起動させることができる。よって、本実施の形態に係る計算機装置１００によれば、ＯＳの時間管理方式としてティックレスタイマ方式の採用できるとともに、ＣＰＵ使用率および消費電力を抑えることができる。さらに、本実施の形態に係る計算機装置１００によれば、フラグを周期的にチェックする必要がないため、割込みタイマで設定可能な最短時間で通知要求に応答することが可能となる。
【００５１】
本実施の形態に係る計算機装置１００によれば、タイムアウト設定部により設定された時刻よりも早く、ＯＳ依存割込みを発生させることができ、タスクを起動することが可能となる。
【００５２】
本実施の形態に係る計算機装置１００によれば、システム時刻を管理するシステム時刻管理部を備える。よって、本実施の形態に係る計算機装置１００によれば、タイマ設定部により割込みタイマのカウンタ値が上書きされた場合でも、タスクおよびアラームハンドラを正しい時に動作させることができる。さらに、本実施の形態に係る計算機装置１００は、タスクのタイムアウトキューおよびイベントハンドラキューを管理すると共に割込みタイマのカウンタ値を設定するタイムアウト設定部を備える。よって、本実施の形態に係る計算機装置１００によれば、タイマ設定部により割込みタイマのカウンタ値が上書きされた場合でも、ＯＳ依存割込みを正しい時に動作させることができる。
【００５３】
本実施の形態では、タスク起動判定部１１１と、システム時刻管理部１１２と、タイムアウト処理部１１３と、タイムアウト設定部１１４と、タスク起動要求部１３１と、タイマ設定部１３２と、ＯＳ実行部１２０との各々が独立した機能ブロックとして計算機装置１００を構成している。しかし、上述した実施の形態のような構成でなくてもよく、計算機装置１００の構成は任意である。また、計算機装置１００の機能ブロックは、上述した実施の形態で説明した機能を実現することができれば、任意である。これらの機能ブロックの他のどのような組み合わせにより計算機装置を構成しても構わない。また、これらの機能ブロックを、任意のブロック構成により、計算機装置を構成しても構わない。
また、計算機装置は、１つの装置でもよいし、複数の装置から構成された計算機システムでもよい。
【００５４】
実施の形態１について説明したが、この実施の形態のうち、複数の部分を組み合わせて実施しても構わない。あるいは、この実施の形態のうち、１つの部分を実施しても構わない。その他、この実施の形態の複数の部分を、全体としてあるいは部分的に、どのように組み合わせて実施しても構わない。
なお、上述した実施の形態は、本質的に好ましい例示であって、本発明、その適用物および用途の範囲を制限することを意図するものではなく、必要に応じて種々の変更が可能である。
【符号の説明】
【００５５】
１００  計算機装置、１１０  ＯＳ依存割込み処理部、１３０  ＯＳ独立割込み処理部、１２０  ＯＳ実行部、１４０  記憶部、１１１  タスク起動判定部、１１２  システム時刻管理部、１１３  タイムアウト処理部、１１４  タイムアウト設定部、１３１  タスク起動要求部、１３２  タイマ設定部、１４１  フラグ、１４３  タイムアウトキュー、１４４  残り時間、１４５  タスク、１６０  割込みタイマ、１７０  計時タイマ、２００  デバイス、２１０  モータ、２２０  センサ、２０１  ＯＳ独立割込み、２０２  ＯＳ依存割込み、５１０  タスク起動方法、５２０  タスク起動プログラム、Ｓ１０  ＯＳ依存割込み処理、Ｓ２０  ＯＳ独立割込み処理、Ｓ１００  タスク起動処理、Ｔｐ  前回実行時刻、Ｔｎ  実行時刻、Ｔｆ  次回割込み時刻、Ｔｋ  経過時間、９０９  処理回路、９１０  プロセッサ、９２０  記憶装置、９２１  メモリ、９２２  補助記憶装置、９３０  入出力インタフェース。
【要約】
計算機装置（１００）は、ＯＳ実行部（１２０）と、ＯＳ依存割込み処理部（１１０）と、ＯＳ独立割込み処理部（１３０）とを備える。ＯＳ独立割込み処理部（１３０）は、デバイス（２００）の状態に起因するＯＳ独立割込み（２０１）が発生すると、タスク（１４５）を起動するか否かを判定する。ＯＳ独立割込み処理部（１３０）は、タスク（１４５）を起動する場合に、フラグ（１４１）をオンにすると共にＯＳ実行部（１２０）にＯＳ依存割込み（２０２）を起こさせる。ＯＳ依存割込み処理部（１１０）は、ＯＳ依存割込み（２０２）が起こされると、フラグ（１４１）がオンであるか否かを判定し、フラグ（１４１）がオンである場合に、タスク（１４５）を起動すると共にフラグ（１４１）をオフにする。【図１】
0006316522.tif 000002
【図２】
0006316522.tif 000003
【図３】
0006316522.tif 000004
【図４】
0006316522.tif 000005
【図５】
0006316522.tif 000006
【図６】
0006316522.tif 000007
【図７】
0006316522.tif 000008
【図８】
0006316522.tif 000009
【図９】
0006316522.tif 000010
【図１０】
0006316522.tif 000011
【図１１】
0006316522.tif 000012