(57)【要約】  本発明の解決しようとする課題は、計算機システムにおいて、タイマアクセスで発生する「待ち」時間による処理遅延を軽減することにある。  本発明においては、アプリケーションを実行するCPUコア(以下、処理コアと呼ぶ) とは別のCPUコアあるいはDMA装置を用い、常に最新のタイマ値をタイマデバイスから主記憶装置上に値を転写する。処理コアはタイマデバイスのレジスタにアクセスする代わりに、転写された主記憶装置上の値を読み取ることで、タイマデバイスのタイマ値を直接読んだ場合に発生する待ちを回避する。この値の転写は、処理コアの処理とは非同期的に行われるため、処理コアは転写の完了を待つ必要がない。そのため処理コアは他のCPUコアあるいはDMA装置からの割込や通知を処理する必要もない。
2016117102.tif 000002
【特許請求の範囲】
【請求項１】
第一の処理装置と、第二の処理装置と、主記憶装置と、タイマデバイスとを有する計算機システムであって、
前記タイマデバイスは時刻情報を格納し、前記第二の処理装置からアクセス可能な時刻レジスタを備え、
前記主記憶装置は前記第二の処理装置が前記タイマデバイスの時刻レジスタから読み取った時刻情報を格納する時刻転写バッファを備え、
前記第一の処理装置は前記時刻転写バッファから時刻情報を読み取り、
前記第二の処理装置は前記第一の処理装置が時刻情報を読み取るのと異なるタイミングで時刻情報を前記時刻転写バッファへ格納することを特徴とする計算機システム。
【請求項２】
請求項１に記載の計算機システムであって、
前記主記憶装置はカウント情報を格納するカウンタ領域を備え、前記第一の処理装置は前記時刻転写バッファの時刻情報を読み取ったとき前記カウント情報を更新する計算機システム。
【請求項３】
請求項２に記載の計算機システムであって、
前記第一の処理装置は前記時刻転写バッファの時刻情報と前記カウンタ領域のカウント情報を参照し、得られた時刻情報とカウント情報を基に前記第一の処理装置で実行する処理で用いる処理用時刻情報を生成することを特徴とする計算機システム。
【請求項４】
請求項１に記載の計算機システムにおいて、
前記タイマデバイスは第二の処理装置がタイマ割込情報を設定する割込設定レジスタを備え、
第二の処理装置は第一の処理装置が前記主記憶装置に書込んだタスクの実行時間に関する情報を含むタイマ割込情報を前記割込設定情報に設定することを特徴とする計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機システムに関するもので、特にタイマデバイスの取り扱いに関する技術である。
【背景技術】
【０００２】
特許文献1には複数のメモリ領域に格納されたデータの転送をＤＭＡエンジンに指示し、ＤＭＡエンジンが順次指示されたデータを転送し、転送が完了した後にＤＭＡエンジンは再度転送の指示を受付同じ処理を繰り返すことが開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許US6111592
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一般に、計算機システムにおいて、中央演算装置(CPU)が各種記憶装置に対して読み書きを行う際には、CPUの動作クロックと記憶装置の動作クロックの差異、あるいは記憶装置の特性によって、CPUの「待ち」が発生する。この「待ち」は、特に主記憶装置に対する場合と比較して、CPUから主記憶装置と同様の手段でアクセスされる入出力デバイスのレジスタに対する読み書きでより顕著となる。【０００５】
「待ち」を軽減する手段として、特許文献1で示したように、DMA装置を用いて、 CPUとは非同期的に内容の転写を行う方法がある。特許文献1においては、内容の転写をDMA装置によって繰り返し行う方法が示されているが、これは主記憶装置間でのデータ転送を目的としたものであり、入出力デバイスに対するアクセスではない。また、入出力デバイスは、必ずしもDMA装置によってアクセス可能なものではなく、ソフトウェアで利用する際に、その値も何らかの変換が必要となることがある。加えて、DMA装置による転送が終了した際に、CPUに対して割込が発生するため、頻繁な転送を行うと、CPUに対して割込ハンドラによる処理負荷が増大する問題がある。【０００６】
本発明は、割込による処理負荷の増加を抑えつつ、入出力デバイスのレジスタに対するアクセスで発生する「待ち」の課題を解決しようとするものである。
【課題を解決するための手段】
【０００７】
本発明においては、レジスタにアクセスする必要のある処理を行うCPUコア(以下、処理コア又は処理装置と呼ぶ) とは別のCPUコアあるいはDMA装置を用い、常に最新の値を入出力デバイスレジスタからデータを主記憶装置上に値を転写する。処理コアは割り込みハンドラの処理に限らず、レジスタにアクセスする代わりに、転写された主記憶装置上の値を読み取ることで、デバイスレジスタを直接読んだ場合に発生する待ちを回避する。この値の転写は、処理コアとは、非同期的に行われるため、処理コアは転写の完了を待つ必要がなく、処理コアは他のCPUコアあるいはDMA装置からの割込や通知を処理する必要もない。
【発明の効果】
【０００８】
本発明によれば、入出力デバイスのレジスタに対して、特に読み込みが多い場合にその読み込みアクセスで生じる遅延を軽減し、もって、処理コアの利用効率を高めることができる。
【図面の簡単な説明】
【０００９】
【図１】実施例１に係る計算機システムの構成の一例を示す図である。
【図２】計算機システムの構成のうち、時刻情報の流れの一例を示す図である。
【図３】計算機システムにおいて、トレースログを記録する処理を行う動作フローの例を示す図である。
【図４】計算機システムにおいて、時刻の転写を行う動作フローの例を示す図である。
【図５】計算機システムにおいて、時刻カウンタを持つことによる効果のある動作順序の一例を示す図である。
【図６】実施例２係る計算機システムの構成の一例を示す図である。
【図７】計算機システムの構成のうち、タスク管理表の内部構造の一例を示す図である。
【図８】計算機システムの構成のうち、時刻及び割込設定情報のデータの流れの一例を示す図である。
【図９】計算機システムにおいて、タスクの動作時間監視を行う際にタスク開始時に行う動作フローの一例を示す図である。
【図１０】計算機システムにおいて、タスクの動作時間監視を行う際にタスク終了時に行う動作フローの一例を示す図である。
【図１１】計算機システムにおいて、タスクの動作時間監視を行う際にタイマ割込発生時に行う動作フローの一例を示す図である。
【図１２】計算機システムにおいて、タスクの動作時間監視を行う際の時刻情報と割込設定情報を転写する動作フローの一例を示す図である。
【発明を実施するための形態】
【実施例１】
【００１０】
本実施例では、以下で述べるように、計算機システム上の基本ソフトウェアの動作のログを記録するトレースログ機能を実現するものである。トレースログには、後の解析で使用するめに、記録する事象の発生した時刻を事象とともに記録しておくことが必要である。
事象を記録するＣＰＵの処理に影響を与えないように時刻情報を得るために本発明が有用となる。【００１１】
図1は、計算機システム100の構成の一例を示す図である。計算機システム100は、1つ以上のCPU110と主記憶装置120、不揮発記憶装置125、タイマデバイス150、 DMA装置160をもつ。【００１２】
CPU110は汎用プロセッサであり、アプリケーション121や基本ソフトウェア122といったソフトウェアを不揮発記憶装置125等から読み出し、主記憶装置120に必要に応じて展開し、実行する。図1においては、CPU110は1つであり、 CPU110は2つのコア(処理装置)からなるが、CPUの数は2つ以上であってもよいし、 CPUのコアの数は1つであっても3つ以上であってもよい。また、CPUコアが複数存在する場合は、同一のCPU110上に存在していてもよいし、異なるCPU110にそれぞれ存在していてもよいし、あるいは、これらの組み合わせでもよい。さらにまた、それぞれのCPUコアのアーキテクチャや処理能力は異なっていてもよい。 CPU110は例えばRH850といったプロセッサである。本実施例の説明では、時刻情報を必要とするCPUコアをCPUコア110A、時刻情報のデバイスからの転写を行うCPUコアをCPUコア110Bとして説明する。【００１３】
主記憶装置120は、読み書きが可能な揮発性の記憶領域であり、CPU110がその上の命令を実行し、あるいは、ロード・ストアといった命令によって読み書きが可能な領域である。主記憶装置120上では、アプリケーション121や基本ソフトウェア122といったソフトウェアのプログラムおよびデータが配置される。ただし、後述するように、不揮発記憶装置125上に実行時に書き換えの発生しないプログラムおよびデータを配置してもよく、この場合不揮発記憶装置125上にあるプログラムおよびデータは主記憶装置120上になくてもよい。主記憶装置120は、例えばDRAM等で構成されるものである。【００１４】
不揮発記憶装置125は、読み込みが可能な不揮発性の記憶領域であり、CPU110がその上の命令を実行し、あるいは、ロード命令によって読み込みが可能な領域である。ソフトウェアの書き換えの発生しないプログラムおよびデータを配置することで、 CPU110が直接実行、あるいは、読み込みを行うこともできる。以降の説明では、ソフトウェアのプログラムおよびデータは、全て主記憶装置120上にあるものとして説明するが、不揮発記憶装置125に一部がある場合でも同様である。【００１５】
アプリケーション121は、計算機システム100が提供する機能を実現するためのソフトウェアである。アプリケーション121は、1つまたは複数のタスクから成る。アプリケーション121は、計算機システム100に1つであってもよいし、複数存在してもよい。基本ソフトウェア122は、マルチタスク処理が可能なオペレーティングシステムであり、複数のアプリケーション121およびそのタスクを並列に実行することができる。基本ソフトウェア122は、タスク間の動作の切替、入出力デバイスからの割込に対する処理等を行う。また、組み込み機器等で使われるOSレス構成をとってもよく、この場合、アプリケーション121と基本ソフトウェア122の区別はなく、1つのタスクがアプリケーション121および基本ソフトウェア122の機能を提供する。以降の説明では、アプリケーション121と基本ソフトウェア122の区別がある場合で説明をするが、 OSレス構成の場合であっても同様である。【００１６】
基本ソフトウェア122は、例えばデータ構造として、時刻転写バッファ131、時刻カウンタ132、トレースバッファ140をもつ。当然、これら以外の基本ソフトウェアとして必要な機能を提供するためのデータ構造をもっていてもよい。時刻転写バッファ131は、時刻の情報を、それを保持するデバイスのレジスタから転写された値を保持する領域である。時刻カウンタ132は、時刻転写バッファ131を読み取るたびに1加算されていくカウンタである。トレースバッファ140は、基本ソフトウェア122内で発生した特定の事象を記録するための領域であり、 0以上のトレースログ141を保持しておく領域である。各々のトレースログ141は、1つまたは複数の事象の発生に対応するログである。記録する事象は、例えば、発生した割り込みであるとか、基本ソフトウェア122内で実行されたタスクの切り替わりであり、記録するべき事象は用途ごとに変更されても、実行中の状況に応じて動的に変更されてもよい。【００１７】
トレースログ141は、ログ時刻145とログ内容146を内部構造としてもつ。ログ時刻145は、トレースログ141に対応する事象が発生した時刻を表す。ログ内容146は、その事象の内容を表す。例えば、事象の種類や、割り込みであれば割り込みの種類を表す番号などの事象の対象物の情報などを含む。【００１８】
タイマデバイス150は、実時間を計測するためのデバイスである。例えば、一定周期のクロックでカウントアップされるカウンタを持つデバイスであって、必ずしも絶対時刻を示すものでなくてよい。タイマデバイス150のカウンタは、CPU110から時刻レジスタ151にアクセスすることでその値を得ることができる。 CPU110の時刻レジスタ151へのアクセス方法は、専用のI/Oポート命令を用いてもよいし、特定のアドレスへのロード命令であってもよい。ただし、その値の読み出しに発生する「待ち」時間は、主記憶装置120の値の読み出しに発生するそれよりも大きいとする。【００１９】
DMA装置160は、CPU110とは独立にメモリ転送を実施するデバイスである。 CPU110からの指示により、指定された転送元アドレスから転送先アドレスへ指定されたサイズだけ内容を転送する。本実施例においては、CPUコア110Bによって転写を行う場合には、DMA装置160は必ずしも必要ではなく、また、その一方でCPUコア110Bの代替として、レジスタからの転写に用いることもできる。代替として用いた場合の処理については、本実施例の説明の最後に述べる。【００２０】
図1では、CPU110、主記憶装置120、基本ソフトウェア122、タイマデバイス150を計算機システム100上の別個の部品として書いたが、SoC(System-on-a-chip)と呼ばれるような形態として、これらの構成要素が一つのチップとして実装されていてもよい。この場合でも論理的な扱いは同一とみなせるので、以降で説明する内容は準用できる。【００２１】
図2は、本実施例において、時刻に関するデータの流れの一例を表した図である。【００２２】
本実施例においては、転写を行うCPUコア110Bが時刻レジスタ151から値を読み取り、これが時刻値211となる。時刻値211は、読み取った値と同一でもよいし、適当な変換を行った値でもよい。時刻値211は、CPUコア110Aの処理とは異なるタイミングで非同期に時刻転写バッファ131に書き込まれる。これにより、時刻レジスタ151から時刻転写バッファ131への転写が行われる。時刻情報を必要とするCPUコア110Aは、時刻転写バッファ131及び時刻カウンタ132の値から時刻記録値212を計算する。これは、単に時刻転写バッファ131と時刻カウンタ132をつなげた値でもよいし、適当な変換を行った値であってもよい。時刻情報の一例として、トレースログ141のログ時刻145があり、 CPUコア110Aは時刻記録値212をログ時刻145に格納する。【００２３】
図3は、時刻情報の取得の例として、新たに事象の発生をトレースログ141 として記録を行うCPUコア110Aの動作フローの一例を示したものである。まず、時刻転写バッファ131と時刻カウンタ132それぞれから値を読み取る(311)。時刻カウンタ132から読み取った値に1を足し、時刻カウンタ132に書き戻すことで、時刻カウンタ132を1進める(312)。次に、読み取った時刻転写バッファ131と時刻カウンタ132の値から、時刻情報として使う時刻記録値212を生成する(313)。これには、例えば、各々の値を連結する方法がある。この場合、時刻記録値212のサイズは、時刻転写バッファ131と時刻カウンタ132のサイズを足したものになる。あるいは、時刻転写バッファ131を左シフトし、シフトしたビット数分の時刻カウンタ132の下位ビットを組み合わせるといった方法をとることもできる。次に、新たなトレースログ141のログ時刻145に、時刻記録値212を書き込む(314)。そして、ログ内容146に事象の内容を書き込む(315)。次に、トレースログ141は、トレースバッファ140に追加するという処理が必要であれば行われる。以上の処理により、基本ソフトウェア122における事象のログがとられ、その事象の発生した時刻をログに記録することができる。【００２４】
次に、図4について説明する。これは、CPUコア110Bが、時刻レジスタ151から時刻情報の転写を行う動作フローの一例である。 CPUコア110Bは、時刻レジスタ151から値を読み取り、時刻値211を得る(ステップ411)。このとき、必要であれば、時刻レジスタ151の値から一部のビットを取り出すなどの変換を行ってもよい。次に、得られた時刻値211を時刻転写バッファ131に書き込む(412)。そして、次にステップ411に戻るということを繰り返す。これにより、継続的に時刻レジスタ151から、時刻転写バッファ131への転写が行われることになり、時刻転写バッファ131を読みだすCPUコア110Aは、読みだす時点での、最新の時刻レジスタ151ではないが、十分近い値を時刻レジスタ151にアクセスせずに得ることができる。【００２５】
すなわち、主記憶装置120からの読み出しで発生する「待ち」は、時刻レジスタ151からの直接読み出しで発生する「待ち」より十分小さいため、 CPUコア110Aが時刻レジスタ151に直接アクセスした際に発生する遅延を軽減することができる。【００２６】
なお、CPUコア110Bの処理は、前段で述べた転写の動作フロー以外の処理を行ってもよい。その場合、たとえば、転写の動作フローを優先度のもっとも低いタスクとし、それ以外のタスクが実行すべき処理がある場合には、それらのタスクを実行するという形にすることもできる。【００２７】
図5は、時刻記録値212の生成において、時刻転写バッファ131と時刻カウンタ132の二つの値を用いることによる効果を説明するための図であり、図3及び図4で説明した動作フローに従って、CPUコア110AとCPUコア110Bが動作したときの動作順序と時刻レジスタ151、時刻転写バッファ131、時刻カウンタ132のそれぞれの値の遷移の一例を示している。なお、CPUコア110AとCPUコア110Bの動作フローについては、それぞれ図3、図4の処理を二回続けて実施した場合を示しており、説明に関係するステップのみ抜粋している。また、時刻レジスタ151、時刻カウンタ132の初期値はそれぞれ10、5であり(ステップ151a、132a)、時刻転写バッファ131の値は時刻レジスタ151から読み取った値をそのまま用いることとする。【００２８】
この図では時間経過を上から下の方向で示しており、上から順に説明する。まず、CPUコア110Bが時刻レジスタ151から値を読み取る(ステップ411A)。このとき、時刻レジスタ151の値は10であり(ステップ151a)、時刻値211は10である。【００２９】
次に、CPUコア110Bは時刻値211を時刻転写バッファ131に書き込む(ステップ412A)。これにより、時刻転写バッファ131の値は10となる(ステップ131a)。 CPUコア110Aがこの後に処理を開始し、時刻転写バッファ131と時刻カウンタ132から値を読み込む (ステップ311A)。この値は、それぞれ10と5である(ステップ131b, 132a)。そして、時刻カウンタ132に1を加算する(ステップ312A)ことで、時刻カウンタ132の値は6となる(ステップ132b)。結果、CPUコア110Aが得られる時刻記録値212を(時刻転写バッファ131, 時刻カウンタ132)の形で表記すると、(10,5)である。【００３０】
次に、CPUコア110Bが再び転写処理を行うことを考える。処理は、前段で述べた場合と同様に、時刻レジスタ151からの読み取り(ステップ411B) と時刻転写バッファ131への書き込み(ステップ412B)である。このとき、時刻レジスタ151の値は20とする(ステップ151b)。【００３１】
ここで、CPUコア110Aの次のログ記録も並行して行われ、時刻転写バッファ131と時刻カウンタ132からの読み取り(ステップ311B)がステップ411Bより早く行われた場合を考える。すると、CPUコア110Aが読み取る値は、それぞれ10と6であり(ステップ131c, 132c)、CPUコア110Aが得られる時刻記録値212は(10, 6)である。その後に、CPUコア110Bの書き込み(ステップ412B)により2により時刻転写バッファ131は 20となり(ステップ131d)、CPUコア110Aの加算(ステップ312B)により時刻カウンタ132は7となる(ステップ132d)。【００３２】
以上で述べた処理により、CPUコア110Aは二回の時刻記録値212の計算で、 (10,5)と(10,6)の値を得る。もし時刻カウンタ132がなかった場合、時刻記録値212の計算に使える値は時刻転写バッファ131のみであり、二回の時刻記録値212はともに10となる。この結果、一回目と二回目の時刻記録値212を区別することができなくなり、記録された二つのトレースログ141を、実際には、順序が存在するのにそのログ時刻145で前後を判断することができなくなる。しかし、本実施例によれば、(10, 5)と(10, 6)の異なる値を得ることができ、また各々の時刻カウンタ132の値により、その順序を明らかに判別することができる。【００３３】
つまり、CPU110Aの処理とCPU110Bの処理が連動していないため、時間が経過したにもかかわらずCPU110Aが同じ時刻を受け取ってしまうことを避けることができる。【００３４】
なお、得られたトレースログ141の使用用途等により、図5により説明した二つの時刻記録値212の値を区別する必要がない場合には、当然時刻カウンタ132を用いず、時刻転写バッファ131の値のみを用いることも可能である。【００３５】
他方、時刻カウンタ132のみを用いて、時刻カウンタ132を時刻値211として用いることも考えられる。しかし、この場合、実時間の情報である時刻レジスタ151の値をまったく反映していないため、時刻情報としての精度は低く、順序しか得ることはできない。時刻転写バッファ131を用いることで、即時の値ではないが、実時間の情報を得ることができる。【００３６】
ところで、DMA装置160が時刻レジスタ151に対して主記憶装置120のロードと同様の方式でアクセスでき、かつ、時刻転写バッファ131の値の格納形式を時刻レジスタ151 と同一にする場合、CPUコア110Bに代えてDMA装置160を用いることもできる。この場合、CPU110の任意のコアが、DMA装置160が転送元アドレスを時刻レジスタ151とし転送先アドレスを時刻転写バッファ131とし、転送サイズを時刻レジスタ151のサイズと設定をすることで転写を行うことができる。また、転写が完了した場合にDMA装置160がCPU110に対し、割り込みの形で通知を行うことができれば、そのCPU110は通知により、再度DMA装置160が転写をするように設定をする。また、DMA装置160が転写を繰り返し行うことができるように設定できるのであれば、 CPU110は基本ソフトウェア122の初期化時に転写の設定を一度行うのみでもよい。この場合、DMA装置160はCPU110に対して転写の完了の割り込みを行う必要がなくなり、CPU110は割り込みの処理を行う必要がなくなる。これにより、DMA装置160によって、上記の説明でCPUコア110Bが実施していた転写の機能を代替することができる。
【実施例２】
【００３７】
実施例２は、特にリアルタイム・オペレーティングシステムといった基本ソフトウェアで、各タスクの実行時間が、予め定められた時刻を超えていないかを監視する機能に関わるものである。【００３８】
予め定められた時刻を超えていないかどうかを監視するためにはタイマデバイスに判断の基準となる時刻を通知し、当該時刻を超えたらタイマデバイスにタイマ割込みを発生させてＣＰＵに知らせることが必要である。【００３９】
しかしながら実施例１と同様にタイマデバイスに対して割込み時刻を設定するには多くの動作クロックを必要とするという問題がある。この問題を解決するために、アプリケーションを実行しているＣＰＵコアが割込み時刻を設定するのではなく、アプリケーションを実行していないＣＰＵコアに割込み時刻をタイマデバイスに設定させることによりアプリケーションの遅延を防ぐことができる。以下、具体的な処理を説明する。【００４０】
図6は、実施例２の概要図を示したものである。図1と共通の箇所については説明を省略し、異なる点のみ述べる。
タスク521は、アプリケーション121を構成するタスクである。本図では複数のタスク521が存在するが、一つであってもよい。【００４１】
タスク管理部540は、タスク521の情報を管理する部分であり、例えば、タスク管理
表541を持つ。タスク管理表541はタスク521の管理のために、各タスク521に関する情報をタスク521ごとに一行として保持している表である。詳細は、図7において説明する。【００４２】
タイマデバイス150は、実施例１で述べた機能に加えて、設定された値に時刻レジスタ151の値が達した場合に、CPU110に対して割り込みを発生させる機能を有するものとする。タイマデバイス150は、割込設定レジスタ552を持ち、これは、例えば、割り込みの発生を有効化するかどうか、また、割り込みを発生させる時刻レジスタ151の値などを設定するレジスタである。【００４３】
基本ソフトウェア122には、割込設定バッファ533とタスク管理部540が存在する。割込設定バッファ533は、後述するタイマデバイス150の割込設定レジスタ552に対して設定する値などを格納するバッファである。割込設定バッファ533は、例えば、割込有効フラグ535、割込時刻536を持つ。割込有効フラグ535は、例えば「有効」となる値が格納されていれば、時刻レジスタ151が割込時刻536に到達した際に、CPU110に対して割り込みを発生させることを表し、「無効」となる値が格納されていればたとえ時刻レジスタ151が割込時刻536に到達した際でも割り込みを発生させないことを表す値である。ただし、これは当然主記憶装置120上に存在するので、タイマデバイス150のこれらの機能を実現するレジスタである割込設定レジスタ552に転写されない限り、実際にタイマデバイス150の挙動が変更されることはない。【００４４】
図7は、タスク管理表541の内部構造の一例を表した図である。タスク管理表541は、例えば、タスク番号621、タスク状態622、開始時刻623、制限時間624を持つ。タスク番号621は、各々のタスク521を識別する識別子であり、例えば3といった整数値である。タスク状態622は、各々のタスク521の状態を表す列であり、例えば、「実行中」、「停止」、といった状態である。開始時刻623は、各々のタスク521が実行を開始した時刻を表現するもので、例えば、開始時における時刻記録値212を格納したものである。制限時間624は、各々のタスク521が最大で動作することのできる時間を表したものである。これは、時刻記録値212の値を基に計算できる値で、例えば時刻記録値212の単純な差でもよい。【００４５】
本実施例では制限時間でタスクを管理しているが、制限時間の代わりに時刻で管理するようにしてもよい。例えばタスク３の例では開始時刻１００、制限時間２００となっているが、制限時間の代わりに割込み時刻を３００とセットして管理するようにしてもよい。【００４６】
図8は、本実施例において、時刻と割り込み設定情報に関するデータの流れの一例を表した図である。このうち、時刻情報のデータの流れについては図2と同様であるので省略し、割込設定情報の転写について、説明する。主記憶装置120上の割込設定バッファ533は、割込設定レジスタ552に設定する値である割込設定値613に変換された上で、転写が行われる。割込設定レジスタ552の内部表現は、タイマデバイス150の仕様に依存するものであり、割込設定値613の内部表現をこれと同一にすれば、単純な転写でよい。【００４７】
図9、図10、図11は、本実施例において、アプリケーションのタスク521の実行を開始する時、タスク521の実行が終了した時、タイマデバイス150からの割り込みが発生した際の CPUコア110Aがそれぞれ実行する処理フローの一例を表した図である。【００４８】
まず、図9について、すなわち、アプリケーションのタスク521を実行開始させる際のフローについて説明する。ステップ 811、812、813は、図3におけるステップ311、 312、313と同一の処理であるので、省略する。 
ステップ813によって、時刻記録値212を得たのち、実行開始するタスク521に相当するタスク管理表541の行の開始時刻623に対して、時刻記録値212を格納し、また、タスク状態622を「実行中」に変更する(814)。次に、814の後に、開始時刻623と制限時間624から、タスク521が終了しなければならない時刻、すなわち、デッドラインを計算する(ステップ815)。【００４９】
この計算は、例えば、開始時刻623と制限時間624の単純な和である。次に、デッドラインを割込設定バッファ533の割込時刻536に設定し、割込有効フラグ535を「有効」となる値に設定する(ステップ816)。そして、タスク521の実行を開始する(ステップ817)。これにより、各タスク521が実行開始した場合にその開始時刻を記録することができる。【００５０】
次に、図10によって、タスク521が実行終了した時のフローについて説明する。まず、実行終了したタスク521に対応するタスク管理表541の行のタスク状態622を「停止」に変更する (ステップ911)。そして、CPUコア110Aは、割込有効フラグ535を「無効」となる値に設定する(ステップ912)。これにより、既に実行終了しているタスク521のデッドライン時刻において、タイマデバイス150からの割り込みを停止することができる。ステップ 913、914、915は、ステップ811、812、 813とそれぞれ同一の処理であるので、省略する。【００５１】
次に、ステップ915によって生成された時刻記録値212と、開始時刻623からタスクが動作開始から終了までに経過した時間、すなわち実行時間を算出する(ステップ916)。この処理は、例えば、単純には二つの値を引き算して求めることによって行われる。【００５２】
次に、得られた実行時間を制限時間624と比較する(ステップ917)。実行時間が制限時間624を超過していた場合(ステップ917:Yes)、そのタスク521は規定の実行時間を超えて実行していたということになり、すなわち異常状態である。このため、タスク521に対して異常時の処理を実行する(ステップ918)。【００５３】
これは、例えば、そのタスクを今後起動させないようにするであるとか、計算機システム100全体を再起動するとかいった処理である。他方、実行時間が制限時間624を超過しなかった場合(ステップ917:No)、正常な実行終了処理を継続する(ステップ919)。【００５４】
最後に、図11について、すなわち、タイマデバイス150からの割り込みが発生した場合について述べる。 CPUコア110Aは、まず割込有効フラグ535を「無効」となる値に設定する(ステップ1011)。これにより、さらなる割り込みが発生することを抑止する。【００５５】
次に、割り込み発生時にタスク521が動作していた場合、そのタスク521の実行状態をタスク管理表541の対応する行のタスク状態622により判定する(ステップ1014)。タスク状態622が「実行中」であった場合(ステップ1014:Yes)、ステップ913、914、915を行い(1013)、得られた実行時間が制限時間624を超過していた場合(ステップ1012:Yes)には、タスク521の異常時の処理を実行する (ステップ1015)。【００５６】
タスクが実行されていなかった場合(ステップ1014:No)、実行時間が超過していなかった場合(ステップ1012:No)、割り込み前の処理に戻る(ステップ1016)。【００５７】
図12は、割り込みを用いた場合のCPUコア110Bの動作フローの一例を示したものである。 ステップ1111、1112は、それぞれステップ411、412と同一であるので省略する。
ステップ1112の次に、CPUコア110Bは、割込設定バッファ533の割込有効フラグ535及び割込時刻536の値を読み取る(ステップ1113)。そして、これらの値が、前回の読み取りと変化しているかどうかを比較する(ステップ1114)。変化している場合には(ステップ1114:Yes)、CPUコア110Aがタイマデバイス150の設定を変更するべき処理を実施したということであるので、割込設定レジスタ552への転写を実際に実行する。【００５８】
そのために、まず、割込有効フラグ535及び割込時刻536の内容に対応する割込設定値613を計算する(ステップ1115)。そして、求められた割込設定値613を割込設定レジスタ552に設定する(ステップ1116)。これにより転写が完了する。割込設定レジスタ552への設定を終了した後、または、割込設定レジスタ552への設定が必要でない場合(ステップ1114:No)、 CPUコア110Bは、ステップ1111に戻る。なお、本段で述べたCPUコア110Bの処理は、図4の説明で述べたように、常に繰り返す必要はなく、高優先度の処理が動いていない場合に動作させる形であってもよい。【００５９】
以上、二つの実施例について述べたが、CPU110において、同一の主記憶装置120上の値に対して複数のコアからアクセスした場合に、その一貫性を保持するためにソフトウェア的に必要な手順があれば、それぞれの実施例において、主記憶装置120上の値へのロード及びストアの際にそれを実行してもよい。例えば、CPU110での特殊な命令でもよいし、一般的なロックなどのソフトウェアでの排他制御を用いた方法でもよい。【００６０】
また、いずれの実施例においても、タイマデバイスからの時刻取得を例として挙げたが、本発明は、タイマデバイスから取得する時刻情報にのみ限られるものではなく、その値の性質として、全体的あるいは局所的に単調性をもつ情報に応用することができる。時刻は、その値が単調増加していく性質をもつ一例である。
【符号の説明】
【００６１】
１００・・・計算機システム  １１０・・・ＣＰＵ  １３１・・・時刻転写バッファ  １３２・・時刻カウンタ  １５０・・タイマデバイス  １５１・・・時刻レジスタ  １６０・・・ＤＭＡ装置
【図１】
2016117102.tif 000003
【図２】
2016117102.tif 000004
【図３】
2016117102.tif 000005
【図４】
2016117102.tif 000006
【図５】
2016117102.tif 000007
【図６】
2016117102.tif 000008
【図７】
2016117102.tif 000009
【図８】
2016117102.tif 000010
【図９】
2016117102.tif 000011
【図１０】
2016117102.tif 000012
【図１１】
2016117102.tif 000013
【図１２】
2016117102.tif 000014
【手続補正書】
【提出日】平成29年4月3日(2017.4.3)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第一の処理装置と、第二の処理装置と、主記憶装置と、タイマデバイスとを有する計算機システムであって、
前記タイマデバイスは時刻情報を格納し、前記第二の処理装置からアクセス可能な時刻レジスタを備え、
前記主記憶装置は前記第二の処理装置が前記タイマデバイスの時刻レジスタから読み取った時刻情報を格納する時刻転写バッファを備え、
前記第一の処理装置は前記時刻転写バッファから時刻情報を読み取り、
前記第二の処理装置は前記第一の処理装置が時刻情報を読み取るのと異なるタイミングで時刻情報を前記時刻転写バッファへ格納することを特徴とする計算機システム。
【請求項２】
請求項１に記載の計算機システムであって、
前記主記憶装置はカウント情報を格納するカウンタ領域を備え、前記第一の処理装置は前記時刻転写バッファの時刻情報を読み取ったとき前記カウント情報を更新する計算機システム。
【請求項３】
請求項２に記載の計算機システムであって、
前記第一の処理装置は前記時刻転写バッファの時刻情報と前記カウンタ領域のカウント情報を参照し、得られた時刻情報とカウント情報を基に前記第一の処理装置で実行する処理で用いる処理用時刻情報を生成することを特徴とする計算機システム。
【請求項４】
請求項１に記載の計算機システムにおいて、
前記タイマデバイスは第二の処理装置がタイマ割込情報を設定する割込設定レジスタを備え、
第二の処理装置は第一の処理装置が前記主記憶装置に書込んだタスクの実行時間に関する情報を含むタイマ割込情報を前記割込設定レジスタに設定することを特徴とする計算機システム。
【国際調査報告】
2016117102.tif 000015
2016117102.tif 000016
2016117102.tif 000017
2016117102.tif 000018