(57)【要約】【課題】最近のＣＰＵには割込み要因毎に割込みハンドラの直接呼び出し機能を備え、割込み要因判定が不要になるのにかかわらず、ＯＳ状態変数設定を行うため割込み入口処理が必須で、割込み発生から割込みハンドラ実行までの割込み応答性向上の足かせになっている。【解決手段】割込み要因毎に割込みハンドラの直接呼び出し機能を備えたＣＰＵに、リアルタイムＯＳが搭載され、割込み処理を可能とする計算機システムで、リアルタイムＯＳの実行状態を判定するＯＳ状態判定処理手段と、リアルタイムＯＳの実行状態取得時、ＯＳ状態判定処理手段を呼び出し、ＯＳ状態判定処理手段による割込みハンドラの割込み処理中か、タスク処理中かの判定結果を取得するリアルタイムＯＳのシステムコール処理手段と、ＣＰＵによる割込み処理終了後に割込み出口処理を実行する割込み出口処理手段とを備える。【選択図】図４
2014203230.tif 000002
【特許請求の範囲】
【請求項１】
割込み要因毎に割込みハンドラの直接呼び出し機能を備えたＣＰＵに、リアルタイムオペレーティングシステム（ＯＳ：Operating System）が搭載され、割込み処理を実行可能とする計算機システムにおいて、
前記リアルタイムＯＳの実行状態を判定するＯＳ状態判定処理手段と、
前記リアルタイムＯＳの実行状態を取得する必要がある場合、前記ＯＳ状態判定処理手段を呼び出し、前記ＯＳ状態判定処理手段による割込みハンドラの割込み処理中か、タスク処理中かの判定結果を取得するリアルタイムＯＳのシステムコール処理手段と、
ＣＰＵによる割込み処理終了後に割込み出口処理を実行する割込み出口処理手段と
を備えたことを特徴とする計算機システム。
【請求項２】
前記システムコール処理手段は、割込み処理中により優先度の高い別な割込み処理が発生したとき、前記リアルタイムＯＳの内部変数として保持される割込みネストカウンタをインクリメントして別な割込み処理の実行を許可し、
前記割込み出口処理手段は、前記ＣＰＵによる優先度の高い別な割込み処理終了後に割込み出口処理を実行し、かつ、前記リアルタイムＯＳの実行状態を取得する必要がある場合、前記ＯＳ状態判定処理手段を呼び出し、前記ＯＳ状態判定処理手段による割込みハンドラの割込み処理中か、タスク処理中かの判定結果を取得することを特徴とする請求項１記載の計算機システム。
【請求項３】
割込み要因毎に割込みハンドラの直接呼び出し機能を備えたＣＰＵ（Central Processing Unit）に、リアルタイムオペレーティングシステム（ＯＳ：Operating System）が搭載された計算機システムに割込み処理を実行するための前記計算機システムの割込み処理プログラムにおいて、
前記リアルタイムＯＳの実行状態を判定するＯＳ状態判定処理手段、
前記リアルタイムＯＳの実行状態を取得する必要がある場合、前記ＯＳ状態判定処理手段を呼び出し、前記ＯＳ状態判定処理手段による割込みハンドラの割込み処理中か、タスク処理中かの判定結果を取得するリアルタイムＯＳのシステムコール処理手段
としての機能をさらに計算機システムに実行させるための計算機システムの割込み処理プログラム。
【請求項４】
前記システムコール処理手段は、割込み処理中により優先度の高い別な割込み処理が発生したとき、前記リアルタイムＯＳの内部変数として保持される割込みネストカウンタをインクリメントして別な割込み処理の実行を許可する機能、
前記割込み出口処理手段は、前記ＣＰＵによる優先度の高い別な割込み処理終了後に割込み出口処理を実行し、かつ、前記リアルタイムＯＳの実行状態を取得する必要がある場合、前記ＯＳ状態判定処理手段を呼び出し、前記ＯＳ状態判定処理手段による割込みハンドラの割込み処理中か、タスク処理中かの判定結果を取得する機能を計算機システムに追加実行させることを特徴とする請求項３記載の計算機システムの割込み処理プログラム。
【請求項５】
割込み要因毎に割込みハンドラの直接呼び出し機能を備えたＣＰＵ（Central Processing Unit）に、リアルタイムオペレーティングシステム（ＯＳ：Operating System）が搭載された計算機システムにより割込み処理を実行する前記計算機システムの割込み処理方法において、
前記リアルタイムＯＳの実行状態を判定するＯＳ状態判定処理工程と、
前記リアルタイムＯＳの実行状態を取得する必要がある場合、前記ＯＳ状態判定処理工程による割込みハンドラの割込み処理中か、タスク処理中かの判定結果を取得するリアルタイムＯＳのシステムコール処理工程
を備えたことを特徴とする計算機システムの割込み処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、リアルタイムオペレーティングシステム（ＯＳ：Operating System）を搭載した計算機システムの性能、特に割込みに対する処理の応答時間を短縮させる計算機システム、計算機システムの割込み処理プログラム及び計算機システムの割込み処理方法に関するものである。
【背景技術】
【０００２】
従来のリアルタイムＯＳでは、外部割込みによって起動される処理として割込みハンドラがある（例えば、非特許文献１）。非特許文献１では、「原則として、割込みハンドラの起動時にはＯＳが介入しない。割込み発生時には、ＣＰＵハードウェアの割込み処理機能により、このシステムコールで定義した割込みハンドラが直接起動される。」とあるが、その後に続く文章の「したがって、割込みハンドラの先頭と最後では、割込みハンドラで使用するレジスタの退避と復帰を行う必要がある。」と、また割込みハンドラ（inthdr）を高級言語で記述する場合には「高級言語の環境設定プログラム（高級言語対応ルーチン）を通してからinthdrのアドレスにジャンプする。」という記述にあるとおり、Ｃ言語のような高級言語で割込みハンドラを記述する場合（現在はプログラミング言語としてＣ言語を用いる場合がほとんどである）は、割込み入り口処理として、これらの処理を必要としていた。また、割込みコントローラにて外部割込み要求をとりまとめ、ＣＰＵ（Central Processing Unit）に通知するようなハードウェアシステムの場合、どの外部割込み要求が発生しているか（割込み要因）を判定する処理も、上記割込み入り口処理として記述をしていた。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】μITRON3.0仕様  Ver.3.02.02  社団法人トロン協会  PDF版発行2005.11.29
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来のリアルタイムＯＳでの割込みに対する処理は、図１に示すように、割込み入口処理でレジスタの待避、ＯＳ状態変数の設定、割込み要因判定を実施し、該当する割込みハンドラを実行していた。ＯＳ状態変数とは、割込みハンドラからシステムコール発行によりＯＳが呼び出された場合に遅延ディスパッチとするか（3.0仕様リアルタイムＯＳでは割込みハンドラ実行中にディスパッチングが必要になっても割込みハンドラを抜けるまで遅らす必要がある）の判定を行うため、割込みハンドラ実行中か否かを示す変数をメモリ領域に設定する処理である。しかしながら、最近のＣＰＵ、特に小規模な組込みシステム向けＣＰＵの中には割込み要因毎に割込みハンドラを直接呼び出す仕組みが実装されており、割込み要因判定が不要になるにもかかわらず、ＯＳ状態変数の設定を行うため、割込み入口処理が必須であり、割込み発生から割込みハンドラ実行までの処理時間である割込み応答性を向上、即ち短縮させる足かせになっているという問題点があった。なお、レジスタの退避については、interruptプリプロセッサ命令などコンパイラの提供機能を利用することにより、割込みハンドラ実行前に実施可能である。
【０００５】
この発明は上記のような問題点を解決するためになされたもので、割込み応答性を向上させることを目的に、リアルタイムＯＳ搭載時においても中央演算処理装置（ＣＰＵ：Central Processing Unit）が持つ高速な割込み機能を用いて割込み入り口処理が不要となる計算機システムを提供するものである。即ち、リアルタイムＯＳを利用する計算機システムにおいて、割込み要因毎に割込みハンドラを直接呼び出す仕組みが実装されている最近のＣＰＵを用いることで、ＯＳ状態を必要な時にＯＳ状態判定処理を呼び出すことにより、ＯＳ状態変数をＯＳ内部に保持しなくても、ＯＳ状態を必要な時に取得可能にすることによりに割込み発生時の割込み入口処理を無くすことができ、割込み応答性を向上する効果が得られ、また、ＯＳ状態変数を保持するメモリ領域を備える必要がなくなり、リアルタイムＯＳのメモリ使用量を削減する効果が得られることを目的とする。
【課題を解決するための手段】
【０００６】
この発明に係る計算機システムは、割込み要因毎に割込みハンドラの直接呼び出し機能を備えたＣＰＵに、リアルタイムオペレーティングシステム（ＯＳ：Operating System）が搭載され、割込み処理を実行可能とする計算機システムにおいて、
前記リアルタイムＯＳの実行状態を判定するＯＳ状態判定処理手段と、
前記リアルタイムＯＳの実行状態を取得する必要がある場合、前記ＯＳ状態判定処理手段を呼び出し、前記ＯＳ状態判定処理手段による割込みハンドラの割込み処理中か、タスク処理中かの判定結果を取得するリアルタイムＯＳのシステムコール処理手段と、
ＣＰＵによる割込み処理終了後に割込み出口処理を実行する割込み出口処理手段と
を備える。
【発明の効果】
【０００７】
この発明に係る計算機システムによれば、リアルタイムＯＳを利用する計算機システムにおいて、割込み要因毎に割込みハンドラを直接呼び出す仕組みが実装されているＣＰＵを用い、前記リアルタイムＯＳの実行状態を判定するＯＳ状態判定処理手段を備え、ＯＳの実行状態が必要な時にＯＳ状態判定処理手段を呼び出し、ＯＳ状態判定処理手段の判定結果をリアルタイムＯＳのシステムコール処理手段で取得可能とすることで、ＯＳ状態変数をＯＳ内部に保持しなくても、ＯＳの実行状態が必要な時にＯＳの実行状態を取得可能にすることができるので、割込み処理発生時の割込み入口処理を無くすことができ、割込み応答性を向上する効果が得られ、また、ＯＳ状態変数を保持するメモリ領域を備える必要がなくなり、リアルタイムＯＳのメモリ使用量を削減する効果が得られる。
【図面の簡単な説明】
【０００８】
【図１】従来のリアルタイムＯＳでの割り込みに対する処理項目の説明図である。
【図２】この発明の実施の形態１を示す計算機システムのハードウェア構成図である。
【図３】この発明の実施の形態１の他の実施例を示す計算機システムハードウェア構成図である。
【図４】この発明の実施の形態１を示す計算機システムのソフトウェア構成図である。
【図５】この発明の実施の形態１の処理の流れを示す処理流れ図である。
【図６】割込み要因毎の該当割込みハンドラへのポインタが割込みベクタ領域に格納された説明図である。
【図７】割込みスタック領域の配置を一例の示すメモリ空間の説明図である。
【図８】この発明の実施の形態２を示す計算機システムのソフトウェア構成図である。
【図９】この発明の実施の形態２の前半の処理の流れを示す前半処理流れ図である。
【図１０】この発明の実施の形態２の後半の処理の流れを示す後半処理流れ図である。
【発明を実施するための形態】
【０００９】
実施の形態１．
図２はこの発明の実施の形態１を示す計算機システムのハードウェア構成図である。
図２において、ハードウェア１は計算機システムを動作させるための物理ハードウェアであり、ＣＰＵ２、メモリ３およびデバイス４を備える。デバイス４はＣＰＵ２とＰＣＩ（Peripheral Component Interconnect）、Express等のＩ／Ｏバス５もしくはメモリバスで接続された入出力装置であり、この実施の形態１ではハードウェア１に内蔵されているが、ハードウェア１の外部に備えられＣＰＵ２とＰＣＩ、Express等のＩ／Ｏバス５もしくはメモリバス接続されている構成でもよい。デバイス４からＣＰＵ２への割込み発生通知は、図２に示すように、ＰＣＩ、ExpressのMessage Signal interrupt（ＭＳＩ）を用いて割込み要因をメッセージとしてＣＰＵ２に通知するものや、図３に示すように、デバイス４と個別の割込み信号線６を用いてＣＰＵ２に通知するものがある。
【００１０】
図４はこの発明の実施の形態１を示す計算機システムのソフトウェア構成図である。
図４において、リアルタイムＯＳ７は計算機システムの基本ソフトウェアであり、優先度に従ってタスクを実行したり、割込み発生時にタスクの実行を中断して割込みハンドラを実行したりする。割込みハンドラ８は各入出力装置からの割込み発生時に実行する処理を記述した処理ルーチン、割込み出口処理９は割込みハンドラ８実行後に中断したタスクを再開したり、別のタスクに切替えたり（遅延ディスパッチ）する処理である。ＯＳ状態判定処理１０はＯＳ状態（割込みハンドラ実行中か否か、多重割込み実行中か否かを示す）を問合せの都度判定する処理である。なお、割込みハンドラ８はリアルタイムＯＳに含まれなくても良い。
【００１１】
次に、図５に示す実施の形態１の処理の流れに従い、動作について説明する。
まずシステムの初期化処理またはリアルタイムＯＳの初期化処理にて、もしくはシステムのプログラム生成時に、割込みハンドラを登録する（Ｓ１０１）。最近のＣＰＵ、特に小規模な組込みシステム向けＣＰＵの中には割込み要因毎に割込みハンドラを直接呼び出す仕組みが実装されている。例えば、ＡＲＭ Cortex-M3 CPUのNested Vectored Interrupt Controller(NVIC)や、Intel IA-32/Intel64アーキテクチャＣＰＵがそれに該当する。割込み発生時には、これらの仕組みを用いて割込みハンドラを直接呼び出すようにＣＰＵの設定を行っておく。Ｓ１０１では、例えば図６に示すようにＣＰＵ２が認識する割込みベクタ領域に対して、割込み要因毎に該当する割込みハンドラへのポインタを格納する。もしくは、リアルタイムＯＳ７上で動作する初期化処理であればリアルタイムＯＳ７が提供するシステムコール（μITRON3.0 仕様リアルタイムＯＳではdef_intシステムコール）を用いて割込みハンドラ８を登録する。割込みハンドラ８は割込み発生時にリアルタイムＯＳ７を介さず直接呼び出されるため、interruptプリプロセッサ命令などコンパイラの提供機能を利用し、割込みハンドラ８実行時にレジスタの退避を行うようにしておく。
【００１２】
次にＳ１０１にて割込みハンドラ８を登録した割込みを有効化する（Ｓ１０２）。Ｓ１０２では、例えばＣＰＵ２もしくは割込みコントローラのようなハードウェアを直接操作しても良いし、リアルタイムＯＳ７が提供するシステムコール（μITRON3.0 仕様リアルタイムＯＳではena_intシステムコールやunl_cpuシステムコール）を用いても良い。
次にシステムの初期化処理またはリアルタイムＯＳの初期化処理が終わるとシステムのアプリケーションタスクが動作を開始する。そこで割込みが発生するとＳ１０１にて登録された割込みハンドラ８が割込み要因に応じて開始される（Ｓ１０３）。
【００１３】
次に割込みハンドラ８が割込みを契機にタスクを起床させたい場合など必要に応じてシステムコールを発行する（Ｓ１０４）と、リアルタイムＯＳ７がシステムコール処理を開始する（Ｓ１０５）。この時、システムコール処理にてどの実行コンテキスト（割込みハンドラかタスク）から呼び出されたシステムコールかの判定を行う場合、例えば割込みハンドラから呼び出しても良いシステムコールか否か（μITRON3.0 仕様リアルタイムＯＳでは割込みハンドラから自タスクを待ち状態に入るシステムコールを発行した場合にはコンテキストエラー「E_CTX」でリターンする必要がある）や、遅延ディスパッチする必要があるか否かなど知る必要がある場合、ＯＳ状態判定処理１０を呼び出す（Ｓ１０６）。
【００１４】
次にＯＳ状態判定処理１０では、どのＯＳ状態、ここでは実行コンテキストを判定するために、スタックポインタを参照する（Ｓ１０７）。そのスタックポインタの値が割込みスタック領域内であれば割込みスタック使用中であると判断し、そうでなければ割込みスタック使用中でないと判断する（Ｓ１０８）。ここで、図７はシステムのメモリ空間の一例であり、割込みスタック領域の配置を示している。この場合、スタックポインタの値が割込みスタック開始番地から割込みスタック終了番地の間であれば、割込みスタック使用中であると判断できる。また、タスクスタック領域のサイズを２のべき乗の値とし、サイズのべき数分、開始番地の下位ビットをゼロにすることにより、それ以外の上位ビットを比較し、同一であれば割込みスタック使用中であると判断できる。例えば、割込みスタックのサイズをＣ言語表記で0ｘ1000（＝2の12乗＝4096）とし、割込みスタック開始番地を0ｘFFFFF000としておくと、スタックポインタの値の上位20ビットが0ｘFFFFFであれば割込みスタック使用中であると高速に判断することができる。また、割込みスタック使用中か否かを示すレジスタをＣＰＵ２のハードウェアが備えている場合は（リアルタイムＯＳ７の移植性が下がるが）それを利用しても良い。
【００１５】
次に割込みスタック使用中であれば割込み処理中でシステムコール処理にリターンし（Ｓ１０９）、そうでなければタスク処理中でシステムコール処理にリターンする（Ｓ１１０）。
次にシステムコール処理が終了し（Ｓ１１１）、割込みハンドラ８にリターンする。その後、リアルタイムＯＳ７が提供するシステムコール（μＩＴＲＯＮ３．０仕様リアルタイムＯＳではret_intシステムコールやret_wupシステムコール）を用いて割込みハンドラを終了する（Ｓ１１２）。割込みハンドラを終了すると、システムコール処理を介して割込み出口処理９が呼び出される。
【００１６】
次に割込み出口処理９にて遅延ディスパッチが要求済みかどうか判断し（Ｓ１１３）、要求済みであればタスク切り替えを行い（Ｓ１１４）、割込み処理を終了する。そうでなければ、タスク再開し（Ｓ１１５）、割込み処理を終了する。
【００１７】
以上のように、ＯＳ状態変数をＯＳ内部に保持しなくても、ＯＳ状態判定処理にて実行コンテキストなどＯＳ状態を必要な時に取得可能にすることにより、割込み発生時の割込み入口処理を無くすことができ、割込み応答性を向上する効果が得られる。また、ＯＳ状態変数を保持するメモリ領域を備える必要がなくなり、リアルタイムＯＳのメモリ使用量を削減する効果が得られる。
【００１８】
実施の形態２．
以上の実施の形態１では、割込みハンドラ実行中はそれ以外の割込みは禁止している場合において、割込み発生時の割込み入口処理を無くすことが可能であったが、割込みハンドラ実行中に優先度の高い別の割込みが発生した場合については考慮していなかった。この問題を解決するため、次に割込みハンドラ実行中により優先度の高い別の割込みハンドラの実行を可能とする実施の形態を示す。
【００１９】
この発明の実施の形態２において、計算機システムのハードウェア構成は実施の形態１と同様に図２または図３である。
図２、図３において、ハードウェア１、ＣＰＵ２、メモリ３、デバイス４、Ｉ／Ｏバス５、割込み信号線６は実施の形態１と同様であるため説明を省略する。
図８はこの発明の実施の形態２を示す計算機システムのソフトウェア構成図である。
図８において、リアルタイムＯＳ７、割込みハンドラ８、割込み出口処理９、ＯＳ状態判定処理１０は概略実施の形態１と同様であるため説明を省略する。但し、ＯＳ状態判定処理１０は割込みハンドラ８だけではなく、割込み出口処理９とも信号のやり取りをする。なお、実施の形態１同様、割込みハンドラ８はリアルタイムＯＳに含まれなくても良い。
【００２０】
次に動作について図９、図１０に従い、説明する。
まず、図９において、Ｓ１０１〜Ｓ１０３は図５に示す実施の形態１と同様であるため説明を省略する。
次に割込みハンドラ実行中の割込みより高い優先度の割込みを許可するため、割込みハンドラ８が割込み許可システムコールを発行する（Ｓ１２１）と、リアルタイムＯＳ７が割込み許可システムコール処理を開始する（Ｓ１２２）。μITRON3.0 仕様リアルタイムＯＳではunl_cpuシステムコールに相当する。
次にＳ１０６〜Ｓ１１０は図５に示す実施の形態１と同様であるため説明を省略する。
次にＯＳ状態判定処理の呼び出し（Ｓ１０６）の結果、割込み実行中であることが判明し、かつ既に割込み許可状態でないか判定を行い（Ｓ１２３）、割込み実行中かつ既に割込み許可状態でない場合には、リアルタイムＯＳの内部変数として保持している割込みネストカウンタをインクリメント（＋１）し（Ｓ１２４）、割込みを許可する（Ｓ１２５）。
次に割込み許可システムコール処理を終了（Ｓ１２６）し、呼び出し元の割込みハンドラ８に処理を戻す。
【００２１】
以下、図１０を参照に説明を続ける。
Ｓ１２５で割込みが許可されたため、別の優先度の高い割込みが発生し、ＣＰＵ２によって別の割込みハンドラが開始される（Ｓ１３１）。その後、当該処理を実行した後、割込みハンドラを終了したものとする（Ｓ１３２）。
次に割込みハンドラ終了に伴い、割込み出口処理９が実行され、割込みネストカウントが１以上か判定し（Ｓ１４１）、１以上であれば中断していた割込みハンドラを再開する（Ｓ１４２）。割込みネストカウントがゼロであれば、実施の形態１と同様にＳ１１３〜Ｓ１１５の処理を実行する。
【００２２】
次に再開された割込みハンドラ８が再開され、割込みハンドラを終了する前に割込みハンドラが呼び出された時の状態に戻すため、割込み禁止システムコールを発行する（Ｓ１５１）と、リアルタイムＯＳ７が割込み禁止システムコール処理を開始する（Ｓ１５２）。μITRON3.0仕様リアルタイムＯＳではloc_cpuシステムコールに相当する。
【００２３】
次にＳ１０６〜Ｓ１１０は図５に示す実施の形態１と同様であるため説明を省略する。
次にＯＳ状態判定処理の呼び出し（Ｓ１０６）の結果、割込み実行中であることが判明し、かつ既に割込み禁止状態でないか判定を行い（Ｓ１５３）、割込み実行中かつ既に割込み禁止状態でない場合には、リアルタイムＯＳ７の内部変数として保持している割込みネストカウンタをデクリメント（−１）し（Ｓ１５４）、割込みを禁止する（Ｓ１５５）。
次に割込み禁止システムコール処理を終了（Ｓ１５６）し、呼び出し元の割込みハンドラ８に処理を戻す。
次のＳ１１２の処理は図５に示す実施の形態１と同様であるため説明を省略する。
【００２４】
以上のように、リアルタイムＯＳの割込み許可システムコール処理及び割込み禁止システムコール処理に割込みネストカウンタをインクリメント、デクリメントする処理を加え、そのカウンタ値に応じた割込み出口処理９を実行することにより、割込みハンドラ実行中に別の優先度の高い割込みの割込みハンドラをネストして実行する場合においても、割込み発生時の割込み入口処理を無くすことができ、割込み応答性を向上する効果が得られる。
また、現在処理中の割込み優先度レベルを示すレジスタをＣＰＵハードウェアが備えている場合は（リアルタイムＯＳの移植性が下がるが）、割込みネストカウンタの代わりに、そのレジスタの値が初期値と同一かどうかを判定することにより、割込みがネストして実行されているかどうかを判断しても良い。
なお、言うまでもなく、上述の実施の形態１および実施の形態２の処理機能の全てあるいは一部は、計算機システムのソフトウェアとしてプログラム実行されることで達成できるものである。
【産業上の利用可能性】
【００２５】
この発明による計算機システムは、複写機やプリンタなどの割込み処理が発生する画像形成装置などの電子機器を制御するために用いられるリアルタイム処理装置への適用について有用である。
【符号の説明】
【００２６】
１；ハードウェア、２；ＣＰＵ、３；メモリ、４；デバイス、５；Ｉ／Ｏバス、６；個別割込み信号線、７；リアルタイムＯＳ、８；割込みハンドラ、９；割込み出口処理、１０；ＯＳ状態判定処理。
【図１】
2014203230.tif 000003
【図２】
2014203230.tif 000004
【図３】
2014203230.tif 000005
【図４】
2014203230.tif 000006
【図５】
2014203230.tif 000007
【図６】
2014203230.tif 000008
【図７】
2014203230.tif 000009
【図８】
2014203230.tif 000010
【図９】
2014203230.tif 000011
【図１０】
2014203230.tif 000012