(57)【要約】【課題】割込イベントを発生させる割込要因の頻度が上昇しても、アプリケーション動作を妨げない割込制御方法を提供する。【解決手段】割込イベントの受信によって呼び出される割込ハンドラ31の実行中に、割込イベントの発生を無効（ステップS11）にし、通常のアプリケーションよりも実行優先度の低い開始処理タスク32を起動する(ステップS12）。そして開始処理タスク32に実行権が移ったときに、データ処理タスク33を起動し（ステップS21）、さらにデータ処理タスクに実行権が移ったときに、割込イベントを発生させた割込要因に関するデータ処理を行った後（ステップS31）、割込イベントの発生を有効にする（ステップS33）。【選択図】図６
2007128396.tif 000002
【特許請求の範囲】
【請求項１】
割込イベントを発生するデバイスを接続可能であり、前記割込イベントの発生可否を制御する機能を持ち、装置上で起動された各々の処理タスクに実行優先度を設定し、前記実行優先度に基づいて前記処理タスクを実行し、かつ、
前記割込イベントによって起動される割込処理の実行優先度が、通常の処理タスクの実行優先度よりも高く設定されている、情報処理装置における割込制御方法であって、
前記割込処理の実行時に、
前記割込イベントの発生を無効にする割込無効化ステップと、
通常の処理タスクと同等以下の実行優先度が設定された開始処理タスクを起動する開始処理タスク起動ステップと、
前記開始処理タスクの実行時に、
データ処理タスクを起動するデータ処理タスク起動ステップと、
前記データ処理タスクの実行時に、
前記割込イベントに起因する割込イベントデータを処理する割込データ処理ステップと、
前記割込イベントの発生を有効にする割込有効化ステップと、
を備えたことを特徴とする、割込制御方法。
【請求項２】
前記データ処理タスクの実行優先度を通常の処理タスクよりも高く設定することにより、通常の処理タスクよりも高い実行優先度で前記割込データ処理ステップが実行されることを特徴とする、請求項１記載の割込制御方法。
【請求項３】
前記割込処理の実行時に、
各々の割込要因に対する処理方法を記載した割込処理対応情報に基づいて処理方法を判断する割込処理方法判断ステップと、
を備えたことを特徴とする、請求項１または２に記載の割込制御方法。
【請求項４】
当該情報処理装置上で実行される各々の処理タスクに実行優先度を設定し、前記実行優先度に基づいて前記処理タスクを実行する情報処理装置であって、
アプリケーション等を実行する通常の処理タスクと、
外部からの割込イベントによって起動される割込みハンドラと、
前記割込みハンドラの実行時に前記割り込みハンドラにより起動される開始処理タスクと、
前記開始処理タスクの実行時に前記開始処理タスクにより起動される、前記割込イベントに起因する割込イベントデータを処理するデータ処理タスクとを備え、
前記割込みハンドラは、通常の処理タスクの実行優先度よりも高い実行優先度が設定されており、かつ当該割り込みハンドラの実行時に、前記割込イベントの発生を無効にするものであり、
前記開始処理タスクは、前記通常の処理タスクと同等以下の実行優先度が設定されており、
前記データ処理タスクは、当該データ処理タスクの実行時に、前記割込イベントの発生を有効にする、ことを特徴とする情報処理装置。
【請求項５】
前記データ処理タスクは、前記通常の処理タスクよりも高い実行優先度が設定されていることを特徴とする請求項４に記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウェアデバイス等からの割込イベントを処理する情報処理装置で利用される割込制御方法及び当該情報処理装置に関する。
【背景技術】
【０００２】
従来、例えばパソコンやプリンタ、ＨＤＤレコーダー等の情報処理装置においては、ネットワークカードやハードウェアキー等の様々なデバイスが装着され、利用されている。
【０００３】
これらのデバイスは、データ受信やキー押下といった割込要因を検知すると、接続された情報処理装置に対し、割込信号を出力するなどの割込イベントを送出する。割込イベントを受けた情報処理装置は、対応する割込ハンドラ（割込処理）を実行することによって、割込要因を所定の方法で処理する。例えば、ネットワークカードがネットワークパケットを受信したという割込要因であれば、割込ハンドラを実行してネットワークカード上のバッファに蓄積されたネットワークパケットの受信データを読み出し、情報処理装置上のシステムメモリにコピーする。そして、受信データを待ち受けるアプリケーションにそれを渡す。
【０００４】
また、ハードウェアデバイス以外にもソフトウェアプログラムが擬似的な割込イベントを発生させることもある。一定間隔毎または設定された時間が経過した時に割込イベントを発生させるソフトウェアタイマはその例である。
【０００５】
一方、情報処理装置を制御するＯＳ（ｏｐｅｒａｔｉｎｇ ｓｙｓｔｅｍ）では、アプリケーションや制御プログラム等の様々な処理タスクを効率よく実行するため、タスクのスケジューリング（実行するタスクの切り替え）を随時行っているものがある。
【０００６】
タスクのスケジューリングの一つに、各々のタスクに設定された実行優先度（プライオリティ）に基づいて実行するタスクを決定する実行優先度方式がある。この方式では、例えば、タスクＡとタスクＢが実行可能状態であり、タスクＡの実行優先度が０、タスクＢの実行優先度が５とすると、先ずタスクＢに実行権が付与されて実行される。そして、タスクＢが処理を完了して終了したり、何らかのイベントを待つために実行可能状態以外に遷移した場合、この時はタスクＡだけ実行可能状態であるので、タスクＡが実行される。
【０００７】
また、他のスケジューリング方式の一つに、各タスクに実行可能時間（クォンタム時間）を設定し、実行可能時間分タスクが実行されてもそのタスクの処理が終了しなければ、別のタスクに実行権を移す、ラウンドロビン方式がある。この方式では、予め各タスクに実行可能時間を設定する。そして、タスクが実行されると、実行時間分だけそのタスクの実行可能時間を減算する。減算後の実行可能時間を残り実行可能時間と定義すると、実行中のタスクの残り実行可能時間が０になると実行権が剥奪され、別のタスクに実行権が移る。
【０００８】
また、情報処理装置で利用されるＯＳの一つであるＬｉｎｕｘでは、実行優先度方式とラウンドロビン方式を組み合わせたスケジューリング方式を利用している。以下、Ｌｉｎｕｘにおけるスケジューリング方式について説明する。
【０００９】
Ｌｉｎｕｘでは、タスク（プロセスとも称される）に設定される実行優先度として、リアルタイム優先度と基本優先度の２種類が存在する。リアルタイム優先度はリアルタイム処理が要求されるタスクにのみ与えられるものであり、通常の処理タスクには基本優先度のみが与えられる。そして、通常の処理タスクには、基本優先度に基づいて算出される実行可能時間の初期値が設定される。
【００１０】
タスクのスケジューリングを行うＬｉｎｕｘのスケジューラは、リアルタイム優先度が設定されているタスクが実行可能状態であれば、リアルタイム優先度の高いタスクから順に実行権を与える。そうでなければ、実行可能状態であるタスクのうち、残り実行可能時間と基本優先度の和が高く、かつ残り実行可能時間が０でないものに対して実行権を与える。以後、実行権を与えたタスクが実行可能時間を費やすか、タスクの切替え命令が呼び出された時に、前述の選択方法に基づいて実行権を与えるタスクを切り替える。なお、実行可能状態である全ての通常の処理タスクの残り実行可能時間が０になれば、実行可能時間の初期値を再設定した上で、実行権を与えるタスクを選択する。
【００１１】
また、タスク切り替えを行うタイミングに関してもいくつか方式がある。実行優先度の高いタスクが実行可能状態になると、実行優先度の低いタスクの実行を中断し、実行優先度の高いタスクに実行権が移る方式はプリエンプション方式と呼ばれる。この方式では、例えば、上記のタスクＡを実行中、タスクＢが実行可能状態となったときは、タスクＢに実行権が移る。
【００１２】
前述したＬｉｎｕｘをはじめとするいくつかのＯＳでは、割込ハンドラの実行優先度はどのタスクよりも常に高く設定されており、その実行優先度を変えることができない。すなわち、割込ハンドラの実行は、他のタスク実行よりも最優先で処理される。また、割込イベントが発生すると、プリエンプションによって現在のタスク実行を中断し、直ちに割り込みハンドラを実行する。途中で実行が中断すると問題の起こるコードを保護するために、一時的に割込イベントが発生しても割込ハンドラを起動させないようにすることは可能であるが、禁止されていなければ、割込イベントの発生によって現在のタスク実行が中断されることになる。
【００１３】
割込イベントの多くは、情報処理装置の内部状態によらず非同期に発生する。例えば、ネットワークカードの割込イベント発生の要因となるパケットの受信は、外部装置から送信されるパケットによって引き起こされる。外部装置からのパケット送信頻度が上昇すると、ネットワークカードによる割込イベントの発生頻度も上昇し、ネットワークカードが装着された情報処理装置では、割込ハンドラを実行する機会が増加する。情報処理装置で何らかのアプリケーション処理のタスクを実行中であった場合、割込ハンドラの実行のために度々アプリケーション処理が中断することになる。
【００１４】
また、割込イベントだけでなく、割込イベントによってもたらされるデータ(以下、割込データとする)の処理を、アプリケーション処理よりも高い実行優先度で処理しなければならないＯＳも存在する。例えば、Ｌｉｎｕｘにおけるネットワークパケットのデータ受信処理では、各パケットのデータをＯＳの内部システムに引き渡す際に、アプリケーションよりも高い実行優先度が設定されたソフトウェア割込みという仕組みを経由する。ソフトウェア割込みの実行優先度も同様に下げることはできないため、割込データを処理する度にやはりアプリケーション処理が中断することになる。
【００１５】
従って、割込ハンドラや、割込データ処理の実行優先度が、他のタスクよりも常に高く設定されるＯＳを利用する情報処理装置では、割込イベントの頻度が高まると、アプリケーション処理が遅延したり、情報処理装置全体の処理パフォーマンスが低下したりするなどの問題があった（例えば、図１２を参照）。
【００１６】
割込イベントによるアプリケーション処理のパフォーマンス低下に対処する従来技術として、例えば、特許文献１における受信制限システムでは、ネットワークデバイスでの割込回数を測定し、一定時間当たりの割込回数が予め設定された閾値を超えると、ネットワーク受信によって起こる割込イベントを一定時間無効にしたり、受信するネットワークデータパケットを制限することで、パフォーマンスを保つ方法が記載されている。
【００１７】
しかしながら、割込回数を測定する機構を追加する必要があり、測定のオーバーヘッドも生じる。また、情報処理装置のハードウェア構成や動作するアプリケーションの動作仕様が異なれば、許容される割込処理回数も異なってくる。閾値を緩くしてしまうと、本来の目的であったアプリケーション処理のパフォーマンス確保が困難になるし、逆に必要以上に閾値を高くしてしまうと、アプリケーション処理のパフォーマンスは十分に確保できるが、割込ハンドラ及び割込データの処理が疎かになるという問題を含んでいる。従って、予め情報処理装置ごとに、割込回数の適切な閾値を見極めて設定する必要がある。
【００１８】
一方、特許文献２におけるプリンタでの割込処理制御方法では、データ受信割込（割込イベント）の回数が閾値を超えた場合に、データ受信割込処理（割込処理）の優先順位を変更する（下げる）ことによって、ＣＰＵの占有を防止する方法が記載されている。
【００１９】
しかしながら、情報処理装置が、割込ハンドラや割込データ処理の実行優先度を変更することができないＯＳを利用している場合は適用できない。
【特許文献１】特開２００４−１５４９７号公報
【特許文献２】特開平１０−２５４７２１号公報
【発明の開示】
【発明が解決しようとする課題】
【００２０】
前述の通り、割込処理の実行優先度が、アプリケーション処理を行うタスクよりも高く設定されるＯＳを利用する情報処理装置では、割込処理の頻度上昇により、アプリケーション処理が妨げられてしまうという課題がある。
【００２１】
特許文献1の方法では、割込回数を測定する必要があり、測定にかかるオーバーヘッドを生じる。また情報処理装置のハードウェアやソフトウェア構成によって、許容できる割込回数は異なってくるため、装置ごとに適切な閾値を見極める手間がかかる。
【００２２】
また、ＯＳによっては、割込ハンドラや割込データ処理の実行優先度を変更することができないため、特許文献２に記載されたような割込処理自体の実行優先度を変更する方法は適用できない。
【００２３】
本発明は、こうした問題に鑑みてなされたもので、負荷測定の機構や閾値設定を必要とせず、割込ハンドラや割込データ処理の実行優先度を変更することが出来ない装置でも適用可能であり、かつ割込要因の頻度が上昇してもアプリケーション動作を妨げない、割込制御方法を提供することを目的とする。
【課題を解決するための手段】
【００２４】
以上の課題を解決するために、本発明の割込制御方法は、割込イベントを発生するデバイスを接続可能であり、前記割込イベントの発生可否を制御する機能を持ち、装置上で起動された各々の処理タスクに実行優先度を設定し、前記実行優先度に基づいて前記処理タスクを実行し、かつ、前記割込イベントによって起動される割込処理の実行優先度が、通常の処理タスクの実行優先度よりも高く設定されている、情報処理装置における割込制御方法であって、前記割込処理の実行時に、前記割込イベントの発生を無効にする割込無効化ステップと、通常の処理タスクと同等以下の実行優先度が設定された開始処理タスクを起動する開始処理タスク起動ステップと、前記開始処理タスクの実行時に、データ処理タスクを起動するデータ処理タスク起動ステップと、前記データ処理タスクの実行時に、前記割込イベントに起因する割込イベントデータを処理する割込データ処理ステップと、前記割込イベントの発生を有効にする割込有効化ステップと、を備える。
【発明の効果】
【００２５】
上記に構成された本発明の割込制御方法によれば、割込ハンドラ実行時に割込イベントの発生を無効にすると共に通常のアプリケーションよりも実行優先度の低い開始処理タスクを起動し、開始処理タスクからデータ処理タスクを実行し、データ処理タスクの中で割込要因に対するデータ処理を行った後、割込イベントの発生を有効にすることによって、割込要因が頻発する状況下においても、アプリケーション実行の妨げにはならない。また、処理すべきタスク量が多ければ多いほど開始処理タスクの実行が遅延される一方で、アイドル状態であれば即座に実行されて割込データ処理が行われるため、ＣＰＵ負荷や割込回数等を測定せずとも情報処理装置の負荷状態に応じて割込ハンドラや割込データ処理の実行を制御できる効果がある。
【００２６】
なお、データ処理タスクに適切な実行優先度を持たせることによって、割込要因に対するデータ処理をアプリケーションよりも実行優先度の高い状態で実行させなければならない情報処理装置にでも適用可であり、割込要因が頻発する状況下においても、アプリケーション実行の妨げにはならず、また、ＣＰＵ負荷や割込回数等を測定せずとも情報処理装置の負荷状態に応じて割込ハンドラや割込データ処理の実行を制御できる効果がある。
【発明を実施するための最良の形態】
【００２７】
以下に、本発明の実施の形態について、図面を参照しながら説明する。
【００２８】
（実施の形態１）
図１、図２は本発明の実施の形態１に適用される、情報処理装置１とデバイス2の構成図である。
【００２９】
図１で示されている通り、情報処理装置1は、少なくともプログラムを実行する制御部11、デバイスからの割込イベントを受け付けて制御部に伝える割込コントローラ12、制御部11とデバイス2を接続するためのシステムバス13、情報処理装置1上で実行されるプログラムがロードされるシステムメモリ14を備える。
【００３０】
情報処理装置1では、実行優先度に基づいてタスクのスケジューリングが行われるものとし、さらに割込イベントを受信した時の処理の実行優先度が、通常のタスクよりも高く設定されるものとする。
【００３１】
一方、図２で示されている通り、デバイス2は、制御部21、割込許可設定部22、割込イベント発生部23、バッファ24を持つ。
【００３２】
制御部21は、割込許可設定部22の設定を変更したり、割込イベント発生部23へ割込イベント要求を行ったり、デバイス外部から受け取ったデータをバッファ24に格納したりする。
【００３３】
割込許可設定部22は、割込イベントの発生を許可するか、許可しないかの設定がなされる。
【００３４】
割込イベント発生部23は、割込コントローラ12と接続され、制御部21から割込イベント要求23があったときに、割込コントローラ12へ割込イベントを送信する。
【００３５】
制御部21が、割込要因の一つである、デバイス外部からのデータ受信を検知したとき、このデータはバッファ24に蓄積される。さらに割込許可設定部22が割込イベントの発生を許可する設定にされていた場合は、割込イベント発生部23に割込イベント要求を行う。一方、割込許可設定部22が割込イベントの発生を許可しない設定にされていた場合は、バッファ24にそのデータを蓄積するが、割込イベントは送信しない。
【００３６】
以上のシステム構成を基に、情報処理装置1における割込制御方法を実装するソフトウェア構成を図１を用いて説明する。
【００３７】
情報処理装置1のシステムメモリ14には、割込ハンドラ31、開始処理タスク32、データ処理タスク33、アプリケーション（通常の処理タスク）34a〜34cの実行コードがロードされている。
【００３８】
割込ハンドラ31は、割込無効化手段41と開始処理タスク起動手段42を備える。割込無効化手段41は、制御部11を通じてデバイス2の割込許可設定部22にアクセスし、割込イベントの発生を許可しない設定に変更する。開始処理タスク起動手段42は、アプリケーション34a〜34cと同等かそれ以下の実行優先度を設定した開始処理タスク32を起動し、実行可能状態とする。
【００３９】
開始処理タスク32は、データ処理タスク起動手段51を備える。データ処理タスク起動手段51は、アプリケーション34a〜34cの実行優先度よりも高いデータ処理タスク33を起動して実行可能状態とする。
【００４０】
データ処理タスク33は、割込データ処理手段61と、割込有効化手段62を備える。割込データ処理手段61は、制御部11を通じてデバイス2のバッファ24にアクセスし、蓄積されたデータを読み出す。割込有効化手段62は、制御部11を通してデバイス2の割込許可設定部22にアクセスし、割込イベントの発生を許可する設定にする。
【００４１】
割込ハンドラ31は、割込コントローラ12がデバイス2から割込イベントを受信したときに実行される。一方、開始処理タスク32、およびデータ処理タスク33は、実行権が付与された時に実行される。
【００４２】
また、図１には記載されていないが、情報処理装置1では、最低の実行優先度を持つアイドルタスクが常時実行可能状態になっている。アイドルタスク以外に実行可能状態のタスクが存在しなければ、アイドルタスクが実行される。この状態をアイドル状態と定義する。
【００４３】
図３は、割込イベントを受信した時の処理のフローチャートである。デバイス2から割込イベントを受信すると、情報処理装置1は割込ハンドラ31を呼び出す（ステップS10)。そして、割込ハンドラ31内で、デバイス2の割込イベントの発生を無効化(ステップS11)し、開始処理タスク32を起動して(ステップS12)、割込イベントに対する処理を終了する。
【００４４】
図４は開始処理タスク32に実行権が付与された時の、開始処理タスク32における処理のフローチャートである。開始処理タスク32内では、データ処理タスク33を起動し(ステップS21)、開始処理タスク32の実行を終了する。
【００４５】
図５は、データ処理タスク33に実行権が付与された時の、データ処理タスク33における処理のフローチャートである。データ処理タスク33内では、デバイス2のバッファ24に蓄積された受信データの一つを読み出して処理する(ステップS31)。処理の例としては、受信データを待ち受けるタスクに待ち列やメッセージキュー等を用いて引き渡す、などである。その後、バッファ24に他の受信データが蓄積されているか確認し、蓄積されていればステップS31に戻ってデータ処理を繰り返す(ステップS32)。蓄積されていなければ、デバイス2の割込イベントの発生を有効化(ステップS33)して、データ処理タスク33の実行を終了する。
【００４６】
以上の手順に基づき、一つのアプリケーション実行中に、デバイス2での割込要因の検知によって割込イベントが送信されてから、割込イベントを発生させた割込要因が処理される時のタスク実行の遷移を示したタイムチャートの一例を図６に示す。
【００４７】
図６に示すように、割込ハンドラ31、開始処理タスク32、データ処理タスク33、アプリケーション34d、アイドルタスクが実行優先度順に並んでいる。上方にある処理ほど実行優先度が高いことを示す。図の横軸は時間である。各タスクを示す軸上において、太線部の区間は実行権を与えられて処理を実行中で有ることを示す。点描部の区間は、実行可能状態であるものの実行権が与えられていないことを示す。細線部の区間は、休止状態または起動していない状態であることを示す。各タスクの軸を結ぶ点線は、タスクの切り替え中であることを示す。また、図６の上部にデバイス2に対する操作を合わせて示す。デバイスの軸上にある網線部の区間は、割込イベントの発生が無効化されていることを示す。すなわちこの区間では、デバイス2はデバイス外部からデータを受信しても、情報処理装置1に対して割込イベントは送信しない。
【００４８】
図６において、初期段階ではアプリケーション34dが実行されている。アプリケーション34d実行中に、デバイス2がデバイス外部からデータを受信すると、情報処理装置1に割込イベントが送信される。これにより、アプリケーション34dの実行を中断して、割込ハンドラ31が実行される。割込ハンドラ31内では、割込イベントの発生が無効化され、開始処理タスク32が起動される。その後、割込ハンドラ31での処理が終了し、アプリケーション34dの実行状態に復帰する。以降、割込イベントの発生が有効にされるまで、デバイス2がデバイス外部からどれだけデータを受信しても、データ受信を示す割込イベントは発信されず、割込ハンドラが実行されないことにより、アプリケーション34dの実行を妨げることはない。
【００４９】
次に、アプリケーション34dの処理が完了したり、何らかのイベント待ちのため休止状態となったりした時、タスクの切り替えが行われる。他のアプリケーションが実行可能状態でなければ、割込ハンドラ31内から起動した開始処理タスク32に実行権が移る。開始処理タスク32では、データ処理タスク33を起動する。この時、データ処理タスク32は開始処理タスクよりも実行優先度が高いため、開始処理タスク32の実行が中断され、代わりにデータ処理タスク33が実行される。
【００５０】
データ処理タスク33は、デバイス2のバッファ24に蓄積されている受信データを制御部11を通じて読み取って、このデータを待ち受けるタスク等に待ち列やメッセージキュー等を用いて引き渡す。複数の受信データがバッファに存在しているならば、バッファが空になるか、規定数読み取るまで受信データを読み取る。その後、データ処理タスク33は受信イベントの発生を有効化して終了する。
【００５１】
その後、開始処理タスク32に実行権が戻った時に、開始処理タスク32は終了する。これによりタスク切り替えが起こり、他のアプリケーションが実行可能状態でなければアイドル状態に遷移する。
【００５２】
次に、アイドル状態で割込イベントを受信してから、割込イベントを発生させた割込要因が処理される時のタスク実行の遷移を示したタイムチャートの一例を図７に示す。
【００５３】
図７では、割込ハンドラ31、開始処理タスク32、データ処理タスク33、アイドルタスクが実行優先度順に並んでいる。アプリケーションは実行可能状態ではないため、図中には記載していない。それ以外は図６と同様である。
【００５４】
図７において、初期段階ではアイドルプロセスが実行されているアイドル状態である。この時、デバイス2がデバイス外部からデータを受信すると、情報処理装置1に割込イベントが送信される。これにより、割込ハンドラ31が実行され、以下同様にして割込イベントの発生が無効化され、開始処理タスク32が起動される。
【００５５】
その後、割込ハンドラ31での処理が終了すると、実行可能状態で有るタスクは開始処理タスク32のみであるので、直ちに開始処理タスク32に実行に移る。開始処理タスク32では、データ処理タスク33を起動する。以下、同様にして、データ処理タスク33の実行に移り、デバイス2のバッファ24に蓄積されたデータが処理された後、割込イベントの発生を有効にし、データ処理タスク33は終了する。その後、開始処理タスク32に実行権が戻った時に、開始処理タスク32は終了する。他のアプリケーションが実行可能状態になっていなければ、アイドル状態に遷移する。
【００５６】
以上のように、実施の形態１における割込制御方法によれば、初動の割込ハンドラ実行により割込イベントの発生が無効にされ、さらにアプリケーションと同等以下の実行優先度を持った開始処理タスクからデータ処理タスクが起動されるまでその状態が継続するため、割込イベントを引き起こすデータ受信頻度が上昇しても、アプリケーション実行の妨げにはならない。また、処理すべきタスク量が多ければ多いほど開始処理タスクの実行を遅延させる一方、アイドル状態であれば即座に開始処理タスクが実行されてデータ処理タスクを起動しデータ処理が行われる。ＣＰＵ負荷や割込回数等を測定せずとも情報処理装置の負荷状態に応じて割込ハンドラやデータ処理の実行を制御できる効果がある。
【００５７】
なお、図６において、実行中のアプリケーションが1つの場合を示したが、複数のアプリケーションが実行可能状態である場合には、それらアプリケーションに順次実行権が移ってから、開始処理タスクに実行権が移る。従って、処理すべきアプリケーション数によらず、割込イベントを引き起こすデータ受信頻度が上昇しても、アプリケーション実行の妨げにはならない。
【００５８】
なお、本実施例では、デバイス2がデバイス外部からデータを受けた場合の割込イベントの処理について説明したが、それ以外の割込要因で発生する割込イベントに対しても、同様の割込制御方法を適用できる。
【００５９】
なお、割込データ処理手段にて実行される処理内容は、割込イベントを発生させた割込要因により異なる。例えば、ハードウェアキー等の入力装置におけるキー入力によって起こる割込イベントに対しては、割込データ処理手段は、バッファに蓄積された受信データを処理する代わりに、キー入力の履歴を参照するなどしてキー入力に対する処理を行う。
【００６０】
なお、割込イベントの発生無効化・有効化を操作する代わりに、情報処理装置1で割込イベントに対応する割込ハンドラの起動無効化・有効化を操作する実装にしてもよい。この効果により、割込許可設定部22を持たないデバイスであっても、かかる効果を得られる。
【００６１】
なお、バッファ24は必ずしもデバイス2が持たなくて良い。情報処理装置1にバッファ24を持たせたり、システムメモリ14の領域を代用したりしても良い。
【００６２】
なお、割込ハンドラ31の処理に関して、図３、図６、及び図７において、割込イベントの発生を無効化してから、開始処理タスク32を起動しているが、この順番を逆にしても同様の効果が得られる。
【００６３】
なお、ステップS21の処理の後で開始処理タスク32を終了する代わりに、開始処理タスク32を休止状態へと遷移させてもよい。この場合、開始処理タスク32はシステムメモリ14に常駐し、実行権が移るたびにステップS21を実行するようにする。この効果により、割込ハンドラ31での開始処理タスク32の起動処理が、開始処理タスク32を実行可能状態へと遷移させるだけで済むため、割込ハンドラ内の処理時間を短縮でき、アプリケーションへの影響がさらに減る。
【００６４】
なお、Linuxにおいては、先に述べたように実行優先度方式とラウンドロビン方式を組み合わせたスケジューリング方式を利用しているため、アプリケーション処理が長期を要するものであっても、度々開始処理タスクに実行権が移り、データ処理タスクを起動することができる。バッファに蓄積されたデータの処理を適度に実行することにより、バッファフルによるデータの取りこぼしが減るため、本発明がより有効に利用できる。
【００６５】
なお、システムによっては、実行可能状態になってからの待機時間が長いタスクの実行優先度を高くする、エージング方式を採用しているものがある。この場合、アプリケーション処理が長期を要するものであっても、待機時間に応じて開始処理タスクの実行優先度が引き上げられ、度々データ処理タスクを起動することができる。バッファに蓄積されたデータの処理を適度に実行することにより、バッファフルによるデータの取りこぼしが減るため、本発明がより有効に利用できる。
【００６６】
なお、タスク切り換えのタイミングに関して、現在実行中のタスクが明示的に実行権を手放さない限りタスク切り替えが起きないノンプリエンプティブ方式を利用している場合は、ステップS21においてデータ処理タスクを起動しても実行権が移らない。このため、データ処理タスク起動後に開始処理タスクを終了または休止して実行権を手放せば良い。データ処理タスクに実行権が移ることにより、同様の効果が得られる。
【００６７】
（実施の形態２）
図８は本発明の実施の形態２に適用される、情報処理装置101とデバイス2の構成図である。
【００６８】
図８において、既に説明された構成と同様のものは、同じ符合を用いて説明を省略する。
【００６９】
さらに情報処理装置101では、情報処理装置1と同様に、実行優先度に基づいてタスクのスケジューリングが行われるものとし、さらに割込イベントに対する実行優先度が、通常のタスクよりも高く設定されるものとする。
【００７０】
以上のシステム構成を下に、情報処理装置101における割込制御方法を実装するソフトウェア構成を図８を用いて説明する。
【００７１】
情報処理装置101のシステムメモリ14には、割込ハンドラ35、開始処理タスク32、データ処理タスク33、アプリケーション34a〜34cに加えて、リアルタイムアプリ36の実行コードがロードされている。さらに、システムメモリ14には、割込処理方法情報テーブル37が記憶されている。
【００７２】
割込ハンドラは35、割込無効化手段41と開始処理タスク起動手段42に加えて、割込処理方法判断手段43を備える。割込処理方法判断手段43は、制御部11を通してデバイス2にアクセスし、割込イベントを発生させた割込要因を確認した後、割込処理方法情報テーブル37を読み出してその割込要因に対する処理方法を判断する。
【００７３】
割込ハンドラ35は、割込ハンドラ31と同様に、割込コントローラ12がデバイス2から割込イベントを受信したときに実行される。
【００７４】
開始処理タスク32、データ処理タスク33、アプリケーション34a〜34cは、実施の形態１と同様である。
【００７５】
リアルタイムアプリ36は、ある一定の時間内で決められた処理が完了することを求められるアプリケーションであり、例えば情報処理装置に入力された映像を記録するアプリケーション等が該当する。
【００７６】
割込処理方法情報テーブル37は、割込要因38a〜38dと、その割込要因に対する処理方法39a〜39dを組にした一つまたは複数の項目で構成される。図９に、割込処理方法情報テーブル37の一例を挙げる。図９の例では、割込要因がデータ受信であった場合、その処理方法として開始処理タスクを使用するよう示している。また、割込要因がバッファフルであった場合、何も処理しないことを示している。また、割込要因がデータ受信エラーであった場合は、開始処理タスクを使用するのではなく、割込ハンドラの中で直ちに処理するよう指示している。また、該当する割込要因がテーブル中になければ、デフォルトの方法を使用し、この例の場合は、データ受信エラーと同様に割込ハンドラ内で直ちに処理するよう示している。
【００７７】
図１０は、情報処理装置101における割込イベント処理のフローチャートである。デバイス2から割込イベントを受信すると、情報処理装置101は割込ハンドラ35を呼び出す（ステップS51）。次に割込処理方法判断手段43により割込要因ＩＦが確認され（ステップS52）、割込処理方法情報テーブル37から当該割込要因ＩＦに対応する処理方法の情報が取り出される（ステップS53）。処理方法の情報に基づき、割込処理方法判断手段43が少なくとも開始処理タスクを使用するよう判断すれば（ステップS54）、開始処理タスク起動手段41によって開始処理タスク32を起動し（ステップS55）、割込無効化手段42により当該割込要因ＩＦによる割込イベントの発生を無効化する（ステップS56）。一方、ステップS54において、開始処理タスクを使用しないと判断すれば、割込処理方法判断手段43は、データ処理タスク33が備える割込データ処理手段61を呼び出して実行する（ステップS57）。
【００７８】
割込ハンドラ35で開始処理タスク32が起動された場合は、実施の形態１と同様にして、開始処理タスク32からデータ処理タスク33が起動され、そしてデータ処理タスク33によって割込データ処理手段61を実行した後、当該割込要因ＩＦによる割込イベントの発生を有効化する。
【００７９】
一方、リアルタイムアプリ36の実行においては、ある一定時間内での処理完了を保証するために、通常のアプリケーション以上に割込イベントによる処理中断が起きないことが望まれる。そこで、リアルタイムアプリ36実行中は、より多くの割込要因に対して開始処理タスクによる処理方法を適用することで、リアルタイムアプリの処理に影響が出ないように割込イベントの発生を抑制する。具体的には、割込処理方法情報テーブルの内容を書き換えて対処する。
【００８０】
図１１は、割込処理方法情報テーブル37の変更の一例である。（ａ）のテーブルが平常状態の内容であるものとする。その後、リアルタイムアプリ36が起動された時に、（ｂ）の内容に変更する。この時、データ受信、バッファフル、データ受信エラー以外の割込要因に対する対処方法が、割込ハンドラ内で処理する即時処理から、開始処理タスクを使用して処理する方法に変更される。これにより、平常状態ではデータ受信による割込イベントの発生のみ抑制されていたものが、リアルタイムアプリ36実行中は、バッファフル、データ受信エラー以外の割込要因にまで範囲を広げて適用することができる。
【００８１】
以上のように、実施の形態２における割込制御方法によれば、実施の形態1における効果に加えて、開始処理タスクを経由して処理させる割込要因を動的に決定することが可能であり、情報処理装置101で実行するアプリケーション等の特性に応じて、臨機応変に制御が可能である。
【００８２】
なお、リアルタイムアプリ36の実行が終了した時に、割込処理方法情報テーブル37を元の状態(図１１の（ａ）の状態）に戻しても良い。
【００８３】
なお、本実施の形態２では、リアルタイムアプリ36実行中に開始処理タスクを使用して処理する割込要因の範囲を広げる例を示したが、逆に、開始処理タスクを使用して処理する割込要因の範囲を狭めても良い。例えば、ネットワークから受信データを受け取るたびに処理するアプリケーションを実行している場合は、割込要因がデータ受信である時の処理方法を即時処理に変更する。これにより、アプリケーションでの処理スループットを向上させることができる。
【産業上の利用可能性】
【００８４】
本発明にかかる割込制御方法は、割込イベントを発生させる割込要因の頻度が上昇しても、アプリケーション実行の妨げにはならず、また、処理すべきタスク量が多ければ多いほど開始処理タスクの実行が遅延される一方で、アイドル状態であれば即座に実行されてデータ処理が行われるため、ＣＰＵ負荷や割込回数等を測定せずとも情報処理装置の負荷状態に応じて割込ハンドラやデータ処理の実行を制御できるので、ハードウェアデバイス等からの割込イベントを処理する情報処理装置で利用される割込制御方法等として有益である。
【図面の簡単な説明】
【００８５】
【図１】実施の形態１における情報処理装置とデバイスのブロック図
【図２】実施の形態１におけるデバイスのブロック図
【図３】実施の形態１における情報処理装置において、割込イベントを受信した時に実行される処理のフローチャート
【図４】実施の形態１における情報処理装置において、開始処理タスクに実行権が移ったときのフローチャート
【図５】実施の形態１における情報処理装置において、データ処理タスクに実行権が移ったときのフローチャート
【図６】アプリケーションが起動している状態での、本実施形態における割込制御方法の作用を表すタイムチャート
【図７】アプリケーションが起動していない状態での、本実施形態における割込制御方法の作用を表すタイムチャート
【図８】実施の形態２における、情報処理装置とデバイスのブロック図
【図９】実施の形態２における、割込み処理方法情報テーブルの一例を示す図
【図１０】実施の形態２における情報処理装置で実行される、割込処理のフローチャート
【図１１】実施の形態２における、割込処理方法情報テーブルの変更例を示す図
【図１２】従来の情報処理装置における問題を説明するタイムチャート
【符号の説明】
【００８６】
１、１０１    情報処理装置
２    デバイス
３１、３５    割込ハンドラ（割込処理）
３２    開始処理タスク
３３    データ処理タスク
３７    割込処理方法情報テーブル
４１    割込無効化手段
４２    開始処理タスク起動手段
４３    割込処理方法判断手段
５１    データ処理タスク起動手段
６１    割込データ処理手段
６２    割込有効化手段
【図１】
2007128396.tif 000003
【図２】
2007128396.tif 000004
【図３】
2007128396.tif 000005
【図４】
2007128396.tif 000006
【図５】
2007128396.tif 000007
【図６】
2007128396.tif 000008
【図７】
2007128396.tif 000009
【図８】
2007128396.tif 000010
【図９】
2007128396.tif 000011
【図１０】
2007128396.tif 000012
【図１１】
2007128396.tif 000013
【図１２】
2007128396.tif 000014