説明

ドライバ・プログラム、デバイス管理方法及びコンピュータ装置

【課題】複数のデバイスからの割り込みを処理するアプリケーションの負荷を軽減する。
【解決手段】ドライバは、アプリケーションからオープンされたデバイスのIDとアプリケーションのIDを関連付けて第1メモリ領域に格納しておき、アプリケーションのIDが関連付けられているいずれかのデバイスから割り込みがあった場合、当該デバイスのIDに関連付けて当該割り込みに係るデータを第1メモリ領域に格納し、特定のアプリケーションからデバイス選択を要求する第2の要求を受け付けると、第1メモリ領域に特定のアプリケーションのIDに関連付けて割り込みに係るデータを格納したデバイスのうち1のデバイスを選択し、当該1のデバイスについての割り込みに係るデータを、当該1のデバイスのIDと共に第2メモリ領域に格納する。特定のアプリケーションは、第2メモリ領域からデータを読み出して処理する。

【発明の詳細な説明】
【技術分野】
【0001】
本技術は、複数のデバイスからの割り込みを処理する技術に関する。
【背景技術】
【0002】
複数のデバイスを用いたサーバ・システムのシステム構成例を図1に示す。図1の例では、デバイスがdev0からdevNのN+1個設けられており、アプリケーション・プログラムは、これらの複数のデバイスの入出力を同時並行に行う。このようなアプリケーション・プログラムのため、ユーザ空間メモリには、デバイスにアクセスするための資源へのポインタであるfd0乃至fdNと、デバイスの割り込み発生状態を確認するための資源へのポインタであるpollfd0乃至pollfdNとをデバイス毎に保持している。また、ユーザ空間メモリには、任意のデバイスの入力データも保持され、アプリケーション・プログラムによって処理される。
【0003】
また、カーネル(ファイルシステム(FS:File System))には、デバイスにアクセスするためのシステムコール(例えばデータの読み込みのためのreadシステムコール)のほかに、デバイスの割り込み状態を確認するためのシステムコールpollを用意している。また、装置毎に異なる入出力手続きをカーネルに対して汎用的に行うためのドライバも用意されている。このドライバには、readシステムコールで用いられるreadメソッドと、pollシステムコールで呼ばれるpollメソッドが設けられている。さらに、カーネル空間メモリには、デバイス毎に、その割り込み情報を保持するためのfifo(FIFO:First In First Out。図ではfifo0乃至fifoN)バッファが用意されており、ドライバは、デバイスからの割り込みがあれば、その割り込み情報を、対応するfifoに格納する。
【0004】
このようなサーバ・システムの処理シーケンスを図2及び図3に示す。上で述べたように、このサーバ・システムのアプリケーション・プログラムは、複数のデバイスの入出力を同時に行う。このため、デバイスからの割り込み(例えばデータ読み込み可能な状態になるという割り込み)も非同期に発生する。図2のフェーズ1001及び1002のように、例えばデバイス3から割り込み「in3」がドライバに通知され、さらにその割り込みに係るデータ「in3 data」がドライバに出力され、fifo3に格納される。ドライバは、デバイス3からの割り込みをkillコマンドでカーネルに通知する。同様に、デバイス1から割り込み「in1」がドライバに通知され、さらにその割り込みに係るデータ「in1 data」がドライバに出力され、fifo1に格納される。ドライバは、デバイス1からの割り込みをkillコマンドでカーネルに通知する。
【0005】
その後フェーズ1003において、ドライバからカーネルに通知された割り込みの発生は、シグナルSIGIOによってアプリケーションに通知される。
【0006】
このSIGIOによる割込み発生の通知は、どの装置でどのような割り込みが発生したのかについての情報を含んでいないため、アプリケーション・プログラムは、フェーズ1010において、その割り込みの発生元と発生理由を調べるために、pollシステムコールをカーネルに対して発行する。従って、フェーズ1011において、カーネルは、pollシステムコールの引数に列挙されたデバイスそれぞれを対象に、ドライバに対してpollメソッドを呼び出す。これにより、状態の問い合わせが行われる。具体的には、カーネルからドライバに対してデバイス0乃至Nに対する問い合わせpoll0乃至pollNが出力され、ドライバはその都度割り込みの有無をreturnでカーネルに通知する。これによりカーネルは、割り込みが発生したデバイスを特定でき、フェーズ1012において、カーネルからアプリケーション・プログラムに割り込みが発生したデバイスをreturnで通知する。このようにして、アプリケーション・プログラムも、割り込みが発生したデバイスを認識できるようになる。
【0007】
図3の説明に移行して、アプリケーション・プログラムは、ユーザ空間メモリから、デバイスの割り込み発生状態を確認するための資源へのポインタであるpollfd0からpollfdNまで順番に読み出す。フェーズ1020では、pollfd0を読み出すが、割り込みに係るデバイスについてのpollfdではないので、次にpollfd1を読み出す。これは割り込みに係るデバイスについてのpollfdであるので、フェーズ1030で、アプリケーション・プログラムは、デバイス1からの割り込みに係るデータを読み出すために、このpollfd1を用いてreadシステムコールをカーネルに出力する。フェーズ1031では、カーネルは、ドライバのreadメソッドを呼び出し、ドライバのreadメソッドは、デバイス1のfifo1から割り込みに係るデータ「in1 data」を読み出して、ユーザ空間メモリに格納する。このデータが、ユーザ空間メモリにおける「任意のデバイスの入力データ」に該当する。なお、ドライバは、割り込みに係るデータのユーザ空間メモリへの格納が完了すると、カーネルに対してreturnで通知する。そして、フェーズ1032で、カーネルは、アプリケーション・プログラムに、割り込みに係るデータの格納が完了したことをreturnで通知する。そして、アプリケーション・プログラムは、割り込みに係るデータ「in1 data」を読み出して、所定の処理を実施する。
【0008】
同様にして、フェーズ1040では、アプリケーション・プログラムは、ユーザ空間メモリからpollfd2を読み出すが、割り込みに係るデバイスについてのpollfdではないので、次にpollfd3を読み出す。これは割り込みに係るデバイスについてのpollfdであるので、アプリケーション・プログラムは、デバイス3からの割り込みに係るデータを読み出すために、このpollfd3を用いてreadシステムコールをカーネルに出力する。カーネルは、ドライバのreadメソッドを呼び出し、ドライバのreadメソッドは、デバイス3のfifo3から割り込みに係るデータ「in3 data」を読み出して、ユーザ空間メモリに格納する。このデータが、ユーザ空間メモリにおける「任意のデバイスの入力データ」に該当する。なお、ドライバは、割り込みに係るデータのユーザ空間メモリへの格納が完了すると、カーネルに対してreturnで通知する。そして、カーネルは、アプリケーション・プログラムに、割り込みに係るデータの格納が完了したことをreturnで通知する。そして、アプリケーション・プログラムは、割り込みに係るデータ「in3 data」を読み出して、所定の処理を実施する。
【0009】
以下、フェーズ1050で、アプリケーション・プログラムは、残りのpollfd4乃至pollfdNを読み出すが、割り込みに係るデバイスについてのpollfdではないので、readシステムコールを出力することはない。
【0010】
このように、図2のフェーズ1011で示したように、複数のデバイスの入出力を制御するアプリケーション・プログラムは、対象デバイスのすべてについて、入出力割り込み状態を確認する動作を行わなければならない。この動作は、入出力を制御するアプリケーション・プログラムと、デバイスを制御するドライバとのカーネルを介した通信で、ユーザ空間とカーネル空間の間のプロトコルを利用するため、オーバーヘッドが大きく、性能を向上させるためのボトルネックとなる。
【0011】
また、図3のフェーズ1020から1050でも、割り込みが発生していないデバイスについてのpollfdについても読み出す必要があり、この点でも処理速度が遅くなっている。
【0012】
なお、このようなデバイスからの割り込みをアプリケーションで処理する従来技術は存在しているが、上で述べたような問題に対して考慮がなされているわけではない。
【先行技術文献】
【特許文献】
【0013】
【特許文献1】特開平11−282792号公報
【特許文献2】特開平7−13778号公報
【発明の概要】
【発明が解決しようとする課題】
【0014】
以上のように従来技術では、アプリケーション・プログラムの負荷が高く性能向上の妨げになっていた。
【0015】
従って、本技術の目的は、複数のデバイスからの割り込みを処理するアプリケーション・プログラムの負荷を軽減する技術を提供することである。
【課題を解決するための手段】
【0016】
本ドライバ・プログラムは、特定のアプリケーション・プログラムに関連する複数のデバイスの管理処理をコンピュータに実行させるドライバ・プログラムである。そして、コンピュータに、特定のアプリケーション・プログラムをコンピュータが実行することにより、コンピュータが送信した、特定のデバイスの利用を開始するための第1の要求を受け付けると、当該特定のアプリケーション・プログラムの識別子と特定のデバイスの識別子とを関連付けて第1のメモリ領域に格納するステップと、いずれかのデバイスから割り込みがあった場合、第1のメモリ領域において、特定のアプリケーション・プログラムの識別子が関連付けられていれば、当該デバイスの識別子に関連付けて当該割り込みに係るデータを第1のメモリ領域に格納するステップと、特定のアプリケーション・プログラムをコンピュータが実行することにより、コンピュータが送信した、デバイス選択を要求する第2の要求を受け付けると、第1のメモリ領域において特定のアプリケーション・プログラムの識別子に関連付けて割り込みに係るデータが格納されているデバイスのうち1のデバイスを選択し、当該1のデバイスについての割り込みに係るデータを、当該1のデバイスの識別子と共に第2のメモリ領域に格納するデバイス選択ステップと、特定のアプリケーション・プログラムに処理の完了を通知するステップとを実行させる。
【発明の効果】
【0017】
複数のデバイスからの割り込みを処理するアプリケーション・プログラムの負荷を軽減することができるようになる。
【図面の簡単な説明】
【0018】
【図1】図1は、従来技術を説明するための図である。
【図2】図2は、従来技術を説明するための図である。
【図3】図3は、従来技術を説明するための図である。
【図4】図4は、本技術の実施の形態のサーバ・システムの機能ブロック図である。
【図5】図5は、カーネル空間メモリに格納されるデータ構造の一例を示す図である。
【図6】図6は、本技術の実施の形態に係るメインの処理フローを示す図である。
【図7】図7は、デバイス管理処理のシーケンス図である。
【図8】図8は、RR選択要求処理の処理フローを示す図である。
【図9】図9は、RR選択要求処理の処理フローを示す図である。
【図10】図10は、具体的なデータ遷移の例を示す図である。
【図11】図11は、具体的なデータ遷移の例を示す図である。
【図12】図12は、割り込みに係るデータの再登録について説明するためのシーケンス図である。
【図13】図13は、割り込みに係るデータの再登録について説明するためのシーケンス図である。
【図14】図14は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【0019】
図4に、本技術の実施の形態に係るシステム構成図を示す。本実施の形態に係るサーバ・システム100は、デバイスdev0乃至devNを有するか又はこれらのデバイスに接続されており、当該デバイスdev0乃至devNに対して入出力を非同期に行うアプリケーション・プログラム10と、カーネル30(すなわちファイルシステム)と、ドライバ40とを有する。さらに、サーバ・システム100は、ユーザ空間メモリ20と、カーネル空間メモリ50とを有する。そして、本実施の形態では、カーネル30に、アプリケーション・プログラム10がドライバ40を利用するためのシステムコールであるioctlシステムコール31などが用意されている。
【0020】
また、アプリケーション・プログラム10は、デバイス利用管理部11と、RR(Round Robbin)実行部12とを有する。デバイス利用管理部11は、主に利用を開始するデバイス及び利用を終了するデバイスをioctlシステムコール31を利用してドライバ40に指示する。RR実行部12は、ioctlシステムコール31を利用して、割り込みが発生したデバイスをドライバ40に確認させると共にいずれか1つのデバイスを選択させ、そのデバイスからの割り込みに係るデータをユーザ空間メモリ20に書き込ませる等の処理を実施する。また、ドライバ40が選択したデバイスについての割り込みに係るデータを処理できない場合には、例えばRR実行部12が、当該割り込みに係るデータをドライバ40に元のFIFOに戻すように要求する処理も実施する。
【0021】
ユーザ空間メモリ20には、ドライバ40からの入力データ21が格納される。この入力データ21は、ドライバ40によって選択されたデバイスからの割り込みに係るデータであり、デバイスの識別子であるCIDを含む。また、ユーザ空間メモリ20は、アプリケーション・プログラム10がデバイスの利用を開始する際に創生するファイル記述子fd0乃至fdNを格納する。このファイル記述子fd0乃至fdNは、割り込みを発生させるデバイスdev0乃至devNにアクセスするための資源へのポインタである。
【0022】
さらに、ドライバ40は、デバイス毎に異なる入出力手続きをカーネル30に対して汎用的に行うためのドライバであって、アプリケーション・プログラム10から出力されたioctlシステムコール31に応じてカーネル30により呼び出されるioctlメソッド41を有する。ioctlメソッド41は、PID識別部415と、CID登録部411と、優先CID登録部412と、再登録部413と、RR選択部414とを有する。PID識別部415は、呼び出し元のプロセス(すなわちアプリケーション・プログラム10のプロセス)の識別子であるPIDを識別する。また、CID登録部411は、デバイスの利用開始(例えばデバイスのオープン)をアプリケーション・プログラム10から指示された場合にPID識別部415により識別されたPIDに関連付けて指定のデバイスの識別子CIDをカーネル空間メモリ50に登録する。またCID登録部411は、デバイスの利用終了(例えばクローズ)をアプリケーション・プログラム10から指示された場合にカーネル空間メモリ50においてそのアプリケーション・プログラム10のPIDと当該PIDに関連付けられている指定デバイスの識別子CIDとを含むデータ構造を削除する。
【0023】
さらに、優先CID登録部412は、優先的に処理するという指定を伴うデバイスの利用開始をアプリケーション・プログラム10から指示された場合にPID識別部415により識別されたPIDに関連付けて指定デバイスの識別子CIDをカーネル空間メモリ50に登録する。また、RR選択部414は、アプリケーション・プログラム10からのRR選択指示に応じて、割り込みが発生しているデバイスの中から、適切な1のデバイスを決定すると共に、当該デバイスの割り込みに係るデータをユーザ空間メモリ20に書き込み、カーネル30を介して当該デバイスの識別子CIDをアプリケーション・プログラム10に通知する。
【0024】
また、再登録部413は、RR選択部414によりアプリケーション・プログラム10に通知した割り込みに係るデータを、アプリケーション・プログラム10側の事情(例えば資源獲得ができない等)で処理できない場合、当該割り込みに係るデータを再びカーネル空間メモリ50(具体的には当該カーネル空間メモリ50内のそのデバイスのためのFIFOバッファ。以下単にFIFOと略す。)に戻す。
【0025】
また、カーネル空間メモリ50は、複数のデバイスからの入出力を非同期に行うような特定のアプリケーション・プログラム10がデバイスの利用開始を指示した場合にPID識別部415により識別されるPID(例えばPID0乃至PIDN)と、利用開始が指示されたデバイスdev0乃至devNの識別子CID(例えばCID0乃至CIDN)と、デバイスが優先指定されているか否かを表す優先フラグ(例えば優先フラグ0乃至N)と、利用開始が指示されたデバイスのFIFO(First In First Out)バッファ(例えばfifo0乃至fifoN)が保持される。これらについては、0からNのうち同一の番号jのPIDjとCIDjとfifojは、関連付けられており、以下で述べるようなデータ構造として管理される場合もある。さらに、それらデータ構造がリング構造で管理される場合もある。また、カーネル空間メモリ50は、RR選択部414が次回最初に検査すべきデバイスのCIDを関連するPIDと共に格納する次回開始ID記憶部51も保持している。
【0026】
カーネル空間メモリ50には、例えば図5に模式的に示すようなデータが格納される。本実施の形態では、アプリケーション・プログラム10がioctlシステムコール31を出力すると、カーネル30からドライバ40へ、既存のinode構造体(図示せず)と既存のfile構造体511とアプリケーション・プログラム10のPIDとが示される。ドライバ40のioctlメソッド41における例えばCID登録部411は、アプリケーション・プログラム10からioctlシステムコール31で特定のデバイスの利用開始が通知されると(すなわち、特定のデバイスのファイル記述子fd創生時)、特定のデバイスのfile構造体511より本実施の形態で導入されるiop_dev構造体512がポイントされるよう設定する。このiop_dev構造体512では、利用開始を通知してきたアプリケーション・プログラム10(すなわち、ファイル記述子fdを創生したアプリケーション・プログラム10)のPIDと、特定のデバイスのCIDと、優先フラグとが含まれており、さらに、iop_dev構造体512は、特定のデバイスのFIFOへのポインタを有している。
【0027】
図5の例では、デバイス0乃至5が、同じPIDのアプリケーション・プログラム10によって利用開始が通知されており、RR選択部414が、割り込みに係るデータがFIFOに格納されているデバイスを検査しやすいように、各デバイスのiop_dev構造体512は、所定の順番にリングで連結されている。すなわち、デバイス5のiop_dev構造体512には、デバイス4のiop_dev構造体512へのポインタが設定されており、デバイス4のiop_dev構造体512には、デバイス3のiop_dev構造体512へのポインタが設定されており、デバイス3のiop_dev構造体512には、デバイス2のiop_dev構造体512へのポインタが設定されており、デバイス2のiop_dev構造体512には、デバイス1のiop_dev構造体512へのポインタが設定されており、デバイス1のiop_dev構造体512には、デバイス0のiop_dev構造体512へのポインタが設定されており、デバイス0のiop_dev構造体512には、デバイス5のiop_dev構造体512へのポインタが設定されている。この逆方向のリングも加えて設定するようにしてもよい。
【0028】
なお、図5の例では、アプリケーション・プログラム10からデバイス2を指定してioctlシステムコール31が出力されて、カーネル30からドライバ40のioctlメソッド41が呼び出された場面を示している。具体的には、ioctlメソッド41のPID識別部415により呼び出し元のアプリケーション・プログラム10が特定されてそのPIDが現在PID(Current.PID)501として保持され、さらにデバイス2のfile構造体511が指し示されている。
【0029】
このようなサーバ・システム100の処理について、図6乃至図13を用いて説明する。まず、アプリケーション・プログラム10のデバイス利用管理部11は、利用を開始する特定のデバイスのCIDを指定して当該特定のデバイスをオープンするioctlシステムコール31を出力する(ステップS31)。この際、ioctlシステムコール31には、呼び出し元アプリケーション・プログラム10のPIDと、特定のデバイスを優先するか否かについての指定も含まれる。カーネル30は、アプリケーション・プログラム10から出力されたioctlシステムコール31を受け取り、ドライバ40のioctlメソッド41を呼び出す(ステップS3)。この際、特定のデバイスを優先する旨の指定があれば、ioctlメソッド41の優先CID登録部412が呼び出され、特定のデバイスを優先する旨の指定がない場合には、ioctlメソッド41のCID登録部411を呼び出す。また、ioctlメソッド41の呼び出しには、特定のデバイスのCIDと、呼び出し元アプリケーション・プログラム10のPIDも含まれる。
【0030】
これに対して、ドライバ40のioctlメソッド41のPID識別部415は、ioctlメソッド41が呼び出されると、呼び出し元アプリケーション・プログラム10のPIDを特定し、図5に示した現在PID(Current.PID)501に設定する。そして、ioctlメソッド41のCID登録部411又は優先CID登録部412は、カーネル空間メモリ50において、図5に示すようなデータ構造を生成し、リンク付けを行う(ステップS7)。上で述べたように、現在PID501のPIDと特定のデバイスCIDと優先フラグ(優先CID登録部412の場合にはフラグがオンにセットされる)とを含むiop_dev構造体512を生成し、特定のデバイスのfile構造体511をiop_dev構造体512へリンク付けると共に、当該iop_dev構造体512を特定のデバイスのFIFOへリンク付ける。さらに、同じPIDが含まれるiop_dev構造体512が存在する場合には、リング構造が形成されているので、今回生成したiop_dev構造体512をそのリング構造に挿入する。
【0031】
このような処理を、アプリケーション・プログラム10がデバイスをオープンする毎に実施する。図5の例では、デバイス0乃至5についてそれぞれ実施する。
【0032】
次に、ドライバ40のioctlメソッド41等は、デバイス管理処理を実施する(ステップS9)。デバイス管理処理については、図7のシーケンス図を用いて説明する。
【0033】
図7のフェーズ0001及び0002では、例えばデバイス3から割り込み「in3」がドライバ40に通知され、その割り込みに係るデータ「in3 data」がドライバ40に出力され、デバイス3のFIFOに格納される。ドライバ40は、デバイス3からの割り込みはkillコマンド(図7ではkill3)でカーネル30に通知する。同様に、デバイス1から割り込み「in1」がドライバ40に通知され、その割り込みに係るデータ「in1 data」がドライバ40に出力され、デバイス1のFIFOに格納される。ドライバ40は、デバイス1からの割り込みはkillコマンド(図7ではkill1)でカーネル30に通知する。
【0034】
その後フェーズ0003において、ドライバ40からカーネル30に通知された割り込みの発生は、カーネル30からシグナルSIGIOによってアプリケーション・プログラム10に通知される。このフェーズまでは、従来と同じである。
【0035】
このSIGIOによる割り込み発生の通知は、どのデバイスでどのような割り込みが発生したのかについての情報を含んでいないが、本実施の形態では、アプリケーション・プログラム10が個別デバイスについて確認する必要はない。すなわち、フェーズ0010において、アプリケーション・プログラム10のRR実行部12は、1つのデバイスの割り込みに係るデータを取得することを要求するラウンドロビンRR指定を含むioctlシステムコール31(RR選択要求とも呼ぶ)を出力する。そして、フェーズ0011において、カーネル30は、RR指定を含むioctlシステムコール31を受け取ると、ドライバ40のioctlメソッド41におけるRR選択部414を呼び出す。ここで、PID識別部415は、呼び出し元アプリケーション・プログラム10のPIDを特定して、現在PID(Current.PID)501に設定する。また、RR選択部414は、RR選択要求処理を実施する。このRR選択要求処理については図8及び図9を用いて説明する。
【0036】
RR選択部414は、現在PID(Current.PID)501から、走査すべきiop_dev構造体リングを特定する(図8:ステップS21)。複数のアプリケーション・プログラム10がデバイスをオープンしていると、カーネル空間メモリ50には、図5に示したようなiop_dev構造体リングが複数存在していることになるので、そのうちRR選択要求元のアプリケーション・プログラム10に関連するリングを特定する。
【0037】
そして、RR選択部414は、特定されたリングにおいて、次回開始ID記憶部51に格納されている次回開始IDのデバイスのiop_dev構造体512から辿ることができるFIFOを検査する(ステップS23)。そして、RR選択部414は、検査したFIFOに割り込みに係るデータが入力されているか判断する(ステップS25)。割り込みに係るデータが入力されている場合には、端子Aを介して図9の処理に移行する。
【0038】
検査したFIFOに割り込みに係るデータが入力されていない場合には、RR選択部414は、特定されたリンクの次のデバイスを特定する(ステップS27)。図5の例では、デバイス2のFIFOに割り込みに係るデータが入力されていない場合には、次のデバイスであるデバイス1に移行する。
【0039】
そして、RR選択部414は、次のデバイスのCIDが、次回開始IDと一致しているか(すなわち次のデバイスが次回開始IDのデバイスと一致しているか)判断する(ステップS29)。次回のデバイスのCIDが次回開始IDと一致している場合には、処理は端子Bを介して図9の処理に移行する。一方、次回のデバイスのCIDが次回開始IDと一致していなければ、ステップS27で特定されたデバイスのFIFOを検査する(ステップS31)。そしてステップS25に移行する。
【0040】
次に、図9の処理の説明を行う。割り込みに係るデータがFIFOに入力されている場合には端子Aを介してステップS33に移行して、RR選択部414は、現在のデバイスのiop_dev構造体512の優先フラグを確認して、優先フラグがオンになっているか判断する(ステップS33)。優先フラグがオンになっている、すなわち優先すべきデバイスに割り込みに係るデータがFIFOに格納されている場合には、RR選択部414は、現検査デバイスを通知候補として例えばカーネル空間メモリ50に保持する(ステップS35)。そしてステップS45に移行する。優先フラグがオンとオフのデバイスが検出されれば、オンになっているデバイスが優先されるが、優先フラグがオンになっているデバイスが複数検出された場合には、最初に検出されたデバイスが優先される。
【0041】
一方、優先フラグがオフである場合には、RR選択部414は、現検査デバイスが、割り込みに係るデータがFIFOに入力されているのを検出した最初のデバイスであるか判断する(ステップS37)。現検査デバイスが、割り込みに係るデータがFIFOに入力されているのを検出した最初のデバイスではない場合には端子Cを介して図8のステップS27に戻る。一方、現検査デバイスが、割り込みに係るデータがFIFOに入力されているのを検出した最初のデバイスである場合には、RR選択部414は、現検査デバイスを通知候補として例えばカーネル空間メモリ50に保持する(ステップS39)。そして端子Cを介して図7のステップS27に戻る。
【0042】
また、ステップS29でリングの全てのデバイスについて検査完了したことが検出されると、図8のステップS41で、RR選択部414は、通知候補が存在するか判断する(ステップS41)。通知候補が存在しない場合には、RR選択部414は、通知候補無しをカーネル30にreturnで通知し、カーネル30はさらにアプリケーション・プログラム10に対して通知候補無しをreturnで通知する(ステップS43)。そして元の処理に戻る。一方、通知候補が存在する場合には、ステップS45に移行する。
【0043】
ステップS45において、RR選択部414は、ステップS21で特定されたリングにおいて通知候補の次のデバイスのCIDを、カーネル空間メモリ50において、要求元アプリケーション・プログラム10のPID(すなわちCurrent.PID)に関連付けて次回開始IDとして次回開始ID記憶部51に格納する(ステップS45)。複数のアプリケーション・プログラム10がデバイスをオープンする場合があり、それぞれについて次回開始IDが異なるためである。
【0044】
そして、RR選択部414は、通知候補デバイスの割り込みに係るデータを、該当するFIFOから読み出して通知候補デバイスのCIDと共にユーザ空間メモリ20に格納する。このデータが、入力データ21となる。そして、通知候補デバイスのCIDをreturnでカーネル30に対して通知し、カーネル30は、同じく通知候補デバイスのCIDをreturnで要求元のアプリケーション・プログラム10に通知する(ステップS47)。
【0045】
このようにすれば、優先フラグがセットされているデバイスに割り込みに係るデータが存在する場合には、当該デバイスの割り込みに係るデータが、要求元のアプリケーション・プログラム10の利用可能な状態に置かれる。また、優先フラグがセットされているデバイスが存在しないか又は当該デバイスに割り込みに係るデータが存在しない場合には、割り込みに係るデータを有するとして最初に見つかったデバイスがリングの中で選択され、当該デバイスの割り込みに係るデータが、要求元のアプリケーション・プログラム10の利用可能な状態に置かれる。
【0046】
図8のフェーズ0011の説明に戻って、上で述べたように、RR選択部414は、割り込みに係るデータがFIFOに格納されているデバイスのうち1つのデバイス(図7の例ではデバイス1)を選択して、当該デバイスのFIFOに格納されている最初のデータ(図7の「in1 data」)を、ユーザ空間メモリ20に書き込む。さらに、RR選択部414は、選択されたデバイスのCIDをreturnでカーネル30に通知する。
【0047】
さらに、フェーズ0012で、カーネル30は、選択されたデバイスのCIDをアプリケーション・プログラム10にreturnで通知する。このようにすれば、アプリケーション・プログラム10は、各デバイスについて割り込みの状態を確認することなく、処理すべきデバイスを大きなオーバーヘッドなしに特定することができる。そして、アプリケーション・プログラム10は、ユーザ空間メモリ20から、通知されたCIDを含む入力データ21を読み出して、所定の処理を実施する。
【0048】
また、同じように、フェーズ0020で、アプリケーション・プログラム10のRR実行部12は、1つのデバイスの割り込みに係るデータを取得することを要求するラウンドロビンRR指定を含むioctlシステムコール31を出力する。そして、カーネル30は、RR指定を含むioctlシステムコール31を受け取ると、フェーズ0021において、ドライバ40のioctlメソッド41におけるRR選択部414を呼び出す。ここで、PID識別部415は、呼び出し元アプリケーション・プログラム10のPIDを特定して、現在PID(Current.PID)501に設定する。また、RR選択部414は、図8及び図9で説明したRR選択要求処理を実施する。
【0049】
そして、上で述べたようにRR選択部414は、割り込みに係るデータがFIFOに格納されているデバイスのうち1つのデバイス(図7の例ではデバイス3)を選択して、当該デバイスのFIFOに格納されている最初のデータ(図7の「in3 data」)を、ユーザ空間メモリ20に書き込む。さらに、RR選択部414は、選択されたデバイスのCIDをreturnでカーネル30に通知する。
【0050】
さらに、フェーズ0022で、カーネル30は、選択されたデバイスのCIDをアプリケーション・プログラム10にreturnで通知する。このようにすれば、アプリケーション・プログラム10は、各デバイスについて割り込みの状態を確認することなく、処理すべきデバイスを大きなオーバーヘッドなしに特定することができる。そして、アプリケーション・プログラム10は、ユーザ空間メモリ20から、通知されたCIDを含む入力データを読み出して、所定の処理を実施する。
【0051】
以上のような処理を実施することによって、図2で示した従来技術に比してフェーズ1010乃至1012のような処理を行わずに済む。さらに、図3で示したフェーズ1030乃至1050にような、pollfdを順番に読み出してから割り込みに係るデータを読み出すような処理も不要となる。このようにアプリケーション・プログラム10は、デバイスの管理について基本的にドライバ40のioctlメソッド41に任せているため、デバイスとの通信処理のオーバーヘッドから解放されて、処理速度が向上する。
【0052】
図6の処理の説明に戻って、アプリケーション・プログラム10のデバイス利用管理部11は、利用を終了する特定のデバイスのCIDを指定して当該特定のデバイスをクローズするioctlシステムコール31を出力する(ステップS11)。この際、ioctlシステムコール31には、呼び出し元アプリケーション・プログラム10のPIDが含まれる。カーネル30は、アプリケーション・プログラム10から出力されたioctlシステムコール31を受け取り、ドライバ40のioctlメソッド41の例えばCID登録部411を呼び出す(ステップS13)。また、ioctlメソッド41の呼び出しには、特定のデバイスのCIDと、呼び出し元アプリケーション・プログラム10のPIDも含まれる。
【0053】
これに対して、ドライバ40のioctlメソッド41のPID識別部415は、ioctlメソッド41が呼び出されると、呼び出し元アプリケーション・プログラム10のPIDを特定し、図5に示した現在PID(Current.PID)501に設定する。そして、ioctlメソッド41の例えばCID登録部411は、カーネル空間メモリ50において、指定デバイスに係るfile構造体511から該当するiop_dev構造体512を特定し、当該iop_dev構造体512を削除し、リング構造が存在している場合には、リング構造において前及び後のiop_dev構造体512を繋げるようにリンクを変更する(ステップS17)。ステップS11乃至S17については、デバイスをクローズする毎に実施する。これにより、必要なデバイスについては、リング構造に追加すると共に、不要となったデバイスについては、リング構造から削除することによって、適切にリング構造を走査できるようになる。
【0054】
また、図6のような処理を実施すれば、アプリケーション・プログラム10の処理負荷が減少する。
【0055】
本実施の形態の処理をより分かりやすくするために、図10及び図11を用いて具体例を説明する。まず、状態1は、初期状態であり、カーネル空間メモリ50には、リング構造もなければ、iop_dev構造体も存在しない。次に、状態2において、PID=99のアプリケーション・プログラム10からデバイスA(CID=A)のオープンが指示されると、PID=99についてのリング構造が生成される。なお、デバイスAについて優先フラグの設定はないものとする。具体的には、CID=Aについてのiop_dev構造体512が生成されて、カーネル空間メモリ50に登録される。このCID=Aについてのiop_dev構造体512(id=0)は、CID=A、PID=99、優先フラグ=Nを含む。なお、1つしかiop_dev構造体512が存在しない場合にはリングは形成できないので、次ポインタ及び前ポインタは自iop_dev構造体512のid=0となる。このように、図10の例では、双方向のリンクが設定される。すなわち双方向に走査できるように2重リング構造となっているが、必ずしも2重リング構造である必要はない。また、次回開始ID記憶部51には、次回開始ID(すなわち先頭ID)=0と、オープンを要求したアプリケーション・プログラム10のPID=99とが、最初のリングについてのデータとして登録される(図10及び図11の左から3列目)。
【0056】
また、状態3において、PID=99のアプリケーション・プログラム10からデバイスB(CID=B)のオープンが指示されると、PID=99についてのリング構造に、デバイスBについてのiop_dev構造体512が挿入される。なお、デバイスBについて優先フラグの設定はないものとする。具体的には、CID=Bについてのiop_dev構造体512が生成されて、カーネル空間メモリ50に登録される。このCID=Bについてのiop_dev構造体512(id=1)は、CID=B、PID=99、優先フラグ=Nを含む。また、id=0のiop_dev構造体512とid=1のiop_dev構造体512とが互いにリンクし合う形に、前ポインタ及び後ポインタを設定する。具体的には、id=0のiop_dev構造体512の前ポインタ及び後ポインタは、id=1を示しており、id=1のiop_dev構造体512の前ポインタ及び後ポインタは、id=0を示している。次回開始ID記憶部51に格納されるデータについては、変更はない。
【0057】
さらに、状態4において、PID=99のアプリケーション・プログラム10からデバイスC(CID=C)のオープンが指示されると、PID=99についてのリング構造に、デバイスCについてのiop_dev構造体512が挿入される。なお、デバイスCについて優先フラグの設定があるものとする。具体的には、CID=Cについてのiop_dev構造体512が生成されて、カーネル空間メモリ50に登録される。このCID=Cについてのiop_dev構造体512(id=2)は、CID=C、PID=99、優先フラグ=Yを含む。また、id=0のiop_dev構造体512、id=1のiop_dev構造体512、id=2のiop_dev構造体512、id=0のiop_dev構造体512の順番でリンクしてリングを構成するように、前ポインタを設定する。後ポインタについては、逆方向に順番にリンクしてリングを構成するように設定する。
【0058】
次の状態5では、PID=99とは異なるPID=111のアプリケーション・プログラム10からデバイスD(CID=D)のオープンが指示されると、PID=111についてのリング構造が生成される。なお、デバイスDについて優先フラグの設定はないものとする。具体的には、CID=Dについてのiop_dev構造体512が生成されて、カーネル空間メモリ50に登録される。このCID=Dについてのiop_dev構造体512(id=3)は、CID=D、PID=111、優先フラグ=Nを含む。なお、1つしかiop_dev構造体512が存在しない場合にはリングは形成できないので、次ポインタ及び前ポインタは自iop_dev構造体512のid=3となる。また、次回開始ID記憶部51には、次回開始ID(すなわち先頭ID)=3と、オープンを要求したアプリケーション・プログラム10のPID=111とが、2番目のリングについてのデータとして登録される(図10及び図11の左から4列目)。なお、異なるPIDについてのリングについては影響はない。
【0059】
このような状態がカーネル空間メモリ50に用意された場合において、図11の処理に移行する。
【0060】
状態6では、デバイスAに割り込みが発生し、その後PID=99のアプリケーション・プログラム10からRR選択要求を受けると、PID=99のリングの先頭id=0からFIFOに割り込みに係るデータが格納されているか確認する。そうすると、デバイスAに割り込みが発生しているので、先頭のiop_dev構造体512(id=0)からリンクされているFIFOで割り込みに係るデータを発見するので、図7のフェーズ0011及び0012のように、デバイスAのCID=Aをアプリケーション・プログラム10に通知すると共に、デバイスAについてのFIFOから割り込みに係るデータを読み出し、ユーザ空間メモリ20に格納する。そうすると、アプリケーション・プログラム10は、ユーザ空間メモリ20から当該デバイスAについての割り込みに係るデータを読み出して所定の処理を実施する。なお、デバイスAが選択されたので、次回開始ID記憶部51に格納されている、PID=99についてのリングのデータのうち次回開始IDは、次回開始ID=1、すなわちリングにおいて次のデバイス(ここではデバイスB)に変更する。
【0061】
さらに、状態7では、デバイスB及びCに割り込みが発生し、その後PID=99のアプリケーション・プログラム10からRR選択要求を受けると、リングの先頭id=1からFIFOに割り込みに係るデータが格納されているか確認する。そうすると、デバイスB及びCに割り込みが発生しているので、最初にデバイスBが特定されるが、デバイスCについては優先フラグ=Yであるので、優先フラグYのデバイスCが優先される。従って、図7のフェーズ0011及び0012のように、デバイスCのCID=Cをアプリケーション・プログラム10に通知すると共に、デバイスCについてのFIFOから割り込みに係るデータを読み出し、ユーザ空間メモリ20に格納する。そうすると、アプリケーション・プログラム10は、ユーザ空間メモリ20から当該デバイスCについての割り込みに係るデータを読み出して所定の処理を実施する。なお、デバイスCが選択されたので、次回開始ID記憶部51に格納されている、PID=99についてのリングのデータのうち次回開始IDは、次回開始ID=0、すなわちリングにおいて次のデバイス(ここではデバイスA)に変更する。
【0062】
この後、状態8では、PID=99のアプリケーション・プログラム10からデバイスB(CID=B)のクローズが指示されると、PID=99についてのリング構造において、デバイスBについてのiop_dev構造体512が削除される。具体的には、CID=Bについてのiop_dev構造体512が削除されると共に、PID=99についてのリングに連結されている他のiop_dev構造体512でリングを構成するように次ポインタ及び前ポインタが変更される。すなわち、id=0のiop_dev構造体512の次ポインタ及び前ポインタは、id=2を示すようになる。同様に、id=2のiop_dev構造体512の次ポインタ及び前ポインタは、id=0を示すようになる。他の部分については変更はない。
【0063】
以上のように、リング構造を図8及び図9の処理フローに従って辿ることによってデバイスを選択すると共に、アプリケーション・プログラム10からのオープン又はクローズの指示に応じてiop_dev構造体512を追加又は削除してリンク構造を変更する。
【0064】
なお、上で述べたようにRR選択部414では、優先フラグを考慮した上でラウンドロビンでデバイスを選択している。しかしながら、ラウンドロビンではなく、同じデバイスが選択されないように制限を加えた上で乱数などによって割り込みに係るデータをFIFOに保持するデバイスを選択するようにしても良い。さらに、優先有り無しという指定ではなく、優先度を指定して、複数のデバイスについて割り込みが発生した場合には、優先度が最大となるデバイスを選択するようにしても良い。さらに、過去の選択実績を登録しておき、最も選択実績の低いデバイスを優先的に選択するような処理を行うようにしても良い。
【0065】
次に、ioctlメソッド41の再登録部413について上ではその処理について簡単に述べただけであったが、図12及び図13を用いて説明する。図12では、図7で示したフェーズ0001乃至0003までの処理と同様の処理が行われる。具体的には、ステップ1でデバイス3から割り込み「in」がドライバ40に通知され、その割り込みに係るデータがドライバ40に出力される。ステップ1.1で、ドライバ40は、割り込みに係るデータを、デバイス3についてのFIFOに書き込む。また、ステップ1.2で、ドライバ40は、デバイス3からの割り込みをkillコマンドでカーネル30に通知する。同様に、ステップ2でデバイス1から割り込み「in」がドライバ40に通知され、その割り込みに係るデータがドライバ40に出力される。ステップ2.1で、ドライバ40は、割り込みに係るデータを、デバイス1についてのFIFOに書き込む。また、ステップ2.2で、ドライバ40は、デバイス1からの割り込みはkillコマンドでカーネル30に通知する。
【0066】
その後ステップ3において、ドライバ40からカーネル30に通知された割り込みの発生は、ドライバ40からシグナルSIGIOによってアプリケーション・プログラム10に通知される。
【0067】
図13の処理の説明に移行して、ステップ4で、アプリケーション・プログラム10のRR実行部12は、RR選択要求としてioctlシステムコール31をカーネル30に出力する。これに対して、ステップ4.1で、カーネル30は、ドライバ40のioctlメソッド41におけるRR選択部414を呼び出す。呼び出されたioctlメソッド41のRR選択部414は、上で述べたようなRR選択要求処理を実施する。ここではデバイス1を選択したものとする。
【0068】
そうすると、ステップ4.1.1で、RR選択部414は、デバイス1のFIFOから割り込みに係るデータを取り出し、ステップ4.1.2で、ユーザ空間メモリ20に書き込む。さらに、RR選択部414は、デバイス1のCIDをreturnでカーネル30に通知する。さらに、カーネル30は、デバイス1のCIDをアプリケーション・プログラム10にreturnで通知する。そして、ステップ5で、アプリケーション・プログラム10は、ユーザ空間メモリ20を参照して、通知されたCIDについての割り込みに係るデータを読み出す。
【0069】
通常であれば、アプリケーション・プログラム10は、そのまま割り込みに係るデータについて所定の処理を実施するが、ここではこの割り込みに係るデータを処理するための資源獲得できないなど、アプリケーション・プログラム10側の都合で、読み出した割り込みに係るデータを処理できないものとする。
【0070】
そうすると、ステップ6で、アプリケーション・プログラム10の例えばRR実行部12は、CIDを指定してFIFOに割り込みに係るデータを再登録することを要求するioctlシステムコール31をカーネル30に出力する。ステップ6.1で、カーネル30は、ドライバ40のioctlメソッド41における再登録部413を呼び出す。
【0071】
呼び出された再登録部413は、ステップ6.1.1でユーザ空間メモリ20を参照して、指定されたCIDを含み且つ割り込みに係るデータを読み出し、ステップ6.1.2で指定されたCIDのデバイスについてのFIFOに書き込む。
【0072】
このようにすれば、ドライバ40側で特定したデバイスについての割り込みに係るデータをアプリケーション・プログラム10側で処理できなかった場合、当該割り込みに係るデータを、そのデータを発生させたデバイスのFIFOに戻すことができる。よって、割り込みに係るデータが破棄されるわけではないので、次回以降、RR選択要求としてioctlシステムコール31をアプリケーション・プログラム10が出力した場合に選択されて処理されるようになる。
【0073】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。図4に示したサーバ・システム100の機能ブロック図は一例であって必ずしも実際のモジュール構成を一致しない場合もある。特にアプリケーション・プログラム10やドライバ40のioctlメソッド41の構成については、同様の機能を果たすことができればモジュール構成は別の態様であっても良い。なお、アプリケーション・プログラム10、カーネル30及びドライバ40は、サーバ・システム100のハードウエアと有機的に協働して上で述べた機能を実現する。
【0074】
さらに、上では説明を省略している場合もあるが、メモリアクセスに必要なアドレスなどのデータは、各構成要素でやりとりするなどして取得・保持しており、特に説明しなくとも当業者は実施することができる。
【0075】
なお、サーバ・システム100は、コンピュータ装置であって、図14に示すように、メモリ2501とCPU2503とハードディスク・ドライブ(HDD)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。必要に応じてCPU2503は、表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ2501に格納され、必要があればHDD2505に格納される。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【0076】
以上本実施の形態をまとめると以下のようになる。
【0077】
本ドライバ・プログラムは、1のアプリケーション・プログラムに関連する複数のデバイスを管理するドライバ・プログラムである。そして、コンピュータに、特定のアプリケーション・プログラムからカーネルを介して特定のデバイスの利用を開始するための第1の要求を受け付けると、当該特定のアプリケーション・プログラムの識別子と特定のデバイスの識別子とを関連付けて第1のメモリ領域に格納するステップと、アプリケーション・プログラムの識別子が関連付けられているいずれかのデバイスから割り込みがあった場合、当該デバイスの識別子に関連付けて当該割り込みに係るデータを第1のメモリ領域に格納するステップと、特定のアプリケーション・プログラムからカーネルを介してデバイス選択を要求する第2の要求を受け付けると、第1のメモリ領域において特定のアプリケーション・プログラムの識別子に関連付けて割り込みに係るデータが格納されているデバイスのうち1のデバイスを選択し、当該1のデバイスについての割り込みに係るデータを、当該1のデバイスの識別子と共に第2のメモリ領域に格納するデバイス選択ステップと、カーネルを介して特定のアプリケーション・プログラムに処理の完了を通知するステップとを実行させる。
【0078】
このようなドライバ・プログラムを導入することによって、アプリケーション・プログラムは、割り込みが発生しているデバイスを自ら特定する必要がなく割り込みに係るデータを取得できる。従って、アプリケーション・プログラムとデバイスとの通信回数を削減することができ、割り込み制御を高速化することができる。
【0079】
また、特定のアプリケーション・プログラムからカーネルを介して第2のメモリ領域に格納されている上記1のデバイスについての割り込みに係るデータを第1のメモリ領域に再登録することを要求する第3の要求を受け付けると、第2のメモリ領域に格納されている上記1のデバイスについての割り込みに係るデータを読み出して、上記1のデバイスの識別子に対応付けて第1のメモリ領域に格納するステップをさらに実行させるようにしても良い。上で述べたように、ドライバ・プログラムが1のデバイスを選択するので、アプリケーション・プログラム側では、デバイスを選択できない。従って、ドライバ・プログラムが選択したデバイスについての割り込みに係るデータを処理できない場合も出てくる。そのような場合には、上で述べたようなステップを実施することにより、割り込みに係るデータを元に戻して、次回以降の処理に回すものである。
【0080】
さらに、特定のアプリケーション・プログラムの識別子に関連付けられているデバイスの識別子をリング構造で管理するようにしてもよい。その場合、次回検査を開始すべきデバイスの識別子を別途管理するようにしてもよい。また、上で述べたデバイス選択ステップが、特定のアプリケーション・プログラムの識別子に関連付けられているデバイスの識別子を、次回検査を開始すべきデバイスの識別子からリング構造に従って探索して、割り込みに係るデータが関連付けられており且つ最初に検出されたデバイスを選択する選択ステップを含むようにしてもよい。このようにすれば、容易にデバイスを選択することができるようになる。
【0081】
また、第1のメモリ領域において、デバイスの識別子に第1の要求で指定された優先度が関連付けられるようにしてもよい。また、特定のアプリケーション・プログラムの識別子に関連付けられているデバイスの識別子をリング構造で管理するようにしてもよい。さらに、次回検査を開始すべきデバイスの識別子を別途管理するようにしてもよい。その場合、上で述べたデバイス選択ステップが、特定のアプリケーション・プログラムの識別子に関連付けられているデバイスの識別子を、次回検査を開始すべきデバイスの識別子からリング構造に従って探索して、割り込みに係るデータが関連付けられており且つ最初に検出されたデバイス又は割り込みに係るデータが関連付けられており且つ関連付けられている優先度が最大であるデバイスを選択する選択ステップを含むようにしてもよい。このようにすれば、優先度を加味した形でデバイスを選択することができるようになる。
【0082】
なお、上で述べたようなドライバ・プログラムは、例えばフレキシブル・ディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、コンピュータのメモリ等の記憶装置に一時保管される。
【0083】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【0084】
(付記1)
特定のアプリケーション・プログラムに関連する複数のデバイスの管理処理をコンピュータに実行させるドライバ・プログラムであって、
コンピュータに、
前記特定のアプリケーション・プログラムを前記コンピュータが実行することにより、前記コンピュータが送信した、特定のデバイスの利用を開始するための第1の要求を受け付けると、当該特定のアプリケーション・プログラムの識別子と前記特定のデバイスの識別子とを関連付けて第1のメモリ領域に格納するステップと、
いずれかのデバイスから割り込みがあった場合、前記第1のメモリ領域において、前記特定のアプリケーション・プログラムの識別子が関連付けられていれば、当該デバイスの識別子に関連付けて当該割り込みに係るデータを前記第1のメモリ領域に格納するステップと、
前記特定のアプリケーション・プログラムを前記コンピュータが実行することにより、前記コンピュータが送信した、デバイス選択を要求する第2の要求を受け付けると、前記第1のメモリ領域において前記特定のアプリケーション・プログラムの識別子に関連付けて前記割り込みに係るデータが格納されているデバイスのうち1のデバイスを選択し、当該1のデバイスについての前記割り込みに係るデータを、当該1のデバイスの識別子と共に第2のメモリ領域に格納するデバイス選択ステップと、
前記特定のアプリケーション・プログラムに処理の完了を通知するステップと、
を実行させるためのドライバ・プログラム。
【0085】
(付記2)
前記特定のアプリケーション・プログラムから前記カーネルを介して前記第2のメモリ領域に格納されている前記1のデバイスについての前記割り込みに係るデータを前記第1のメモリ領域に再登録することを要求する第3の要求を受け付けると、前記第2のメモリ領域に格納されている前記1のデバイスについての前記割り込みに係るデータを読み出して、前記1のデバイスの識別子に対応付けて前記第1のメモリ領域に格納するステップ
をさらに前記コンピュータに実行させるための付記1記載のドライバ・プログラム。
【0086】
(付記3)
前記特定のアプリケーション・プログラムの識別子に関連付けられている前記デバイスの識別子をリング構造で管理し、
次回検査を開始すべき前記デバイスの識別子を別途管理し、
前記デバイス選択ステップが、
前記特定のアプリケーション・プログラムの識別子に関連付けられている前記デバイスの識別子を、前記次回検査を開始すべき前記デバイスの識別子から前記リング構造に従って探索して、前記割り込みに係るデータが関連付けられており且つ最初に検出された前記デバイスを選択する選択ステップ
を含む、付記1又は2記載のドライバ・プログラム。
【0087】
(付記4)
前記第1のメモリ領域において、前記デバイスの識別子に前記第1の要求で指定された優先度が関連付けられており、
前記特定のアプリケーション・プログラムの識別子に関連付けられている前記デバイスの識別子をリング構造で管理し、
次回検査を開始すべき前記デバイスの識別子を別途管理し、
前記デバイス選択ステップが、
前記特定のアプリケーション・プログラムの識別子に関連付けられている前記デバイスの識別子を、前記次回検査を開始すべき前記デバイスの識別子から前記リング構造に従って探索して、前記割り込みに係るデータが関連付けられており且つ最初に検出された前記デバイス又は前記割り込みに係るデータが関連付けられており且つ関連付けられている前記優先度が最大であるデバイスを選択する選択ステップ
を含む、付記1又は2記載のドライバ・プログラム。
【0088】
(付記5)
特定のアプリケーション・プログラムに関連する複数のデバイスの管理処理を実行するデバイス管理方法であって、
コンピュータが、
前記特定のアプリケーション・プログラムを前記コンピュータが実行することにより、前記コンピュータが送信した、特定のデバイスの利用を開始するための第1の要求を受け付けると、当該特定のアプリケーション・プログラムの識別子と前記特定のデバイスの識別子とを関連付けて第1のメモリ領域に格納するステップと、
いずれかのデバイスから割り込みがあった場合、前記第1のメモリ領域において、前記特定のアプリケーション・プログラムの識別子が関連付けられていれば、当該デバイスの識別子に関連付けて当該割り込みに係るデータを前記第1のメモリ領域に格納するステップと、
前記特定のアプリケーション・プログラムを前記コンピュータが実行することにより、前記コンピュータが送信した、デバイス選択を要求する第2の要求を受け付けると、前記第1のメモリ領域において前記特定のアプリケーション・プログラムの識別子に関連付けて前記割り込みに係るデータが格納されているデバイスのうち1のデバイスを選択し、当該1のデバイスについての前記割り込みに係るデータを、当該1のデバイスの識別子と共に第2のメモリ領域に格納するデバイス選択ステップと、
前記特定のアプリケーション・プログラムに処理の完了を通知するステップと、
を実行するデバイス管理方法。
【0089】
(付記6)
複数のデバイスと、
第1のメモリ領域と第2のメモリ領域とを含むメモリと、
ドライバと、
を有し、
前記ドライバが、
特定のアプリケーション・プログラムから特定のデバイスの利用を開始するための第1の要求を受け付けると、当該特定のアプリケーション・プログラムの識別子と前記特定のデバイスの識別子とを関連付けて前記第1のメモリ領域に格納する手段と、
いずれかのデバイスから割り込みがあった場合、前記第1のメモリ領域において、前記特定のアプリケーション・プログラムの識別子が関連付けられていれば、当該デバイスの識別子に関連付けて当該割り込みに係るデータを前記第1のメモリ領域に格納する手段と、
前記特定のアプリケーション・プログラムからデバイス選択を要求する第2の要求を受け付けると、前記第1のメモリ領域において前記特定のアプリケーション・プログラムの識別子に関連付けて前記割り込みに係るデータが格納されているデバイスのうち1のデバイスを選択し、当該1のデバイスについての前記割り込みに係るデータを、当該1のデバイスの識別子と共に前記第2のメモリ領域に格納するデバイス選択手段と、
前記特定のアプリケーション・プログラムに処理の完了を通知する手段と、
を有することを特徴とするデバイス管理装置。
【符号の説明】
【0090】
100 サーバ・システム
10 アプリケーション・プログラム
20 ユーザ空間メモリ 30 ファイルシステム(カーネル)
40 ドライバ 50 カーネル空間メモリ
11 デバイス利用管理部 12 RR実行部
21 入力データ
31 ioctlシステムコール
41 ioctlメソッド
411 CID登録部 412 優先CID登録部
413 再登録部 414 RR選択部
415 PID識別部

【特許請求の範囲】
【請求項1】
特定のアプリケーション・プログラムに関連する複数のデバイスの管理処理をコンピュータに実行させるドライバ・プログラムであって、
コンピュータに、
前記特定のアプリケーション・プログラムを前記コンピュータが実行することにより、前記コンピュータが送信した、特定のデバイスの利用を開始するための第1の要求を受け付けると、当該特定のアプリケーション・プログラムの識別子と前記特定のデバイスの識別子とを関連付けて第1のメモリ領域に格納するステップと、
いずれかのデバイスから割り込みがあった場合、前記第1のメモリ領域において、前記特定のアプリケーション・プログラムの識別子が関連付けられていれば、当該デバイスの識別子に関連付けて当該割り込みに係るデータを前記第1のメモリ領域に格納するステップと、
前記特定のアプリケーション・プログラムを前記コンピュータが実行することにより、前記コンピュータが送信した、デバイス選択を要求する第2の要求を受け付けると、前記第1のメモリ領域において前記特定のアプリケーション・プログラムの識別子に関連付けて前記割り込みに係るデータが格納されているデバイスのうち1のデバイスを選択し、当該1のデバイスについての前記割り込みに係るデータを、当該1のデバイスの識別子と共に第2のメモリ領域に格納するデバイス選択ステップと、
前記特定のアプリケーション・プログラムに処理の完了を通知するステップと、
を実行させるためのドライバ・プログラム。
【請求項2】
前記特定のアプリケーション・プログラムから前記カーネルを介して前記第2のメモリ領域に格納されている前記1のデバイスについての前記割り込みに係るデータを前記第1のメモリ領域に再登録することを要求する第3の要求を受け付けると、前記第2のメモリ領域に格納されている前記1のデバイスについての前記割り込みに係るデータを読み出して、前記1のデバイスの識別子に対応付けて前記第1のメモリ領域に格納するステップ
をさらに前記コンピュータに実行させるための請求項1記載のドライバ・プログラム。
【請求項3】
特定のアプリケーション・プログラムに関連する複数のデバイスの管理処理を実行するデバイス管理方法であって、
コンピュータが、
前記特定のアプリケーション・プログラムを前記コンピュータが実行することにより、前記コンピュータが送信した、特定のデバイスの利用を開始するための第1の要求を受け付けると、当該特定のアプリケーション・プログラムの識別子と前記特定のデバイスの識別子とを関連付けて第1のメモリ領域に格納するステップと、
いずれかのデバイスから割り込みがあった場合、前記第1のメモリ領域において、前記特定のアプリケーション・プログラムの識別子が関連付けられていれば、当該デバイスの識別子に関連付けて当該割り込みに係るデータを前記第1のメモリ領域に格納するステップと、
前記特定のアプリケーション・プログラムを前記コンピュータが実行することにより、前記コンピュータが送信した、デバイス選択を要求する第2の要求を受け付けると、前記第1のメモリ領域において前記特定のアプリケーション・プログラムの識別子に関連付けて前記割り込みに係るデータが格納されているデバイスのうち1のデバイスを選択し、当該1のデバイスについての前記割り込みに係るデータを、当該1のデバイスの識別子と共に第2のメモリ領域に格納するデバイス選択ステップと、
前記特定のアプリケーション・プログラムに処理の完了を通知するステップと、
を実行するデバイス管理方法。
【請求項4】
複数のデバイスと、
第1のメモリ領域と第2のメモリ領域とを含むメモリと、
ドライバと、
を有し、
前記ドライバが、
特定のアプリケーション・プログラムから特定のデバイスの利用を開始するための第1の要求を受け付けると、当該特定のアプリケーション・プログラムの識別子と前記特定のデバイスの識別子とを関連付けて前記第1のメモリ領域に格納する手段と、
いずれかのデバイスから割り込みがあった場合、前記第1のメモリ領域において、前記特定のアプリケーション・プログラムの識別子が関連付けられていれば、当該デバイスの識別子に関連付けて当該割り込みに係るデータを前記第1のメモリ領域に格納する手段と、
前記特定のアプリケーション・プログラムからデバイス選択を要求する第2の要求を受け付けると、前記第1のメモリ領域において前記特定のアプリケーション・プログラムの識別子に関連付けて前記割り込みに係るデータが格納されているデバイスのうち1のデバイスを選択し、当該1のデバイスについての前記割り込みに係るデータを、当該1のデバイスの識別子と共に前記第2のメモリ領域に格納するデバイス選択手段と、
前記特定のアプリケーション・プログラムに処理の完了を通知する手段と、
を有することを特徴とするデバイス管理装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate


【公開番号】特開2010−257099(P2010−257099A)
【公開日】平成22年11月11日(2010.11.11)
【国際特許分類】
【出願番号】特願2009−104772(P2009−104772)
【出願日】平成21年4月23日(2009.4.23)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】