JP3794119B2 - データ処理方法、記録媒体及びデータ処理装置 - Google Patents
データ処理方法、記録媒体及びデータ処理装置 Download PDFInfo
- Publication number
- JP3794119B2 JP3794119B2 JP23497797A JP23497797A JP3794119B2 JP 3794119 B2 JP3794119 B2 JP 3794119B2 JP 23497797 A JP23497797 A JP 23497797A JP 23497797 A JP23497797 A JP 23497797A JP 3794119 B2 JP3794119 B2 JP 3794119B2
- Authority
- JP
- Japan
- Prior art keywords
- interrupt
- processing
- thread
- message
- device driver
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000003672 processing method Methods 0.000 title claims description 12
- 238000000034 method Methods 0.000 claims description 126
- 230000008569 process Effects 0.000 claims description 81
- 230000006870 function Effects 0.000 description 19
- 238000010586 diagram Methods 0.000 description 9
- 230000008901 benefit Effects 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000011423 initialization method Methods 0.000 description 2
- 238000004904 shortening Methods 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007257 malfunction Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/102—Program control for peripheral devices where the programme performs an interfacing function, e.g. device driver
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Bus Control (AREA)
Description
【発明の属する技術分野】
本発明は、オブジェクト指向オペレーティングシステムにおけるデバイス制御を実現するデータ処理方法に関する。また、そのようなデータ処理方法を実現するプログラムが記録された記録媒体、並びにそのような記録媒体を備えたデータ処理装置に関する。
【0002】
【従来の技術】
従来、各種ハードウェアの制御を行うプログラムであるデバイスドライバは、図8に示すように、オペレーティングシステムの一部として実現される。すなわち、オペレーティングシステムは、デバイスドライバを利用するクライアントからの要求(request)があった場合、又は、ハードウェアからの割り込み(hardware interrupt)が生じた場合、予め登録されているデバイスドライバテーブルを検索して、それらの要求や割り込みに適応するデバイスドライバを探し出し、当該デバイスドライバをファンクションコール(function call)により呼び出して実行する。
【0003】
なお、クライアントからの要求は、システムコール(system call)によってなされる。また、ハードウェアからの割り込みは、オペレーティングシステムのカーネルのスレッドを呼び出すことによりなされる(invoke kernel thread)。
【0004】
このような方式には以下のような問題点が存在する。
【0005】
(1)デバイスドライバがオペレーティングシステムのカーネルの一部として実現されるため、汎用性が低くデバイスドライバの取り替えが困難である。
【0006】
(2)デバイスドライバがオペレーティングシステムのカーネルと同様の権限を持って実行されるため、デバイスドライバのエラーがオペレーティングシステム全体に影響を与える。
【0007】
(3)各デバイスドライバにおいて割り込み制御等を行うため、デバイスドライバを作成するプログラマは、システム全体を知っておく必要や、デバイスドライバが他に与える影響を考える必要がある。
【0008】
(4)デバイスドライバがオペレーティングシステムのカーネルの一部として実現されるため、デバイスドライバのプログラミングスタイルは、アプリケーションプログラム等のプログラミングスタイルとは、大幅に異なるものとなる。このため、デバイスドライバは、デバイスドライバの記述に使用されるプログラミングスタイルについて熟練したプログラマでなければ、作成が困難である。
【0009】
以上のような従来のデバイスドライバの実現方式の問題点を解決する方法として、オブジェクト指向を適用してデバイスドライバを記述する方法が知られている。オブジェクト指向を適用してデバイスドライバを記述する際は、例えば、図9に示すように、デバイスドライバをオペレーティングシステムの外で、アプリケーションプログラムと同様に、並行オブジェクトとして記述する。
【0010】
ここで、並行オブジェクトとは、プログラムの各機能をオブジェクトとしてモジュール化し、オペレーティングシステムが扱う実行実体としたもののことである。すなわち、並行オブジェクトは、オペレーティングシステムによってスケジューリングされたり、或いは相互に通信する際の単位となる。換言すれば、各オブジェクトは、資源管理や排他実行の単位となる。これにより、プログラマは、他のオブジェクト内の実装を知ることなくオブジェクトを作成することが可能となり、各オブジェクト内部の実装は排他制御などを考慮しなくても良くなる。
【0011】
この方式は以下のような特徴を持つ。
【0012】
(1)図中「request」として示すように、クライアントからデバイスドライバへの要求を、クライアントから、並行オブジェクトとして記述されたデバイスドライバへ、オブジェクトに対するメッセージとして配送する。また、図中「interrupt」として示すように、割り込み要求も、オペレーティングシステムから、並行オブジェクトとして記述されたデバイスドライバへ、オブジェクトに対するメッセージとして配送する。
【0013】
(2)各デバイスドライバが単一スレッドで動作するようにしておき、割り込みマスクの制御はデバイスドライバ単位で行う。すなわち、デバイスドライバが動作中は、そのデバイスドライバが扱う割り込みは受け付けない。したがって、プログラマは、割り込み発生時の排他制御等を考慮してデバイスドライバを記述するような必要がない。
【0014】
並行オブジェクトとして記述されたデバイスドライバは、上述のような2つの特徴を備えていることから、アプリケーションプログラムと同様に作成することが可能となる。また、デバイスドライバがオペレーティングシステムの外側で実現されるので、デバイスドライバの取り替えが容易となる。また、インタフェースの変更も容易に可能となる。また、デバイスドライバのエラーがオペレーティングシステム全体に影響を与えるようなことがなくなり、オペレーティングシステムをより安定に動作させることが可能となる。
【0015】
このように、デバイスドライバをアプリケーションプログラムと同様な並行オブジェクトとして記述することにより、図8に示したようにデバイスドライバをオペレーティングシステムの一部として実現したときに生じる問題点を解決することができる。
【0016】
【発明が解決しようとする課題】
図9に示したように、デバイスドライバを並行オブジェクトとして記述した方式では、デバイスドライバが動いている間は、デバイスドライバが割り込みを受け付けない状態となる。なお、以下の説明では、デバイスドライバの状態を表すときに、割り込みマスクという表現を使う。すなわち、デバイスドライバが割り込みを受け付けない状態のことを「割り込みマスクが閉じている」と表現し、デバイスドライバが割り込みを受け付ける状態のことを「割り込みマスクが開いている」と表現する。
【0017】
そして、図9の例では、デバイスドライバが動いている間は割り込みマスクが閉じた状態となるため、デバイスドライバによる処理に時間がかかる処理(例えばデータのコピー等)が含まれる場合、割り込み遅延が大きくなってしまうという問題点がある。
【0018】
すなわち、各デバイスドライバは単一スレッドで動作し、デバイスドライバの動作中は割り込みは受け付けない。このため、従来、割り込み遅延を短縮するには、各デバイスドライバのメソッドを短くするしかなかった。したがって、従来、デバイスドライバを並行オブジェクトとして記述するにあたって、厳しい遅延制約を持つデバイスドライバを記述することは困難であった。
【0019】
本発明は、以上のような従来の実情に鑑みて提案されたものであり、オブジェクト指向を適用したデバイスドライバをベースにし、その利点を失う事なく、割り込み遅延を短縮することが可能なデータ処理方法を提供することを目的としている。また、そのようなデータ処理方法を実現するプログラムが記録された記録媒体、並びにそのような記録媒体を備えたデータ処理装置を提供することも目的としている。
【0020】
【課題を解決するための手段】
本発明に係るデータ処理方法では、ハードウェア制御を行うデバイスドライバを、一つのメッセージ処理用スレッドと、各割り込み処理に対応した割り込み処理専用スレッドとを割り当てることが可能なマルチスレッドオブジェクトとして記述する。そして、デバイスドライバが他のオブジェクトから入力されたメッセージに基づく処理を行う場合には、当該処理をメッセージ処理用スレッドに割り当てて実行する。また、デバイスドライバに対して割り込みを要求する事象が発生したときに、各事象に対応する割り込み処理用スレッドが、既に割り込み処理を実行している場合には、メッセージ処理用スレッドの状態に関わらず、上記事象に対応する割り込み処理を実行せずに、対応した割り込み処理用スレッドにて他の割り込みに応じた割り込み処理が終了してから、当該割り込み処理用スレッドにて上記事象に対応する割り込み処理を実行する。
【0021】
なお、上記データ処理方法では、共有データのアクセスの排他制御が必要な場合などの同期のために、メッセージ処理用スレッドでの処理と、割り込み処理用スレッドでの割り込み処理との優先順位を設定できるようにしておくことが好ましい。このときは、デバイスドライバが割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われている場合には、メッセージ処理用スレッドでの処理が終了するまで、或いは、メッセージ処理用スレッドでの処理よりも割り込み処理を優先するように設定が変更されるまで、割り込み処理の実行を待たせておく。また、デバイスドライバが割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われていない場合には、直ぐに割り込み処理用スレッドで割り込み処理を実行する。
【0022】
また、上記データ処理方法では、割り込み処理を優先順位の異なる複数の処理に分けて、優先順位が高い処理を割り込み処理用スレッドに割り当てて実行し、優先順位が低い処理をメッセージ処理用スレッドに割り当てて実行することにより、割り込み処理用スレッドの実行時間を減らし、割り込み遅延を減らす。
【0023】
以上のような本発明に係るデータ処理方法では、デバイスドライバをマルチスレッドオブジェクトとして記述しているので、デバイスドライバが何らかの処理を行っていても、当該処理がメッセージ処理用スレッドに割り当てられて実行されている場合には、割り込み処理用スレッドによって割り込みを受け付けることができる。
【0024】
また、本発明に係る記録媒体は、ハードウェア制御を行うプログラムであるデバイスドライバが記録されたコンピュータ読み取り可能な記録媒体である。そして、上記デバイスドライバは、一つのメッセージ処理用スレッドと、一つ以上の割り込み処理用スレッドとを割り当てることが可能なマルチスレッドオブジェクトとして記述される。また、このデバイスドライバは、当該デバイスドライバが他のオブジェクトから入力されたメッセージに基づく処理を行う場合には、当該処理をメッセージ処理用スレッドに割り当てて実行する。また、このデバイスドライバは、当該デバイスドライバに対して割り込みを要求する事象が発生したときに、各事象に対応する割り込み処理用スレッドが、既に割り込み処理を実行している場合には、メッセージ処理用スレッドの状態に関わらず、上記事象に対応する割り込み処理を実行せずに、対応した割り込み処理用スレッドにて他の割り込みに応じた割り込み処理が終了してから、当該割り込み処理用スレッドにて上記事象に対応する割り込み処理を実行する。
【0025】
なお、上記デバイスドライバは、メッセージ処理用スレッドでの処理と、割り込み処理用スレッドでの割り込み処理との優先順位を設定できるようになされていることが好ましい。ここで、デバイスドライバは、割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われている場合には、メッセージ処理用スレッドでの処理が終了するまで、或いは、メッセージ処理用スレッドでの処理よりも割り込み処理を優先するように設定が変更されるまで、割り込み処理の実行を待たせておく。また、割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われていない場合には、直ぐに割り込み処理用スレッドで割り込み処理を実行する。
【0026】
また、上記デバイスドライバは、割り込み処理を優先順位の異なる複数の処理に分けて、優先順位が高い処理を割り込み処理用スレッドに割り当てて実行し、優先順位が低い処理をメッセージ処理用スレッドに割り当てて実行するものであってもよい。
【0027】
以上のような本発明に係る記録媒体において、当該記録媒体に記録されたデバイスドライバは、マルチスレッドオブジェクトとして記述されているので、デバイスドライバが何らかの処理を行っていても、当該処理がメッセージ処理用スレッドに割り当てられて実行されている場合には、割り込み処理用スレッドによって割り込みを受け付けることができる。
【0028】
また、本発明に係るデータ処理装置は、ハードウェア制御を行うプログラムであるデバイスドライバが記録された記録媒体を備え、当該記録媒体から上記デバイスドライバを読み取ることが可能なデータ処理装置である。そして、上記デバイスドライバは、一つのメッセージ処理用スレッドと、一つ以上の割り込み処理用スレッドとを割り当てることが可能なマルチスレッドオブジェクトとして記述される。また、このデバイスドライバは、当該デバイスドライバが他のオブジェクトから入力されたメッセージに基づく処理を行う場合には、当該処理をメッセージ処理用スレッドに割り当てて実行する。また、このデバイスドライバは、当該デバイスドライバに対して割り込みを要求する事象が発生したときに、全ての割り込み処理用スレッドが他の割り込みに応じた割り込み処理を実行している場合には、メッセージ処理用スレッドの状態に関わらず、上記事象に対応する割り込み処理を実行せずに、いずれかの割り込み処理用スレッドにて他の割り込みに応じた割り込み処理が終了してから、当該割り込み処理用スレッドにて上記事象に対応する割り込み処理を実行する。
【0029】
なお、上記デバイスドライバは、メッセージ処理用スレッドでの処理と、割り込み処理用スレッドでの割り込み処理との優先順位を設定できるようになされていることが好ましい。ここで、デバイスドライバは、割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われている場合には、メッセージ処理用スレッドでの処理が終了するまで、或いは、メッセージ処理用スレッドでの処理よりも割り込み処理を優先するように設定が変更されるまで、割り込み処理の実行を待たせておく。また、割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われていない場合には、直ぐに割り込み処理用スレッドで割り込み処理を実行する。
【0030】
また、上記デバイスドライバは、割り込み処理を優先順位の異なる複数の処理に分けて、優先順位が高い処理を割り込み処理用スレッドに割り当てて実行し、優先順位が低い処理をメッセージ処理用スレッドに割り当てて実行するものであってもよい。
【0031】
以上のような本発明に係るデータ処理装置において、記録媒体に記録されたデバイスドライバは、マルチスレッドオブジェクトとして記述されているので、デバイスドライバが何らかの処理を行っていても、当該処理がメッセージ処理用スレッドに割り当てられて実行されている場合には、割り込み処理用スレッドによって割り込みを受け付けることができる。
【0032】
【発明の実施の形態】
以下、本発明の一実施形態について、図面を参照しながら詳細に説明する。
【0033】
1.ハードウェア環境
まず、本発明が適用されるハードウェア構成の一例について、図1を参照して説明する。なお、ここでは、本発明の実施の形態の一例として、テレビ装置に本発明を適用した例を挙げるが、当然の事ながら、本発明は、その他のデータ処理装置にも適用可能である。すなわち、本発明は、各種ハードウェアの制御をデバイスドライバによって行うデータ処理装置に広く適用可能であり、例えば、テレビ装置以外のオーディオ・ビジュアル機器(いわゆるAV機器)や、各種の事務機器や、一般のコンピュータ装置等にも適用可能である。
【0034】
本発明が適用されたデータ処理装置である図1に示すテレビ装置は、アンテナ又はケーブル等によって放送局からの信号を受信し、当該信号に基づいて、ブラウン管又は液晶等の画像表示装置に映像を表示すると共にスピーカから音声を出力する。
【0035】
このテレビ装置は、通常のテレビ機能を備えているだけでなく、外部からプログラムやデータを受けとることが可能となっており、図1に示すように、バス/IOブリッジ1を介してバス2に接続されたテレビ機能部3と、バス/メモリブリッジ4を介してバス2に接続されたプロセッサ5と、バス/メモリブリッジ4を介してプロセッサ5に接続されたROM(Read Only Memory)6及びRAM(Random Access Memory)7と、バス2に接続された操作パネル8、外部記憶装置9及び通信装置10とを備えている。
【0036】
テレビ機能部3は、アンテナ又はケーブル等によって受信した信号に基づいて、映像や音声を再生する機能を備えている。このテレビ機能部3は、バス/IOブリッジ1を介してバス2に接続されており、これにより、他の部分との信号のやり取りが可能となっている。
【0037】
プロセッサ5は、このテレビ装置の各部の制御を行うものであり、バス/メモリブリッジ4を介してバス2に接続されている。また、プロセッサ5には、バス/メモリブリッジ4を介してROM6及びRAM7が接続されている。
【0038】
ROM6は、プロセッサ5による制御を行うためのオペレーティングシステムやデバイスドライバやアプリケーションプログラム等を記憶している。ここで、オペレーティングシステムは、オブジェクト指向が適用されてなるオブジェクト指向型オペレーティングシステムであり、デバイスドライバやアプリケーションプログラムは、並行オブジェクトとして動作する。
【0039】
RAM7は、プロセッサ5のワークエリアとして使われる。すなわち、プロセッサ5は、ROM6に記憶されているオペレーティングシステムやデバイスドライバやアプリケーションプログラム等を、RAM7をワークエリアとして使用して実行することにより、このテレビ装置を構成する各部を制御する。
【0040】
操作パネル8は、ユーザからの操作入力を受け付けるための入力装置であり、この操作パネル8から、例えば、テレビのチャンネルやボリューム等の切り換えを指示する信号が入力される。この操作パネル8は、具体的には、各種信号を入力するための複数のボタンを備えた入力装置や、いわゆるマウスと称されるようなポインティングデバイス等からなる。この操作パネル8によって入力された信号は、バス2及びバス/メモリブリッジ4を介してプロセッサ5に入力される。そして、プロセッサ5は、操作パネル8によって入力された信号に基づいて、所定の演算処理を行って各部を制御する。
【0041】
外部記憶装置9は、例えばハードディスク装置からなり、画像データ、制御データ、又は外部から通信装置10を介してダウンロードされたアプリケーションプログラム等を記録するのに使われる。また、通信装置10は、外部との間でデータ通信を行うための入出力部であり、例えばモデムやターミナルアダプター等からなる。
【0042】
このテレビ装置は、テレビ機能部3によって提供される通常のテレビ機能を備えているだけでなく、通信装置10を介して、外部からプログラムやデータを受け取ることが可能となっている。例えば、このテレビ装置では、オペレーティングシステムやデバイスドライバのバージョンアップを行う際に、外部のネットワークから通信装置10を介して新規ソフトウェアモジュールを受け取り、これにより、オペレーティングシステムやデバイスドライバのバージョンアップを行うことが可能となっている。
【0043】
また、このテレビ装置では、プロセッサ5によって、ROM6に記憶されているオペレーティングシステムやデバイスドライバを実行するとともに、オペレーティングシステム上で、ROM6や外部記憶装置9に記憶されているアプリケーションプログラムを実行することにより、各部の制御を行う。すなわち、このテレビ装置は、オペレーティングシステムやデバイスドライバが記録されたコンピュータ読み取り可能な記録媒体として、ROM6を備えている。なお、オペレーティングシステムやデバイスドライバは、RAM7や外部記憶装置9に記録しておくようにしてもよい。特に、オペレーティングシステムやデバイスドライバの書き換えを行えるようにしたい場合には、RAM7や外部記憶装置9に記録しておいたほうが好ましい。
【0044】
2.ソフトウェア環境
つぎに、上記テレビ装置におけるソフトウェア環境について説明する。
【0045】
2−1 オペレーティングシステム
上記テレビ装置で使用されるオペレーティングシステムは、オブジェクト指向型オペレーティングシステムである。そして、このオペレーティングシステム上で、例えば、テレビ機能部3に動画像を表示するためのアプリケーションプログラムや、操作パネル8を制御するためのグラフィカル・ユーザ・インターフェース(GUI)を実現するアプリケーションプログラムが実行される。
【0046】
また、このオペレーティングシステムは、複数のプログラム実行環境を同時に提供することが可能となっている。以下の説明では、これらのプログラム実行環境のことをメタスペースと呼ぶ。具体的には、このオペレーティングシステムによって提供されるメタスペースには、例えば、デバイスドライバが実行されるメタスペース(以下、mDriveメタスペースと称する。)と、手続き型のアプリケーションプログラム(例えば、テレビ機能部3に動画像を表示するためのアプリケーションプログラム)が実行されるメタスペースと、オブジェクト指向型のアプリケーションプログラム(例えば、操作パネル8を制御するためのグラフィカル・ユーザ・インターフェースを実現するアプリケーションプログラム)が実行されるメタスペースとがある。
【0047】
ここで、mDriveメタスペースは、割り込みを扱うために、割り込みについての処理を扱うオブジェクトである割り込みハンドラを登録する機構や、割り込みが発生したときに割り込みハンドラを呼び出す機構や、割り込みマスクを制御する機構などを実現する機能を提供する。また、mDriveメタスペースは、デバイスドライバが並行オブジェクトとして動作するための基本的なメッセージ通信機能やメモリ管理機能も提供する。
【0048】
そして、デバイスドライバは、mDriveメタスペースのAPI(Application Program Interface)を通して、mDriveメタスペースで提供される機能を用いることで動作する。すなわち、デバイスドライバは、他のデバイスドライバの動作に影響を与えるようなこと(例えば、割り込みマスクの制御等)を行う場合にも、デバイスドライバ間で直接に制御し合うのではなく、必ずオペレーティングシステムのAPIを通して行うようにする。これにより、デバイスドライバ間で直接に制御し合うことに起因してデバイスドライバが誤動作してしまうようなことが無くなり、より安定にデバイスドライバを動作させることが可能となる。
【0049】
なお、このようにデバイスドライバの制御を必ずオペレーティングシステムのAPIを通して行うようにすれば、各デバイスドライバがそれぞれ独立したモジュールとなるため、個々のデバイスドライバを動的に変更するようなことも、比較的に容易に実現可能となる。したがって、例えば、ネットワークを介してプログラムモジュールをダウンロードすることにより、デバイスドライバを動的に変更可能とするようなことも、容易に実現可能となる。
【0050】
2−2 デバイスドライバの基本的な実行モデル
以上のようなオペレーティングシステム上で実行されるデバイスドライバについて、その基本的な実行モデルについて説明する。
【0051】
図2にデバイスドライバの基本的な実行モデルの一例を示す。図2に示すように、デバイスドライバは、クライアントからのメッセージによって起こされ、当該メッセージに基づいてハードウェア制御を行い、当該ハードウェア制御が完了したら終了する。ここで、クライアントとなるのは、デバイスドライバを利用するアプリケーションプログラム等である。なお、以下の説明では、デバイスドライバがクライアントからのメッセージに基づいて行う処理のことを「メッセージ処理」と称する。
【0052】
また、デバイスドライバは、デバイスドライバに対して割り込みを要求する事象が発生したとき、すなわちハードウェアからの割り込み要求があったときに、当該割り込み要求に基づいて割り込み処理を行う。
【0053】
具体的には、先ず、デバイスドライバに対して割り込みを要求する事象が発生したときに、他のアプリケーションプログラム等で実行中のスレッドがある場合には、当該スレッドが中断される。そして、割り込みハンドラが起こされて、割り込みハンドラによって割り込み処理が行われる。このとき、割り込みハンドラは、必要ならばクライアントとの間でメッセージのやり取りを行う。そして、割り込みハンドラによる割り込み処理が終了したら、中断されていたアプリケーションプログラムのスレッドを再開する。このとき、実行した割り込み処理によっては、中断されていたスレッドを再開するのではなく、クライアントのメソッドを起こすようにしてもよい。
【0054】
なお、割り込みハンドラは、各デバイスドライバの初期化メソッドを実行するときに、各デバイスドライバに対して動的に登録される。また、デバイスドライバに対して割り込みを要求する事象が発生したときに、割り込みハンドラに対して、特別な非同期メッセージとして、割り込みを要求するメッセージが送られる。これにより、上述のように割り込みハンドラが起こされて、割り込み処理が行われる。また、割り込みハンドラのメソッドは、他のオブジェクトのメソッドと同様に、メッセージ送信によって起こされるメソッドとして記述される。また、割り込みハンドラのメソッドに対してどのようなメッセージが渡されるかについては、各デバイスドライバの初期化メソッドを実行して割り込みハンドラを各デバイスドライバに対して動的に登録する際に、mDriveメタスペースに登録しておく。
【0055】
2−3 デバイスドライバの割り込みマスク
デバイスドライバの割り込みマスクがどのように制御されるかについて説明する。なお、以下の説明では、具体例として下記に示すようなシナリオを挙げる。
【0056】
(1)先ず、デバイスドライバに対するクライアントとなるオブジェクト(以下、クライアントオブジェクトAと称する。)から、デバイスドライバへ、メッセージ「RequestA」が入力される。そして、メッセージ「RequestA」を受け取ったデバイスドライバは、当該メッセージ「RequestA」に基づいて、ハードウェア制御を伴う所定のメッセージ処理(以下、メッセージ処理Aと称する。)を実行する。
【0057】
(2)デバイスドライバは、デバイスドライバ側での処理が完了したら、ハードウェア側での処理状況に関わらず、メッセージ処理Aを行っていたスレッドを開放する。このとき、デバイスドライバは、ハードウェア側での処理が完了したことを示す割り込みがハードウェアから入ってくるまで、メッセージ「RequestA」に対する返答を保留したままとしておく。
【0058】
(3)次に、当該デバイスドライバに対するクライアントとなる他のオブジェクト(以下、クライアントオブジェクトBと称する。)から、デバイスドライバへ、メッセージ「RequestB」が入力される。そして、メッセージ「RequestB」を受け取ったデバイスドライバは、当該メッセージ「RequestB」に基づいて、ハードウェア制御を伴う所定のメッセージ処理(以下、メッセージ処理Bと称する。)を実行する。
【0059】
(4)そして、メッセージ処理Bを行っている最中に、メッセージ「RequestA」に基づいて行われていたハードウェア側の処理が完了したとする。これは、デバイスドライバに対して割り込みを要求する事象であり、ハードウェア側の処理の完了に伴う所定の割り込み処理を行うように要求するメッセージ(以下、割り込みメッセージと称する。)が、ハードウェアからオペレーティングシステムを介して、デバイスドライバに入力される。
【0060】
(5)割り込みメッセージを受け取ったデバイスドライバは、割り込みハンドラによって、当該割り込みメッセージに応じた所定の割り込み処理を行い、当該割り込み処理が終了したら、クライアントオブジェクトAへメッセージ「RequestA」に対する返答を送る。
【0061】
なお、割り込み遅延(interrupt latency)とは、割り込みが起きてから、その割り込みに対する割り込みハンドラが起こされるまでの時間を指す。そして、本発明では、この割り込み遅延の短縮を図っている。なお、デバイスドライバが割り込みを受け付けないようになされているとき、すなわち割り込みマスクが閉じているときは、割り込み処理を実行できない。したがって、一般に、最大割り込み遅延は、割り込みマスクが連続的に閉じている時間の最長時間に一致する。
【0062】
2−3−1 従来技術での割り込みマスク
本発明の実施の形態の説明に先立って、従来のデバイスドライバで割り込みマスクがどのように制御されるかについて説明する。
【0063】
図3に、従来技術によりデバイスドライバを並行オブジェクトとして記述した場合の割り込みマスクの制御例を示す。このデバイスドライバは、単一スレッドオブジェクトとして記述される。そして、割り込みマスクは、オペレーティングシステムによるスレッドの切り換え、すなわちコンテキストスイッチによって制御される。
【0064】
すなわち、デバイスドライバが起動されておらず、当該デバイスドライバのスレッドがあいている場合には、割り込みマスクが開いていることとなり、また、デバイスドライバが起動されており、当該デバイスドライバのスレッドで何らかの処理が行われている場合には、割り込みマスクが閉じていることとなる。
【0065】
換言すれば、従来のデバイスドライバでは、ハードウェアからの割り込みに基づく割り込み処理を行っているときだけでなく、他のオブジェクトからのメッセージに基づくメッセージ処理(例えば、上述のシナリオにおけるメッセージ処理Aやメッセージ処理B)を行っているときにも、割り込みマスクが閉じた状態となる。
【0066】
したがって、図3に示すように、メッセージ処理Bを行っている最中に起きた割り込みは、当該メッセージ処理Bが終了するまで待たされる。そして、メッセージ処理Bが終了してから、割り込みハンドラが起動されて、割り込みメッセージに応じた所定の割り込み処理が実行されることとなる。
【0067】
このように、従来のデバイスドライバでは、他のオブジェクトからのメッセージに基づくメッセージ処理を行っているときも割り込みマスクが閉じることとなるため、一般に割り込み遅延が長くなってしまう。特に、メッセージ処理に長い時間を要するような場合には、割り込み遅延が特に長くなってしまい、割り込み遅延の制約が厳しいハードウェアの制御を正しく行うことができず、割り込み処理に失敗する可能性もある。すなわち、従来のデバイスドライバでは、割り込み遅延時間が長くなってしまい、ハードウェア制御を正しく行うことはできないようなケースもあり得た。
【0068】
そして、従来のデバイスドライバでは、割り込み遅延時間を短縮するためには、デバイスドライバに含まれる各メソッドをできる限りを小さく記述するか、或いは、ハードウェア制御に必須ではない部分をできるだけデバイスドライバ本体から切り離すようにするしかなかった。このため、従来のデバイスドライバでは、割り込み遅延時間の短縮には限界があった。
【0069】
なお、以下の説明において、本例のように、デバイスドライバを単一スレッドオブジェクトとして記述するプログラミングスタイルのことを「タイプ1」と称する。
【0070】
2−3−2 本発明を適用したときの割り込みマスク(その1)
つぎに、本発明を適応した場合について説明する。本例では、デバイスドライバをマルチスレッドオブジェクトとして記述する。なお、以下の説明において、本例のようなプログラミングスタイルのことを「タイプ2」と称する。
【0071】
図4に、本例における割り込みマスクの制御例を示す。なお、図4は上述のシナリオのときの実行モデルを示している。図4に示すように、本例では、デバイスドライバを、マルチスレッドオブジェクトとして記述し、デバイスドライバに対して、メッセージ処理用スレッドと、割り込み処理用スレッドとを割り当てる。
【0072】
割り込み処理用スレッドは、割り込み処理を行うスレッドであり、割り込みハンドラを登録したときに、新たに登録した割り込みハンドラ専用のスレッドとして割り当てられる。一方、メッセージ処理用スレッドは、メッセージ処理を行うスレッドであり、各デバイスドライバに対して一つだけ割り当てられる。このように、本例では、割り込み処理に割り当てられるスレッドと、メッセージ処理に割り当てられるスレッドとが、異なるスレッドとされる。
【0073】
そして、割り込みマスクは、割り込みハンドラが動いているときのみ閉じるようにする。すなわち、デバイスドライバに対して割り込みを要求する事象が発生したときに、当該デバイスドライバの割り込み処理用スレッドが他の割り込みに応じた割り込み処理を実行している場合には、割り込み処理用スレッドにあきができるまで割り込みを待たせておく。一方、デバイスドライバに対して割り込みを要求する事象が発生したときに、割り込み処理用スレッドが他の割り込みに応じた割り込み処理を行っていない場合には、割り込みを受け付けるようにする。
【0074】
これにより、メッセージ処理用スレッドでメッセージ処理が行われていても、割り込みを受けることが可能となり、割り込み遅延時間が短縮される。すなわち、本例では、並行オブジェクトとしてデバイスドライバを記述したときの利点を生かしつつ、割り込み遅延時間の短縮を図ることができる。
【0075】
ところで、メッセージ処理の最中に割り込みが発生してハードウェア制御を行わなくてはならないような場合、メッセージ処理を行っている最中に割り込みハンドラが同時に動くことは許されないので、メッセージ処理と割り込み処理との間で同期を取る必要がある。換言すれば、メッセージ処理を行っているときに割り込みが生じたときにも、割り込みハンドラによる割り込み処理が正常に行われるように、排他制御を行う必要がある。
【0076】
そこで、本例では、排他制御が必要な処理の前後で、メッセージ処理用のスレッドが所定のAPIを用いて割り込みマスクの開閉を制御し、その間で割り込みハンドラを抑制することにより、割り込みハンドラによる割り込み処理が正常に行われるように排他制御を行う。
【0077】
なお、このような排他制御を実現するAPIを用いて制御される割り込みマスクは、各デバイスドライバが扱う割り込みのみとする。このため、あるデバイスドライバの割り込みマスクを制御することにより、他のデバイスドライバの動作が乱されるようなことはない。
【0078】
つぎに、以上のようなタイプ2のプログラミングスタイルでの実行モデルについて、図4を参照して具体的に説明する。
【0079】
図4において、メソッド「BlockInterrupt()」及びメソッド「AllowInterrupt()」は、所定のAPIとして予めmDriveメタスペースで提供されているメソッドである。そして、メソッド「BlockInterrupt()」は、割り込みマスクを制御することにより、割り込み処理よりもメッセージ処理を優先して実行するように設定するメソッドである。また、メソッド「AllowInterrupt()」は、割り込みが発生したときに、メッセージ処理よりも割り込み処理を優先して実行するように設定するメソッドである。
【0080】
そして、図4の例では、先ず、デバイスドライバに対してメッセージ「RequestA」が入力され、当該メッセージ「RequestA」に基づくメッセージ処理Aが起動される(invoked by message passing)。ここで、メッセージ処理Aは、メッセージ処理用スレッドで実行される。このメッセージ処理Aにおいて、メソッド「BlockInterrupt()」が呼び出され、その後、メソッド「AllowInterrupt()」が呼び出されるまでの期間(図中の斜線部分)は、割り込み処理よりもメッセージ処理を優先して実行するように設定された期間である。したがって、この期間中にデバイスドライバが割り込みを受け付けたとしても、その割り込みに応じた割り込み処理の実行は待たされることとなる。
【0081】
そして、デバイスドライバは、デバイスドライバ側での処理が完了したら、ハードウェア側での処理状況に関わらず、メソッド「Exit()」を実行し、メッセージ処理用スレッドを開放する。このとき、デバイスドライバは、ハードウェアでの処理が完了したことを示す割り込みがハードウェアから入ってくるまで、メッセージ「RequestA」に対する返答を保留したままとしておく。
【0082】
次に、デバイスドライバに対してメッセージ「RequestB」が入力され、当該メッセージ「RequestB」に基づくメッセージ処理Bが起動される(invoked by message passing)。ここで、メッセージ処理Bは、メッセージ処理用スレッドで実行される。このメッセージ処理Bにおいても、メソッド「BlockInterrupt()」が呼び出され、その後、メソッド「AllowInterrupt()」が呼び出されるまでの期間(図中の斜線部分)は、割り込み処理よりもメッセージ処理を優先して実行するように設定された期間である。したがって、この期間中にデバイスドライバが割り込みを受け付けたとしても、その割り込みに応じた割り込み処理の実行は待たされることとなる。
【0083】
そして、メッセージ処理Bを行っている最中に、メッセージ「RequestA」に基づいて行われていたハードウェア側の処理が完了したとする。これは、デバイスドライバに対して割り込みを要求する事象であり、ハードウェア側の処理の完了に伴う所定の割り込み処理を行うように要求する割り込みメッセージ「Interrupt」が、ハードウェアからオペレーティングシステムを介して、デバイスドライバに入力される。
【0084】
しかしながら、図4の例において、割り込みが発生した時点は、メッセージ処理Bにおいて、メソッド「BlockInterrupt()」が呼び出された後であって、メソッド「AllowInterrupt()」が呼び出される前である。したがって、割り込みメッセージ「Interrupt」に応じた割り込み処理の実行は待たされることとなる。すなわち、デバイスドライバが割り込みを受け付けたときに、メッセージ処理用スレッドで、割り込み処理よりも優先して実行するように設定されている処理が行われているので、割り込み処理の実行は待たされることとなる。
【0085】
その後、メッセージ処理Bで、メソッド「AllowInterrupt()」が呼び出されると、メッセージ処理Bが中断されて(suspended)、メッセージ処理用スレッドから割り込み処理用スレッドにコンテキストスイッチし、割り込みメッセージ「Interrupt」に対応した割り込み処理が起動される(invoked for interrupt handling)。ここで、割り込み処理は、割り込み処理用スレッドで実行される。このように、本例では、割り込み遅延(interrupt latency)は、割り込みが発生したときから、メッセージ処理Bでメソッド「AllowInterrupt()」が呼び出されて割り込みが可能となって割り込み処理が起動されるまでとなる。
【0086】
そして、デバイスドライバは、割り込みハンドラによって、割り込みメッセージ「Interrupt」に応じた所定の割り込み処理を行い、当該割り込み処理の結果として、メッセージ「RequestA」に対する返答を送出する(Reply for RequestA)。
【0087】
その後、割り込み処理が終了したら、メソッド「ExitFromInterrupt()」を実行し、割り込み処理用スレッドを開放する。そして、これに伴って割り込み処理用スレッドからメッセージ処理用スレッドにコンテキストスイッチし、中断されていたメッセージ処理Bが再開される(resumed)。そして、メッセージ処理Bが終了したら、メソッド「Exit()」を実行し、メッセージ処理用スレッドを開放する。
【0088】
以上のように、図4に示した例では、メッセージ処理Bの最中に割り込みマスクが開いている期間が存在するため、割り込みマスクが開いたときに、メッセージ処理Bが中断されて、割り込み処理が実行される。すなわち、本例では、メソッド「BlockInterrupt()」やメソッド「AllowInterrupt()」によって、各メッセージ処理において、割り込み処理に対するマスクを設定することが可能となっており、メッセージ処理が行われていたとしても、メソッド「AllowInterrupt()」によって割り込みが可能となった瞬間に割り込みハンドラが動き出すこととなる。
【0089】
したがって、本例では、割り込みがあったときに、メッセージ処理の終了を待つことなく、割り込み処理を実行するようにすることが可能であり、これにより、割り込み遅延を短くすることができる。しかも、本例では、メッセージ処理に関しては単一スレッドで実行されるため、メッセージ処理に関しては、割り込み処理以外の処理との同期を考慮する必要がない。したがって、プログラミングが非常に容易となる。
【0090】
以上、詳細に説明したように、タイプ2では、割り込みハンドラを登録したときに、当該割り込みハンドラ専用のスレッドとして割り込み処理用スレッドを割り当てる。そして、割り込み処理用スレッドが動いている期間を、割り込みマスクが閉じている期間とする。換言すれば、タイプ2では、メッセージ処理用スレッドが動いていたとしても、割り込み処理用スレッドが動いていなければ、割り込みを受け付けることができ、これにより、割り込み遅延時間を短縮することができる。
【0091】
しかも、単なるマルチスレッドプログラミングとは異なり、本例では、メッセージ処理については、単一スレッドであるメッセージ処理用スレッドだけで動作するため、デバイスドライバを並行オブジェクトとして記述したときの利点が失われるようなことはない。
【0092】
また、タイプ2において、メッセージ処理における排他制御は、割り込みハンドラによる割り込み処理スレッドでの割り込み処理に対する排他制御だけを行えばよい。したがって、本例では、排他制御を行う部分が各デバイスドライバ内で閉じることとなり、各デバイスドライバにおけるメッセージ処理と割り込み処理との同期を図るための排他制御が、他のデバイスドライバの動作に影響を与えるようなことがなくなる。そして、各デバイスドライバにおける排他制御が他のデバイスドライバの動作に影響を与えないので、例えば、デバイスドライバの動的な変更を容易に実現することも可能となる。すなわち、例えば、ネットワークを介してプログラムモジュールをダウンロードすることにより、デバイスドライバを動的に変更可能とするようなことも実現可能となる。
【0093】
2−3−3 本発明を適用したときの割り込みマスク(その2)
つぎに、本発明を適応した場合の他の例について説明する。本例では、デバイスドライバをマルチスレッドオブジェクトとして記述するとともに、メッセージ処理用スレッドでも割り込み処理の実行を可能とする。なお、以下の説明において、本例のようなプログラミングスタイルのことを「タイプ3」と称する。
【0094】
本発明において、一つの割り込み用スレッドの中では排他的に割り込み処理を行う。このため、タイプ2では、図5に示すように、割り込みが連続して生じたときに、先の割り込みメッセージ「InterruptA」に応じた割り込み処理Aの実行に要する時間だけ、後の割り込みメッセージ「InterruptB」に応じた割り込み処理Bは待たされることとなる。タイプ3では、このようなケースをも想定して、更に割り込み遅延時間の短縮を図るようにしている。
【0095】
具体的には、タイプ3では、割り込み処理を優先順位の異なる複数の処理に分けて、割り込み処理のうち、優先順位が高い処理だけを割り込み処理用スレッドに割り当てて実行し、優先順位が低い処理に関してはメッセージ処理用スレッドに割り当てて実行するようにする。ここで、割り込み処理用スレッドに割り当てられる優先順位が高い処理は、ハードウェアの制御のために即座に行わなければならない処理である。また、メッセージ処理用スレッドに割り当てられる優先順位が低い処理は、例えば、共有メモリへのデータのコピーやクライアントへの返答等にように、直接ハードウェアの制御とは関係がなく、即座に行う必要がない処理である。
【0096】
このタイプ3のプログラミングスタイルでの実行モデルについて、図6を参照して具体的に説明する。なお、図6は上述のシナリオのときの実行モデルを示している。
【0097】
図6の例では、先ず、デバイスドライバに対してメッセージ「RequestA」が入力され、当該メッセージ「RequestA」に基づくメッセージ処理Aが起動される(invoked by message passing)。ここで、メッセージ処理Aは、メッセージ処理用スレッドで実行される。このメッセージ処理Aにおいて、メソッド「BlockInterrupt()」が呼び出され、その後、メソッド「AllowInterrupt()」が呼び出されるまでの期間(図中の斜線部分)は、割り込み処理よりもメッセージ処理を優先して実行するように設定された期間である。したがって、この期間には、割り込みがあったとしても、割り込み処理の実行は待たされることとなる。
【0098】
そして、デバイスドライバは、デバイスドライバ側での処理が完了したら、ハードウェア側での処理状況に関わらず、メソッド「Exit()」を実行し、メッセージ処理用スレッドを開放する。このとき、デバイスドライバは、ハードウェアでの処理が完了したことを示す割り込みがハードウェアから入ってくるまで、メッセージ「RequestA」に対する返答を保留したままとしておく。
【0099】
次に、デバイスドライバに対してメッセージ「RequestB」が入力され、当該メッセージ「RequestB」に基づくメッセージ処理Bが起動される(invoked by message passing)。ここで、メッセージ処理Bは、メッセージ処理用スレッドで実行される。このメッセージ処理Bにおいても、メソッド「BlockInterrupt()」が呼び出され、その後、メソッド「AllowInterrupt()」が呼び出されるまでの期間(図中の斜線部分)は、割り込み処理よりもメッセージ処理を優先して実行するように設定された期間である。したがって、この期間には、割り込みがあったとしても、割り込み処理の実行は待たされることとなる。
【0100】
そして、メッセージ処理Bを行っている最中に、メッセージ「RequestA」に基づいて行われていたハードウェア側の処理が完了したとする。これは、デバイスドライバに対して割り込みを要求する事象であり、ハードウェア側の処理の完了に伴う所定の割り込み処理を行うように要求する割り込みメッセージ「Interrupt」が、ハードウェアからオペレーティングシステムを介して、デバイスドライバに入力される。
【0101】
しかしながら、図6の例において、割り込みが発生した時点は、メッセージ処理Bにおいて、メソッド「BlockInterrupt()」が呼び出された後であって、メソッド「AllowInterrupt()」が呼び出される前である。したがって、割り込みメッセージ「Interrupt」に応じた割り込み処理の実行は待たされることとなる。
【0102】
その後、メッセージ処理Bで、メソッド「AllowInterrupt()」が呼び出されると、メッセージ処理Bが中断されて(suspended)、メッセージ処理用スレッドから割り込み処理用スレッドにコンテキストスイッチし、割り込みメッセージ「Interrupt」に対応した割り込み処理が起動される(invoked for interrupt handling)。ここで、割り込み処理は、割り込み処理用スレッドで実行される。このように、本例では、割り込み遅延(interrupt latency)は、割り込みが発生したときから、メッセージ処理Bでメソッド「AllowInterrupt()」が呼び出されて割り込みが可能となって割り込み処理が起こされるまでとなる。
【0103】
そして、デバイスドライバは、割り込みハンドラによって、割り込みメッセージ「Interrupt」に応じた所定の割り込み処理を行うが、このとき、割り込みハンドラは、割り込み処理を、即座に実行しなければならない部分と、即座に実行する必要がない部分とに分ける。そして、即座に実行しなければならない処理だけを割り込み処理用スレッドで即座に実行する。一方、割り込み処理のうち、即座に実行する必要がない処理については、メッセージ処理用スレッドに割り当てられ、後述するように、メッセージ処理Bが終了した後に実行されることとなる。
【0104】
そして、割り込み処理用スレッドでの、即座に実行しなければならない処理が終了したら、割り込み処理用スレッドからメッセージ処理用スレッドにコンテキストスイッチし、中断されていたメッセージ処理Bが再開される(resumed)。そして、メッセージ処理Bが終了したら、メソッド「Exit()」を実行し、メッセージ処理用スレッドを開放する。
【0105】
そして、メッセージ処理Bが終了したら、上述の割り込み処理のうち、即座に実行する必要がないとされていた処理が、メッセージ処理用スレッドで実行され、この処理の結果として、メッセージ「RequestA」に対する返答が送出される(Reply for RequestA)。そして、割り込み処理が終了したら、メソッド「ExitFromInterrupt()」を実行し、メッセージ処理用スレッドを開放する。
【0106】
以上のように、タイプ3では、割り込み処理を、即座に実行する必要がある部分と、即座に実行する必要がない部分とに分ける。そして、即座に実行する必要がある処理についてだけ、割り込み処理用スレッドで実行し、即座に実行する必要がない処理については、メッセージ処理用スレッドで実行する。そして、これにより、割り込みマスクが連続して閉じている期間を、更に減少することが可能となる。
【0107】
なお、図6の例では、割り込み処理用スレッドで割り込み処理を実行することによって割り込みマスクが閉じている時間は減少しているが、割り込みが1回だけの例であるので、図6の例における割り込み遅延は、図4に示した例の場合と同様となっている。
【0108】
そこで、タイプ3を適用することによって、実際に割り込み遅延時間が短縮される具体的な実行モデルについて、図7を参照して説明する。
【0109】
図7の例では、先ず、デバイスドライバに対してメッセージ「RequestA」が入力され、当該メッセージ「RequestA」に基づくメッセージ処理Aが起動される(invoked by message passing)。ここで、メッセージ処理Aは、メッセージ処理用スレッドで実行される。そして、デバイスドライバは、デバイスドライバ側での処理が完了したら、ハードウェア側での処理状況に関わらず、メッセージ処理Aを終了し、メッセージ処理用スレッドを開放する。このとき、デバイスドライバは、メッセージ「RequestA」に基づく処理が完了したことを示す割り込みがハードウェアから入ってくるまで、メッセージ「RequestA」に対する返答を保留したままとしておく。
【0110】
次に、デバイスドライバに対してメッセージ「RequestB」が入力され、当該メッセージ「RequestB」に基づくメッセージ処理Bが起動される(invoked by message passing)。ここで、メッセージ処理Bは、メッセージ処理用スレッドで実行される。そして、デバイスドライバは、デバイスドライバ側での処理が完了したら、ハードウェア側での処理状況に関わらず、メッセージ処理Bを終了し、メッセージ処理用スレッドを開放する。このとき、デバイスドライバは、メッセージ「RequestB」に基づく処理が完了したことを示す割り込みがハードウェアから入ってくるまで、メッセージ「RequestB」に対する返答を保留したままとしておく。
【0111】
その後、メッセージ「RequestA」に基づいて行われていたハードウェア側の処理が完了し、ハードウェア側の処理の完了に伴う所定の割り込み処理を行うように要求する割り込みメッセージ「InterruptA」が、ハードウェアからオペレーティングシステムを介してデバイスドライバに入力され、当該割り込みメッセージ「InterruptA」に対応した割り込み処理Aが起動される(invoked for handling interruptA)。このとき、割り込みハンドラは、割り込み処理を、即座に実行しなければならない部分と、即座に実行する必要がない部分とに分ける。そして、即座に実行しなければならない処理だけを割り込み処理用スレッドで即座に実行し、即座に実行する必要がない処理については、メッセージ処理用スレッドに割り当てる。
【0112】
そして、割り込み処理のうち、即座に実行しなければならない処理を割り込み処理用スレッドで実行しているときに、メッセージ「RequestB」に基づいて行われていたハードウェア側の処理が完了し、割り込み処理を行うように要求する割り込みメッセージ「InterruptB」が、ハードウェアからオペレーティングシステムを介してデバイスドライバに入力されたとする。しかしながら、このときには割り込み処理用スレッドが動いているので、割り込みは受け付けられず、割り込み処理用スレッドがあくまで、割り込みメッセージ「InterruptB」に対応した割り込み処理Bは待たされることとなる。
【0113】
そして、割り込み処理用スレッドがあいたら、すなわち、割り込みメッセージ「InterruptA」に対応した割り込み処理Aのうち、即座に実行しなければならない処理が終了したら、割り込みメッセージ「InterruptB」に対応した割り込み処理Bが起動される(invoked for handling interruptB)。
【0114】
ここで、割り込みメッセージ「InterruptB」に対応した割り込み処理Bが起動されるのは、割り込みメッセージ「InterruptA」に対応した割り込み処理Aの全てが終了してからではなく、割り込みメッセージ「InterruptA」に対応した割り込み処理Aのうち、即座に実行しなければならない処理が終了した段階である。したがって、割り込みメッセージ「InterruptB」に対応した割り込み処理Bについて、その割り込み遅延(interrupt latency)は、タイプ2の場合よりも短くて済む。
【0115】
そして、割り込みメッセージ「InterruptB」に対応した割り込み処理Bを行う際も、割り込みハンドラは、当該割り込み処理Bを、即座に実行しなければならない部分と、即座に実行する必要がない部分とに分ける。そして、即座に実行しなければならない処理だけを割り込み処理用スレッドで即座に実行し、即座に実行する必要がない処理については、メッセージ処理用スレッドに割り当てる。
【0116】
その後、割り込み処理用スレッドでの処理が終了したら、すなわち、割り込みメッセージ「InterruptB」に対応した割り込み処理Bのうち、即座に実行しなけらばならない処理が終了したら、割り込み処理用スレッドからメッセージ処理用スレッドにコンテキストスイッチする。そして、割り込みメッセージ「InterruptA」に対応した割り込み処理Aのうち、即座に実行する必要がないとされていた処理が、メッセージ処理用スレッドで実行され、この処理の結果として、メッセージ「RequestA」に対する返答が送出される(Reply for RequestA)。その後、割り込みメッセージ「InterruptB」に対応した割り込み処理Bのうち、即座に実行する必要がないとされていた処理が、メッセージ処理用スレッドで実行され、この処理の結果として、メッセージ「RequestB」に対する返答が送出される(Reply for RequestB)。
【0117】
以上詳細に説明したように、タイプ3では、割り込みマスクが連続して閉じる時間を、タイプ2よりも更に短縮することが可能となり、割り込み遅延時間を更に短縮することが可能となる。
【0118】
2−4 デバイスドライバの動作環境
以上、従来技術で実現されるタイプ1と、本発明を適用して実現されるタイプ2及びタイプ3とについて詳細に説明したが、これらの動作環境には、上位互換性を持たせることが好ましい。すなわち、タイプ2の環境では、タイプ1のデバイスドライバも動作できるようにし、タイプ3の環境では、タイプ1やタイプ2のデバイスドライバも動作できるようにすることが好ましい。
【0119】
これにより、全デバイスドライバのうちでもっとも多くの機能を要求するデバイスドライバに対応した環境を提供すれば、異なるタイプのデバイスドライバが混在していたとしても、全てのデバイスドライバを正常に動作させることが可能となる。
【0120】
ところで、タイプ2は、マルチスレッドを実現するために、タイプ1よりも、オペレーティングシステムに対してより多くの機能を要求する。また、タイプ3は、割り込み処理を割り込み処理用スレッドとメッセージ処理用スレッドとに振り分ける処理を実現するために、タイプ2よりも、オペレーティングシステムに対してより多くの機能を要求することとなる。
【0121】
このため、オペレーティングシステムのサイズは、タイプ1の環境を提供するオペレーティングシステムよりも、タイプ2の環境を提供するオペレーティングシステムのほうが大きくなり、また、タイプ1やタイプ2の環境を提供するオペレーティングシステムよりも、タイプ3の環境を提供するオペレーティングシステムのほうが大きくなる。
【0122】
したがって、割り込み遅延時間がより短くて済むタイプ3の環境を提供するオペレーティングシステムを使用するのが常に好ましいとは限らない。すなわち、割り込み遅延時間に対する要求等を考慮して、必要な機能を満たす最適なオペレーティングシステムを選択するようにしても良く、これにより、オペレーティングシステムのサイズを抑えることができる。
【0123】
【発明の効果】
以上、詳細に説明したように、本発明によれば、オブジェクト指向を適用したデバイスドライバをベースにして、その利点を失う事なく、割り込み遅延時間の短縮を図ることができる。
【図面の簡単な説明】
【図1】本発明を適用したテレビ装置に一例について、その概略構成を示す図である。
【図2】デバイスドライバの実行モデルを示す図である。
【図3】従来技術によるデバイスドライバの割り込みマスクの制御例として、タイプ1での割り込みマスクの制御例を示す図である。
【図4】本発明を適用したデバイスドライバの割り込みマスクの制御例のうち、タイプ2での割り込みマスクの制御例を示す図である。
【図5】本発明を適用したデバイスドライバの割り込みマスクの制御例のうち、タイプ2での割り込みマスクの制御例を示す図である。
【図6】本発明を適用したデバイスドライバの割り込みマスクの制御例のうち、タイプ3での割り込みマスクの制御例を示す図である。
【図7】本発明を適用したデバイスドライバの割り込みマスクの制御例のうち、タイプ3での割り込みマスクの制御例を示す図である。
【図8】デバイスドライバをオペレーティングシステムの一部として実現した、従来のデバイスドライバプログラミングを示す図である。
【図9】デバイスドライバを並行オブジェクトとして実現した、オブジェクト指向デバイスドライバプログラミングを示す図である。
【符号の説明】
1 バス/IOブリッジ、 2 バス、 3 テレビ機能部、 4 バス/メモリブリッジ、 5 プロセッサ、 6 ROM、 7 RAM、 8 操作パネル、 9 外部記憶装置、 10 通信装置
Claims (12)
- ハードウェア制御を行うデバイスドライバを、一つのメッセージ処理用スレッドと、一つ以上の割り込み処理用スレッドとを割り当てることが可能なマルチスレッドオブジェクトとして記述し、
デバイスドライバが他のオブジェクトから入力されたメッセージに基づく処理を行う場合には、当該処理をメッセージ処理用スレッドに割り当てて実行し、
デバイスドライバに対して割り込みを要求する事象が発生したときに、各事象に対応する割り込み処理用スレッドが、既に割り込み処理を実行している場合には、メッセージ処理用スレッドの状態に関わらず、上記事象に対応する割り込み処理を実行せずに、対応した割り込み処理用スレッドにて他の割り込みに応じた割り込み処理が終了してから、当該割り込み処理用スレッドにて上記事象に対応する割り込み処理を実行すること
を特徴とするデータ処理方法。 - メッセージ処理用スレッドでの処理と、割り込み処理用スレッドでの割り込み処理との優先順位を設定できるようにしておき、
デバイスドライバが割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われている場合には、メッセージ処理用スレッドでの処理が終了するまで、或いは、メッセージ処理用スレッドでの処理よりも割り込み処理を優先するように設定が変更されるまで、割り込み処理の実行を待たせておき、
デバイスドライバが割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われていない場合には、直ぐに割り込み処理用スレッドで割り込み処理を実行すること
を特徴とする請求項1記載のデータ処理方法。 - 割り込み処理を優先順位の異なる複数の処理に分けて、優先順位が高い処理を割り込み処理用スレッドに割り当てて実行し、優先順位が低い処理をメッセージ処理用スレッドに割り当てて実行すること
を特徴とする請求項1記載のデータ処理方法。 - 上記デバイスドライバは、オペレーティングシステム上で複数のデバイスドライバが並行して動作することが可能な並行オブジェクトとして記述されていること
を特徴とする請求項1記載のデータ処理方法。 - ハードウェア制御を行うプログラムであるデバイスドライバが記録されたコンピュータ読み取り可能な記録媒体であって、
上記デバイスドライバは、
一つのメッセージ処理用スレッドと、一つ以上の割り込み処理用スレッドとを割り当てることが可能なマルチスレッドオブジェクトとして記述され、
当該デバイスドライバが他のオブジェクトから入力されたメッセージに基づく処理を行う場合には、当該処理をメッセージ処理用スレッドに割り当てて実行し、
当該デバイスドライバに対して割り込みを要求する事象が発生したときに、各事象に対応する割り込み処理用スレッドが、既に割り込み処理を実行している場合には、メッセージ処理用スレッドの状態に関わらず、上記事象に対応する割り込み処理を実行せずに、対応した割り込み処理用スレッドにて他の割り込みに応じた割り込み処理が終了してから、当該割り込み処理用スレッドにて上記事象に対応する割り込み処理を実行すること
を特徴とする記録媒体。 - 上記デバイスドライバは、
メッセージ処理用スレッドでの処理と、割り込み処理用スレッドでの割り込み処理との優先順位を設定できるようになされており、
割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われている場合には、メッセージ処理用スレッドでの処理が終了するまで、或いは、メッセージ処理用スレッドでの処理よりも割り込み処理を優先するように設定が変更されるまで、割り込み処理の実行を待たせておき、
割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われていない場合には、直ぐに割り込み処理用スレッドで割り込み処理を実行すること
を特徴とする請求項5記載の記録媒体。 - 上記デバイスドライバは、割り込み処理を優先順位の異なる複数の処理に分けて、優先順位が高い処理を割り込み処理用スレッドに割り当てて実行し、優先順位が低い処理をメッセージ処理用スレッドに割り当てて実行すること
を特徴とする請求項5記載の記録媒体。 - 上記デバイスドライバは、オペレーティングシステム上で複数のデバイスドライバが並行して動作することが可能な並行オブジェクトとして記述されていること
を特徴とする請求項5記載の記録媒体。 - ハードウェア制御を行うプログラムであるデバイスドライバが記録された記録媒体を備え、当該記録媒体から上記デバイスドライバを読み取ることが可能なデータ処理装置であって、
上記デバイスドライバは、
一つのメッセージ処理用スレッドと、一つ以上の割り込み処理用スレッドとを割り当てることが可能なマルチスレッドオブジェクトとして記述され、
当該デバイスドライバが他のオブジェクトから入力されたメッセージに基づく処理を行う場合には、当該処理をメッセージ処理用スレッドに割り当てて実行し、
当該デバイスドライバに対して割り込みを要求する事象が発生したときに、各事象に対応する割り込み処理用スレッドが、既に割り込み処理を実行している場合には、メッセージ処理用スレッドの状態に関わらず、上記事象に対応する割り込み処理を実行せずに、対応した割り込み処理用スレッドにて他の割り込みに応じた割り込み処理が終了してから、当該割り込み処理用スレッドにて上記事象に対応する割り込み処理を実行すること
を特徴とするデータ処理装置。 - 上記デバイスドライバは、
メッセージ処理用スレッドでの処理と、割り込み処理用スレッドでの割り込み処理との優先順位を設定できるようになされており、
割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われている場合には、メッセージ処理用スレッドでの処理が終了するまで、或いは、メッセージ処理用スレッドでの処理よりも割り込み処理を優先するように設定が変更されるまで、割り込み処理の実行を待たせておき、
割り込みを受け付けたときに、割り込み処理よりも優先して実行するように設定されている処理がメッセージ処理用スレッドで行われていない場合には、直ぐに割り込み処理用スレッドで割り込み処理を実行すること
を特徴とする請求項9記載のデータ処理装置。 - 上記デバイスドライバは、割り込み処理を優先順位の異なる複数の処理に分けて、優先順位が高い処理を割り込み処理用スレッドに割り当てて実行し、優先順位が低い処理をメッセージ処理用スレッドに割り当てて実行すること
を特徴とする請求項9記載のデータ処理装置。 - 上記デバイスドライバは、オペレーティングシステム上で複数のデバイスドライバが並行して動作することが可能な並行オブジェクトとして記述されていること
を特徴とする請求項9記載のデータ処理装置。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP23497797A JP3794119B2 (ja) | 1997-08-29 | 1997-08-29 | データ処理方法、記録媒体及びデータ処理装置 |
US09/140,043 US6378006B1 (en) | 1997-08-29 | 1998-08-26 | Data processing method, recording medium and data processing apparatus |
EP98306916A EP0899660A1 (en) | 1997-08-29 | 1998-08-28 | Data processing method and apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP23497797A JP3794119B2 (ja) | 1997-08-29 | 1997-08-29 | データ処理方法、記録媒体及びデータ処理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH1173334A JPH1173334A (ja) | 1999-03-16 |
JP3794119B2 true JP3794119B2 (ja) | 2006-07-05 |
Family
ID=16979223
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP23497797A Expired - Fee Related JP3794119B2 (ja) | 1997-08-29 | 1997-08-29 | データ処理方法、記録媒体及びデータ処理装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US6378006B1 (ja) |
EP (1) | EP0899660A1 (ja) |
JP (1) | JP3794119B2 (ja) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6684401B1 (en) * | 1999-03-26 | 2004-01-27 | Sony Corporation | Method and system for independent incoming and outgoing message dispatching in a home audio/video network |
US6496873B1 (en) * | 1999-05-21 | 2002-12-17 | International Business Machines Corporation | Real time device driver interface apparatus and method therefor |
US6681384B1 (en) * | 1999-12-23 | 2004-01-20 | International Business Machines Corporation | Multi-threaded break-point |
US6658489B1 (en) * | 2000-03-29 | 2003-12-02 | International Business Machines Corporation | Method for replacing a device driver during system operation |
US6766520B1 (en) * | 2000-06-08 | 2004-07-20 | Unisys Corporation | Tape drive emulation software objects, and emulation of other peripheral systems for computers |
US7140018B1 (en) | 2000-06-20 | 2006-11-21 | International Business Machines Corporation | Method of using a distinct flow of computational control as a reusable abstract data object |
US6507903B1 (en) | 2000-06-20 | 2003-01-14 | International Business Machines Corporation | High performance non-blocking parallel storage manager for parallel software executing on coordinates |
US6832378B1 (en) | 2000-06-20 | 2004-12-14 | International Business Machines Corporation | Parallel software processing system |
KR100411113B1 (ko) * | 2001-08-31 | 2003-12-18 | 현대자동차주식회사 | 멀티 스레드 처리방법 |
US7043582B2 (en) | 2002-09-06 | 2006-05-09 | Intel Corporation | Self-nesting interrupts |
US7823158B2 (en) | 2005-08-18 | 2010-10-26 | International Business Machines Corporation | Adaptive scheduling and management of work processing in a target context in resource contention |
KR100763200B1 (ko) * | 2006-02-24 | 2007-10-04 | 삼성전자주식회사 | 인터럽트 가능한 스레드 동기화 방법 및 장치 |
US20070282928A1 (en) * | 2006-06-06 | 2007-12-06 | Guofang Jiao | Processor core stack extension |
US7730516B2 (en) * | 2007-02-27 | 2010-06-01 | Sony Corporation | TV-centric system |
US8024731B1 (en) * | 2007-04-25 | 2011-09-20 | Apple Inc. | Assigning priorities to threads of execution |
CN101661405B (zh) * | 2008-08-28 | 2012-08-29 | 国际商业机器公司 | 一种基于多处理器系统的多库函数调用方法和系统 |
CN103870326B (zh) * | 2012-12-11 | 2018-07-13 | 厦门雅迅网络股份有限公司 | 一种将中断处理程序底半部搬移到应用层的方法及应用 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5680624A (en) | 1993-12-21 | 1997-10-21 | Object Licensing Corporation | Object oriented interrupt system |
US5787246A (en) * | 1994-05-27 | 1998-07-28 | Microsoft Corporation | System for configuring devices for a computer system |
US5724503A (en) * | 1995-03-31 | 1998-03-03 | Sun Microsystems, Inc. | Method and apparatus for interpreting exceptions in a distributed object system |
US6134627A (en) * | 1996-11-04 | 2000-10-17 | Sun Microsystems, Inc. | Thread synchronization in a computer controlled by an object-based program |
US5978857A (en) * | 1997-07-22 | 1999-11-02 | Winnov, Inc. | Multimedia driver having reduced system dependence using polling process to signal helper thread for input/output |
-
1997
- 1997-08-29 JP JP23497797A patent/JP3794119B2/ja not_active Expired - Fee Related
-
1998
- 1998-08-26 US US09/140,043 patent/US6378006B1/en not_active Expired - Fee Related
- 1998-08-28 EP EP98306916A patent/EP0899660A1/en not_active Withdrawn
Also Published As
Publication number | Publication date |
---|---|
US6378006B1 (en) | 2002-04-23 |
EP0899660A1 (en) | 1999-03-03 |
JPH1173334A (ja) | 1999-03-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3794119B2 (ja) | データ処理方法、記録媒体及びデータ処理装置 | |
US6725457B1 (en) | Semaphore enhancement to improve system performance | |
US9135059B2 (en) | Opportunistic multitasking | |
US5721922A (en) | Embedding a real-time multi-tasking kernel in a non-real-time operating system | |
EP1054322B1 (en) | Computer system with multiple operating system operation | |
US5381347A (en) | Method and system for displaying images on a display device using an offscreen video memory | |
US5828881A (en) | System and method for stack-based processing of multiple real-time audio tasks | |
US7200695B2 (en) | Method, system, and program for processing packets utilizing descriptors | |
US7921151B2 (en) | Managing a plurality of processors as devices | |
EP0475600A2 (en) | System and method for communication between windowing environments | |
KR19990082226A (ko) | 버스 구조 위에서의 데이터 전달 및 버스 관리를 위한 응용 프로그래밍 인터페이스 | |
JPH1078882A (ja) | ハードウェア資源マネージャ | |
US6961945B2 (en) | Method and apparatus for adapting and hosting legacy user interface controls | |
JPH03121555A (ja) | 周辺装置支援システム | |
US5608651A (en) | Method and apparatus for scheduling and mixing media in a multi-media environment | |
US6728834B2 (en) | System and method for effectively implementing isochronous processor cache | |
WO2024222658A1 (zh) | 任务管理方法、装置、电子设备及介质 | |
US7266619B2 (en) | Framework for high-performance hardware abstraction | |
WO2019079940A1 (zh) | 图形处理方法及相关装置和设备 | |
EP0905620B1 (en) | Data processing method and recording medium | |
US20010025324A1 (en) | Data communication method and apparatus, and storage medium storing program for implementing the method and apparatus | |
JP3349547B2 (ja) | スケジューリングシステム | |
JP3823468B2 (ja) | データ処理方法、記録媒体及びデータ処理装置 | |
US6012082A (en) | CPU-cycle stealing for multi-tasking operating system | |
JPH01282668A (ja) | 処理時間調停方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040406 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040406 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060322 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060404 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090421 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100421 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100421 Year of fee payment: 4 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100421 Year of fee payment: 4 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100421 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110421 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110421 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120421 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120421 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130421 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130421 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140421 Year of fee payment: 8 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |