IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社aLabの特許一覧 ▶ 株式会社コナミデジタルエンタテインメントの特許一覧

特許7089840デバイスプロキシ装置及びそれを含む計算機システム
<>
  • 特許-デバイスプロキシ装置及びそれを含む計算機システム 図1
  • 特許-デバイスプロキシ装置及びそれを含む計算機システム 図2
  • 特許-デバイスプロキシ装置及びそれを含む計算機システム 図3
  • 特許-デバイスプロキシ装置及びそれを含む計算機システム 図4
  • 特許-デバイスプロキシ装置及びそれを含む計算機システム 図5
  • 特許-デバイスプロキシ装置及びそれを含む計算機システム 図6
  • 特許-デバイスプロキシ装置及びそれを含む計算機システム 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-06-15
(45)【発行日】2022-06-23
(54)【発明の名称】デバイスプロキシ装置及びそれを含む計算機システム
(51)【国際特許分類】
   G06F 13/12 20060101AFI20220616BHJP
   G06F 9/54 20060101ALI20220616BHJP
【FI】
G06F13/12 310A
G06F9/54 Z
【請求項の数】 8
(21)【出願番号】P 2016141471
(22)【出願日】2016-07-19
(62)【分割の表示】P 2016514189の分割
【原出願日】2015-08-31
(65)【公開番号】P2016197446
(43)【公開日】2016-11-24
【審査請求日】2018-07-31
【審判番号】
【審判請求日】2021-07-02
(31)【優先権主張番号】P 2014191563
(32)【優先日】2014-09-19
(33)【優先権主張国・地域又は機関】JP
(73)【特許権者】
【識別番号】311002252
【氏名又は名称】株式会社aLab
(73)【特許権者】
【識別番号】506113602
【氏名又は名称】株式会社コナミデジタルエンタテインメント
(74)【代理人】
【識別番号】110002295
【氏名又は名称】弁理士法人M&Partners
(72)【発明者】
【氏名】荒木 正之
(72)【発明者】
【氏名】高浜 元
【合議体】
【審判長】篠原 功一
【審判官】須田 勝巳
【審判官】新田 亮
(56)【参考文献】
【文献】特開2001-005622(JP,A)
【文献】特開2008-192128(JP,A)
【文献】特開2007-265064(JP,A)
【文献】特開2006-133825(JP,A)
【文献】特表2002-517855(JP,A)
【文献】米国特許出願公開第2008/0172682(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 13/10
G06F 9/48
(57)【特許請求の範囲】
【請求項1】
計算機上で動作するオペレーティングシステムのカーネルと前記計算機に接続されるデバイスとの間にデバイスプロキシ装置を介在させた状態で、前記計算機が前記デバイスを制御するために用いられるデバイスプロキシプログラムであって、
前記計算機及び前記デバイスプロキシ装置は、いずれもデバイスインターフェースを具備すると共にそれらが電気的に接続され、通信可能な状態で接続されており、
通知用ドライバを前記カーネルに登録するステップS1と、
デバイス設定情報を前記通知用ドライバを介して前記カーネルに読み込ませるステップS2と、
前記デバイス設定情報を基にドライバインターフェースを生成するステップS3と、
前記ドライバインターフェースをデバイスドライバとして前記カーネルに登録するステップS4と、
をいずれも前記計算機上で実行させることにより、
前記計算機のデバイスインターフェース及び前記デバイスプロキシ装置のデバイスインターフェースを介して前記デバイスに対する通信機能を提供するものであって、
a 前記通知用ドライバは、前記オペレーティングシステムに依存するが前記デバイスには依存しないプログラムであり、
b 前記デバイス設定情報はシナリオ・シーケンス・ファイルとして保持され、
c 前記ステップS1は前記オペレーティングシステムの起動時又は起動後に実行される一方、前記ステップS2は前記デバイスを初期化する際に実行され、前記デバイスの初期化が完了すると共に終了し、
d 前記ステップS3は前記ステップS2の後に実行され、前記シナリオ・シーケンス・ファイルを基にハンドラを生成するメインスレッドを実行するために、前記デバイスに対する読み出し及び書き込み(リードとライト)、標準化されていないデバイスを制御するための入出力制御(I/Oコントロール)及びシーケンスを生成する
ことを特徴とするプログラム。
【請求項2】
前記デバイス設定情報は、デバイスにのみ依存するパラメータ及び前記オペレーティングシステムに依存しないコマンドを含む請求項1記載のプログラム。
【請求項3】
前記ドライバインターフェースは、デバイスハンドラを用いて実現される請求項1又は請求項2記載のプログラム。
【請求項4】
前記ドライバインターフェースが前記カーネルに登録された状態において、
前記デバイス設定情報をユーザー権限で書き換えられるように構成された請求項1乃至のいずれか一項記載のプログラム。
【請求項5】
請求項1乃至請求項のいずれか一項記載のプログラムが実行される計算機に接続されるデバイスプロキシ装置であって、
前記デバイスの接続形式に応じたバス接続を提供する物理的インターフェースを具備すると共に前記物理的インターフェースと、前記物理的インターフェースに対応する論理的インターフェースに関する情報を前記シナリオ・シーケンス・ファイルとして前記計算機から受け取ることにより、実際に接続される機器に関する情報を前記カーネルから下段のデバイスプロキシ装置に順次通知することにより、多段接続を可能とすることを特徴とするデバイスプロキシ装置。
【請求項6】
前記オペレーティングシステムを動作させる計算機Aと、第1のデバイスプロキシ装置Bと、第2のデバイスプロキシ装置Cとが直列に接続された計算機システムであって、
前記計算機Aに対する1つ又は複数の前記デバイスが前記第1のデバイスプロキシ装置B又は第2のデバイスプロキシ装置Cを介して接続され、
前記第1のデバイスプロキシ装置B及び前記第2のデバイスプロキシ装置Cが、いずれも請求項記載のデバイスプロキシ装置である計算機システム。
【請求項7】
前記シナリオ・シーケンス・ファイルを前記計算機Aが保持している請求項記載の計算機システム。
【請求項8】
前記第2のデバイスプロキシ装置Cは、前記第1のデバイスプロキシ装置Bよりも相対的に低い計算処理能力を有するプロセッサを有する請求項又は請求項記載の計算機システム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、オペレーティングシステム(OS)のカーネルに登録される任意のデバイスを中継するハードウェア(デバイスプロキシ装置)及びそれを含む計算機システムに関する。
【背景技術】
【0002】
パソコンやスマートフォンなどの計算機に周辺機器(以下、「デバイス」という。)を接続して使用するには計算機とデバイスとの物理的接続だけでなく、デバイスドライバによって計算機がデバイスを認識して双方で通信可能な状態にする、「論理的接続」が必要とされる。
【0003】
デバイスドライバは、デバイスメーカー側でデバイスとOSの組合せ毎に専用プログラムとして作成されてデバイスと共にユーザ側に提供されることが一般的である。このような提供形態となる主な要因は、デバイスがそれぞれ固有の規格及び仕様に基づいて製造されているためであり、さらにいえば、デバイスドライバがデバイスだけでなくOSにも依存しているためである。
【先行技術文献】
【特許文献】
【0004】
【文献】特開平10-11384号公報
【文献】特開2004-70964号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
デバイスドライバは、デバイスごとに固有の規格や仕様に基づいて設計されるプログラムであり、端的に言えば、デバイスの構成(コンフィギュレーション)や設定に必要なパラメータ及び接続形式などの、ハードウェアに関する情報をカーネルに登録するためのプログラムである。すなわち、大部分がハードウェアに関する情報であり、OSへの依存がほとんどない部分から構成されている。しかし、同時に、OSとデバイスドライバとのインターフェース機能(これを本明細書では「ドライバインターフェース」という。)は、OSのカーネルに組み込まれ、カーネルはOS上で実行されている種々のプログラムとは別に、ドライバインターフェースを通じてコマンドやデータの通信や割り込み処理などを実行している。
【0006】
そのため、デバイスドライバがカーネルに登録されると接続先のデバイスを制御するために計算機のリソースが奪われ、場合によってはOSの動作が不安定になることもある。
【0007】
本発明は、上記に鑑みてなされたものであり、オペレーティングシステムを駆動するCPUの処理負担を軽減することを主たる目的とする。
【課題を解決するための手段】
【0008】
本発明に係る第1のデバイスプロキシ装置は、プロセッサ間通信が可能なマルチコアのマイクロプロセッサユニット(21)と、デバイス設定情報が記述されたシナリオ・シーケンス・ファイルを記憶する記憶手段(22)と、デバイスインターフェース(23)と、を備え、
前記マイクロプロセッサユニットのスレッドが分離された状態で
第1のプロセッサコアにより第1のオペレーティングシステムが駆動される一方、
第2のプロセッサコアにより前記デバイスインターフェースを制御するためのデバイスドライバが駆動され、
前記デバイス設定情報が前記プロセッサ間通信により共有されつつ、
前記デバイス設定情報に基づいて前記第1のオペレーティングシステムのカーネルに前記設定情報を通知するための通知用ドライバインターフェースがロードされて、前記通知用ドライバに前記シナリオ・シーケンス・ファイルが読み込まれることにより、
前記第2のプロセッサコアにより前記デバイスインターフェースに接続されたデバイスが制御されることを特徴とする。
【0009】
以上のように、マルチコアプロセッサの一つのマイクロプロセッサユニットを、デバイスを制御するための専用のプロセッサとして割り当てることで、デバイスの制御をOS管理下の外に置くことが可能となり、オペレーティングシステムを駆動するCPUの処理負担を軽減することができる。
【0010】
本発明に係る第2のデバイスプロキシ装置は、第1のプロセッサ(21)と、第2のプロセッサ(31)と、デバイス設定情報を記述したシナリオ・シーケンス・ファイルを記憶する記憶手段(22)と、デバイスインターフェース(23)と、を備え、
第1のプロセッサにより第1のオペレーティングシステムが駆動される一方、
第2のプロセッサにより前記デバイスインターフェースを制御するためのデバイスドライバが駆動され、
前記デバイス設定情報がバス接続によりプロセッサ間で共有されつつ、
前記デバイス設定情報に基づいて前記オペレーティングシステムのカーネルに前記設定情報を通知するための通知用ドライバインターフェースがロードされて、前記通知用ドライバに前記シナリオ・シーケンス・ファイルが読み込まれることにより、
前記第2のプロセッサにより前記デバイスインターフェースに接続されたデバイスが制御されることを特徴とする。
【0011】
本発明に係る第3のデバイスプロキシ装置は、第1のプロセッサ(21)と、デバイス設定情報を記述したシナリオ・シーケンス・ファイルを記憶する記憶手段(22)と、デバイスインターフェース(23)とを備えた計算機に前記デバイスインターフェースを介して接続されるデバイスプロキシ装置であって、
前記デバイスプロキシ装置は、
第3のプロセッサ(61)と、デバイスインターフェース(63)とを具備し、
第3のプロセッサにより前記デバイスインターフェースを制御するためのデバイスドライバが駆動され、
前記デバイス設定情報が前記デバイスインターフェースを介して共有されつつ、
前記デバイス設定情報に基づいて前記第1のプロセッサが駆動するオペレーティングシステムのカーネルに前記設定情報を通知するための通知用ドライバインターフェースがロードされて、前記通知用ドライバに前記シナリオ・シーケンス・ファイルが読み込まれることにより、
前記第3のプロセッサにより前記デバイスインターフェースに接続されたデバイスが制御されることを特徴とする。
【0012】
以上のような構成によれば、OS側からみるとデバイスが抽象化され、CPUの負荷を分散することにつながる。またデバイスプロキシ装置には一切情報が残らないことからデバイスがコンテンツを含む場合には耐タンパ性を高めることにもつながる。
【0013】
本発明に係る第4のデバイスプロキシ装置は、計算機上で動作するオペレーティングシステムのカーネルとデバイスの間に介在して前記デバイスを代理するデバイスプロキシ装置であって、
前記デバイスプロキシ装置自身及びその先に接続される後段のデバイスを動作させるために必要なデバイスドライバとしての機能と、
前記オペレーティングシステムとの間で前記デバイスの動作に必要な情報をやりとりする通信機能とを備え、
前記オペレーティングシステムに依存しない形式で記述されたデバイス設定情報を前記オペレーティングシステム側で保持しつつ、
前記通信機能を介して前記オペレーティングシステム側から前記デバイス設定情報を受け取り、
前記デバイス設定情報に基づいて前記オペレーティングシステムのカーネルに登録された前記デバイス設定情報を通知するための通知用ドライバを介してデバイスドライバが前記オペレーティングシステムのカーネルに登録されることを特徴とする。
【0014】
上記第4のデバイスプロキシ装置において、前記デバイス設定情報は、デバイスにのみ依存するパラメータ及びOSに依存しないコマンドのみを含み、処理の手順を示すシナリオ・シーケンス・ファイルで記述されるように構成してもよくまた、前記デバイス設定情報を受け取るタイミングは、下記1)~3)のいずれかであってもよい。
1)前記デバイスプロキシ装置にデバイスが接続された際、
2)前記オペレーティングシステム上で動作するアプリケーションプログラムが要求する時間内
3)デバイス側から割り込みイベントその他の処理要求があった場合
【0015】
そして、オペレーティングシステムを実行する計算機と、上記第4のデバイスプロキシ装置とが前記通信機能を介して接続された、例えば図7(a)又は図7(b)に示すような、計算機システムを構成することができる。
【発明の効果】
【0016】
本発明に係るデバイスプロキシ装置によると、オペレーティングシステムを駆動するCPUの処理負担を軽減することができる。
【図面の簡単な説明】
【0017】
図1】デバイスドライバの基本構成を示す概念図である。
図2】カーネル-デバイス間及びデバイス-デバイス間の物理的又は論理的な接続態様を示す図
図3】デバイスドライバの登録方法を示すフローチャート
図4】(a)マルチコアプロセッサユニットを含む同一筐体の計算機の基本構成を示す概念図、(b)プロセッサを2基含む同一筐体の計算機の基本構成を示す概念図
図5】計算機にデバイスプロキシ装置を接続した全体構成を示す概念図
図6】デバイスプロキシ装置が、OSからみて、独立したハードウェアとして接続されている態様を説明する概念図である。
図7図7(a)及び図7(b)は、いずれも計算機システムのハードウェア構成を示す概念図である。
【発明を実施するための形態】
【0018】
以下、図面を参照して本発明の各実施形態について説明する。同一又は同類の部材には同一の符号を用いるか又は添字のみ異ならせて表示するものとし、重複した説明を省略しているが、各実施形態の記載は本発明の技術的思想を理解するために合目的的に解釈され、実施形態の記載に限定解釈されるべきものではない。
【0019】
本明細書における「デバイスプロキシ装置」は、アプリケーションプログラムを動作させるプラットフォームとなる第1のオペレーティングシステム(通常はヒューマンインターフェースを備えたオペレーティングシステム(OS)、例えば、Windows(登録商標)やLinux(登録商標)或いは各種スマートフォンなどの携帯情報端末に搭載されるオペレーティングシステムなどが該当する。)を駆動するCPUからデバイスの制御に特化したCPUを分離して、デバイスの制御に特化したハードウェアを構成したものである。OS側からみると、デバイスは抽象化され、「デバイスプロキシ装置」というハードウェアが接続されていることになり、デバイスからみると、デバイスはオペレーティングシステムのカーネルにではなく、物理的には「デバイスプロキシ装置」に接続され、論理的には、デバイスプロキシ装置との間でデータを送受信し、デバイスプロキシ装置がそれをオペレーティングシステムのカーネルに中継する。
【0020】
デバイスプロキシ装置に求められる最低限の処理機能は、デバイスを動作させるために必要な最低限のデバイスドライバとしての機能と、OSとの間でデバイスの動作に必要な情報をやりとりする通信機能である。そのため、デバイスプロキシ装置の動作を原始的な機械語により直接記述すればオペレーティングシステムを持つ必要もなく、処理能力の低い(例えば20MHzの16ビットマイコンのような)プロセッサでも動作可能である。
【0021】
このように、オペレーティングシステムのカーネルとデバイスの間に介在し、デバイスを代理するという意味において、このハードウェアを「デバイスプロキシ装置」と名付ける。なお、後述する実施例において説明するように、デバイスプロキシ装置からさらに別のデバイスプロキシ装置に接続して「多段プロキシ装置」のように構成することもできる。デバイスプロキシ装置自体が一つの「デバイス」だからである。多段プロキシの場合には安価なマイコンを用いてデバイスプロキシ装置を構成することができる。
【0022】
デバイスプロキシ装置を実現するための一つの実施態様として、マルチコアプロセッサユニットを利用するという方法がある。近年の汎用的なパーソナルコンピュータやサーバーはマルチコアプロセッサユニットを搭載していることが多い。このマルチコアプロセッサユニットの少なくとも一つのマイクロプロセッサユニットを、デバイスプロキシ装置を動作させるために割り当てることができる。具体的には、オペレーティングシステムの起動プロセスの初期の段階で、ブートローダーとよばれるプログラムを起動させ、その際にマルチコアプロセッサの役割を、OSを動作させるためのプロセッサ(又はプロセッサ群)と、デバイスプロキシ装置を動作させるためのプロセッサ(又はプロセッサ群)とに別々に割り当てることができる。
【0023】
既に述べたように、デバイスプロキシ装置の動作に必要なプロセッサに高い処理能力は必要ないため、シングルコアで十分である。しかしながら、マルチコアプロセッサの一つのマイクロプロセッサユニットを利用する場合、それよりもはるかに高い処理能力を持つため、環境構築の容易さから、実験段階では組み込みオペレーティングシステム(いわゆるリアルタイム・オペレーティングシステム)の一つを用いて行った。
【0024】
デバイスプロキシ装置は、OSとは独立して動作し、通常はOSのユーザーからその存在が意識されることはない。ただし、マルチコアのマイクロプロセッサユニットは通常、マルチコアのプロセッサ間で通信を行うプロセッサ間通信(IPC)の仕組みがあるため、相互にデータをやりとりすることが可能である。CPUが物理的に分かれている場合はデバイスインターフェースを介して相互にデータをやりとりすることが可能である。
【0025】
この仕組みを利用して、デバイスの動作に必要な設定情報を共有し、デバイスプロキシ装置やその先に接続されるデバイスの設定情報などを、OSのカーネル側に送信したり、例えばヒューマンインターフェースを介して受け付けたデバイスに対する設定情報などを送信したり、することができる。
【0026】
デバイスプロキシ装置を多段に接続するような場合、或いは、耐タンパ性を高めるといった目的から、接続するデバイスが機密情報を含む場合には、敢えてOSを搭載しないデバイスプロキシ装置を選択するのも一つの選択肢である。
【0027】
以上のように、マルチコアプロセッサの一つのマイクロプロセッサユニットを、デバイスを制御するための専用のプロセッサとして割り当てることで、デバイスの制御をOS管理下の外に置くことが可能となる。例えば、1Gbit/sのイーサネット(登録商標)に接続されるネットワークカードデバイスは、1秒間に10億回の割り込み処理信号をオペレーティングシステムのカーネルに送っているが、デバイスプロキシ装置を介して接続するとデバイスプロキシ装置がその動作をすべて処理するため、オペレーティングシステムを駆動するCPUの処理負担を軽減することができる。
【0028】
なお、マルチコアプロセッサは複数のスレッドを起動しているが、デュアルコアプロセッサにした場合に、シングルコアよりも動作速度が2倍になったとしても、クアッドコアプロセッサでは4倍以下となり、さらにコア数が増えても処理速度は比例して増加しない。このため、OSからみてプロセッサが一つ程度減っても、その一つのタスクをデバイスの管理に特化させることで、OSからみると「ギガビットワークカード」ではなく、「イーサネット(登録商標)経由でTCP/IPプロトコルパケットを通信するための一つのデバイス」というようにデバイスが抽象化され、全体としてみるとCPUの処理負担軽減につながる。
【0029】
すでに述べたように、OS側からみると、デバイスプロキシ装置自体がデバイスであり、その一つ以上先に究極的な制御対象である本来のデバイスが接続されている。デバイスの制御は基本的に「デバイスドライバ」というプログラムによってデバイスの設定情報と接続経路などの情報をオペレーティングシステムのカーネルと通信するプログラムによって行うため、デバイスの設定情報の一部又は全部は、デバイスプロキシ装置にも通知されなければならない。これらの情報は、プロセッサ間通信やバス接続或いはデバイスインターフェースを介して互いに共有することができる。
【0030】
次に、本発明のデバイスを動作させるためのプログラムである「デバイスドライバ」について説明する。ただし、下記の説明におけるデバイスの設定情報とは、デバイスプロキシ装置を介して接続される究極的な制御対象であるデバイスの設定情報を含むものとする。
【0031】
(第1の実施形態)-デバイスドライバの基本構成-
図1は、デバイスドライバの基本構成を示す概念図である。デバイスドライバ10は、OSのカーネル11とデバイス12との間に位置するプログラムであり、基本構造は、
(a)ドライバインターフェース10A
(b)デバイスドライバ本体10B
(c)デバイスインターフェース10C
という3つの構造からなっている。
【0032】
デバイスは実に数多くの種類が存在するが、どのようなデバイスであっても、基本的に、すべてのデバイスドライバがいずれも図1に示すような構造を有する。デバイス12側からみて、ドライバインターフェース10Aよりも向こう側はユーザー権限で操作される領域(ユーザーエリア13)、手前側は管理者権限で操作される領域(管理者エリア14)である。
【0033】
しかし、従来のデバイスドライバは、(a)~(c)のすべてが一つのプログラムとしてデバイスメーカー側で作成され、ユーザーに配布されていたが、本実施形態のデバイスドライバは、(a)の機能を実現するプログラムと、(b)及び(c)の動作に必要なデバイス設定情報を記述したファイルとに分離する構成を採用している。
【0034】
(a)ドライバインターフェース
ドライバインターフェースはOSとデバイスドライバの境界に位置するインターフェースであり、基本的にはOSごとに異なるが、その機能はOSによらず同じである。ドライバインターフェースの主な機能(ファンクション)の例を以下に示す。
1.初期化(デバイスを初期化する)
2.オープン(デバイスをオープンする)
3.クローズ(デバイスをクローズする)
4.リード(デバイスからコマンドやデータを読み出す)
5.ライト(デバイスにコマンドやデータを書き込む)
6.I/Oコントロール(標準化されていないデバイスの制御)
【0035】
デバイスとカーネルとのインターフェース機能は、デバイスハンドラ(以下「ハンドラ」という。)を用いて実現される。ハンドラとは、カーネルが管理するメモリ上に展開されるプログラムの一種である。普段は待機状態にあるが、通常のプログラムとは別に、特定の処理要求(イベントや割り込み)が発生したときに呼び出されるサブルーチンプログラムである。ドライバ設定情報をカーネルに登録する際には、このハンドラを用いてデバイスドライバの本体10Bが保持している各種のデバイス設定情報をカーネルに通知する。
【0036】
ドライバインターフェース10Aは、OSに依存する部分であるが、基本的には、あるOSに対するデバイスドライバを実装する際に一度作成すれば、OS及びカーネルを動かすプロセッサが変わらない限り、以後変わることがない。これに対して、以下に説明するデバイスドライバ本体10Bとデバイスインターフェース10Cは、いずれもデバイスの構成に依存する部分であるため、デバイスやその接続方法(デバイスとのインターフェース)が同じであればOSに依らず、共通となる。デバイスドライバ10の全体から見ると、ドライバインターフェース10Aはごくわずかな部分にすぎない。
【0037】
(b)デバイスインターフェース
デバイスインターフェースは、OSのカーネル側からみたデバイスとのインターフェースであり、物理的インターフェースと論理的インターフェース(ロジカルパケットインターフェース)の2種類がある。デバイスインターフェースは、ハードウェアとの物理的な接続形式(結線上の問題)を扱う部分である。物理的インターフェースでは、登録されるデバイスのレジスタが、カーネルのメモリマップ上に展開される。それは主にメモリ共有と割り込み処理を扱う物理的なバス接続であり、デバイスの接続形式によって、例えば、メモリマップドレジスタ(PCIバス接続)、I2C(Inter-Integrated Circuit)バスインターフェースやSPI(Serial Peripheral Interface)バスインターフェースなどの通信型レジスタなどがある。
【0038】
一方、論理的インターフェースでは、例えば文字列やバイナリストリームなどの、決められたプロトコルに従った一まとまりのデータ(プロトコルパケットデータ)によってデバイスの挙動を表現し制御するインターフェースである。単にデバイスインターフェースといった場合には、文脈により物理的インターフェースと論理的インターフェースのいずれか又は両方を表す。
【0039】
また、デバイスインターフェースは、割り込み信号を送受信するための割り込みlineを有する。割り込み処理はデバイス側の状態変化を登録型のハンドラによって制御する役割を担う。例えば、デバイスがカメラモジュールである場合を例に取ると、「シャッターが押される」というイベントの処理は、割り込み処理で行っている。シャッターが押されると割り込みハンドラがカーネルから読み出され、その結果として、対応する関数(サブルーチン)が読み込まれる。
【0040】
(c)デバイスドライバ本体
本実施形態のデバイスドライバ本体10Bは、主に以下の設定情報が記述されている。
1.デバイスの制御に関する設定情報
2.デバイスに設定する設定情報(デバイスに与えるパラメータ)
【0041】
本明細書における「デバイス設定情報」とは、上記の1.(デバイスの制御に関する設定情報)と2.(デバイスに設定する設定情報)の両方を含む。また、設定情報にはデータだけでなくコマンドを含む。例えば、スクリプトで記述できるコマンド(インストラクション)例えば割り込み待ち、レジスタへの代入、DMA転送の指示、I2C/SPIバスを経由した通信、メモリマップドレジスタへの書き込みや読み出しなどを含む。
【0042】
デバイスの制御とは、デバイスの本質的な動作に関わる制御であり管理者権限で実行される制御、例えばデバイスのリセット、設定変更などを含む。一方、デバイスに設定するパラメータとは、ユーザー権限で設定されるデバイスの使用目的や使用状況等に応じた制御を行うためのパラメータをいう。例えば、同じ接続形式で同じプリンタでもプリンタの用紙を変更する、カメラのモード(センサとレンズは同じでもシーンによってパノラマ・動画・静止画モードを切り替える、など。)を設定するといった、デバイスから見ると(特別な場合を除いて)電気的には全く検知できないようなデバイスの設定情報を含む。デバイスドライバ本体は本来的にデバイスに依存する部分であるため、デバイスメーカー側から提供される情報に基づいて決まる。
【0043】
以上のように、デバイスドライバの中核をなすデバイスドライバ本体はデバイスの各種パラメータやドライバインターフェース10Aやデバイスインターフェース10Cへのコマンドなど、デバイスに合わせた各種の設定情報を保持している。この部分はデバイス(ハードウェア)への依存性が高いがOSへの依存は殆ど無い。しかし、従来のデバイスドライバは、構成の大部分がデバイスや接続方法に依存して決まる共通部分であるにも関わらず、構成の一部がOSに依存するために、デバイスドライバ全体がOSに依存するものとなっていた。
【0044】
これに対して、本実施形態のデバイスドライバは、OSに依存する「(a)ドライバインターフェース」の部分だけの機能を担う「通知用ドライバ」をOSごとに1つ準備し、これをカーネルに登録するところから開始し、デバイスの初期化の際にOSに依存しない(デバイスには依存する)デバイス設定情報を「通知用ドライバ」を介してカーネルに読み込ませることで、ユーザー権限で後からユーザーがデバイス設定情報を後から自由に書き換えることができるように構成されている。
【0045】
このように、初期化の際にデバイス設定情報を読み込んで機能の並び(レジスタの並び)をメインスレッドの前に決定する。これは、ランタイム中に決定しようとすると時間がかかるためである。レジスタに書き込んだ際の振る舞いはデバイスの製造メーカーによって異なる場合も多いがユーザーのニーズは決まっており、レジスタの並びは違っていても実現される機能は大体同じであることが多い。たとえば、カメラモジュールを例にとると、
・カメラA
レジスタ#1.ズーム
レジスタ#2.フォーカス
・カメラB
レジスタ#1.フォーカス
レジスタ#2.ズーム
【0046】
このようにレジスタの並びが違っている場合でも、デバイス設定情報で規定されるパラメータを変更してレジスタの並びを変えるだけでカメラA、Bの両方に対応できるようになる。
【0047】
このように、本発明のデバイスドライバは、デバイスを特定しない、「デバイス設定情報の通知用ドライバ」をカーネルにロードし、デバイスを初期化する際にデバイス設定情報を通知用ドライバに読み込んでデバイス設定情報をカーネルに通知することで、自身のデバイスの動作を確定させることができる。なお、通知用ドライバはC言語などで作成(プログラミング)し、一度作成すればOS及びプロセッサが変わらない限り、同じものを繰り返し用いることができる。
【0048】
本実施形態では、デバイス設定情報を「シナリオ・シーケンス・ファイル」と呼ばれるスクリプト形式のファイルに記述する。通知用ドライバをロードしてデバイスを初期化する際に、例えば、「I2Cインターフェース経由で音声情報を通信するマイクデバイスである」というデバイス設定情報を記述したシナリオ・シーケンス・ファイルを読み込むことで、OSのユーザーからみるとそれがマイクデバイスとして認識されうる。このシナリオ・シーケンス・ファイルはデバイスに依存するがOSには依存しない。
【0049】
このように、初期化のたびごとに必要な機能をディスパッチしても、実際にカーネルに登録された際に占有するメモリ量は従来のデバイスドライバと変わらず、この点においては従来のデバイスドライバと比較して何らデメリットがない。
【0050】
シナリオ・シーケンス・ファイルの読込処理は、従来のデバイスドライバにはない余分な処理といえるが、近年のパソコンやスマートフォンなどのように、処理能力が高いプロセッサと十分なメモリを有している場合には、多少ディスパッチの回数が増えてもデバイスが要求する時間内に処理(カーネルへの登録)が終わるので、特に問題が起こることはない。
【0051】
さらに、シナリオ・シーケンス・ファイルに記述されるコマンドは、呼び出す機能の内容及び順序などからなるが、それぞれの機能は部品化されているため、頻繁に使用される一連の機能はマクロプログラムとして定義しておくと使い勝手がよい。
【0052】
シナリオ・シーケンス・ファイルの読み込み処理の速度については主にシナリオ・シーケンス・ファイルから呼び出す機能のディスパッチに要する時間と関係する。あまり多くのコマンドを束ねると処理は速くなるが汎用性が損なわれて使いにくくなる。逆に、例えば「メモリ転送」のような頻繁に用いられるコマンドを扱うとディスパッチ回数が増え、非力なプロセッサで読み込む場合はデバイスが要求する時間内にデバイスの認識が完了せずエラーになるおそれもあり、注意が必要である。したがって、プロセッサの処理能力等から許容されるディスパッチ回数とシナリオ・シーケンス・ファイルの汎用性を考慮して、適宜設計するべきである。
【0053】
一般に、プロトコルパケットの処理などはマクロシーケンス化しやすいが、バス接続で割り込み処理の多いものはマクロシーケンス化することはやや非効率であると考えられる。いずれにせよ使いやすい単位でマクロ化することでシナリオ・シーケンス・ファイルは更に使いやすくなっていく。
【0054】
図2は、カーネル-デバイス間及びデバイス-デバイス間の物理的又は論理的な接続態様を示す図である。図中の実線はバスインターフェース接続を表し、破線は論理的インターフェース接続を表す。例えば、カーネルとUSBホストコントローラとはバス接続で接続されるが、USBホストコントローラに接続されるUSBデバイスはプロトコルパケットで通信される論理的インターフェースということになる。例えば、図中のSDホストデバイスは、カーネルとPCIバスなどの外部バスで接続され、SDホストデバイスの先にはWiFi(無線LAN)モジュールなどの無線通信デバイスやメモリカードなどが「SDバス(或いはその上位互換であるSDIOバス)」と呼ばれる外部バスを通じて接続されうることを示している。
【0055】
このように、デバイスがどのようなデバイスインターフェースを持つものであっても、通知用ドライバをカーネルに読み込んだ後、デバイスの初期化の際に、カーネルに対するデバイスの登録方法をデバイス設定情報として通知することで、あらゆるデバイスに対応したデバイスドライバを実現することができる。
【0056】
そして、この「シナリオ・シーケンス・ファイル」、より正確には少なくとも実際に接続される機器に関する情報を、OSのカーネル側から下段のデバイスプロキシ装置に通知する仕組みを持つことで、理論的には何段でも、デバイスプロキシ装置を接続していくことができる。マルチプロセッサ場合はスレッドを分離してプロセッサ間通信で共有し、下段には論理的インターフェースを介して通信経路や通信プロトコルを用いて通知していくことができる。
【0057】
(第2の実施形態)-デバイスドライバの登録方法-
図3は、第2の実施形態のデバイスドライバの登録方法を示すフローチャートである。
【0058】
-ステップS1-
ステップS1では、第1の実施形態で説明した通知用ドライバをカーネルにロードする。OS起動後にデバイスドライバをロードする方法はOSによって異なっている。例えば、OSがLinux(登録商標)である場合は、”insmod”などのコマンドを用いる。OSがWindows(登録商標)である場合には、「.sys」というドライバ定義ファイルを作成してプラグ・アンド・プレイでOSにデバイスドライバの読み込みを行わせることで必要なデバイス設定情報をレジストリに登録する方法が簡便である。その他のOSでもデバイスドライバをカーネルにロードするコマンドがある場合にはそれを利用する。
【0059】
-ステップS2-
次に、デバイスを初期化を開始して(ステップS2)、シナリオ・シーケンス・ファイルを読み込む。ステップS1で通知用ドライバのロードが終了し、デバイスは待機状態にある。ここで、初期化を開始して、シナリオ・シーケンス・ファイルの読込を開始する。
この初期化ステップは、具体的には、例えば、デバイスの設定情報(パラメータ)を初期値に設定することや、デバイスの動作を決定する実行スクリプトに記述された実行コマンドを初期化する、或いは、シナリオ・シーケンス・ファイルを基にデバイスドライバを生成するための準備としてメモリ上に作業領域を確保することなどを含む。
【0060】
この初期化ステップをデバイス側とカーネル側のそれぞれからみた動作は、具体的には、例えば以下の通りとなる。
S2-1.レジスタのデフォルト値を設定 <OUT側(デバイス側)>
Out側のセンサ部のレジスタ(例えば、デバイスがカメラモジュールであるとした場合、画面サイズ、フォーカスをどこから開始するか(通常は無限大側)、ホワイトバランス(画調)、露出時間などの各種デバイスパレメータ)を初期値に設定する。なお、カメラモジュールは一例であり、あらゆるデバイスの設定値が初期値に設定されることを意味する。
S2-2.ワークメモリのクリア(ワークメモリをゼロで埋める) <IN側>
以上のステップにより、デバイスドライバをカーネルに登録した際には、常に同じ動作が保証されることになる。
【0061】
シナリオ・シーケンス・ファイルを読み込むことで初期化が完了する。
【0062】
-ステップS3-
次に、シナリオ・シーケンス・ファイルを基にハンドラを生成するメインスレッドを実行する(ステップS3)。このステップS3は特にリードとライトとI/Oコントロールの機能とシーケンスを生成するステップであり、ユーザー権限で実施することができる。たとえば、ユーザー権限でI/Oコントロールを使ってファイルの書き込み属性を変えることもできる。デバイスドライバはこの時点ではじめて自身の動作が確定する。
【0063】
-ステップS4-
次に、生成された上記各ハンドラの内容をデバイスドライバとしてカーネルに登録する(ステップS4)。このデバイスドライバは、OS上で利用できるような状態で登録されていればよく、方式や利用形態などを問わず、OSのカーネルに組み込まれていればよい。
【0064】
すなわち、通知用ドライバがカーネルに読み込まれた時点(ステップS1)では、デバイスドライバとしての動作は確定しておらず、そこからデバイスを初期化してシナリオ・シーケンス・ファイルを読み込んでハンドラを生成し、カーネルに登録された時点(ステップS4)で初めて、デバイスドライバとして機能するようになる。本実施形態のデバイスドライバは、デバイス側からみた場合には、従来のデバイスドライバと何ら変わりない動作をすることはいうまでもない。
【0065】
以上のステップS1~S4により、計算機システムは、シナリオ・シーケンス・ファイルに記述されたデバイス設定情報(デバイスパラメータ及びデバイスの動作を決定する実行スクリプト)を読み込むことでOSに依存しないデバイスドライバ10を生成することができ、そのデバイスドライバ10を用いることでデバイスインターフェースに接続されたデバイスを制御して使用することができるようになる。また、デバイスドライバ10は従来のようなコンパイルが不要であるため、計算機システムでデバイスドライバ10を容易に生成することができる。
【0066】
-ステップS5-
デバイスを取り外すときは終了(Terminate)する。
【0067】
(第3の実施形態)
図4(a)、(b)は、(a)マルチコアプロセッサを含む同一筐体の計算機の基本構成を示す概念図、(b)プロセッサを2基含む同一筐体の計算機の基本構成を示す概念図である。計算機20はマルチコアプロセッサのマイクロプロセッサユニット(MPU)21とメモリ22とデバイスインターフェース23(図1の10C)を具備する。マイクロプロセッサユニット21は、主にCPU(Central Processing Unit)であり、FPGA(field-programmable gate array)やマイコンなど、各種のロジックICを用いてもよい。メモリ22は、RAM(Random Access Memory)などの一時記憶装置を指す。
【0068】
図4(a)は、複数のプロセッサコア(21a、21b、・・・)からなるマルチコアのマイクロプロセッサユニットのスレッドを分離して一つのプロセッサコア21aをデバイスプロキシ装置の動作に割り当て、残りをOSに割り当てる態様である。計算機20は、マルチコアのマイクロプロセッサユニット21、メモリ22、デバイスインターフェース23を具備し、デバイスインターフェース23を介してデバイス12に接続される。このとき、シナリオ・シーケンス・ファイルはプロセッサ間通信により共有する。
【0069】
図5は、図4(a)を更に詳しく説明した構成図である。計算機20内で、ユーザーインターフェースを管理するオペレーティングシステムのカーネルはプロセッサ1A(図4(a)における21b、21c、・・・)と、デバイスプロキシ装置を管理するプロセッサ1Bとでスレッドを分離してプロセッサ間通信でデータを共有できることを表している。デバイスプロキシ装置はシナリオ・シーケンス・ファイルを受け取りデバイスドライバ10を介してデバイス12に接続する。
【0070】
図4(b)は、CPUが物理的に分離している場合である。この場合、プロセッサ間通信は使用できないが、同じ筐体内(回路基板上)にある場合は一般にバスで接続されており、このバス接続によりシナリオ・シーケンス・ファイルを共有することができる。
【0071】
図6は、デバイスプロキシ装置60が、OSからみて、独立したハードウェアとして、デバイスインターフェース23(特に、論理的インターフェース)を介して接続されている態様を説明する概念図である。デバイスプロキシ装置60は、プロセッサ61とメモリ62とデバイスインターフェース63とを具備し、一つ又は複数のデバイス62に接続される。プロセッサ61のプロセッサコア数は1つ以上であればよい。
【0072】
デバイスインターフェース23、63は、マイクロプロセッサユニット21が制御する周辺機器用のものであればよく、具体的には、例えば図2に示すような各種デバイスに接続するものであればよい。PCI(Peripheral Component Interconnect)カード、ネットワークカード、マイク、カメラ、USB、SDカード、WiFi(Wireless Fidelity)内蔵機器、ADC(Analog to Digital Converter)、Bluetooth(登録商標)内蔵機器、GPS内蔵機器、プリンタ、FAX、スキャナなどである。デバイスインターフェース23は、メモリ22のような一時記憶装置又はハードディスクなどの記憶装置を接続するためのインターフェースであってもよく、キーボードやマウス或いはジョイスティックを接続するための入力インターフェース、ディスプレイその他表示装置を接続するための出力インターフェースであってもよい。なお、メモリ22も周辺機器であるため、例えば、メモリ22は図示しないデバイスインターフェースであるメモリスロットに接続され、マイクロプロセッサユニット21がメモリ22用のデバイスドライバでメモリ22を管理する。
【0073】
計算機20にはオペレーティングシステムがインストールされており、さらに、そのOSのカーネルに上記ステップS1~S5により生成されたデバイスドライバ10が登録されている。そして、計算機20のデバイスインターフェース23の先にデバイス12が接続されている。
【0074】
図1に示すドライバインターフェース10Aは、OSの上記各ハンドラである。ドライバ10は、ドライバインターフェース10A(各ハンドラ)とデバイス毎に決まったデバイスインターフェース10Cの間でデータを送受信する役割を果たす。具体的には、ドライバ10(10B)は、上記ステップS3により確定された各ハンドラの処理を実施するためのプログラムである。
【0075】
以上のようなデバイスドライバ10をシナリオ・シーケンス・ファイルを基に生成することにより、計算機20は、デバイス12との間でデバイスとの通信データを送受信することができる。
【0076】
(実施例)-シナリオ・シーケンス・ファイルの具体例-
以下に、デバイス設定情報を記述したシナリオ・シーケンス・ファイルの一例を挙げる。
シナリオ・シーケンス・ファイルはデバイスインターフェースに接続されるデバイスのデバイスパラメータとハンドラを生成するための実行スクリプトを記述したファイルであり、スクリプト形式のファイルであるため、テキストエディタで編集できる程度の非常に小さな(例えば2キロバイト以下のような)ファイルサイズのテキストデータで構成することもできる。実装により、JavaScript(登録商標)やXMLなど、OSや計算機のハードウェア(MPU)に依存しない中間言語の形式で記述してもよい。
【0077】
デバイスをカーネルに登録するために必要な情報は、
(a)デバイスインターフェースに関する情報
(b)デバイスの動作内容に関する情報
(c)接続先デバイスに関する情報
である。これらの情報をシナリオ・シーケンス・ファイルに記述し、通知用ドライバを介してカーネルに登録すればよい。
【0078】
構成情報のわずかな変更があっても従来のようにデバイスドライバをソースコードから書き換えて再度コンパイルする必要はなく、シナリオ・シーケンス・ファイルの一部を書き換えてデバイスを初期化しなおすだけでよい。
【0079】
例えば、プリンタのように、同じデバイスでも複数の接続形式が可能なデバイスが存在する。ネットワークに接続できるプリンタが、USB接続あるいはシリアル接続可能な場合、ドライバインターフェースとデバイスドライバ本体の構成は変わらず、デバイスインターフェースだけが異なっている。接続形態が決まれば以後変わることがないため、実装前にどのデバイスインターフェースを実装するかを決定すればよい。USB接続からネットワーク接続(Ethernet(登録商標)接続)に変更したい場合は、OSを起動した状態でしかもデバイスドライバもクローズすることなく、再度デバイスを初期化して、単に経路情報が変更されたことを示すデバイスインターフェースの部分を修正したシナリオ・シーケンス・ファイルを通知用ドライバ読み込むだけでよい。
【0080】
以下、シナリオ・シーケンス・ファイルで定義するデバイス設定情報(コマンドとパラメータ等)の例について説明する。
【0081】
[処理命令定義]
処理命令定義は、シナリオそのものの記述を行う実行コマンドが記述される。なお、デバイス(ハードウェア)に依存して決まっている割り込み番号は「int1」などの予約語として扱う。
処理命令 : 処理内容
wait intr(n) : 割り込みID n の割り込みを待つ
write $addr : OSから受け取ったデータを$addrに書き込む
write $addr,size : OSから受け取ったデータを$addrから書き込む
write data,$addr : dataを$addrに書き込む
read $addr,size : $addrからsizeだけのデータをOSに返す
copy $add1,$add2,size : $add1から$add2にsizeバイト データを転送する
copy $add1,$add2,size : $add1から$add2にsizeバイト データを転送する
copy #dataset(n) : データセットID n を転送する
res data : dataをOSに返す
and mask,$addr : $addrのデータとmaskの論理積を取り、条件分岐式に反映する
or mask,$addr : $addrのデータとmaskの論理和を取り、条件分岐式に反映する
if else endif : シナリオの条件分岐
while endwhile : while~endwhile間を条件ループする
for n endfor : for~endfor間をn回ループする
exit : インターフェースを終了する
処理命令定義には、その他、DMA転送やmutexなどを含む同期の仕組みなどの処理命令が記述される。
【0082】
[データセット定義]
データセット定義は、1つ又は複数のデータを1セットとしたデータセットの定義が記述される。データセットは任意の名前のデータ列を定義することができる。データ列には、レジスタと定義内容、書き込み後のタイミングなどを記述する。データセットは複数パターンを登録しておき、目的や場合に合わせて使い分ける。
【0083】
データセットの定義 : 定義内容
b $addr and mask n : データセットbを「$addrの内容にmaskの論理積を1バイト書き込み n ミリ秒待つ」データ列と定義する
w $addr or mask n : データセットwを「$addrの内容にmaskの論理和を2バイト書き込み n ミリ秒待つ」データ列と定義する
l $addr data n : データセットlを「$addrの内容にdataを4バイト書き込み n ミリ秒待つ」データ列と定義する
【0084】
次に、シナリオ・シーケンス・ファイルを基にOSの各ハンドラ([init]、[term]、[open]、[close]、[I/O-ctrl]、[read]、[write]、[main_thread])にデバイスパラメータ並びに処理命令定義及びデータセット定義を含む実行スクリプトを割り当てて各ハンドラの処理を構成したデバイスドライバの一例を以下に挙げる。このデバイスドライバを用いることで、決まったサイズのパケットを任意タイミングで送受信するデバイス、例えば、加速度センサーに対してメモリマップドレジスタへの読み書きを制御することができる。なお、以下の一部には「// コメント」を追記している。
【0085】
[init]
allocate $buffer 16;
allocate $flag 1;
exit;
[term]
free buffer;
free $flag;
exit;
[open] // 何もしない
exit;
[close] // 何もしない
exit;
[I/O-ctrl] // 何もしない
exit;
[read]
or.w #0001,$flag;
if // バッファにデータが有れば
read $recive_data,16; // データを読み出す
write.w 1,$flag
endif
exit;
[write]
write $send_reg,16; // デバイス読み込み開始
wait int1; // 完了割り込み待ち
exit;
[main_thread] // 受信割り込みを待ってバッファに読み出す
while;
wait int1; // 完了割り込み待ち
read $recive_data,buffer,16; // デバイスからバッファにデータを読み出しておく
write.w 1,$flag;
endwhile;
【0086】
インストラクションは上記のとおり比較的簡単なプログラムである。デバイスドライバとしての機能を確定させるために、テキストエディタでシナリオ・シーケンス・ファイルにシナリオ(インストラクションの順序)を記述し、パーシングしたシナリオにより記述した処理内容(例えばルックアップテーブルを持ったもの)をそれぞれのインターフェース(6種)をコールバックハンドラとして割り当てる。シナリオ・シーケンス・ファイルを読み込む方法はオープン・リード・ライト・クローズなどの機能を用いる。また、割り込みがある場合は割り込み待ちを行う。
【0087】
なお、一連の作業をデバイスメーカーではないユーザー等の第三者がデバイスメーカーからデバイス設定に必要なパラメータを得てシナリオ・シーケンス・ファイルを作成する場合、シナリオのスクリプト内容自体を変更するとドライバの動作が狂うおそれがある。従って、このような場合はテキストファイルではなく、他のアプリケーションツールなどを介してシナリオ・シーケンス・ファイルを作成・修正できるようにして、不要な設定を変更しないようにするなどの工夫をしてもよい。
【0088】
(第4の実施形態)
図7(a)及び図7(b)は、いずれも計算機システムのハードウェア構成を示す概念図である。計算機Aは、OSを駆動し、高い計算処理能力を要求されるプログラムを主に実行するが、デバイスの制御は抽象化されたデバイスBが行うため、割り込み処理などの計算を中断させるイベントをデバイス側から直接受け取ることがなくなる。デバイスプロキシ装置B~Eは、いずれも組み込みオペレーティングシステムが搭載されたデバイスプロキシ装置であり、それぞれのデバイスプロキシ装置に例えば入力デバイス、音響デバイス、ハードディスクなどのストレージデバイス、ネットワークデバイスといった各種のデバイスa、b、c、d、eがそれぞれ接続されている。本実施態様では、デバイスプロキシ装置のプロセッサは、下段ほど低速なものが用いられている。例えば、デバイスプロキシ装置Bには安価な100MHzの16ビットマイコンが用いられており、デバイスプロキシ装置C、D及びEには更に安価20MHzの16ビットマイコンが用いられる。或いは、デバイスプロキシ装置Bのプロセッサは、計算機Aがマルチコアのマイクロプロセッサユニットを持つ場合にはその一つのプロセッサコアとしてもよい。
【0089】
計算機Aは、デバイスa~eを動作させるために必要なすべてのデバイス設定情報を含むシナリオ・シーケンス・ファイルを保持している。一つのシナリオ・シーケンス・ファイルが1つのデバイス設定情報を保持するように構成した場合、デバイスが5種類であれば5つのシナリオ・シーケンス・ファイルということになる。もちろん設計次第では複数のデバイスを動作させるためのそれぞれのデバイス設定情報を1つのシナリオ・シーケンス・ファイルにまとめても良い。
【0090】
各デバイスプロキシ装置B~Eは、入力側(上段側)からデバイスインターフェースを介してシナリオ・シーケンス・ファイルを受け取る。たとえば、I2C、SPI、Wi-Fi、UARTといった各種インターフェースの情報により接続経路や通信プロトコルが記述されたシナリオ・シーケンス・ファイルから必要なデータを取り込み、デバイスを設定する。ただし、シナリオ・シーケンス・ファイルを上段から受け取らず直接自身のデバイスプロキシ装置にデバイス設定情報を記述したデータを保持してもよい。
【0091】
ロジカルパケットは連続的なストリーミングデータであるため、制御対象のデバイス名を示す「シンボル」を例えば8バイトのアスキーキャラクターのデータ形式で表現し、必要な情報をロジカルパケットのヘッダーに記述してデータを送信することができる。実験では、「サイズ・シンボル・可変長データ」というデータ列の形式でロジカルパケットデータを構成してもよい。
【0092】
このように、シナリオ・シーケンス・ファイルを共有しながら計算機の処理からデバイスに関する処理を分離して、デバイスプロキシ装置側でデバイスの制御を行わせることで、オペレーティングシステムを駆動するCPUの処理負担を軽減できる。また、デバイスの接続態様を例えば図7(a)から図7(b)に変更する場合でも、計算機から見るとデバイスはすでに抽象化されているため、アプリケーションプログラムが要求する時間内に必要なデータを受け取れる限り、下段のデバイスがどのようなものであっても、シナリオ・シーケンス・ファイルは変わらず、動作に影響がない。さらに、ハードディスクなどコンテンツを含むデバイスを接続する場合、デバイスプロキシ装置は何ら情報を保持しないため、計算機とハードディスク間で暗号化しておけば、ハードディスクを持ち去られたとしても情報漏洩のおそれもない。このようなシステムは銀行の現金自動預け払い機(ATM)など、高度な機密情報を扱う端末において効果を発揮する。
【符号の説明】
【0093】
10 デバイスドライバ
10A ドライバインターフェース
10B デバイスドライバ本体
10C デバイスインターフェース
11 カーネル
12 デバイス
21 マルチコアのマイクロプロセッサユニット(MPU)
22 メモリ
23 デバイスインターフェース(物理的インターフェース及び/又は論理的インターフェース)
31、61 プロセッサ(シングルコア又はマルチコア)
62 メモリ
63 デバイスインターフェース
A 計算機
B,C,D,E デバイスプロキシ装置
a,b,c,d,e デバイス
図1
図2
図3
図4
図5
図6
図7