(57)【特許請求の範囲】
【請求項１】
オペレーティングシステムによって記憶領域が、オペレーティングシステム自体が置かれるカーネル空間とユーザ空間とに分けて管理され、前記カーネル空間にデバイス制御プログラムが読み込まれ、前記ユーザ空間にアプリケーションプログラムが読み込まれるコンピュータを具備するデバイス制御装置において、
周辺機器を制御するアルゴリズムが記述されたスクリプトが前記記憶領域のシーケンス書換が容易な前記ユーザ空間に記憶されており、
前記記憶領域の前記カーネル空間に前記スクリプトを保存するスクリプト保存領域を備え、
前記デバイス制御プログラムは、ユーザ空間に記憶されている前記スクリプトを、カーネル空間にある前記スクリプト保存領域に、前記アプリケーションプログラムの実行時に読み込み、該読み込んだスクリプトを逐次解釈して前記カーネル空間で実行することにより周辺機器を制御する処理を前記コンピュータに実行させることを特徴とするデバイス制御装置。
【請求項２】
記憶領域が、オペレーティングシステムが置かれるカーネル空間とアプリケーションプログラムが読み込まれるユーザ空間とに分かれているコンピュータのデバイス制御プログラムであって、
前記カーネル空間にデバイスドライバを読み込むステップと、
シーケンス書換が容易な前記ユーザ空間に記憶されており周辺機器を制御するアルゴリズムが記述されたスクリプトを前記カーネル空間にあるスクリプト保存領域に、前記アプリケーションプログラムの実行時に読み込むステップと、
前記デバイスドライバが、前記スクリプト保存領域から前記スクリプトを読み込み、該読み込んだスクリプトを逐次解釈して前記カーネル空間上で実行することにより周辺機器を制御するステップと、
の処理を前記コンピュータに実行させることを特徴とするデバイス制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータの記憶装置、周辺機器を制御するデバイス制御装置及びデバイス制御方法並びにコンピュータのオペレーティングシステム（以下「ＯＳ」と記す。）のデバイスドライバを用いたデバイス制御プログラム、放送受像機に関する。
【背景技術】
【０００２】
一般的なＯＳにおいては、アプリケーションプログラムが置かれるユーザ空間と、ＯＳ自体が置かれるカーネル空間が存在する。すなわち、ＯＳあるいはＣＰＵ（中央演算処理装置）によってコンピュータの記憶領域がユーザ空間とカーネル空間に分けて管理される。例えば、これらの空間がメモリ等の記憶装置の記憶領域に直接にマッピングされる場合と、これらの空間が論理的な記憶領域として管理され、論理的な記憶アドレスと物理的な記憶アドレスとの間で変換が行われ、メモリ等の記憶装置の対応する記憶領域に記憶される場合とがある。
また、デバイスドライバとはコンピュータに接続された周辺機器を制御するプログラムである。近年、周辺機器を制御するために家庭用電気機器、すなわち家電にもＯＳ及びデバイスドライバが組み込まれつつある。
なお、一般的には、デバイスドライバというと、ＯＳに読み込まれて周辺機器を制御するプログラムであって、そのＯＳ用の記述仕様に沿って作成されたプログラムを指すことが多いが、本明細書、特許請求の範囲及び図面中においては、このようなデバイスドライバだけでなく、周辺機器を制御するプログラムであれば特にＯＳ用の記述仕様に従っていなくてもデバイスドライバと称する。
【０００３】
デバイスドライバがカーネル空間に読み込まれる場合、アプリケーションプログラムからの所定の呼び出し手順によりその処理が実行される。カーネル空間で実行される処理は、ユーザ空間で実行されるアプリケーションプログラムの処理よりも高い優先度が割り当てられ、コンピュータのあらゆる資源にアクセス可能な状態で行われる。
通常、デバイスドライバは特許文献１に記載されているように、カーネル空間に置かれ、ＯＳと一体になって実行される。この場合は、ＯＳのスケジューラによりアプリケーションプログラムの処理よりも優先的にデバイスドライバの処理が割当てられるため、応答速度の速い処理が可能となる。さらにカーネル空間からはハードウェアを直接制御できるため、処理全体も高速化できるという利点もある。
また、特許文献２に記載されているように、アプリケーションプログラム側でデバイスドライバの処理を行う場合もあり、この場合は、移植性が高く、デバッグも比較的容易であるという利点がある。
【特許文献１】特開平３−６８０５２号公報
【特許文献２】特開２００１−２６５６１２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
特許文献１に記載されているような、カーネル空間でデバイスドライバの処理を行う場合は、応答速度が速く、またハードウェアの制御を直接行うことができるため処理全体も高速化できる。しかしながら、カーネル空間に存在するデバイスドライバは、ＯＳの内部のモジュールとなり、ＯＳと独立していないため、デバイスドライバの処理内容を変更することが困難になる。すなわち、デバイスドライバの記述の仕方に制約事項があり、ＯＳに依存したデバイスドライバ作成方法を習得している必要があるため、ＯＳ間のデバイスドライバの移植も困難である。また、デバイスドライバの動作検証には一般的なアプリケーションプログラム用のデバッグソフトが使えないこと等により、デバイスドライバの処理内容を変更した後のデバッグや動作検証が困難である。
一方、特許文献２に記載されているような、アプリケーションプログラム側でドライバ処理を行う場合は、直接にハードウェアを制御することができず、ＯＳによる処理の優先度が低くなることにより、ハードウェアからの割込み応答処理速度が遅くなり、シビアなタイミングが要求される処理に対応できないなどの問題がある。
【課題を解決するための手段】
【０００５】
本発明は上記の問題点を解決するためになされたもので、本発明の記憶装置は、周辺機器を制御する処理シーケンスが記述されたスクリプトを記憶するユーザ空間と、前記スクリプトを読み込み、解釈することにより周辺機器の制御を実行するプログラムコードを記憶するカーネル空間とを備える。
一形態として、ユーザ空間のアプリケーションプログラムが実行されるときに、各デバイスを制御するために用いられるアルゴリズムを含むスクリプトがカーネル空間のドライバ処理部に読み込まれ、各デバイス処理部においてスクリプトが実行されることにより各デバイスが制御される。これにより、デバイスドライバの変更やデバッグが容易なまま処理速度の高速化を図ることが可能となる。
【０００６】
また、本発明の記憶装置は、周辺機器を制御する処理シーケンスが記述されたスクリプトを記憶するユーザ空間と、前記スクリプトを読み込み、周辺機器の制御を実行するためのプログラムコードに翻訳するプログラムコードを記憶するカーネル空間とを備える。
【０００７】
また、本発明の記憶装置は、周辺機器を制御する処理シーケンスが記述されたスクリプトを記憶するユーザ空間と、前記スクリプトを読み込み、解釈することにより周辺機器の制御を実行するプログラムコードを記憶するカーネル空間と、前記プログラムコードを実行することにより周辺機器を制御する中央演算処理装置とを備える。
【０００８】
また、本発明の記憶装置は、前記スクリプトを前記カーネル空間に保存するスクリプト保存手段を備える。
【０００９】
また、本発明のデバイス制御装置は、周辺機器を制御する処理シーケンスが記述されたスクリプトを記憶するユーザ空間と、前記スクリプトを読み込み、周辺機器の制御を実行するためのプログラムコードに翻訳するプログラムコードを記憶するカーネル空間と、前記プログラムコードを実行することにより周辺機器を制御する中央演算処理装置とを備える。
【００１０】
また、本発明のデバイス制御装置は、周辺機器を制御する処理シーケンスが記述されたスクリプトと、前記スクリプトを読み込み、周辺機器の制御を実行するためのプログラムコードに翻訳するプログラムコードを記憶するユーザ空間と、前記周辺機器の制御を実行するためのプログラムコードを記憶するカーネル空間と、前記周辺機器の制御を実行するためのプログラムコードを実行することにより周辺機器を制御する中央演算処理装置とを備える。
【００１１】
また、本発明のデバイス制御プログラムは、記憶領域がカーネル空間とユーザ空間とに分かれているコンピュータのデバイス制御プログラムであって、前記カーネル空間にデバイスドライバを読み込むステップと、前記ユーザ空間に周辺機器を制御する処理シーケンスが記述されたスクリプトを読み込むステップと、前記デバイスドライバが、前記スクリプトを読み込み、該読み込んだスクリプトに従って前記カーネル空間上で周辺機器を制御するステップとを備える。
【００１２】
また、本発明のデバイス制御プログラムは、前記スクリプトを前記カーネル空間に保存するステップを備える。
【００１３】
また、本発明のデバイス制御プログラムは、前記スクリプトを中央演算処理装置が実行可能なプログラムコードに変換し、前記変換したプログラムコードを前記カーネル空間に保存するステップを備える。
【００１４】
また、本発明の放送受像機は、記憶装置を備える。
また、本発明の放送受像機は、デバイス制御装置を備える。
また、本発明の放送受像機は、デバイス制御プログラムを備える。
【００１５】
また、本発明のデバイス制御方法は、記憶領域がカーネル空間とユーザ空間とに分けて管理されているコンピュータのデバイス制御方法であって、前記カーネル空間にデバイスドライバを読み込むステップと、前記ユーザ空間に周辺機器を制御する処理シーケンスが記述されたスクリプトを読み込むステップと、前記デバイスドライバが、前記スクリプトを読み込み、該読み込んだスクリプトに従って前記カーネル空間上で周辺機器を制御するステップとを有する。
【発明の効果】
【００１６】
本発明によれば、ユーザ空間にドライバ処理シーケンス（スクリプト）を置くことで、デバイスドライバの処理シーケンスの書き換えが容易となり、デバイスドライバの一部の不具合の場合は従来のようにＯＳ全体を入れ替える必要がない。また、ＯＳが異なる場合でもスクリプトの文法の統一化を図っておくことにより、ＯＳ間の移植性を高めることができる。また、スクリプトの文法に合わせたデバッグツールを用意する事が可能となるため、デバッグも比較的容易となるメリットが得られる。さらにプログラム実行時にカーネル空間でドライバ処理シーケンスが実行されるので、割込み応答速度も速く、またカーネル空間からはハードウェアを直接制御できるため、その処理も高速化できる。
【発明を実施するための最良の形態】
【００１７】
以下、図面を参照して本発明の実施形態を詳細に説明する。
図１は、周辺機器が接続されたコンピュータのソフトウェアの全体構成図である。このコンピュータにはｎ個の周辺機器が接続され、1番目、２番目、ｎ番目の周辺機器をそれぞれデバイス４１、４２、４３と表わす。
【００１８】
カーネル空間１、ユーザ空間２は、上述したようにコンピュータのＯＳによって管理される記憶領域である。カーネル空間１にはｎ個の周辺機器に対応してｎ個のデバイス処理部が読み込まれ配置されている。これらはそれぞれ対応する周辺機器を制御するプログラムであるデバイスドライバであり、ＣＰＵによって実行されることにより各々の周辺機器に応じた制御が行われる。すなわち、各々の周辺機器に応じた制御をコンピュータに実行させる。
以下の説明において、コンピュータに読み込まれたプログラムであるドライバ処理部１００、ドライバ処理部１００に含まれる実行部、処理部等、あるいはアプリケーションプログラム２００が何らかの処理を行うという記載は、それらのプログラムがコンピュータのＣＰＵによって実行されることにより当該処理をコンピュータに実行させることを意味する。
図１では1番目、２番目、ｎ番目のデバイス処理部をデバイス１処理部１０、デバイス２処理部２０、デバイスｎ処理部３０と表わす。これらはドライバ処理部１００を構成する。
【００１９】
ユーザ空間２にはアプリケーションプログラム２００が読み込まれ配置されている。一般に、アプリケーションプログラムは、実行形式ファイルとしてハードディスクあるいはその他のコンピュータ読み取り可能な記録媒体に記憶され、実行されるときにメモリに読み込まれるが、各デバイスドライバの処理内容を記述したスクリプトはアプリケーションプログラムの実行形式ファイルとは別のファイルに記述してハードディスク等に記憶しておいてもよい。あるいは、アプリケーションプログラムの実行形式ファイルにスクリプト保存部２０１としてドライバ処理スクリプト群を含んでもよい。スクリプトはデバイスを制御するために用いられるアルゴリズムが含まれているが、それだけでなく、例えば、音声又は映像の符号化アルゴリズム、暗号化アルゴリズム、復号化アルゴリズム等を含んでも良い。
【００２０】
ここで、スクリプトとは、処理シーケンス（処理手順）や処理データをテキストファイルの形で記述したものであり、従来例としてはシェルスクリプト、JavaScript（登録商標）、Perl等様々なものがあるが、本発明においては、これらに限定するものではなく、必要な処理を記述できるものであればどのようなものを用いてもよいし、新たなスクリプト言語を作成してもよい。例えば、カーネル空間に置かれる通常のデバイスドライバを記述する言語（Ｃ言語など）と同一の文法体系をもつスクリプト言語を作成して利用するようにすれば、カーネル空間に置かれる従来のデバイスドライバと同一の処理を、本発明のスクリプト型デバイスドライバに移植することが容易となる。
通常、スクリプトはインタプリタ型の言語であり、スクリプトの内容を逐次解釈しながら処理が実行される。本発明のスクリプトもこのような逐次解釈の形で実行するように実現可能であり、その場合は、スクリプトを逐次解釈するためのインタプリタをドライバ処理部１００が持っている形になる。「ドライバ処理部＝スクリプトのインタプリタ」と言える場合もある。
また、本発明では、スクリプトは逐次解釈される形のみを想定しているわけではなく、Ｃ言語など、従来のコンパイル型言語と同様に、最初の時点で実行形式（プログラムコード）にコンパイル（翻訳）され、その後はＣＰＵによって直接実行できるように実現することも可能である。これは、ドライバ処理部１００あるいはアプリケーションプログラム２００が、スクリプトを実行形式に翻訳するコンパイラを備え、スクリプトがドライバ処理部１００に読み込まれる際に、スクリプトを実行形式に翻訳したものを読み込ませることによって実現できる。
【００２１】
本発明のデバイスドライバであるドライバ処理部１００は、ＯＳ起動当初は、スクリプトが読み込まれていないため、デバイスドライバとしての処理が行えない。アプリケーションプログラム２００の実行前または実行時にドライバ処理部１００にスクリプトを読み込むことで、デバイスドライバの処理を行うことができるようになる。このスクリプトがドライバ処理部１００に読み込まれるタイミングは、例えば、ＯＳ起動時にスクリプト読み込み用プログラム（これもアプリケーションプログラム２００の一種である。）を実行し、その後他のアプリケーションプログラム２００を実行させるという方法がある。また、アプリケーションプログラム２００の実行時に、該アプリケーションプログラム２００起動直後の処理の部分でスクリプト読み込み処理を行わせるという方法もある。いずれにしても、デバイスドライバとしての処理（デバイスのオープン処理など）を行う前にスクリプトが読み込まれていればよい。
【００２２】
上記のスクリプトをドライバ処理部１００が読み込む手順は、例えば、ＯＳ起動時に、従来の（カーネル空間上の）デバイスドライバを読み込むのと同様な形で、上述したスクリプト読み込み用プログラムにおいて、スクリプトをドライバ処理部１００に読み込ませるようにしても良い。また、そのスクリプトによるデバイスドライバが特定のアプリケーションプログラム２００と密接に結びついている場合においては、次のような方法を取ることもできる。例えば、スクリプトをアプリケーションプログラム２００の実行形式ファイルとは別のファイルに保存する場合は、そのファイル名をアプリケーションプログラム２００からドライバ処理部１００に指定し、ドライバ処理部１００はそのファイル名に該当するファイルからスクリプトを読み出すことが可能である。また、アプリケーションプログラム２００の実行形式ファイルにスクリプトを含む場合は、例えば、アプリケーションプログラム２００がバッファ領域を確保してスクリプトの内容をコピーし、そのバッファ領域のアドレスをドライバ処理部１００に指定することにより、ドライバ処理部１００はそのバッファ領域からスクリプトを読み出すことが可能である。これらは一例であり、上記に限定されない。
【００２３】
図１の例においては、デバイス１処理部１０、デバイス２処理部２０、デバイスｎ処理部３０は、それぞれアプリケーションプログラム２００からスクリプト１１、スクリプト２１、スクリプト３１を読み込む。各デバイス処理部に読み込まれたスクリプトの実行は、インタプリタ型のプログラム言語で記述されたプログラムを実行する場合のように、逐次解釈して実行する形態としてもよいし、コンパイル型のプログラム言語で記述されたプログラムを実行する場合のように一括して全体を実行形式に変換してから実行する形態、例えば、スクリプトをアプリケーションプログラム２００から読み込むときに一括して全体を実行形式に変換してから実行する形態としてもよい。これらは一例であり、上記に限定されない。このようにしてスクリプトが実行されることにより、対応するデバイス４１、４２、４３が制御される。
【００２４】
ここで、スクリプトの具体例を説明する。アプリケーションプログラム２００からデバイスドライバであるドライバ処理部１００に処理を実行させるときの手順例は以下の通りである。
【００２５】
【表１】
0004727478.tif 000002
【００２６】
これは、従来の（カーネル空間上の）デバイスドライバを使用してアプリケーションプログラムからデバイス制御を行なう場合の処理とまったく同じである。すなわち、アプリケーションプログラム２００から、まず、デバイスをオープン（初期化）する関数を呼び出した後、デバイスからのデータの読み出しまたはデバイスへのデータの書き込みを行う関数を呼び出し、処理が終了したらデバイスをリリースする関数を呼び出す。これらが呼び出されるとＯＳ内部の制御によりデバイスドライバのexam_dev_open, exam_dev_read, exam_dev_write, exam_dev_releaseなどの処理が呼び出される。従来の（カーネル空間上）のデバイスドライバの場合は、デバイスドライバでの処理手順等はカーネル空間上に直接実行可能な形式で保存されているが、本発明においては、これらの処理手順等がスクリプトで定義される。スクリプトの一例（Ｃ言語ライクなもの）を以下に示す。
【００２７】
【表２】
0004727478.tif 000003
【００２８】
なお、exam_dev_openはカウンタを１増加させる処理を行い、exam_dev_releaseはカウンタを１減少させる処理を行い、exam_dev_readは後述する関数copy_to_userを呼び出してカーネル空間からユーザ空間へデータをコピーする処理を行い、exam_dev_writeは後述する関数copy_from_userを呼び出してユーザ空間からカーネル空間へデータをコピーする処理を行う。また、exam_dev_fopsはスクリプト内で用いられる構造体を定義し、init_module, cleanup_moduleはそれぞれデバイスドライバモジュールを初期化、解放するときに呼び出される。上記スクリプトはＣ言語ライクな文法規則に従って書かれているが、より簡単にデバイスドライバを記述できるようにスクリプトの文法を定義することもできる。上記のＣ言語ライクなスクリプトに記述された処理と同様な処理をより簡単な文法で記述した例を以下に示す。引数が一部省略でき、関数及び引数の型宣言が不要になる等、簡潔に記述できる文法となっている。
【００２９】
【表３】
0004727478.tif 000004
【００３０】
なお、上記スクリプトの処理の中でcopy_to_user、copy_from_user等は、カーネル空間とユーザ空間との間のデータのやり取りを行う関数である。JavaScript（登録商標）を始めとする他の一般的なスクリプト言語ではカーネル空間とユーザ空間を区別して扱う関数がサポートされていないため、上記のような処理を行うことはできない。本発明においては、上記のようなカーネル空間とユーザ空間との間のデータのやり取りをサポートするため、一例として上記の文法を規定し、また上記の関数が呼び出された場合は、本発明のデバイスドライバの内部でカーネル空間とユーザ空間の間のデータのやり取りを行う処理が実行される。
【００３１】
図２は、上記で言及した初期化処理、データ書込み処理、データ読込み処理、終了処理を含むスクリプト処理の概念図である。図２のスクリプト処理は、例えば音声又は映像の復号化アルゴリズム等を含むデータ処理、周辺機器等のハードウェアから出力される割込み信号を処理する割込み処理をさらに含む。この一例としてのスクリプトの処理内容は、カーネル空間での従来のデバイスドライバが行う処理シーケンスと同等のものを記載することができる。
【００３２】
アプリケーションプログラム２００はドライバ処理部１００に対して、初期化処理、データ書込み処理、データ読込み処理、終了処理等のための関数呼び出しを行う。これは上述したように、従来の（カーネル空間上の）デバイスドライバへの関数呼び出しと同様に行うことができる。図２の例では、アプリケーションプログラム２００からデータ書込み処理が呼び出されるとハードウェアに対する割り込み設定処理の後、データ処理が行なわれ、その後ハードウェアへの書き込み処理が行われ、また、書き込み処理が完了するとハードウェアから割込みが発生して割り込み処理が呼び出され、割り込み処理によってデータ読込み処理またはデータ書込み処理が呼び出され、データ読込み処理が呼び出されるとデータ処理が行われた後、アプリケーションプログラム２００に処理されたデータが渡される様子を表わしている。このときドライバ処理部１００の内部では、上記の各々の処理に対応するスクリプトを解釈して実行することにより周辺機器を制御する。
【００３３】
上記の処理を、書き込み処理と読み込み処理に分けてより具体的に説明する。
図３はアプリケーションがバス制御ドライバを介してハードウェアに対してデータの書込み処理を行う場合の概念図である。アプリケーションはハードウェア初期化などのドライバ初期化処理を行う（Ｓ１０１）。次に、書込むデータを用意された書き込み用のバッファに入力して、データ書込み処理を呼び出す（Ｓ１０２）。
データ書込み処理では、まず初期設定として、バススピード設定や、割り込みが開始されるように設定を行う（Ｓ１０３）。次に、バッファのデータの内で所定の送信単位(例では1byte)のデータ値をハードウェアのレジスタに書込み、データ送信をする（Ｓ１０４）。1byteのデータ送信が完了すると、ハードウェアが割込み処理を呼出す（Ｓ１０５）。割込み処理は次の1byteデータの入力をするために、データ書込み処理を呼出す（Ｓ１０６）。Ｓ１０４〜Ｓ１０６を繰り返し、全てのデータが書込まれると、アプリケーションにデータ書き込み終了を通知する（Ｓ１０７）。
【００３４】
図４はアプリケーションがバス制御ドライバを介してハードウェアに対してデータの読込み処理を行う場合の概念図である。アプリケーションはハードウェア初期化などのドライバ初期化処理を行う（Ｓ２０１）。次に、データ読込み処理を呼び出して、読込み用のバッファを用意してデータ読込み処理を呼出す（Ｓ２０２）。
データ読込み処理では、まず初期設定として、バススピード設定や、割り込みが開始されるように設定を行う（Ｓ２０３）。次に、バッファのデータの内で所定の取得単位(例では1byte)のデータ値をハードウェアのレジスタから読込んで、データを取得する（Ｓ２０４）。次の1byteのデータ取得が完了すると、ハードウェアが割込み処理を呼出す（Ｓ２０５）。割込み処理は次の1byteデータを取得するために、データ読込み処理を呼出す（Ｓ２０６）。Ｓ２０４〜Ｓ２０６を繰り返し、全てのデータが読込まれると、アプリケーションに読み込み終了を通知する（Ｓ２０７）。
【００３５】
以上のように構成されたデバイスドライバの利点を説明するために、従来のソフトウェアスタック構成と本発明のソフトウェアスタック構成とを比較すると次の通りである。
図６は従来の主な２つのソフトウェアスタック構成を示している。図６（ａ）はカーネル空間上でデバイスを制御する場合の構成である。カーネル空間のデバイスドライバ上に、デバイスを制御するドライバ処理シーケンスが実装されている。デバイスドライバはカーネル（以下、単に「カーネル」とはデバイスドライバを含まないＯＳを意味する）の管理下にあるため、ハードウェアなどからのドライバに対する割込み応答速度は速く、システム全体として最適にドライバ処理が行われる。
【００３６】
一方、図６（ｂ）はユーザ空間上でデバイスを制御する場合の構成である。ユーザ空間のアプリケーションプログラム上に、ドライバ処理シーケンスが実装されている。アプリケーションプログラム上にドライバモジュールを実装することで、デバッグが容易であるというメリットがあるが、割込み応答性能は遅いというデメリットもある。
【００３７】
そして、図５が本発明のソフトウェアスタック構成である。ユーザ空間上に保存しているスクリプト（周辺機器を制御するドライバ処理シーケンスが記述されたもの）が、ＯＳ起動時のスクリプト読み込み用プログラム（これもアプリケーションプログラムの一種であるが。）の実行時、あるいは他の（ＯＳ起動後の）アプリケーションプログラムの実行時などにカーネル空間上のデバイスドライバに読み込まれる。その後は、カーネル空間上でドライバ処理シーケンスが実行されるため、ハードウェアなどからのドライバに対する割込み応答速度は速く、システム全体として最適にドライバ処理が行われる。
【００３８】
次に、本発明のデバイスドライバを用いた装置の例を説明する。
図７は放送受像機を例とする本発明の一実施形態であり、周辺機器が接続された放送受像機に内蔵されたコンピュータのソフトウェアスタック構成を示す。なお、図７では図５におけるカーネルの記載は省略されている。コンピュータの記憶領域は論理的な空間としてユーザ空間とカーネル空間に分けられ、これらの空間におけるソフトウェアスタック構成は、ユーザ空間２にはアプリケーションプログラム２００、カーネル空間１にはデバイスドライバとして動作するドライバ処理部１００が読み込まれている。ドライバ処理部１００は、ハードウェアなどを制御する各種ドライバ処理シーケンスを記述したスクリプトを実行するスクリプト実行部１０１、スクリプトを保存するスクリプト保存部１０２、符号化された音声データを復号化するための音声復号化処理部１０３、符号化された映像データを復号化するための映像復号化処理部１０４、音声や映像などのデータを受信処理するためのデータ受信処理部１０５、タイマを用いて同期信号を生成するための同期信号生成部１０６、ユーザがリモコンなどを用いて設定した選局情報を受信するための選局情報受信部１０７、特定のバスに接続されたデバイスを制御するためのバス制御ドライバ１０８を含む。なお、バスとはコンピュータ内部でデータをやり取りするための伝送路のことであるが、周辺機器によっては特定のバスに接続することを前提に入出力インタフェースが定義されているものがあり、図７においては、音声複合化デバイス５６、映像複合化デバイス５７及びチューナ５４が、この特定のバスに接続されることを前提として設計されているものと仮定している。
【００３９】
例えば、スクリプトが逐次解釈される形（テキストファイル形式や、中間コード形式等）でスクリプト保存部１０２に保存されている場合は、スクリプト実行部１０１はスクリプトを逐次解釈しながら実行を行なう。スクリプトがドライバ処理部に読み込まれる際に実行形式に変換されてスクリプト保存部１０２に保存されている場合は、スクリプト実行部１０１は実行形式に変換されたスクリプトをそのまま実行できる。後者はスクリプトを読み込む際に実行形式に変換する時間を要するが、その後のドライバ処理は高速に実行できるというメリットがある。音声復号化処理部１０３、映像復号化処理部１０４、データ受信処理部１０５、同期信号生成部１０６、選局情報受信部１０７、バス制御ドライバ１０８は、スクリプト実行部１０１からの指示に従って周辺機器を制御するためのより詳細な処理を行う機能配分とすることが可能である。なお、音声復号化処理部１０３、映像復号化処理部１０４、データ受信処理部１０５、同期信号生成部１０６、選局情報受信部１０７、バス制御ドライバ１０８のそれぞれに、スクリプト実行部１０１及びスクリプト保存部１０２の両方または一方の機能を持たせる構成も可能である。
【００４０】
放送受像機に接続される周辺機器は、復号化された音声信号出力を行うスピーカ５１、復号化された映像信号出力を行うモニタ５２、ＯＳなどのシステムで同期を取るためのタイマ５３、放送波の受信を行うためのチューナ５４、リモコンからの送信信号の受信を行うリモコン受信部５５、音声データの復号化を行なう音声復号化デバイス５６、映像データの復号化を行なう映像復号化デバイス５７を含む。これらの周辺機器は放送受像機の筐体に内蔵されるか、あるいは放送受像機とは別個の筐体とされ放送受像機とケーブル又は無線で接続される。
【００４１】
次に、図８を参照して、図７のソフトウェアスタック構成におけるスクリプト処理の流れについて説明する。一例として、放送受像機を起動するスイッチがオンにされるとアプリケーションプログラム２００が放送受像機に内蔵されたコンピュータのユーザ空間２に読み込まれ、図８のフローチャートに示す処理が開始される。まず、ユーザ空間２のアプリケーションプログラム２００はドライバ処理シーケンスが記述されたドライバ処理スクリプト２０２をカーネル空間１のドライバ処理部１００に送信する（ステップＳ１１）。ドライバ処理部１００は送信されたドライバ処理スクリプト２０２を受信し、スクリプト保存部１０２に保存する（ステップＳ１２）。ここで、受信したドライバ処理スクリプト２０２を一括して実行形式に変換し、実行形式でスクリプト保存部１０２に保存してもよい。実行形式で保存される場合は、呼び出されたときに所定の処理を実行する機能モジュールと考えることができる。そして、ドライバ処理部１００はアプリケーションプログラム２００又はカーネルからの呼び出しに応じて各スクリプトを実行する（ステップＳ１３）。なお、スクリプトの送信及び受信とは、それぞれ、上述したスクリプトの指定及び読み込みに対応する。
【００４２】
図９は、図７の放送受像機におけるチューナ５４に関連する処理（復号化処理を含む）の流れを表すフローチャートである。一例として、放送受像機を起動するスイッチがオンにされると、アプリケーションプログラム２００が放送受像機に内蔵されたコンピュータのユーザ空間２に読み込まれ、図８を参照して説明したようにドライバ処理スクリプト２０２がドライバ処理部１００に送信される。そして、アプリケーションプログラム２００はドライバ処理部１００に対して、データ出力経路初期設定（ステップＳ２１）、チューナ初期化処理（ステップＳ２２）、チューナ選局処理（ステップＳ２３）を行うための関数呼び出しを行う。図９のフローチャートには示されていないが、ステップＳ２１〜ステップＳ２３のそれぞれにおける関数呼び出しに対して、ドライバ処理部１００では対応する周辺機器制御が行われる。例えば、データ出力経路初期設定は、スクリプト実行部１０１からの指示に従って音声復号化処理部１０３、映像復号化処理部１０４において出力先の周辺機器を設定する処理が行われ、チューナ初期化処理及びチューナ選局処理は、スクリプト実行部１０１からの指示に従ってデータ受信処理部１０５においてチューナ５４に対する初期化及び選局を行う。
【００４３】
次に、ドライバ処理部１００のデータ受信処理部１０５はチューナ５４からデータを取得する（ステップＳ２４）。データ受信処理部１０５は取得したデータを音声復号化処理部１０３及び映像復号化処理部１０４へ出力する。映像復号化処理部１０４は、タイマ５３から入力されるタイミング信号を用いて同期信号生成部１０６によって生成された同期信号に応じて、ドライバ処理スクリプト２０２に記述された処理シーケンスによるアルゴリズムと映像復号化デバイス５７を用いて映像信号を復号化する（ステップＳ２５）。復号化されたデータはモニタ５２へ送信される（ステップＳ２６）。そして、ステップＳ２４に戻り、処理を繰り返す。
【００４４】
図１０は、図７の放送受像機における復号化処理の流れを表わすフローチャートである。これは、図９のフローチャートにおけるステップＳ２４〜Ｓ２６を詳細化したものである。
チューナ５４が放送波を受信すると、チューナ５４はデータ受信処理部１０５に割込み信号を出力する（ステップＳ３１）。データ受信処理部１０５は割込み信号に応答し、チューナ５４からデータを取得する（ステップＳ３２）。データ受信処理部１０５は取得したデータを音声復号化処理部１０３及び映像復号化処理部１０４へ出力する。音声復号化処理部１０３、映像復号化処理部１０４は、ドライバ処理スクリプト２０２に記述された処理シーケンスによるアルゴリズムと音声復号化デバイス５６、映像復号化デバイス５７を用いてそれぞれ音声信号、映像信号を復号化する（ステップＳ３３）。なお、上述したように、映像復号化処理部１０４の処理は、タイマ５３から入力されるタイミング信号を用いて同期信号生成部１０６によって生成された同期信号に応じて行われる。復号化された音声信号、映像信号はそれぞれスピーカ５１、モニタ５２へ送信される（ステップＳ３４）。そして、ステップＳ３１に戻り、処理を繰り返す。
【００４５】
図１１は、図７の放送受像機におけるバス制御ドライバの処理を示したものである。バス制御ドライバはバスに接続されたデバイス間のデータ入出力を制御するためのドライバである。
一例としてカーネルがドライバ処理部１００に対して関数呼び出しを行うことにより、ドライバ初期化処理（ステップＳ４１）、データ格納領域設定及びバススピード設定（ステップＳ４２）が行われる。これらの初期化処理または設定処理は、スクリプト実行部１０１からの指示に従って上記のバス制御ドライバにおいて行われる。
そして、一例として周辺機器からデータの読み出し又は書き込み処理のための割込み信号が検出されると割込み処理が開始される（ステップＳ４３）。このとき１バイト単位で割込みが発生してバスへのデータの読み出し又は書き込みの処理が行われ（ステップＳ４４）、例えば、周辺機器から送信された所定のバイト数のデータの読み出し又は周辺機器への所定のバイト数のデータの書き込みが行われた後、割込み処理が終了する（ステップＳ４５）。一例として放送受像機の電源がオフされる前にバス制御ドライバの終了処理が行われる（ステップＳ４６）。
【００４６】
なお、上記の説明中の「コンピュータ読み取り可能な記録媒体」とは、ＲＯＭ、不揮発性メモリの他に、磁気ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ等の可搬媒体、コンピュータに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のシステムやクライアントとなるコンピュータ内部の揮発性メモリ（ＲＡＭ）のように、一定時間プログラムを保存しているものも含むものとする。
【００４７】
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【００４８】
以上のように、本発明の実施形態について説明を行ったが、今回開示した実施形態は全ての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は特許請求の範囲によって示され、特許請求の範囲と均等な範囲内での全ての変更が含まれる。
【図面の簡単な説明】
【００４９】
【図１】周辺機器が接続されたコンピュータのソフトウェアの全体構成図である。
【図２】スクリプト処理の概念図である。
【図３】データ書込み処理の概念図である。
【図４】データ読込み処理の概念図である。
【図５】本発明のソフトウェアスタック構成を表わす図である。
【図６】従来のソフトウェアスタック構成を表わす図である。
【図７】本発明の一実施形態による周辺機器が接続された放送受像機のソフトウェアスタック構成を表わす図である。
【図８】図５のソフトウェアスタック構成におけるスクリプト処理の流れを表わすフローチャートである。
【図９】図７の放送受像機におけるチューナに関連する処理の流れを表わすフローチャートである。
【図１０】図７の放送受像機における復号化処理の流れを表わすフローチャートである。
【図１１】図７の放送受像機におけるバス制御ドライバの処理の流れを表わすフローチャートである。
【符号の説明】
【００５０】
１・・・カーネル空間、２・・・ユーザ空間、１０・・・デバイス１処理部、１１、２１、３１・・・スクリプト、２０・・・デバイス２処理部、３０・・・デバイスｎ処理部、４１、４２、４３・・・デバイス、５１・・・スピーカ、５２・・・モニタ、５３・・・タイマ、５４・・・チューナ、５５・・・リモコン受信部、５６・・・音声復号化デバイス、５７・・・映像復号化デバイス、１００・・・ドライバ処理部、１０１・・・スクリプト実行部、１０２・・・スクリプト保存部、１０３・・・音声復号化処理部、１０４・・・映像復号化処理部、１０５・・・データ受信処理部、１０６・・・同期信号生成部、１０７・・・選局情報受信部、１０８・・・バス制御ドライバ、２００・・・アプリケーションプログラム、２０１・・・スクリプト保存部、２０２・・・ドライバ処理スクリプト
【図１】
0004727478.tif 000005
【図２】
0004727478.tif 000006
【図３】
0004727478.tif 000007
【図４】
0004727478.tif 000008
【図５】
0004727478.tif 000009
【図６】
0004727478.tif 000010
【図７】
0004727478.tif 000011
【図８】
0004727478.tif 000012
【図９】
0004727478.tif 000013
【図１０】
0004727478.tif 000014
【図１１】
0004727478.tif 000015