(57)【特許請求の範囲】
【請求項１】
ハードウェア制御を行うデバイスドライバを、一つのメッセージ処理用スレッドと、一つ以上の割り込み処理用スレッドとを割り当てることが可能なマルチスレッドオブジェクトとして記述し、
デバイスドライバが他のオブジェクトから入力されたメッセージに基づく処理を行う場合には、当該処理をメッセージ処理用スレッドに割り当てて実行し、
デバイスドライバに対して割り込みを要求する事象が発生したときに、各事象に対応する割り込み処理用スレッドが、既に割り込み処理を実行している場合には、メッセージ処理用スレッドの状態に関わらず、上記事象に対応する割り込み処理を実行せずに、対応した割り込み処理用スレッドにて他の割り込みに応じた割り込み処理が終了してから、当該割り込み処理用スレッドにて上記事象に対応する割り込み処理を実行すること
を特徴とするデータ処理方法。
【請求項２】
メッセージ処理用スレッドでの処理と、割り込み処理用スレッドでの割り込み処理との優先順位を設定できるようにしておき、
デバイスドライバが割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われている場合には、メッセージ処理用スレッドでの処理が終了するまで、或いは、メッセージ処理用スレッドでの処理よりも割り込み処理を優先するように設定が変更されるまで、割り込み処理の実行を待たせておき、
デバイスドライバが割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われていない場合には、直ぐに割り込み処理用スレッドで割り込み処理を実行すること
を特徴とする請求項１記載のデータ処理方法。
【請求項３】
割り込み処理を優先順位の異なる複数の処理に分けて、優先順位が高い処理を割り込み処理用スレッドに割り当てて実行し、優先順位が低い処理をメッセージ処理用スレッドに割り当てて実行すること
を特徴とする請求項１記載のデータ処理方法。
【請求項４】
上記デバイスドライバは、オペレーティングシステム上で複数のデバイスドライバが並行して動作することが可能な並行オブジェクトとして記述されていること
を特徴とする請求項１記載のデータ処理方法。
【請求項５】
ハードウェア制御を行うプログラムであるデバイスドライバが記録されたコンピュータ読み取り可能な記録媒体であって、
上記デバイスドライバは、
一つのメッセージ処理用スレッドと、一つ以上の割り込み処理用スレッドとを割り当てることが可能なマルチスレッドオブジェクトとして記述され、
当該デバイスドライバが他のオブジェクトから入力されたメッセージに基づく処理を行う場合には、当該処理をメッセージ処理用スレッドに割り当てて実行し、
当該デバイスドライバに対して割り込みを要求する事象が発生したときに、各事象に対応する割り込み処理用スレッドが、既に割り込み処理を実行している場合には、メッセージ処理用スレッドの状態に関わらず、上記事象に対応する割り込み処理を実行せずに、対応した割り込み処理用スレッドにて他の割り込みに応じた割り込み処理が終了してから、当該割り込み処理用スレッドにて上記事象に対応する割り込み処理を実行すること
を特徴とする記録媒体。
【請求項６】
上記デバイスドライバは、
メッセージ処理用スレッドでの処理と、割り込み処理用スレッドでの割り込み処理との優先順位を設定できるようになされており、
割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われている場合には、メッセージ処理用スレッドでの処理が終了するまで、或いは、メッセージ処理用スレッドでの処理よりも割り込み処理を優先するように設定が変更されるまで、割り込み処理の実行を待たせておき、
割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われていない場合には、直ぐに割り込み処理用スレッドで割り込み処理を実行すること
を特徴とする請求項５記載の記録媒体。
【請求項７】
上記デバイスドライバは、割り込み処理を優先順位の異なる複数の処理に分けて、優先順位が高い処理を割り込み処理用スレッドに割り当てて実行し、優先順位が低い処理をメッセージ処理用スレッドに割り当てて実行すること
を特徴とする請求項５記載の記録媒体。
【請求項８】
上記デバイスドライバは、オペレーティングシステム上で複数のデバイスドライバが並行して動作することが可能な並行オブジェクトとして記述されていること
を特徴とする請求項５記載の記録媒体。
【請求項９】
ハードウェア制御を行うプログラムであるデバイスドライバが記録された記録媒体を備え、当該記録媒体から上記デバイスドライバを読み取ることが可能なデータ処理装置であって、
上記デバイスドライバは、
一つのメッセージ処理用スレッドと、一つ以上の割り込み処理用スレッドとを割り当てることが可能なマルチスレッドオブジェクトとして記述され、
当該デバイスドライバが他のオブジェクトから入力されたメッセージに基づく処理を行う場合には、当該処理をメッセージ処理用スレッドに割り当てて実行し、
当該デバイスドライバに対して割り込みを要求する事象が発生したときに、各事象に対応する割り込み処理用スレッドが、既に割り込み処理を実行している場合には、メッセージ処理用スレッドの状態に関わらず、上記事象に対応する割り込み処理を実行せずに、対応した割り込み処理用スレッドにて他の割り込みに応じた割り込み処理が終了してから、当該割り込み処理用スレッドにて上記事象に対応する割り込み処理を実行すること
を特徴とするデータ処理装置。
【請求項１０】
上記デバイスドライバは、
メッセージ処理用スレッドでの処理と、割り込み処理用スレッドでの割り込み処理との優先順位を設定できるようになされており、
割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われている場合には、メッセージ処理用スレッドでの処理が終了するまで、或いは、メッセージ処理用スレッドでの処理よりも割り込み処理を優先するように設定が変更されるまで、割り込み処理の実行を待たせておき、
割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われていない場合には、直ぐに割り込み処理用スレッドで割り込み処理を実行すること
を特徴とする請求項９記載のデータ処理装置。
【請求項１１】
上記デバイスドライバは、割り込み処理を優先順位の異なる複数の処理に分けて、優先順位が高い処理を割り込み処理用スレッドに割り当てて実行し、優先順位が低い処理をメッセージ処理用スレッドに割り当てて実行すること
を特徴とする請求項９記載のデータ処理装置。
【請求項１２】
上記デバイスドライバは、オペレーティングシステム上で複数のデバイスドライバが並行して動作することが可能な並行オブジェクトとして記述されていること
を特徴とする請求項９記載のデータ処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、オブジェクト指向オペレーティングシステムにおけるデバイス制御を実現するデータ処理方法に関する。また、そのようなデータ処理方法を実現するプログラムが記録された記録媒体、並びにそのような記録媒体を備えたデータ処理装置に関する。
【０００２】
【従来の技術】
従来、各種ハードウェアの制御を行うプログラムであるデバイスドライバは、図８に示すように、オペレーティングシステムの一部として実現される。すなわち、オペレーティングシステムは、デバイスドライバを利用するクライアントからの要求（request）があった場合、又は、ハードウェアからの割り込み（hardware interrupt）が生じた場合、予め登録されているデバイスドライバテーブルを検索して、それらの要求や割り込みに適応するデバイスドライバを探し出し、当該デバイスドライバをファンクションコール（function call）により呼び出して実行する。
【０００３】
なお、クライアントからの要求は、システムコール（system call）によってなされる。また、ハードウェアからの割り込みは、オペレーティングシステムのカーネルのスレッドを呼び出すことによりなされる（invoke kernel thread）。
【０００４】
このような方式には以下のような問題点が存在する。
【０００５】
（１）デバイスドライバがオペレーティングシステムのカーネルの一部として実現されるため、汎用性が低くデバイスドライバの取り替えが困難である。
【０００６】
（２）デバイスドライバがオペレーティングシステムのカーネルと同様の権限を持って実行されるため、デバイスドライバのエラーがオペレーティングシステム全体に影響を与える。
【０００７】
（３）各デバイスドライバにおいて割り込み制御等を行うため、デバイスドライバを作成するプログラマは、システム全体を知っておく必要や、デバイスドライバが他に与える影響を考える必要がある。
【０００８】
（４）デバイスドライバがオペレーティングシステムのカーネルの一部として実現されるため、デバイスドライバのプログラミングスタイルは、アプリケーションプログラム等のプログラミングスタイルとは、大幅に異なるものとなる。このため、デバイスドライバは、デバイスドライバの記述に使用されるプログラミングスタイルについて熟練したプログラマでなければ、作成が困難である。
【０００９】
以上のような従来のデバイスドライバの実現方式の問題点を解決する方法として、オブジェクト指向を適用してデバイスドライバを記述する方法が知られている。オブジェクト指向を適用してデバイスドライバを記述する際は、例えば、図９に示すように、デバイスドライバをオペレーティングシステムの外で、アプリケーションプログラムと同様に、並行オブジェクトとして記述する。
【００１０】
ここで、並行オブジェクトとは、プログラムの各機能をオブジェクトとしてモジュール化し、オペレーティングシステムが扱う実行実体としたもののことである。すなわち、並行オブジェクトは、オペレーティングシステムによってスケジューリングされたり、或いは相互に通信する際の単位となる。換言すれば、各オブジェクトは、資源管理や排他実行の単位となる。これにより、プログラマは、他のオブジェクト内の実装を知ることなくオブジェクトを作成することが可能となり、各オブジェクト内部の実装は排他制御などを考慮しなくても良くなる。
【００１１】
この方式は以下のような特徴を持つ。
【００１２】
（１）図中「request」として示すように、クライアントからデバイスドライバへの要求を、クライアントから、並行オブジェクトとして記述されたデバイスドライバへ、オブジェクトに対するメッセージとして配送する。また、図中「interrupt」として示すように、割り込み要求も、オペレーティングシステムから、並行オブジェクトとして記述されたデバイスドライバへ、オブジェクトに対するメッセージとして配送する。
【００１３】
（２）各デバイスドライバが単一スレッドで動作するようにしておき、割り込みマスクの制御はデバイスドライバ単位で行う。すなわち、デバイスドライバが動作中は、そのデバイスドライバが扱う割り込みは受け付けない。したがって、プログラマは、割り込み発生時の排他制御等を考慮してデバイスドライバを記述するような必要がない。
【００１４】
並行オブジェクトとして記述されたデバイスドライバは、上述のような２つの特徴を備えていることから、アプリケーションプログラムと同様に作成することが可能となる。また、デバイスドライバがオペレーティングシステムの外側で実現されるので、デバイスドライバの取り替えが容易となる。また、インタフェースの変更も容易に可能となる。また、デバイスドライバのエラーがオペレーティングシステム全体に影響を与えるようなことがなくなり、オペレーティングシステムをより安定に動作させることが可能となる。
【００１５】
このように、デバイスドライバをアプリケーションプログラムと同様な並行オブジェクトとして記述することにより、図８に示したようにデバイスドライバをオペレーティングシステムの一部として実現したときに生じる問題点を解決することができる。
【００１６】
【発明が解決しようとする課題】
図９に示したように、デバイスドライバを並行オブジェクトとして記述した方式では、デバイスドライバが動いている間は、デバイスドライバが割り込みを受け付けない状態となる。なお、以下の説明では、デバイスドライバの状態を表すときに、割り込みマスクという表現を使う。すなわち、デバイスドライバが割り込みを受け付けない状態のことを「割り込みマスクが閉じている」と表現し、デバイスドライバが割り込みを受け付ける状態のことを「割り込みマスクが開いている」と表現する。
【００１７】
そして、図９の例では、デバイスドライバが動いている間は割り込みマスクが閉じた状態となるため、デバイスドライバによる処理に時間がかかる処理（例えばデータのコピー等）が含まれる場合、割り込み遅延が大きくなってしまうという問題点がある。
【００１８】
すなわち、各デバイスドライバは単一スレッドで動作し、デバイスドライバの動作中は割り込みは受け付けない。このため、従来、割り込み遅延を短縮するには、各デバイスドライバのメソッドを短くするしかなかった。したがって、従来、デバイスドライバを並行オブジェクトとして記述するにあたって、厳しい遅延制約を持つデバイスドライバを記述することは困難であった。
【００１９】
本発明は、以上のような従来の実情に鑑みて提案されたものであり、オブジェクト指向を適用したデバイスドライバをベースにし、その利点を失う事なく、割り込み遅延を短縮することが可能なデータ処理方法を提供することを目的としている。また、そのようなデータ処理方法を実現するプログラムが記録された記録媒体、並びにそのような記録媒体を備えたデータ処理装置を提供することも目的としている。
【００２０】
【課題を解決するための手段】
本発明に係るデータ処理方法では、ハードウェア制御を行うデバイスドライバを、一つのメッセージ処理用スレッドと、各割り込み処理に対応した割り込み処理専用スレッドとを割り当てることが可能なマルチスレッドオブジェクトとして記述する。そして、デバイスドライバが他のオブジェクトから入力されたメッセージに基づく処理を行う場合には、当該処理をメッセージ処理用スレッドに割り当てて実行する。また、デバイスドライバに対して割り込みを要求する事象が発生したときに、各事象に対応する割り込み処理用スレッドが、既に割り込み処理を実行している場合には、メッセージ処理用スレッドの状態に関わらず、上記事象に対応する割り込み処理を実行せずに、対応した割り込み処理用スレッドにて他の割り込みに応じた割り込み処理が終了してから、当該割り込み処理用スレッドにて上記事象に対応する割り込み処理を実行する。
【００２１】
なお、上記データ処理方法では、共有データのアクセスの排他制御が必要な場合などの同期のために、メッセージ処理用スレッドでの処理と、割り込み処理用スレッドでの割り込み処理との優先順位を設定できるようにしておくことが好ましい。このときは、デバイスドライバが割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われている場合には、メッセージ処理用スレッドでの処理が終了するまで、或いは、メッセージ処理用スレッドでの処理よりも割り込み処理を優先するように設定が変更されるまで、割り込み処理の実行を待たせておく。また、デバイスドライバが割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われていない場合には、直ぐに割り込み処理用スレッドで割り込み処理を実行する。
【００２２】
また、上記データ処理方法では、割り込み処理を優先順位の異なる複数の処理に分けて、優先順位が高い処理を割り込み処理用スレッドに割り当てて実行し、優先順位が低い処理をメッセージ処理用スレッドに割り当てて実行することにより、割り込み処理用スレッドの実行時間を減らし、割り込み遅延を減らす。
【００２３】
以上のような本発明に係るデータ処理方法では、デバイスドライバをマルチスレッドオブジェクトとして記述しているので、デバイスドライバが何らかの処理を行っていても、当該処理がメッセージ処理用スレッドに割り当てられて実行されている場合には、割り込み処理用スレッドによって割り込みを受け付けることができる。
【００２４】
また、本発明に係る記録媒体は、ハードウェア制御を行うプログラムであるデバイスドライバが記録されたコンピュータ読み取り可能な記録媒体である。そして、上記デバイスドライバは、一つのメッセージ処理用スレッドと、一つ以上の割り込み処理用スレッドとを割り当てることが可能なマルチスレッドオブジェクトとして記述される。また、このデバイスドライバは、当該デバイスドライバが他のオブジェクトから入力されたメッセージに基づく処理を行う場合には、当該処理をメッセージ処理用スレッドに割り当てて実行する。また、このデバイスドライバは、当該デバイスドライバに対して割り込みを要求する事象が発生したときに、各事象に対応する割り込み処理用スレッドが、既に割り込み処理を実行している場合には、メッセージ処理用スレッドの状態に関わらず、上記事象に対応する割り込み処理を実行せずに、対応した割り込み処理用スレッドにて他の割り込みに応じた割り込み処理が終了してから、当該割り込み処理用スレッドにて上記事象に対応する割り込み処理を実行する。
【００２５】
なお、上記デバイスドライバは、メッセージ処理用スレッドでの処理と、割り込み処理用スレッドでの割り込み処理との優先順位を設定できるようになされていることが好ましい。ここで、デバイスドライバは、割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われている場合には、メッセージ処理用スレッドでの処理が終了するまで、或いは、メッセージ処理用スレッドでの処理よりも割り込み処理を優先するように設定が変更されるまで、割り込み処理の実行を待たせておく。また、割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われていない場合には、直ぐに割り込み処理用スレッドで割り込み処理を実行する。
【００２６】
また、上記デバイスドライバは、割り込み処理を優先順位の異なる複数の処理に分けて、優先順位が高い処理を割り込み処理用スレッドに割り当てて実行し、優先順位が低い処理をメッセージ処理用スレッドに割り当てて実行するものであってもよい。
【００２７】
以上のような本発明に係る記録媒体において、当該記録媒体に記録されたデバイスドライバは、マルチスレッドオブジェクトとして記述されているので、デバイスドライバが何らかの処理を行っていても、当該処理がメッセージ処理用スレッドに割り当てられて実行されている場合には、割り込み処理用スレッドによって割り込みを受け付けることができる。
【００２８】
また、本発明に係るデータ処理装置は、ハードウェア制御を行うプログラムであるデバイスドライバが記録された記録媒体を備え、当該記録媒体から上記デバイスドライバを読み取ることが可能なデータ処理装置である。そして、上記デバイスドライバは、一つのメッセージ処理用スレッドと、一つ以上の割り込み処理用スレッドとを割り当てることが可能なマルチスレッドオブジェクトとして記述される。また、このデバイスドライバは、当該デバイスドライバが他のオブジェクトから入力されたメッセージに基づく処理を行う場合には、当該処理をメッセージ処理用スレッドに割り当てて実行する。また、このデバイスドライバは、当該デバイスドライバに対して割り込みを要求する事象が発生したときに、全ての割り込み処理用スレッドが他の割り込みに応じた割り込み処理を実行している場合には、メッセージ処理用スレッドの状態に関わらず、上記事象に対応する割り込み処理を実行せずに、いずれかの割り込み処理用スレッドにて他の割り込みに応じた割り込み処理が終了してから、当該割り込み処理用スレッドにて上記事象に対応する割り込み処理を実行する。
【００２９】
なお、上記デバイスドライバは、メッセージ処理用スレッドでの処理と、割り込み処理用スレッドでの割り込み処理との優先順位を設定できるようになされていることが好ましい。ここで、デバイスドライバは、割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われている場合には、メッセージ処理用スレッドでの処理が終了するまで、或いは、メッセージ処理用スレッドでの処理よりも割り込み処理を優先するように設定が変更されるまで、割り込み処理の実行を待たせておく。また、割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われていない場合には、直ぐに割り込み処理用スレッドで割り込み処理を実行する。
【００３０】
また、上記デバイスドライバは、割り込み処理を優先順位の異なる複数の処理に分けて、優先順位が高い処理を割り込み処理用スレッドに割り当てて実行し、優先順位が低い処理をメッセージ処理用スレッドに割り当てて実行するものであってもよい。
【００３１】
以上のような本発明に係るデータ処理装置において、記録媒体に記録されたデバイスドライバは、マルチスレッドオブジェクトとして記述されているので、デバイスドライバが何らかの処理を行っていても、当該処理がメッセージ処理用スレッドに割り当てられて実行されている場合には、割り込み処理用スレッドによって割り込みを受け付けることができる。
【００３２】
【発明の実施の形態】
以下、本発明の一実施形態について、図面を参照しながら詳細に説明する。
【００３３】
１．ハードウェア環境
まず、本発明が適用されるハードウェア構成の一例について、図１を参照して説明する。なお、ここでは、本発明の実施の形態の一例として、テレビ装置に本発明を適用した例を挙げるが、当然の事ながら、本発明は、その他のデータ処理装置にも適用可能である。すなわち、本発明は、各種ハードウェアの制御をデバイスドライバによって行うデータ処理装置に広く適用可能であり、例えば、テレビ装置以外のオーディオ・ビジュアル機器（いわゆるＡＶ機器）や、各種の事務機器や、一般のコンピュータ装置等にも適用可能である。
【００３４】
本発明が適用されたデータ処理装置である図１に示すテレビ装置は、アンテナ又はケーブル等によって放送局からの信号を受信し、当該信号に基づいて、ブラウン管又は液晶等の画像表示装置に映像を表示すると共にスピーカから音声を出力する。
【００３５】
このテレビ装置は、通常のテレビ機能を備えているだけでなく、外部からプログラムやデータを受けとることが可能となっており、図１に示すように、バス／ＩＯブリッジ１を介してバス２に接続されたテレビ機能部３と、バス／メモリブリッジ４を介してバス２に接続されたプロセッサ５と、バス／メモリブリッジ４を介してプロセッサ５に接続されたＲＯＭ（Read Only Memory）６及びＲＡＭ（Random Access Memory）７と、バス２に接続された操作パネル８、外部記憶装置９及び通信装置１０とを備えている。
【００３６】
テレビ機能部３は、アンテナ又はケーブル等によって受信した信号に基づいて、映像や音声を再生する機能を備えている。このテレビ機能部３は、バス／ＩＯブリッジ１を介してバス２に接続されており、これにより、他の部分との信号のやり取りが可能となっている。
【００３７】
プロセッサ５は、このテレビ装置の各部の制御を行うものであり、バス／メモリブリッジ４を介してバス２に接続されている。また、プロセッサ５には、バス／メモリブリッジ４を介してＲＯＭ６及びＲＡＭ７が接続されている。
【００３８】
ＲＯＭ６は、プロセッサ５による制御を行うためのオペレーティングシステムやデバイスドライバやアプリケーションプログラム等を記憶している。ここで、オペレーティングシステムは、オブジェクト指向が適用されてなるオブジェクト指向型オペレーティングシステムであり、デバイスドライバやアプリケーションプログラムは、並行オブジェクトとして動作する。
【００３９】
ＲＡＭ７は、プロセッサ５のワークエリアとして使われる。すなわち、プロセッサ５は、ＲＯＭ６に記憶されているオペレーティングシステムやデバイスドライバやアプリケーションプログラム等を、ＲＡＭ７をワークエリアとして使用して実行することにより、このテレビ装置を構成する各部を制御する。
【００４０】
操作パネル８は、ユーザからの操作入力を受け付けるための入力装置であり、この操作パネル８から、例えば、テレビのチャンネルやボリューム等の切り換えを指示する信号が入力される。この操作パネル８は、具体的には、各種信号を入力するための複数のボタンを備えた入力装置や、いわゆるマウスと称されるようなポインティングデバイス等からなる。この操作パネル８によって入力された信号は、バス２及びバス／メモリブリッジ４を介してプロセッサ５に入力される。そして、プロセッサ５は、操作パネル８によって入力された信号に基づいて、所定の演算処理を行って各部を制御する。
【００４１】
外部記憶装置９は、例えばハードディスク装置からなり、画像データ、制御データ、又は外部から通信装置１０を介してダウンロードされたアプリケーションプログラム等を記録するのに使われる。また、通信装置１０は、外部との間でデータ通信を行うための入出力部であり、例えばモデムやターミナルアダプター等からなる。
【００４２】
このテレビ装置は、テレビ機能部３によって提供される通常のテレビ機能を備えているだけでなく、通信装置１０を介して、外部からプログラムやデータを受け取ることが可能となっている。例えば、このテレビ装置では、オペレーティングシステムやデバイスドライバのバージョンアップを行う際に、外部のネットワークから通信装置１０を介して新規ソフトウェアモジュールを受け取り、これにより、オペレーティングシステムやデバイスドライバのバージョンアップを行うことが可能となっている。
【００４３】
また、このテレビ装置では、プロセッサ５によって、ＲＯＭ６に記憶されているオペレーティングシステムやデバイスドライバを実行するとともに、オペレーティングシステム上で、ＲＯＭ６や外部記憶装置９に記憶されているアプリケーションプログラムを実行することにより、各部の制御を行う。すなわち、このテレビ装置は、オペレーティングシステムやデバイスドライバが記録されたコンピュータ読み取り可能な記録媒体として、ＲＯＭ６を備えている。なお、オペレーティングシステムやデバイスドライバは、ＲＡＭ７や外部記憶装置９に記録しておくようにしてもよい。特に、オペレーティングシステムやデバイスドライバの書き換えを行えるようにしたい場合には、ＲＡＭ７や外部記憶装置９に記録しておいたほうが好ましい。
【００４４】
２．ソフトウェア環境
つぎに、上記テレビ装置におけるソフトウェア環境について説明する。
【００４５】
２−１  オペレーティングシステム
上記テレビ装置で使用されるオペレーティングシステムは、オブジェクト指向型オペレーティングシステムである。そして、このオペレーティングシステム上で、例えば、テレビ機能部３に動画像を表示するためのアプリケーションプログラムや、操作パネル８を制御するためのグラフィカル・ユーザ・インターフェース（ＧＵＩ）を実現するアプリケーションプログラムが実行される。
【００４６】
また、このオペレーティングシステムは、複数のプログラム実行環境を同時に提供することが可能となっている。以下の説明では、これらのプログラム実行環境のことをメタスペースと呼ぶ。具体的には、このオペレーティングシステムによって提供されるメタスペースには、例えば、デバイスドライバが実行されるメタスペース（以下、mDriveメタスペースと称する。）と、手続き型のアプリケーションプログラム（例えば、テレビ機能部３に動画像を表示するためのアプリケーションプログラム）が実行されるメタスペースと、オブジェクト指向型のアプリケーションプログラム（例えば、操作パネル８を制御するためのグラフィカル・ユーザ・インターフェースを実現するアプリケーションプログラム）が実行されるメタスペースとがある。
【００４７】
ここで、mDriveメタスペースは、割り込みを扱うために、割り込みについての処理を扱うオブジェクトである割り込みハンドラを登録する機構や、割り込みが発生したときに割り込みハンドラを呼び出す機構や、割り込みマスクを制御する機構などを実現する機能を提供する。また、mDriveメタスペースは、デバイスドライバが並行オブジェクトとして動作するための基本的なメッセージ通信機能やメモリ管理機能も提供する。
【００４８】
そして、デバイスドライバは、mDriveメタスペースのＡＰＩ(Application Program Interface)を通して、mDriveメタスペースで提供される機能を用いることで動作する。すなわち、デバイスドライバは、他のデバイスドライバの動作に影響を与えるようなこと（例えば、割り込みマスクの制御等）を行う場合にも、デバイスドライバ間で直接に制御し合うのではなく、必ずオペレーティングシステムのＡＰＩを通して行うようにする。これにより、デバイスドライバ間で直接に制御し合うことに起因してデバイスドライバが誤動作してしまうようなことが無くなり、より安定にデバイスドライバを動作させることが可能となる。
【００４９】
なお、このようにデバイスドライバの制御を必ずオペレーティングシステムのＡＰＩを通して行うようにすれば、各デバイスドライバがそれぞれ独立したモジュールとなるため、個々のデバイスドライバを動的に変更するようなことも、比較的に容易に実現可能となる。したがって、例えば、ネットワークを介してプログラムモジュールをダウンロードすることにより、デバイスドライバを動的に変更可能とするようなことも、容易に実現可能となる。
【００５０】
２−２  デバイスドライバの基本的な実行モデル
以上のようなオペレーティングシステム上で実行されるデバイスドライバについて、その基本的な実行モデルについて説明する。
【００５１】
図２にデバイスドライバの基本的な実行モデルの一例を示す。図２に示すように、デバイスドライバは、クライアントからのメッセージによって起こされ、当該メッセージに基づいてハードウェア制御を行い、当該ハードウェア制御が完了したら終了する。ここで、クライアントとなるのは、デバイスドライバを利用するアプリケーションプログラム等である。なお、以下の説明では、デバイスドライバがクライアントからのメッセージに基づいて行う処理のことを「メッセージ処理」と称する。
【００５２】
また、デバイスドライバは、デバイスドライバに対して割り込みを要求する事象が発生したとき、すなわちハードウェアからの割り込み要求があったときに、当該割り込み要求に基づいて割り込み処理を行う。
【００５３】
具体的には、先ず、デバイスドライバに対して割り込みを要求する事象が発生したときに、他のアプリケーションプログラム等で実行中のスレッドがある場合には、当該スレッドが中断される。そして、割り込みハンドラが起こされて、割り込みハンドラによって割り込み処理が行われる。このとき、割り込みハンドラは、必要ならばクライアントとの間でメッセージのやり取りを行う。そして、割り込みハンドラによる割り込み処理が終了したら、中断されていたアプリケーションプログラムのスレッドを再開する。このとき、実行した割り込み処理によっては、中断されていたスレッドを再開するのではなく、クライアントのメソッドを起こすようにしてもよい。
【００５４】
なお、割り込みハンドラは、各デバイスドライバの初期化メソッドを実行するときに、各デバイスドライバに対して動的に登録される。また、デバイスドライバに対して割り込みを要求する事象が発生したときに、割り込みハンドラに対して、特別な非同期メッセージとして、割り込みを要求するメッセージが送られる。これにより、上述のように割り込みハンドラが起こされて、割り込み処理が行われる。また、割り込みハンドラのメソッドは、他のオブジェクトのメソッドと同様に、メッセージ送信によって起こされるメソッドとして記述される。また、割り込みハンドラのメソッドに対してどのようなメッセージが渡されるかについては、各デバイスドライバの初期化メソッドを実行して割り込みハンドラを各デバイスドライバに対して動的に登録する際に、mDriveメタスペースに登録しておく。
【００５５】
２−３  デバイスドライバの割り込みマスク
デバイスドライバの割り込みマスクがどのように制御されるかについて説明する。なお、以下の説明では、具体例として下記に示すようなシナリオを挙げる。
【００５６】
（１）先ず、デバイスドライバに対するクライアントとなるオブジェクト（以下、クライアントオブジェクトＡと称する。）から、デバイスドライバへ、メッセージ「RequestＡ」が入力される。そして、メッセージ「RequestＡ」を受け取ったデバイスドライバは、当該メッセージ「RequestＡ」に基づいて、ハードウェア制御を伴う所定のメッセージ処理（以下、メッセージ処理Ａと称する。）を実行する。
【００５７】
（２）デバイスドライバは、デバイスドライバ側での処理が完了したら、ハードウェア側での処理状況に関わらず、メッセージ処理Ａを行っていたスレッドを開放する。このとき、デバイスドライバは、ハードウェア側での処理が完了したことを示す割り込みがハードウェアから入ってくるまで、メッセージ「RequestＡ」に対する返答を保留したままとしておく。
【００５８】
（３）次に、当該デバイスドライバに対するクライアントとなる他のオブジェクト（以下、クライアントオブジェクトＢと称する。）から、デバイスドライバへ、メッセージ「RequestＢ」が入力される。そして、メッセージ「RequestＢ」を受け取ったデバイスドライバは、当該メッセージ「RequestＢ」に基づいて、ハードウェア制御を伴う所定のメッセージ処理（以下、メッセージ処理Ｂと称する。）を実行する。
【００５９】
（４）そして、メッセージ処理Ｂを行っている最中に、メッセージ「RequestＡ」に基づいて行われていたハードウェア側の処理が完了したとする。これは、デバイスドライバに対して割り込みを要求する事象であり、ハードウェア側の処理の完了に伴う所定の割り込み処理を行うように要求するメッセージ（以下、割り込みメッセージと称する。）が、ハードウェアからオペレーティングシステムを介して、デバイスドライバに入力される。
【００６０】
（５）割り込みメッセージを受け取ったデバイスドライバは、割り込みハンドラによって、当該割り込みメッセージに応じた所定の割り込み処理を行い、当該割り込み処理が終了したら、クライアントオブジェクトＡへメッセージ「RequestＡ」に対する返答を送る。
【００６１】
なお、割り込み遅延（interrupt latency）とは、割り込みが起きてから、その割り込みに対する割り込みハンドラが起こされるまでの時間を指す。そして、本発明では、この割り込み遅延の短縮を図っている。なお、デバイスドライバが割り込みを受け付けないようになされているとき、すなわち割り込みマスクが閉じているときは、割り込み処理を実行できない。したがって、一般に、最大割り込み遅延は、割り込みマスクが連続的に閉じている時間の最長時間に一致する。
【００６２】
２−３−１  従来技術での割り込みマスク
本発明の実施の形態の説明に先立って、従来のデバイスドライバで割り込みマスクがどのように制御されるかについて説明する。
【００６３】
図３に、従来技術によりデバイスドライバを並行オブジェクトとして記述した場合の割り込みマスクの制御例を示す。このデバイスドライバは、単一スレッドオブジェクトとして記述される。そして、割り込みマスクは、オペレーティングシステムによるスレッドの切り換え、すなわちコンテキストスイッチによって制御される。
【００６４】
すなわち、デバイスドライバが起動されておらず、当該デバイスドライバのスレッドがあいている場合には、割り込みマスクが開いていることとなり、また、デバイスドライバが起動されており、当該デバイスドライバのスレッドで何らかの処理が行われている場合には、割り込みマスクが閉じていることとなる。
【００６５】
換言すれば、従来のデバイスドライバでは、ハードウェアからの割り込みに基づく割り込み処理を行っているときだけでなく、他のオブジェクトからのメッセージに基づくメッセージ処理（例えば、上述のシナリオにおけるメッセージ処理Ａやメッセージ処理Ｂ）を行っているときにも、割り込みマスクが閉じた状態となる。
【００６６】
したがって、図３に示すように、メッセージ処理Ｂを行っている最中に起きた割り込みは、当該メッセージ処理Ｂが終了するまで待たされる。そして、メッセージ処理Ｂが終了してから、割り込みハンドラが起動されて、割り込みメッセージに応じた所定の割り込み処理が実行されることとなる。
【００６７】
このように、従来のデバイスドライバでは、他のオブジェクトからのメッセージに基づくメッセージ処理を行っているときも割り込みマスクが閉じることとなるため、一般に割り込み遅延が長くなってしまう。特に、メッセージ処理に長い時間を要するような場合には、割り込み遅延が特に長くなってしまい、割り込み遅延の制約が厳しいハードウェアの制御を正しく行うことができず、割り込み処理に失敗する可能性もある。すなわち、従来のデバイスドライバでは、割り込み遅延時間が長くなってしまい、ハードウェア制御を正しく行うことはできないようなケースもあり得た。
【００６８】
そして、従来のデバイスドライバでは、割り込み遅延時間を短縮するためには、デバイスドライバに含まれる各メソッドをできる限りを小さく記述するか、或いは、ハードウェア制御に必須ではない部分をできるだけデバイスドライバ本体から切り離すようにするしかなかった。このため、従来のデバイスドライバでは、割り込み遅延時間の短縮には限界があった。
【００６９】
なお、以下の説明において、本例のように、デバイスドライバを単一スレッドオブジェクトとして記述するプログラミングスタイルのことを「タイプ１」と称する。
【００７０】
２−３−２  本発明を適用したときの割り込みマスク（その１）
つぎに、本発明を適応した場合について説明する。本例では、デバイスドライバをマルチスレッドオブジェクトとして記述する。なお、以下の説明において、本例のようなプログラミングスタイルのことを「タイプ２」と称する。
【００７１】
図４に、本例における割り込みマスクの制御例を示す。なお、図４は上述のシナリオのときの実行モデルを示している。図４に示すように、本例では、デバイスドライバを、マルチスレッドオブジェクトとして記述し、デバイスドライバに対して、メッセージ処理用スレッドと、割り込み処理用スレッドとを割り当てる。
【００７２】
割り込み処理用スレッドは、割り込み処理を行うスレッドであり、割り込みハンドラを登録したときに、新たに登録した割り込みハンドラ専用のスレッドとして割り当てられる。一方、メッセージ処理用スレッドは、メッセージ処理を行うスレッドであり、各デバイスドライバに対して一つだけ割り当てられる。このように、本例では、割り込み処理に割り当てられるスレッドと、メッセージ処理に割り当てられるスレッドとが、異なるスレッドとされる。
【００７３】
そして、割り込みマスクは、割り込みハンドラが動いているときのみ閉じるようにする。すなわち、デバイスドライバに対して割り込みを要求する事象が発生したときに、当該デバイスドライバの割り込み処理用スレッドが他の割り込みに応じた割り込み処理を実行している場合には、割り込み処理用スレッドにあきができるまで割り込みを待たせておく。一方、デバイスドライバに対して割り込みを要求する事象が発生したときに、割り込み処理用スレッドが他の割り込みに応じた割り込み処理を行っていない場合には、割り込みを受け付けるようにする。
【００７４】
これにより、メッセージ処理用スレッドでメッセージ処理が行われていても、割り込みを受けることが可能となり、割り込み遅延時間が短縮される。すなわち、本例では、並行オブジェクトとしてデバイスドライバを記述したときの利点を生かしつつ、割り込み遅延時間の短縮を図ることができる。
【００７５】
ところで、メッセージ処理の最中に割り込みが発生してハードウェア制御を行わなくてはならないような場合、メッセージ処理を行っている最中に割り込みハンドラが同時に動くことは許されないので、メッセージ処理と割り込み処理との間で同期を取る必要がある。換言すれば、メッセージ処理を行っているときに割り込みが生じたときにも、割り込みハンドラによる割り込み処理が正常に行われるように、排他制御を行う必要がある。
【００７６】
そこで、本例では、排他制御が必要な処理の前後で、メッセージ処理用のスレッドが所定のＡＰＩを用いて割り込みマスクの開閉を制御し、その間で割り込みハンドラを抑制することにより、割り込みハンドラによる割り込み処理が正常に行われるように排他制御を行う。
【００７７】
なお、このような排他制御を実現するＡＰＩを用いて制御される割り込みマスクは、各デバイスドライバが扱う割り込みのみとする。このため、あるデバイスドライバの割り込みマスクを制御することにより、他のデバイスドライバの動作が乱されるようなことはない。
【００７８】
つぎに、以上のようなタイプ２のプログラミングスタイルでの実行モデルについて、図４を参照して具体的に説明する。
【００７９】
図４において、メソッド「BlockInterrupt()」及びメソッド「AllowInterrupt()」は、所定のＡＰＩとして予めmDriveメタスペースで提供されているメソッドである。そして、メソッド「BlockInterrupt()」は、割り込みマスクを制御することにより、割り込み処理よりもメッセージ処理を優先して実行するように設定するメソッドである。また、メソッド「AllowInterrupt()」は、割り込みが発生したときに、メッセージ処理よりも割り込み処理を優先して実行するように設定するメソッドである。
【００８０】
そして、図４の例では、先ず、デバイスドライバに対してメッセージ「RequestＡ」が入力され、当該メッセージ「RequestＡ」に基づくメッセージ処理Ａが起動される（invoked by message passing）。ここで、メッセージ処理Ａは、メッセージ処理用スレッドで実行される。このメッセージ処理Ａにおいて、メソッド「BlockInterrupt()」が呼び出され、その後、メソッド「AllowInterrupt()」が呼び出されるまでの期間（図中の斜線部分）は、割り込み処理よりもメッセージ処理を優先して実行するように設定された期間である。したがって、この期間中にデバイスドライバが割り込みを受け付けたとしても、その割り込みに応じた割り込み処理の実行は待たされることとなる。
【００８１】
そして、デバイスドライバは、デバイスドライバ側での処理が完了したら、ハードウェア側での処理状況に関わらず、メソッド「Exit()」を実行し、メッセージ処理用スレッドを開放する。このとき、デバイスドライバは、ハードウェアでの処理が完了したことを示す割り込みがハードウェアから入ってくるまで、メッセージ「RequestＡ」に対する返答を保留したままとしておく。
【００８２】
次に、デバイスドライバに対してメッセージ「RequestＢ」が入力され、当該メッセージ「RequestＢ」に基づくメッセージ処理Ｂが起動される（invoked by message passing）。ここで、メッセージ処理Ｂは、メッセージ処理用スレッドで実行される。このメッセージ処理Ｂにおいても、メソッド「BlockInterrupt()」が呼び出され、その後、メソッド「AllowInterrupt()」が呼び出されるまでの期間（図中の斜線部分）は、割り込み処理よりもメッセージ処理を優先して実行するように設定された期間である。したがって、この期間中にデバイスドライバが割り込みを受け付けたとしても、その割り込みに応じた割り込み処理の実行は待たされることとなる。
【００８３】
そして、メッセージ処理Ｂを行っている最中に、メッセージ「RequestＡ」に基づいて行われていたハードウェア側の処理が完了したとする。これは、デバイスドライバに対して割り込みを要求する事象であり、ハードウェア側の処理の完了に伴う所定の割り込み処理を行うように要求する割り込みメッセージ「Interrupt」が、ハードウェアからオペレーティングシステムを介して、デバイスドライバに入力される。
【００８４】
しかしながら、図４の例において、割り込みが発生した時点は、メッセージ処理Ｂにおいて、メソッド「BlockInterrupt()」が呼び出された後であって、メソッド「AllowInterrupt()」が呼び出される前である。したがって、割り込みメッセージ「Interrupt」に応じた割り込み処理の実行は待たされることとなる。すなわち、デバイスドライバが割り込みを受け付けたときに、メッセージ処理用スレッドで、割り込み処理よりも優先して実行するように設定されている処理が行われているので、割り込み処理の実行は待たされることとなる。
【００８５】
その後、メッセージ処理Ｂで、メソッド「AllowInterrupt()」が呼び出されると、メッセージ処理Ｂが中断されて（suspended）、メッセージ処理用スレッドから割り込み処理用スレッドにコンテキストスイッチし、割り込みメッセージ「Interrupt」に対応した割り込み処理が起動される（invoked for interrupt handling）。ここで、割り込み処理は、割り込み処理用スレッドで実行される。このように、本例では、割り込み遅延（interrupt latency）は、割り込みが発生したときから、メッセージ処理Ｂでメソッド「AllowInterrupt()」が呼び出されて割り込みが可能となって割り込み処理が起動されるまでとなる。
【００８６】
そして、デバイスドライバは、割り込みハンドラによって、割り込みメッセージ「Interrupt」に応じた所定の割り込み処理を行い、当該割り込み処理の結果として、メッセージ「RequestＡ」に対する返答を送出する（Reply for RequestＡ）。
【００８７】
その後、割り込み処理が終了したら、メソッド「ExitFromInterrupt()」を実行し、割り込み処理用スレッドを開放する。そして、これに伴って割り込み処理用スレッドからメッセージ処理用スレッドにコンテキストスイッチし、中断されていたメッセージ処理Ｂが再開される（resumed）。そして、メッセージ処理Ｂが終了したら、メソッド「Exit()」を実行し、メッセージ処理用スレッドを開放する。
【００８８】
以上のように、図４に示した例では、メッセージ処理Ｂの最中に割り込みマスクが開いている期間が存在するため、割り込みマスクが開いたときに、メッセージ処理Ｂが中断されて、割り込み処理が実行される。すなわち、本例では、メソッド「BlockInterrupt()」やメソッド「AllowInterrupt()」によって、各メッセージ処理において、割り込み処理に対するマスクを設定することが可能となっており、メッセージ処理が行われていたとしても、メソッド「AllowInterrupt()」によって割り込みが可能となった瞬間に割り込みハンドラが動き出すこととなる。
【００８９】
したがって、本例では、割り込みがあったときに、メッセージ処理の終了を待つことなく、割り込み処理を実行するようにすることが可能であり、これにより、割り込み遅延を短くすることができる。しかも、本例では、メッセージ処理に関しては単一スレッドで実行されるため、メッセージ処理に関しては、割り込み処理以外の処理との同期を考慮する必要がない。したがって、プログラミングが非常に容易となる。
【００９０】
以上、詳細に説明したように、タイプ２では、割り込みハンドラを登録したときに、当該割り込みハンドラ専用のスレッドとして割り込み処理用スレッドを割り当てる。そして、割り込み処理用スレッドが動いている期間を、割り込みマスクが閉じている期間とする。換言すれば、タイプ２では、メッセージ処理用スレッドが動いていたとしても、割り込み処理用スレッドが動いていなければ、割り込みを受け付けることができ、これにより、割り込み遅延時間を短縮することができる。
【００９１】
しかも、単なるマルチスレッドプログラミングとは異なり、本例では、メッセージ処理については、単一スレッドであるメッセージ処理用スレッドだけで動作するため、デバイスドライバを並行オブジェクトとして記述したときの利点が失われるようなことはない。
【００９２】
また、タイプ２において、メッセージ処理における排他制御は、割り込みハンドラによる割り込み処理スレッドでの割り込み処理に対する排他制御だけを行えばよい。したがって、本例では、排他制御を行う部分が各デバイスドライバ内で閉じることとなり、各デバイスドライバにおけるメッセージ処理と割り込み処理との同期を図るための排他制御が、他のデバイスドライバの動作に影響を与えるようなことがなくなる。そして、各デバイスドライバにおける排他制御が他のデバイスドライバの動作に影響を与えないので、例えば、デバイスドライバの動的な変更を容易に実現することも可能となる。すなわち、例えば、ネットワークを介してプログラムモジュールをダウンロードすることにより、デバイスドライバを動的に変更可能とするようなことも実現可能となる。
【００９３】
２−３−３  本発明を適用したときの割り込みマスク（その２）
つぎに、本発明を適応した場合の他の例について説明する。本例では、デバイスドライバをマルチスレッドオブジェクトとして記述するとともに、メッセージ処理用スレッドでも割り込み処理の実行を可能とする。なお、以下の説明において、本例のようなプログラミングスタイルのことを「タイプ３」と称する。
【００９４】
本発明において、一つの割り込み用スレッドの中では排他的に割り込み処理を行う。このため、タイプ２では、図５に示すように、割り込みが連続して生じたときに、先の割り込みメッセージ「InterruptＡ」に応じた割り込み処理Ａの実行に要する時間だけ、後の割り込みメッセージ「InterruptＢ」に応じた割り込み処理Ｂは待たされることとなる。タイプ３では、このようなケースをも想定して、更に割り込み遅延時間の短縮を図るようにしている。
【００９５】
具体的には、タイプ３では、割り込み処理を優先順位の異なる複数の処理に分けて、割り込み処理のうち、優先順位が高い処理だけを割り込み処理用スレッドに割り当てて実行し、優先順位が低い処理に関してはメッセージ処理用スレッドに割り当てて実行するようにする。ここで、割り込み処理用スレッドに割り当てられる優先順位が高い処理は、ハードウェアの制御のために即座に行わなければならない処理である。また、メッセージ処理用スレッドに割り当てられる優先順位が低い処理は、例えば、共有メモリへのデータのコピーやクライアントへの返答等にように、直接ハードウェアの制御とは関係がなく、即座に行う必要がない処理である。
【００９６】
このタイプ３のプログラミングスタイルでの実行モデルについて、図６を参照して具体的に説明する。なお、図６は上述のシナリオのときの実行モデルを示している。
【００９７】
図６の例では、先ず、デバイスドライバに対してメッセージ「RequestＡ」が入力され、当該メッセージ「RequestＡ」に基づくメッセージ処理Ａが起動される（invoked by message passing）。ここで、メッセージ処理Ａは、メッセージ処理用スレッドで実行される。このメッセージ処理Ａにおいて、メソッド「BlockInterrupt()」が呼び出され、その後、メソッド「AllowInterrupt()」が呼び出されるまでの期間（図中の斜線部分）は、割り込み処理よりもメッセージ処理を優先して実行するように設定された期間である。したがって、この期間には、割り込みがあったとしても、割り込み処理の実行は待たされることとなる。
【００９８】
そして、デバイスドライバは、デバイスドライバ側での処理が完了したら、ハードウェア側での処理状況に関わらず、メソッド「Exit()」を実行し、メッセージ処理用スレッドを開放する。このとき、デバイスドライバは、ハードウェアでの処理が完了したことを示す割り込みがハードウェアから入ってくるまで、メッセージ「RequestＡ」に対する返答を保留したままとしておく。
【００９９】
次に、デバイスドライバに対してメッセージ「RequestＢ」が入力され、当該メッセージ「RequestＢ」に基づくメッセージ処理Ｂが起動される（invoked by message passing）。ここで、メッセージ処理Ｂは、メッセージ処理用スレッドで実行される。このメッセージ処理Ｂにおいても、メソッド「BlockInterrupt()」が呼び出され、その後、メソッド「AllowInterrupt()」が呼び出されるまでの期間（図中の斜線部分）は、割り込み処理よりもメッセージ処理を優先して実行するように設定された期間である。したがって、この期間には、割り込みがあったとしても、割り込み処理の実行は待たされることとなる。
【０１００】
そして、メッセージ処理Ｂを行っている最中に、メッセージ「RequestＡ」に基づいて行われていたハードウェア側の処理が完了したとする。これは、デバイスドライバに対して割り込みを要求する事象であり、ハードウェア側の処理の完了に伴う所定の割り込み処理を行うように要求する割り込みメッセージ「Interrupt」が、ハードウェアからオペレーティングシステムを介して、デバイスドライバに入力される。
【０１０１】
しかしながら、図６の例において、割り込みが発生した時点は、メッセージ処理Ｂにおいて、メソッド「BlockInterrupt()」が呼び出された後であって、メソッド「AllowInterrupt()」が呼び出される前である。したがって、割り込みメッセージ「Interrupt」に応じた割り込み処理の実行は待たされることとなる。
【０１０２】
その後、メッセージ処理Ｂで、メソッド「AllowInterrupt()」が呼び出されると、メッセージ処理Ｂが中断されて（suspended）、メッセージ処理用スレッドから割り込み処理用スレッドにコンテキストスイッチし、割り込みメッセージ「Interrupt」に対応した割り込み処理が起動される（invoked for interrupt handling）。ここで、割り込み処理は、割り込み処理用スレッドで実行される。このように、本例では、割り込み遅延（interrupt latency）は、割り込みが発生したときから、メッセージ処理Ｂでメソッド「AllowInterrupt()」が呼び出されて割り込みが可能となって割り込み処理が起こされるまでとなる。
【０１０３】
そして、デバイスドライバは、割り込みハンドラによって、割り込みメッセージ「Interrupt」に応じた所定の割り込み処理を行うが、このとき、割り込みハンドラは、割り込み処理を、即座に実行しなければならない部分と、即座に実行する必要がない部分とに分ける。そして、即座に実行しなければならない処理だけを割り込み処理用スレッドで即座に実行する。一方、割り込み処理のうち、即座に実行する必要がない処理については、メッセージ処理用スレッドに割り当てられ、後述するように、メッセージ処理Ｂが終了した後に実行されることとなる。
【０１０４】
そして、割り込み処理用スレッドでの、即座に実行しなければならない処理が終了したら、割り込み処理用スレッドからメッセージ処理用スレッドにコンテキストスイッチし、中断されていたメッセージ処理Ｂが再開される（resumed）。そして、メッセージ処理Ｂが終了したら、メソッド「Exit()」を実行し、メッセージ処理用スレッドを開放する。
【０１０５】
そして、メッセージ処理Ｂが終了したら、上述の割り込み処理のうち、即座に実行する必要がないとされていた処理が、メッセージ処理用スレッドで実行され、この処理の結果として、メッセージ「RequestＡ」に対する返答が送出される（Reply for RequestＡ）。そして、割り込み処理が終了したら、メソッド「ExitFromInterrupt()」を実行し、メッセージ処理用スレッドを開放する。
【０１０６】
以上のように、タイプ３では、割り込み処理を、即座に実行する必要がある部分と、即座に実行する必要がない部分とに分ける。そして、即座に実行する必要がある処理についてだけ、割り込み処理用スレッドで実行し、即座に実行する必要がない処理については、メッセージ処理用スレッドで実行する。そして、これにより、割り込みマスクが連続して閉じている期間を、更に減少することが可能となる。
【０１０７】
なお、図６の例では、割り込み処理用スレッドで割り込み処理を実行することによって割り込みマスクが閉じている時間は減少しているが、割り込みが１回だけの例であるので、図６の例における割り込み遅延は、図４に示した例の場合と同様となっている。
【０１０８】
そこで、タイプ３を適用することによって、実際に割り込み遅延時間が短縮される具体的な実行モデルについて、図７を参照して説明する。
【０１０９】
図７の例では、先ず、デバイスドライバに対してメッセージ「RequestＡ」が入力され、当該メッセージ「RequestＡ」に基づくメッセージ処理Ａが起動される（invoked by message passing）。ここで、メッセージ処理Ａは、メッセージ処理用スレッドで実行される。そして、デバイスドライバは、デバイスドライバ側での処理が完了したら、ハードウェア側での処理状況に関わらず、メッセージ処理Ａを終了し、メッセージ処理用スレッドを開放する。このとき、デバイスドライバは、メッセージ「RequestＡ」に基づく処理が完了したことを示す割り込みがハードウェアから入ってくるまで、メッセージ「RequestＡ」に対する返答を保留したままとしておく。
【０１１０】
次に、デバイスドライバに対してメッセージ「RequestＢ」が入力され、当該メッセージ「RequestＢ」に基づくメッセージ処理Ｂが起動される（invoked by message passing）。ここで、メッセージ処理Ｂは、メッセージ処理用スレッドで実行される。そして、デバイスドライバは、デバイスドライバ側での処理が完了したら、ハードウェア側での処理状況に関わらず、メッセージ処理Ｂを終了し、メッセージ処理用スレッドを開放する。このとき、デバイスドライバは、メッセージ「RequestＢ」に基づく処理が完了したことを示す割り込みがハードウェアから入ってくるまで、メッセージ「RequestＢ」に対する返答を保留したままとしておく。
【０１１１】
その後、メッセージ「RequestＡ」に基づいて行われていたハードウェア側の処理が完了し、ハードウェア側の処理の完了に伴う所定の割り込み処理を行うように要求する割り込みメッセージ「InterruptＡ」が、ハードウェアからオペレーティングシステムを介してデバイスドライバに入力され、当該割り込みメッセージ「InterruptＡ」に対応した割り込み処理Ａが起動される（invoked for handling interruptＡ）。このとき、割り込みハンドラは、割り込み処理を、即座に実行しなければならない部分と、即座に実行する必要がない部分とに分ける。そして、即座に実行しなければならない処理だけを割り込み処理用スレッドで即座に実行し、即座に実行する必要がない処理については、メッセージ処理用スレッドに割り当てる。
【０１１２】
そして、割り込み処理のうち、即座に実行しなければならない処理を割り込み処理用スレッドで実行しているときに、メッセージ「RequestＢ」に基づいて行われていたハードウェア側の処理が完了し、割り込み処理を行うように要求する割り込みメッセージ「InterruptＢ」が、ハードウェアからオペレーティングシステムを介してデバイスドライバに入力されたとする。しかしながら、このときには割り込み処理用スレッドが動いているので、割り込みは受け付けられず、割り込み処理用スレッドがあくまで、割り込みメッセージ「InterruptＢ」に対応した割り込み処理Ｂは待たされることとなる。
【０１１３】
そして、割り込み処理用スレッドがあいたら、すなわち、割り込みメッセージ「InterruptＡ」に対応した割り込み処理Ａのうち、即座に実行しなければならない処理が終了したら、割り込みメッセージ「InterruptＢ」に対応した割り込み処理Ｂが起動される（invoked for handling interruptＢ）。
【０１１４】
ここで、割り込みメッセージ「InterruptＢ」に対応した割り込み処理Ｂが起動されるのは、割り込みメッセージ「InterruptＡ」に対応した割り込み処理Ａの全てが終了してからではなく、割り込みメッセージ「InterruptＡ」に対応した割り込み処理Ａのうち、即座に実行しなければならない処理が終了した段階である。したがって、割り込みメッセージ「InterruptＢ」に対応した割り込み処理Ｂについて、その割り込み遅延（interrupt latency）は、タイプ２の場合よりも短くて済む。
【０１１５】
そして、割り込みメッセージ「InterruptＢ」に対応した割り込み処理Ｂを行う際も、割り込みハンドラは、当該割り込み処理Ｂを、即座に実行しなければならない部分と、即座に実行する必要がない部分とに分ける。そして、即座に実行しなければならない処理だけを割り込み処理用スレッドで即座に実行し、即座に実行する必要がない処理については、メッセージ処理用スレッドに割り当てる。
【０１１６】
その後、割り込み処理用スレッドでの処理が終了したら、すなわち、割り込みメッセージ「InterruptＢ」に対応した割り込み処理Ｂのうち、即座に実行しなけらばならない処理が終了したら、割り込み処理用スレッドからメッセージ処理用スレッドにコンテキストスイッチする。そして、割り込みメッセージ「InterruptＡ」に対応した割り込み処理Ａのうち、即座に実行する必要がないとされていた処理が、メッセージ処理用スレッドで実行され、この処理の結果として、メッセージ「RequestＡ」に対する返答が送出される（Reply for RequestＡ）。その後、割り込みメッセージ「InterruptＢ」に対応した割り込み処理Ｂのうち、即座に実行する必要がないとされていた処理が、メッセージ処理用スレッドで実行され、この処理の結果として、メッセージ「RequestＢ」に対する返答が送出される（Reply for RequestＢ）。
【０１１７】
以上詳細に説明したように、タイプ３では、割り込みマスクが連続して閉じる時間を、タイプ２よりも更に短縮することが可能となり、割り込み遅延時間を更に短縮することが可能となる。
【０１１８】
２−４  デバイスドライバの動作環境
以上、従来技術で実現されるタイプ１と、本発明を適用して実現されるタイプ２及びタイプ３とについて詳細に説明したが、これらの動作環境には、上位互換性を持たせることが好ましい。すなわち、タイプ２の環境では、タイプ１のデバイスドライバも動作できるようにし、タイプ３の環境では、タイプ１やタイプ２のデバイスドライバも動作できるようにすることが好ましい。
【０１１９】
これにより、全デバイスドライバのうちでもっとも多くの機能を要求するデバイスドライバに対応した環境を提供すれば、異なるタイプのデバイスドライバが混在していたとしても、全てのデバイスドライバを正常に動作させることが可能となる。
【０１２０】
ところで、タイプ２は、マルチスレッドを実現するために、タイプ１よりも、オペレーティングシステムに対してより多くの機能を要求する。また、タイプ３は、割り込み処理を割り込み処理用スレッドとメッセージ処理用スレッドとに振り分ける処理を実現するために、タイプ２よりも、オペレーティングシステムに対してより多くの機能を要求することとなる。
【０１２１】
このため、オペレーティングシステムのサイズは、タイプ１の環境を提供するオペレーティングシステムよりも、タイプ２の環境を提供するオペレーティングシステムのほうが大きくなり、また、タイプ１やタイプ２の環境を提供するオペレーティングシステムよりも、タイプ３の環境を提供するオペレーティングシステムのほうが大きくなる。
【０１２２】
したがって、割り込み遅延時間がより短くて済むタイプ３の環境を提供するオペレーティングシステムを使用するのが常に好ましいとは限らない。すなわち、割り込み遅延時間に対する要求等を考慮して、必要な機能を満たす最適なオペレーティングシステムを選択するようにしても良く、これにより、オペレーティングシステムのサイズを抑えることができる。
【０１２３】
【発明の効果】
以上、詳細に説明したように、本発明によれば、オブジェクト指向を適用したデバイスドライバをベースにして、その利点を失う事なく、割り込み遅延時間の短縮を図ることができる。
【図面の簡単な説明】
【図１】本発明を適用したテレビ装置に一例について、その概略構成を示す図である。
【図２】デバイスドライバの実行モデルを示す図である。
【図３】従来技術によるデバイスドライバの割り込みマスクの制御例として、タイプ１での割り込みマスクの制御例を示す図である。
【図４】本発明を適用したデバイスドライバの割り込みマスクの制御例のうち、タイプ２での割り込みマスクの制御例を示す図である。
【図５】本発明を適用したデバイスドライバの割り込みマスクの制御例のうち、タイプ２での割り込みマスクの制御例を示す図である。
【図６】本発明を適用したデバイスドライバの割り込みマスクの制御例のうち、タイプ３での割り込みマスクの制御例を示す図である。
【図７】本発明を適用したデバイスドライバの割り込みマスクの制御例のうち、タイプ３での割り込みマスクの制御例を示す図である。
【図８】デバイスドライバをオペレーティングシステムの一部として実現した、従来のデバイスドライバプログラミングを示す図である。
【図９】デバイスドライバを並行オブジェクトとして実現した、オブジェクト指向デバイスドライバプログラミングを示す図である。
【符号の説明】
１  バス／ＩＯブリッジ、  ２  バス、  ３  テレビ機能部、  ４  バス／メモリブリッジ、  ５  プロセッサ、  ６  ＲＯＭ、  ７  ＲＡＭ、  ８  操作パネル、  ９  外部記憶装置、  １０  通信装置
【図１】
0003794119.tif 000002
【図２】
0003794119.tif 000003
【図３】
0003794119.tif 000004
【図４】
0003794119.tif 000005
【図５】
0003794119.tif 000006
【図６】
0003794119.tif 000007
【図７】
0003794119.tif 000008
【図８】
0003794119.tif 000009
【図９】
0003794119.tif 000010