(57)【要約】【課題】複数のデバイスからの割り込みを処理するアプリケーションの負荷を軽減する。【解決手段】ドライバは、アプリケーションからオープンされたデバイスのIDとアプリケーションのIDを関連付けて第１メモリ領域に格納しておき、アプリケーションのIDが関連付けられているいずれかのデバイスから割り込みがあった場合、当該デバイスのIDに関連付けて当該割り込みに係るデータを第１メモリ領域に格納し、特定のアプリケーションからデバイス選択を要求する第２の要求を受け付けると、第１メモリ領域に特定のアプリケーションのIDに関連付けて割り込みに係るデータを格納したデバイスのうち１のデバイスを選択し、当該１のデバイスについての割り込みに係るデータを、当該１のデバイスのIDと共に第２メモリ領域に格納する。特定のアプリケーションは、第２メモリ領域からデータを読み出して処理する。【選択図】図４
2010257099.tif 000002
【特許請求の範囲】
【請求項１】
特定のアプリケーション・プログラムに関連する複数のデバイスの管理処理をコンピュータに実行させるドライバ・プログラムであって、
コンピュータに、
前記特定のアプリケーション・プログラムを前記コンピュータが実行することにより、前記コンピュータが送信した、特定のデバイスの利用を開始するための第１の要求を受け付けると、当該特定のアプリケーション・プログラムの識別子と前記特定のデバイスの識別子とを関連付けて第１のメモリ領域に格納するステップと、
いずれかのデバイスから割り込みがあった場合、前記第１のメモリ領域において、前記特定のアプリケーション・プログラムの識別子が関連付けられていれば、当該デバイスの識別子に関連付けて当該割り込みに係るデータを前記第１のメモリ領域に格納するステップと、
前記特定のアプリケーション・プログラムを前記コンピュータが実行することにより、前記コンピュータが送信した、デバイス選択を要求する第２の要求を受け付けると、前記第１のメモリ領域において前記特定のアプリケーション・プログラムの識別子に関連付けて前記割り込みに係るデータが格納されているデバイスのうち１のデバイスを選択し、当該１のデバイスについての前記割り込みに係るデータを、当該１のデバイスの識別子と共に第２のメモリ領域に格納するデバイス選択ステップと、
前記特定のアプリケーション・プログラムに処理の完了を通知するステップと、
を実行させるためのドライバ・プログラム。
【請求項２】
前記特定のアプリケーション・プログラムから前記カーネルを介して前記第２のメモリ領域に格納されている前記１のデバイスについての前記割り込みに係るデータを前記第１のメモリ領域に再登録することを要求する第３の要求を受け付けると、前記第２のメモリ領域に格納されている前記１のデバイスについての前記割り込みに係るデータを読み出して、前記１のデバイスの識別子に対応付けて前記第１のメモリ領域に格納するステップ
をさらに前記コンピュータに実行させるための請求項１記載のドライバ・プログラム。
【請求項３】
特定のアプリケーション・プログラムに関連する複数のデバイスの管理処理を実行するデバイス管理方法であって、
コンピュータが、
前記特定のアプリケーション・プログラムを前記コンピュータが実行することにより、前記コンピュータが送信した、特定のデバイスの利用を開始するための第１の要求を受け付けると、当該特定のアプリケーション・プログラムの識別子と前記特定のデバイスの識別子とを関連付けて第１のメモリ領域に格納するステップと、
いずれかのデバイスから割り込みがあった場合、前記第１のメモリ領域において、前記特定のアプリケーション・プログラムの識別子が関連付けられていれば、当該デバイスの識別子に関連付けて当該割り込みに係るデータを前記第１のメモリ領域に格納するステップと、
前記特定のアプリケーション・プログラムを前記コンピュータが実行することにより、前記コンピュータが送信した、デバイス選択を要求する第２の要求を受け付けると、前記第１のメモリ領域において前記特定のアプリケーション・プログラムの識別子に関連付けて前記割り込みに係るデータが格納されているデバイスのうち１のデバイスを選択し、当該１のデバイスについての前記割り込みに係るデータを、当該１のデバイスの識別子と共に第２のメモリ領域に格納するデバイス選択ステップと、
前記特定のアプリケーション・プログラムに処理の完了を通知するステップと、
を実行するデバイス管理方法。
【請求項４】
複数のデバイスと、
第１のメモリ領域と第２のメモリ領域とを含むメモリと、
ドライバと、
を有し、
前記ドライバが、
特定のアプリケーション・プログラムから特定のデバイスの利用を開始するための第１の要求を受け付けると、当該特定のアプリケーション・プログラムの識別子と前記特定のデバイスの識別子とを関連付けて前記第１のメモリ領域に格納する手段と、
いずれかのデバイスから割り込みがあった場合、前記第１のメモリ領域において、前記特定のアプリケーション・プログラムの識別子が関連付けられていれば、当該デバイスの識別子に関連付けて当該割り込みに係るデータを前記第１のメモリ領域に格納する手段と、
前記特定のアプリケーション・プログラムからデバイス選択を要求する第２の要求を受け付けると、前記第１のメモリ領域において前記特定のアプリケーション・プログラムの識別子に関連付けて前記割り込みに係るデータが格納されているデバイスのうち１のデバイスを選択し、当該１のデバイスについての前記割り込みに係るデータを、当該１のデバイスの識別子と共に前記第２のメモリ領域に格納するデバイス選択手段と、
前記特定のアプリケーション・プログラムに処理の完了を通知する手段と、
を有することを特徴とするデバイス管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、複数のデバイスからの割り込みを処理する技術に関する。
【背景技術】
【０００２】
複数のデバイスを用いたサーバ・システムのシステム構成例を図１に示す。図１の例では、デバイスがdev0からdevNのＮ＋１個設けられており、アプリケーション・プログラムは、これらの複数のデバイスの入出力を同時並行に行う。このようなアプリケーション・プログラムのため、ユーザ空間メモリには、デバイスにアクセスするための資源へのポインタであるfd0乃至fdNと、デバイスの割り込み発生状態を確認するための資源へのポインタであるpollfd0乃至pollfdNとをデバイス毎に保持している。また、ユーザ空間メモリには、任意のデバイスの入力データも保持され、アプリケーション・プログラムによって処理される。
【０００３】
また、カーネル（ファイルシステム（ＦＳ：File System））には、デバイスにアクセスするためのシステムコール（例えばデータの読み込みのためのreadシステムコール）のほかに、デバイスの割り込み状態を確認するためのシステムコールpollを用意している。また、装置毎に異なる入出力手続きをカーネルに対して汎用的に行うためのドライバも用意されている。このドライバには、readシステムコールで用いられるreadメソッドと、pollシステムコールで呼ばれるpollメソッドが設けられている。さらに、カーネル空間メモリには、デバイス毎に、その割り込み情報を保持するためのfifo（FIFO：First In First Out。図ではfifo0乃至fifoN）バッファが用意されており、ドライバは、デバイスからの割り込みがあれば、その割り込み情報を、対応するfifoに格納する。
【０００４】
このようなサーバ・システムの処理シーケンスを図２及び図３に示す。上で述べたように、このサーバ・システムのアプリケーション・プログラムは、複数のデバイスの入出力を同時に行う。このため、デバイスからの割り込み（例えばデータ読み込み可能な状態になるという割り込み）も非同期に発生する。図２のフェーズ１００１及び１００２のように、例えばデバイス３から割り込み「in3」がドライバに通知され、さらにその割り込みに係るデータ「in3 data」がドライバに出力され、fifo3に格納される。ドライバは、デバイス３からの割り込みをｋｉｌｌコマンドでカーネルに通知する。同様に、デバイス１から割り込み「in1」がドライバに通知され、さらにその割り込みに係るデータ「in1 data」がドライバに出力され、fifo1に格納される。ドライバは、デバイス１からの割り込みをｋｉｌｌコマンドでカーネルに通知する。
【０００５】
その後フェーズ１００３において、ドライバからカーネルに通知された割り込みの発生は、シグナルＳＩＧＩＯによってアプリケーションに通知される。
【０００６】
このＳＩＧＩＯによる割込み発生の通知は、どの装置でどのような割り込みが発生したのかについての情報を含んでいないため、アプリケーション・プログラムは、フェーズ１０１０において、その割り込みの発生元と発生理由を調べるために、pollシステムコールをカーネルに対して発行する。従って、フェーズ１０１１において、カーネルは、pollシステムコールの引数に列挙されたデバイスそれぞれを対象に、ドライバに対してpollメソッドを呼び出す。これにより、状態の問い合わせが行われる。具体的には、カーネルからドライバに対してデバイス０乃至Ｎに対する問い合わせpoll0乃至pollNが出力され、ドライバはその都度割り込みの有無をreturnでカーネルに通知する。これによりカーネルは、割り込みが発生したデバイスを特定でき、フェーズ１０１２において、カーネルからアプリケーション・プログラムに割り込みが発生したデバイスをreturnで通知する。このようにして、アプリケーション・プログラムも、割り込みが発生したデバイスを認識できるようになる。
【０００７】
図３の説明に移行して、アプリケーション・プログラムは、ユーザ空間メモリから、デバイスの割り込み発生状態を確認するための資源へのポインタであるpollfd0からpollfdNまで順番に読み出す。フェーズ１０２０では、pollfd0を読み出すが、割り込みに係るデバイスについてのpollfdではないので、次にpollfd1を読み出す。これは割り込みに係るデバイスについてのpollfdであるので、フェーズ１０３０で、アプリケーション・プログラムは、デバイス１からの割り込みに係るデータを読み出すために、このpollfd1を用いてreadシステムコールをカーネルに出力する。フェーズ１０３１では、カーネルは、ドライバのreadメソッドを呼び出し、ドライバのreadメソッドは、デバイス１のfifo1から割り込みに係るデータ「in1 data」を読み出して、ユーザ空間メモリに格納する。このデータが、ユーザ空間メモリにおける「任意のデバイスの入力データ」に該当する。なお、ドライバは、割り込みに係るデータのユーザ空間メモリへの格納が完了すると、カーネルに対してreturnで通知する。そして、フェーズ１０３２で、カーネルは、アプリケーション・プログラムに、割り込みに係るデータの格納が完了したことをreturnで通知する。そして、アプリケーション・プログラムは、割り込みに係るデータ「in1 data」を読み出して、所定の処理を実施する。
【０００８】
同様にして、フェーズ１０４０では、アプリケーション・プログラムは、ユーザ空間メモリからpollfd2を読み出すが、割り込みに係るデバイスについてのpollfdではないので、次にpollfd3を読み出す。これは割り込みに係るデバイスについてのpollfdであるので、アプリケーション・プログラムは、デバイス３からの割り込みに係るデータを読み出すために、このpollfd3を用いてreadシステムコールをカーネルに出力する。カーネルは、ドライバのreadメソッドを呼び出し、ドライバのreadメソッドは、デバイス３のfifo3から割り込みに係るデータ「in3 data」を読み出して、ユーザ空間メモリに格納する。このデータが、ユーザ空間メモリにおける「任意のデバイスの入力データ」に該当する。なお、ドライバは、割り込みに係るデータのユーザ空間メモリへの格納が完了すると、カーネルに対してreturnで通知する。そして、カーネルは、アプリケーション・プログラムに、割り込みに係るデータの格納が完了したことをreturnで通知する。そして、アプリケーション・プログラムは、割り込みに係るデータ「in3 data」を読み出して、所定の処理を実施する。
【０００９】
以下、フェーズ１０５０で、アプリケーション・プログラムは、残りのpollfd4乃至pollfdNを読み出すが、割り込みに係るデバイスについてのpollfdではないので、readシステムコールを出力することはない。
【００１０】
このように、図２のフェーズ１０１１で示したように、複数のデバイスの入出力を制御するアプリケーション・プログラムは、対象デバイスのすべてについて、入出力割り込み状態を確認する動作を行わなければならない。この動作は、入出力を制御するアプリケーション・プログラムと、デバイスを制御するドライバとのカーネルを介した通信で、ユーザ空間とカーネル空間の間のプロトコルを利用するため、オーバーヘッドが大きく、性能を向上させるためのボトルネックとなる。
【００１１】
また、図３のフェーズ１０２０から１０５０でも、割り込みが発生していないデバイスについてのpollfdについても読み出す必要があり、この点でも処理速度が遅くなっている。
【００１２】
なお、このようなデバイスからの割り込みをアプリケーションで処理する従来技術は存在しているが、上で述べたような問題に対して考慮がなされているわけではない。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開平１１−２８２７９２号公報
【特許文献２】特開平７−１３７７８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
以上のように従来技術では、アプリケーション・プログラムの負荷が高く性能向上の妨げになっていた。
【００１５】
従って、本技術の目的は、複数のデバイスからの割り込みを処理するアプリケーション・プログラムの負荷を軽減する技術を提供することである。
【課題を解決するための手段】
【００１６】
本ドライバ・プログラムは、特定のアプリケーション・プログラムに関連する複数のデバイスの管理処理をコンピュータに実行させるドライバ・プログラムである。そして、コンピュータに、特定のアプリケーション・プログラムをコンピュータが実行することにより、コンピュータが送信した、特定のデバイスの利用を開始するための第１の要求を受け付けると、当該特定のアプリケーション・プログラムの識別子と特定のデバイスの識別子とを関連付けて第１のメモリ領域に格納するステップと、いずれかのデバイスから割り込みがあった場合、第１のメモリ領域において、特定のアプリケーション・プログラムの識別子が関連付けられていれば、当該デバイスの識別子に関連付けて当該割り込みに係るデータを第１のメモリ領域に格納するステップと、特定のアプリケーション・プログラムをコンピュータが実行することにより、コンピュータが送信した、デバイス選択を要求する第２の要求を受け付けると、第１のメモリ領域において特定のアプリケーション・プログラムの識別子に関連付けて割り込みに係るデータが格納されているデバイスのうち１のデバイスを選択し、当該１のデバイスについての割り込みに係るデータを、当該１のデバイスの識別子と共に第２のメモリ領域に格納するデバイス選択ステップと、特定のアプリケーション・プログラムに処理の完了を通知するステップとを実行させる。
【発明の効果】
【００１７】
複数のデバイスからの割り込みを処理するアプリケーション・プログラムの負荷を軽減することができるようになる。
【図面の簡単な説明】
【００１８】
【図１】図１は、従来技術を説明するための図である。
【図２】図２は、従来技術を説明するための図である。
【図３】図３は、従来技術を説明するための図である。
【図４】図４は、本技術の実施の形態のサーバ・システムの機能ブロック図である。
【図５】図５は、カーネル空間メモリに格納されるデータ構造の一例を示す図である。
【図６】図６は、本技術の実施の形態に係るメインの処理フローを示す図である。
【図７】図７は、デバイス管理処理のシーケンス図である。
【図８】図８は、ＲＲ選択要求処理の処理フローを示す図である。
【図９】図９は、ＲＲ選択要求処理の処理フローを示す図である。
【図１０】図１０は、具体的なデータ遷移の例を示す図である。
【図１１】図１１は、具体的なデータ遷移の例を示す図である。
【図１２】図１２は、割り込みに係るデータの再登録について説明するためのシーケンス図である。
【図１３】図１３は、割り込みに係るデータの再登録について説明するためのシーケンス図である。
【図１４】図１４は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００１９】
図４に、本技術の実施の形態に係るシステム構成図を示す。本実施の形態に係るサーバ・システム１００は、デバイスdev0乃至devNを有するか又はこれらのデバイスに接続されており、当該デバイスdev0乃至devNに対して入出力を非同期に行うアプリケーション・プログラム１０と、カーネル３０（すなわちファイルシステム）と、ドライバ４０とを有する。さらに、サーバ・システム１００は、ユーザ空間メモリ２０と、カーネル空間メモリ５０とを有する。そして、本実施の形態では、カーネル３０に、アプリケーション・プログラム１０がドライバ４０を利用するためのシステムコールであるioctlシステムコール３１などが用意されている。
【００２０】
また、アプリケーション・プログラム１０は、デバイス利用管理部１１と、ＲＲ（Round Robbin）実行部１２とを有する。デバイス利用管理部１１は、主に利用を開始するデバイス及び利用を終了するデバイスをioctlシステムコール３１を利用してドライバ４０に指示する。ＲＲ実行部１２は、ioctlシステムコール３１を利用して、割り込みが発生したデバイスをドライバ４０に確認させると共にいずれか１つのデバイスを選択させ、そのデバイスからの割り込みに係るデータをユーザ空間メモリ２０に書き込ませる等の処理を実施する。また、ドライバ４０が選択したデバイスについての割り込みに係るデータを処理できない場合には、例えばＲＲ実行部１２が、当該割り込みに係るデータをドライバ４０に元のＦＩＦＯに戻すように要求する処理も実施する。
【００２１】
ユーザ空間メモリ２０には、ドライバ４０からの入力データ２１が格納される。この入力データ２１は、ドライバ４０によって選択されたデバイスからの割り込みに係るデータであり、デバイスの識別子であるＣＩＤを含む。また、ユーザ空間メモリ２０は、アプリケーション・プログラム１０がデバイスの利用を開始する際に創生するファイル記述子fd0乃至fdNを格納する。このファイル記述子fd0乃至fdNは、割り込みを発生させるデバイスdev0乃至devNにアクセスするための資源へのポインタである。
【００２２】
さらに、ドライバ４０は、デバイス毎に異なる入出力手続きをカーネル３０に対して汎用的に行うためのドライバであって、アプリケーション・プログラム１０から出力されたioctlシステムコール３１に応じてカーネル３０により呼び出されるioctlメソッド４１を有する。ioctlメソッド４１は、ＰＩＤ識別部４１５と、ＣＩＤ登録部４１１と、優先ＣＩＤ登録部４１２と、再登録部４１３と、ＲＲ選択部４１４とを有する。ＰＩＤ識別部４１５は、呼び出し元のプロセス（すなわちアプリケーション・プログラム１０のプロセス）の識別子であるＰＩＤを識別する。また、ＣＩＤ登録部４１１は、デバイスの利用開始（例えばデバイスのオープン）をアプリケーション・プログラム１０から指示された場合にＰＩＤ識別部４１５により識別されたＰＩＤに関連付けて指定のデバイスの識別子ＣＩＤをカーネル空間メモリ５０に登録する。またＣＩＤ登録部４１１は、デバイスの利用終了（例えばクローズ）をアプリケーション・プログラム１０から指示された場合にカーネル空間メモリ５０においてそのアプリケーション・プログラム１０のＰＩＤと当該ＰＩＤに関連付けられている指定デバイスの識別子ＣＩＤとを含むデータ構造を削除する。
【００２３】
さらに、優先ＣＩＤ登録部４１２は、優先的に処理するという指定を伴うデバイスの利用開始をアプリケーション・プログラム１０から指示された場合にＰＩＤ識別部４１５により識別されたＰＩＤに関連付けて指定デバイスの識別子ＣＩＤをカーネル空間メモリ５０に登録する。また、ＲＲ選択部４１４は、アプリケーション・プログラム１０からのＲＲ選択指示に応じて、割り込みが発生しているデバイスの中から、適切な１のデバイスを決定すると共に、当該デバイスの割り込みに係るデータをユーザ空間メモリ２０に書き込み、カーネル３０を介して当該デバイスの識別子ＣＩＤをアプリケーション・プログラム１０に通知する。
【００２４】
また、再登録部４１３は、ＲＲ選択部４１４によりアプリケーション・プログラム１０に通知した割り込みに係るデータを、アプリケーション・プログラム１０側の事情（例えば資源獲得ができない等）で処理できない場合、当該割り込みに係るデータを再びカーネル空間メモリ５０（具体的には当該カーネル空間メモリ５０内のそのデバイスのためのＦＩＦＯバッファ。以下単にＦＩＦＯと略す。）に戻す。
【００２５】
また、カーネル空間メモリ５０は、複数のデバイスからの入出力を非同期に行うような特定のアプリケーション・プログラム１０がデバイスの利用開始を指示した場合にＰＩＤ識別部４１５により識別されるＰＩＤ（例えばPID0乃至PIDN）と、利用開始が指示されたデバイスdev0乃至devNの識別子ＣＩＤ（例えばCID0乃至CIDN）と、デバイスが優先指定されているか否かを表す優先フラグ（例えば優先フラグ０乃至Ｎ）と、利用開始が指示されたデバイスのＦＩＦＯ（First In First Out）バッファ（例えばfifo0乃至fifoN）が保持される。これらについては、０からＮのうち同一の番号ｊのPIDjとCIDjとfifojは、関連付けられており、以下で述べるようなデータ構造として管理される場合もある。さらに、それらデータ構造がリング構造で管理される場合もある。また、カーネル空間メモリ５０は、ＲＲ選択部４１４が次回最初に検査すべきデバイスのＣＩＤを関連するＰＩＤと共に格納する次回開始ＩＤ記憶部５１も保持している。
【００２６】
カーネル空間メモリ５０には、例えば図５に模式的に示すようなデータが格納される。本実施の形態では、アプリケーション・プログラム１０がioctlシステムコール３１を出力すると、カーネル３０からドライバ４０へ、既存のinode構造体（図示せず）と既存のfile構造体５１１とアプリケーション・プログラム１０のＰＩＤとが示される。ドライバ４０のioctlメソッド４１における例えばＣＩＤ登録部４１１は、アプリケーション・プログラム１０からioctlシステムコール３１で特定のデバイスの利用開始が通知されると（すなわち、特定のデバイスのファイル記述子ｆｄ創生時）、特定のデバイスのfile構造体５１１より本実施の形態で導入されるiop_dev構造体５１２がポイントされるよう設定する。このiop_dev構造体５１２では、利用開始を通知してきたアプリケーション・プログラム１０（すなわち、ファイル記述子ｆｄを創生したアプリケーション・プログラム１０）のＰＩＤと、特定のデバイスのＣＩＤと、優先フラグとが含まれており、さらに、iop_dev構造体５１２は、特定のデバイスのＦＩＦＯへのポインタを有している。
【００２７】
図５の例では、デバイス０乃至５が、同じＰＩＤのアプリケーション・プログラム１０によって利用開始が通知されており、ＲＲ選択部４１４が、割り込みに係るデータがＦＩＦＯに格納されているデバイスを検査しやすいように、各デバイスのiop_dev構造体５１２は、所定の順番にリングで連結されている。すなわち、デバイス５のiop_dev構造体５１２には、デバイス４のiop_dev構造体５１２へのポインタが設定されており、デバイス４のiop_dev構造体５１２には、デバイス３のiop_dev構造体５１２へのポインタが設定されており、デバイス３のiop_dev構造体５１２には、デバイス２のiop_dev構造体５１２へのポインタが設定されており、デバイス２のiop_dev構造体５１２には、デバイス１のiop_dev構造体５１２へのポインタが設定されており、デバイス１のiop_dev構造体５１２には、デバイス０のiop_dev構造体５１２へのポインタが設定されており、デバイス０のiop_dev構造体５１２には、デバイス５のiop_dev構造体５１２へのポインタが設定されている。この逆方向のリングも加えて設定するようにしてもよい。
【００２８】
なお、図５の例では、アプリケーション・プログラム１０からデバイス２を指定してioctlシステムコール３１が出力されて、カーネル３０からドライバ４０のioctlメソッド４１が呼び出された場面を示している。具体的には、ioctlメソッド４１のＰＩＤ識別部４１５により呼び出し元のアプリケーション・プログラム１０が特定されてそのＰＩＤが現在ＰＩＤ（Current.PID）５０１として保持され、さらにデバイス２のfile構造体５１１が指し示されている。
【００２９】
このようなサーバ・システム１００の処理について、図６乃至図１３を用いて説明する。まず、アプリケーション・プログラム１０のデバイス利用管理部１１は、利用を開始する特定のデバイスのＣＩＤを指定して当該特定のデバイスをオープンするioctlシステムコール３１を出力する（ステップＳ３１）。この際、ioctlシステムコール３１には、呼び出し元アプリケーション・プログラム１０のＰＩＤと、特定のデバイスを優先するか否かについての指定も含まれる。カーネル３０は、アプリケーション・プログラム１０から出力されたioctlシステムコール３１を受け取り、ドライバ４０のioctlメソッド４１を呼び出す（ステップＳ３）。この際、特定のデバイスを優先する旨の指定があれば、ioctlメソッド４１の優先ＣＩＤ登録部４１２が呼び出され、特定のデバイスを優先する旨の指定がない場合には、ioctlメソッド４１のＣＩＤ登録部４１１を呼び出す。また、ioctlメソッド４１の呼び出しには、特定のデバイスのＣＩＤと、呼び出し元アプリケーション・プログラム１０のＰＩＤも含まれる。
【００３０】
これに対して、ドライバ４０のioctlメソッド４１のＰＩＤ識別部４１５は、ioctlメソッド４１が呼び出されると、呼び出し元アプリケーション・プログラム１０のＰＩＤを特定し、図５に示した現在ＰＩＤ（Current.PID）５０１に設定する。そして、ioctlメソッド４１のＣＩＤ登録部４１１又は優先ＣＩＤ登録部４１２は、カーネル空間メモリ５０において、図５に示すようなデータ構造を生成し、リンク付けを行う（ステップＳ７）。上で述べたように、現在ＰＩＤ５０１のＰＩＤと特定のデバイスＣＩＤと優先フラグ（優先ＣＩＤ登録部４１２の場合にはフラグがオンにセットされる）とを含むiop_dev構造体５１２を生成し、特定のデバイスのfile構造体５１１をiop_dev構造体５１２へリンク付けると共に、当該iop_dev構造体５１２を特定のデバイスのＦＩＦＯへリンク付ける。さらに、同じＰＩＤが含まれるiop_dev構造体５１２が存在する場合には、リング構造が形成されているので、今回生成したiop_dev構造体５１２をそのリング構造に挿入する。
【００３１】
このような処理を、アプリケーション・プログラム１０がデバイスをオープンする毎に実施する。図５の例では、デバイス０乃至５についてそれぞれ実施する。
【００３２】
次に、ドライバ４０のioctlメソッド４１等は、デバイス管理処理を実施する（ステップＳ９）。デバイス管理処理については、図７のシーケンス図を用いて説明する。
【００３３】
図７のフェーズ０００１及び０００２では、例えばデバイス３から割り込み「in3」がドライバ４０に通知され、その割り込みに係るデータ「in3 data」がドライバ４０に出力され、デバイス３のＦＩＦＯに格納される。ドライバ４０は、デバイス３からの割り込みはｋｉｌｌコマンド（図７ではkill3）でカーネル３０に通知する。同様に、デバイス１から割り込み「in1」がドライバ４０に通知され、その割り込みに係るデータ「in1 data」がドライバ４０に出力され、デバイス１のＦＩＦＯに格納される。ドライバ４０は、デバイス１からの割り込みはｋｉｌｌコマンド（図７ではkill1）でカーネル３０に通知する。
【００３４】
その後フェーズ０００３において、ドライバ４０からカーネル３０に通知された割り込みの発生は、カーネル３０からシグナルＳＩＧＩＯによってアプリケーション・プログラム１０に通知される。このフェーズまでは、従来と同じである。
【００３５】
このＳＩＧＩＯによる割り込み発生の通知は、どのデバイスでどのような割り込みが発生したのかについての情報を含んでいないが、本実施の形態では、アプリケーション・プログラム１０が個別デバイスについて確認する必要はない。すなわち、フェーズ００１０において、アプリケーション・プログラム１０のＲＲ実行部１２は、１つのデバイスの割り込みに係るデータを取得することを要求するラウンドロビンＲＲ指定を含むioctlシステムコール３１（ＲＲ選択要求とも呼ぶ）を出力する。そして、フェーズ００１１において、カーネル３０は、ＲＲ指定を含むioctlシステムコール３１を受け取ると、ドライバ４０のioctlメソッド４１におけるＲＲ選択部４１４を呼び出す。ここで、ＰＩＤ識別部４１５は、呼び出し元アプリケーション・プログラム１０のＰＩＤを特定して、現在ＰＩＤ（Current.PID）５０１に設定する。また、ＲＲ選択部４１４は、ＲＲ選択要求処理を実施する。このＲＲ選択要求処理については図８及び図９を用いて説明する。
【００３６】
ＲＲ選択部４１４は、現在ＰＩＤ（Current.PID）５０１から、走査すべきiop_dev構造体リングを特定する（図８：ステップＳ２１）。複数のアプリケーション・プログラム１０がデバイスをオープンしていると、カーネル空間メモリ５０には、図５に示したようなiop_dev構造体リングが複数存在していることになるので、そのうちＲＲ選択要求元のアプリケーション・プログラム１０に関連するリングを特定する。
【００３７】
そして、ＲＲ選択部４１４は、特定されたリングにおいて、次回開始ＩＤ記憶部５１に格納されている次回開始ＩＤのデバイスのiop_dev構造体５１２から辿ることができるＦＩＦＯを検査する（ステップＳ２３）。そして、ＲＲ選択部４１４は、検査したＦＩＦＯに割り込みに係るデータが入力されているか判断する（ステップＳ２５）。割り込みに係るデータが入力されている場合には、端子Ａを介して図９の処理に移行する。
【００３８】
検査したＦＩＦＯに割り込みに係るデータが入力されていない場合には、ＲＲ選択部４１４は、特定されたリンクの次のデバイスを特定する（ステップＳ２７）。図５の例では、デバイス２のＦＩＦＯに割り込みに係るデータが入力されていない場合には、次のデバイスであるデバイス１に移行する。
【００３９】
そして、ＲＲ選択部４１４は、次のデバイスのＣＩＤが、次回開始ＩＤと一致しているか（すなわち次のデバイスが次回開始ＩＤのデバイスと一致しているか）判断する（ステップＳ２９）。次回のデバイスのＣＩＤが次回開始ＩＤと一致している場合には、処理は端子Ｂを介して図９の処理に移行する。一方、次回のデバイスのＣＩＤが次回開始ＩＤと一致していなければ、ステップＳ２７で特定されたデバイスのＦＩＦＯを検査する（ステップＳ３１）。そしてステップＳ２５に移行する。
【００４０】
次に、図９の処理の説明を行う。割り込みに係るデータがＦＩＦＯに入力されている場合には端子Ａを介してステップＳ３３に移行して、ＲＲ選択部４１４は、現在のデバイスのiop_dev構造体５１２の優先フラグを確認して、優先フラグがオンになっているか判断する（ステップＳ３３）。優先フラグがオンになっている、すなわち優先すべきデバイスに割り込みに係るデータがＦＩＦＯに格納されている場合には、ＲＲ選択部４１４は、現検査デバイスを通知候補として例えばカーネル空間メモリ５０に保持する（ステップＳ３５）。そしてステップＳ４５に移行する。優先フラグがオンとオフのデバイスが検出されれば、オンになっているデバイスが優先されるが、優先フラグがオンになっているデバイスが複数検出された場合には、最初に検出されたデバイスが優先される。
【００４１】
一方、優先フラグがオフである場合には、ＲＲ選択部４１４は、現検査デバイスが、割り込みに係るデータがＦＩＦＯに入力されているのを検出した最初のデバイスであるか判断する（ステップＳ３７）。現検査デバイスが、割り込みに係るデータがＦＩＦＯに入力されているのを検出した最初のデバイスではない場合には端子Ｃを介して図８のステップＳ２７に戻る。一方、現検査デバイスが、割り込みに係るデータがＦＩＦＯに入力されているのを検出した最初のデバイスである場合には、ＲＲ選択部４１４は、現検査デバイスを通知候補として例えばカーネル空間メモリ５０に保持する（ステップＳ３９）。そして端子Ｃを介して図７のステップＳ２７に戻る。
【００４２】
また、ステップＳ２９でリングの全てのデバイスについて検査完了したことが検出されると、図８のステップＳ４１で、ＲＲ選択部４１４は、通知候補が存在するか判断する（ステップＳ４１）。通知候補が存在しない場合には、ＲＲ選択部４１４は、通知候補無しをカーネル３０にreturnで通知し、カーネル３０はさらにアプリケーション・プログラム１０に対して通知候補無しをreturnで通知する（ステップＳ４３）。そして元の処理に戻る。一方、通知候補が存在する場合には、ステップＳ４５に移行する。
【００４３】
ステップＳ４５において、ＲＲ選択部４１４は、ステップＳ２１で特定されたリングにおいて通知候補の次のデバイスのＣＩＤを、カーネル空間メモリ５０において、要求元アプリケーション・プログラム１０のＰＩＤ（すなわちCurrent.PID）に関連付けて次回開始ＩＤとして次回開始ＩＤ記憶部５１に格納する（ステップＳ４５）。複数のアプリケーション・プログラム１０がデバイスをオープンする場合があり、それぞれについて次回開始ＩＤが異なるためである。
【００４４】
そして、ＲＲ選択部４１４は、通知候補デバイスの割り込みに係るデータを、該当するＦＩＦＯから読み出して通知候補デバイスのＣＩＤと共にユーザ空間メモリ２０に格納する。このデータが、入力データ２１となる。そして、通知候補デバイスのＣＩＤをreturnでカーネル３０に対して通知し、カーネル３０は、同じく通知候補デバイスのＣＩＤをreturnで要求元のアプリケーション・プログラム１０に通知する（ステップＳ４７）。
【００４５】
このようにすれば、優先フラグがセットされているデバイスに割り込みに係るデータが存在する場合には、当該デバイスの割り込みに係るデータが、要求元のアプリケーション・プログラム１０の利用可能な状態に置かれる。また、優先フラグがセットされているデバイスが存在しないか又は当該デバイスに割り込みに係るデータが存在しない場合には、割り込みに係るデータを有するとして最初に見つかったデバイスがリングの中で選択され、当該デバイスの割り込みに係るデータが、要求元のアプリケーション・プログラム１０の利用可能な状態に置かれる。
【００４６】
図８のフェーズ００１１の説明に戻って、上で述べたように、ＲＲ選択部４１４は、割り込みに係るデータがＦＩＦＯに格納されているデバイスのうち１つのデバイス（図７の例ではデバイス１）を選択して、当該デバイスのＦＩＦＯに格納されている最初のデータ（図７の「in1 data」）を、ユーザ空間メモリ２０に書き込む。さらに、ＲＲ選択部４１４は、選択されたデバイスのＣＩＤをreturnでカーネル３０に通知する。
【００４７】
さらに、フェーズ００１２で、カーネル３０は、選択されたデバイスのＣＩＤをアプリケーション・プログラム１０にreturnで通知する。このようにすれば、アプリケーション・プログラム１０は、各デバイスについて割り込みの状態を確認することなく、処理すべきデバイスを大きなオーバーヘッドなしに特定することができる。そして、アプリケーション・プログラム１０は、ユーザ空間メモリ２０から、通知されたＣＩＤを含む入力データ２１を読み出して、所定の処理を実施する。
【００４８】
また、同じように、フェーズ００２０で、アプリケーション・プログラム１０のＲＲ実行部１２は、１つのデバイスの割り込みに係るデータを取得することを要求するラウンドロビンＲＲ指定を含むioctlシステムコール３１を出力する。そして、カーネル３０は、ＲＲ指定を含むioctlシステムコール３１を受け取ると、フェーズ００２１において、ドライバ４０のioctlメソッド４１におけるＲＲ選択部４１４を呼び出す。ここで、ＰＩＤ識別部４１５は、呼び出し元アプリケーション・プログラム１０のＰＩＤを特定して、現在ＰＩＤ（Current.PID）５０１に設定する。また、ＲＲ選択部４１４は、図８及び図９で説明したＲＲ選択要求処理を実施する。
【００４９】
そして、上で述べたようにＲＲ選択部４１４は、割り込みに係るデータがＦＩＦＯに格納されているデバイスのうち１つのデバイス（図７の例ではデバイス３）を選択して、当該デバイスのＦＩＦＯに格納されている最初のデータ（図７の「in3 data」）を、ユーザ空間メモリ２０に書き込む。さらに、ＲＲ選択部４１４は、選択されたデバイスのＣＩＤをreturnでカーネル３０に通知する。
【００５０】
さらに、フェーズ００２２で、カーネル３０は、選択されたデバイスのＣＩＤをアプリケーション・プログラム１０にreturnで通知する。このようにすれば、アプリケーション・プログラム１０は、各デバイスについて割り込みの状態を確認することなく、処理すべきデバイスを大きなオーバーヘッドなしに特定することができる。そして、アプリケーション・プログラム１０は、ユーザ空間メモリ２０から、通知されたＣＩＤを含む入力データを読み出して、所定の処理を実施する。
【００５１】
以上のような処理を実施することによって、図２で示した従来技術に比してフェーズ１０１０乃至１０１２のような処理を行わずに済む。さらに、図３で示したフェーズ１０３０乃至１０５０にような、pollfdを順番に読み出してから割り込みに係るデータを読み出すような処理も不要となる。このようにアプリケーション・プログラム１０は、デバイスの管理について基本的にドライバ４０のioctlメソッド４１に任せているため、デバイスとの通信処理のオーバーヘッドから解放されて、処理速度が向上する。
【００５２】
図６の処理の説明に戻って、アプリケーション・プログラム１０のデバイス利用管理部１１は、利用を終了する特定のデバイスのＣＩＤを指定して当該特定のデバイスをクローズするioctlシステムコール３１を出力する（ステップＳ１１）。この際、ioctlシステムコール３１には、呼び出し元アプリケーション・プログラム１０のＰＩＤが含まれる。カーネル３０は、アプリケーション・プログラム１０から出力されたioctlシステムコール３１を受け取り、ドライバ４０のioctlメソッド４１の例えばＣＩＤ登録部４１１を呼び出す（ステップＳ１３）。また、ioctlメソッド４１の呼び出しには、特定のデバイスのＣＩＤと、呼び出し元アプリケーション・プログラム１０のＰＩＤも含まれる。
【００５３】
これに対して、ドライバ４０のioctlメソッド４１のＰＩＤ識別部４１５は、ioctlメソッド４１が呼び出されると、呼び出し元アプリケーション・プログラム１０のＰＩＤを特定し、図５に示した現在ＰＩＤ（Current.PID）５０１に設定する。そして、ioctlメソッド４１の例えばＣＩＤ登録部４１１は、カーネル空間メモリ５０において、指定デバイスに係るfile構造体５１１から該当するiop_dev構造体５１２を特定し、当該iop_dev構造体５１２を削除し、リング構造が存在している場合には、リング構造において前及び後のiop_dev構造体５１２を繋げるようにリンクを変更する（ステップＳ１７）。ステップＳ１１乃至Ｓ１７については、デバイスをクローズする毎に実施する。これにより、必要なデバイスについては、リング構造に追加すると共に、不要となったデバイスについては、リング構造から削除することによって、適切にリング構造を走査できるようになる。
【００５４】
また、図６のような処理を実施すれば、アプリケーション・プログラム１０の処理負荷が減少する。
【００５５】
本実施の形態の処理をより分かりやすくするために、図１０及び図１１を用いて具体例を説明する。まず、状態１は、初期状態であり、カーネル空間メモリ５０には、リング構造もなければ、iop_dev構造体も存在しない。次に、状態２において、ＰＩＤ＝９９のアプリケーション・プログラム１０からデバイスＡ（ＣＩＤ＝Ａ）のオープンが指示されると、ＰＩＤ＝９９についてのリング構造が生成される。なお、デバイスＡについて優先フラグの設定はないものとする。具体的には、ＣＩＤ＝Ａについてのiop_dev構造体５１２が生成されて、カーネル空間メモリ５０に登録される。このＣＩＤ＝Ａについてのiop_dev構造体５１２（ｉｄ＝０）は、ＣＩＤ＝Ａ、ＰＩＤ＝９９、優先フラグ＝Ｎを含む。なお、１つしかiop_dev構造体５１２が存在しない場合にはリングは形成できないので、次ポインタ及び前ポインタは自iop_dev構造体５１２のｉｄ＝０となる。このように、図１０の例では、双方向のリンクが設定される。すなわち双方向に走査できるように２重リング構造となっているが、必ずしも２重リング構造である必要はない。また、次回開始ＩＤ記憶部５１には、次回開始ＩＤ（すなわち先頭ＩＤ）＝０と、オープンを要求したアプリケーション・プログラム１０のＰＩＤ＝９９とが、最初のリングについてのデータとして登録される（図１０及び図１１の左から３列目）。
【００５６】
また、状態３において、ＰＩＤ＝９９のアプリケーション・プログラム１０からデバイスＢ（ＣＩＤ＝Ｂ）のオープンが指示されると、ＰＩＤ＝９９についてのリング構造に、デバイスＢについてのiop_dev構造体５１２が挿入される。なお、デバイスＢについて優先フラグの設定はないものとする。具体的には、ＣＩＤ＝Ｂについてのiop_dev構造体５１２が生成されて、カーネル空間メモリ５０に登録される。このＣＩＤ＝Ｂについてのiop_dev構造体５１２（ｉｄ＝１）は、ＣＩＤ＝Ｂ、ＰＩＤ＝９９、優先フラグ＝Ｎを含む。また、ｉｄ＝０のiop_dev構造体５１２とｉｄ＝１のiop_dev構造体５１２とが互いにリンクし合う形に、前ポインタ及び後ポインタを設定する。具体的には、ｉｄ＝０のiop_dev構造体５１２の前ポインタ及び後ポインタは、ｉｄ＝１を示しており、ｉｄ＝１のiop_dev構造体５１２の前ポインタ及び後ポインタは、ｉｄ＝０を示している。次回開始ＩＤ記憶部５１に格納されるデータについては、変更はない。
【００５７】
さらに、状態４において、ＰＩＤ＝９９のアプリケーション・プログラム１０からデバイスＣ（ＣＩＤ＝Ｃ）のオープンが指示されると、ＰＩＤ＝９９についてのリング構造に、デバイスＣについてのiop_dev構造体５１２が挿入される。なお、デバイスＣについて優先フラグの設定があるものとする。具体的には、ＣＩＤ＝Ｃについてのiop_dev構造体５１２が生成されて、カーネル空間メモリ５０に登録される。このＣＩＤ＝Ｃについてのiop_dev構造体５１２（ｉｄ＝２）は、ＣＩＤ＝Ｃ、ＰＩＤ＝９９、優先フラグ＝Ｙを含む。また、ｉｄ＝０のiop_dev構造体５１２、ｉｄ＝１のiop_dev構造体５１２、ｉｄ＝２のiop_dev構造体５１２、ｉｄ＝０のiop_dev構造体５１２の順番でリンクしてリングを構成するように、前ポインタを設定する。後ポインタについては、逆方向に順番にリンクしてリングを構成するように設定する。
【００５８】
次の状態５では、ＰＩＤ＝９９とは異なるＰＩＤ＝１１１のアプリケーション・プログラム１０からデバイスＤ（ＣＩＤ＝Ｄ）のオープンが指示されると、ＰＩＤ＝１１１についてのリング構造が生成される。なお、デバイスＤについて優先フラグの設定はないものとする。具体的には、ＣＩＤ＝Ｄについてのiop_dev構造体５１２が生成されて、カーネル空間メモリ５０に登録される。このＣＩＤ＝Ｄについてのiop_dev構造体５１２（ｉｄ＝３）は、ＣＩＤ＝Ｄ、ＰＩＤ＝１１１、優先フラグ＝Ｎを含む。なお、１つしかiop_dev構造体５１２が存在しない場合にはリングは形成できないので、次ポインタ及び前ポインタは自iop_dev構造体５１２のｉｄ＝３となる。また、次回開始ＩＤ記憶部５１には、次回開始ＩＤ（すなわち先頭ＩＤ）＝３と、オープンを要求したアプリケーション・プログラム１０のＰＩＤ＝１１１とが、２番目のリングについてのデータとして登録される（図１０及び図１１の左から４列目）。なお、異なるＰＩＤについてのリングについては影響はない。
【００５９】
このような状態がカーネル空間メモリ５０に用意された場合において、図１１の処理に移行する。
【００６０】
状態６では、デバイスＡに割り込みが発生し、その後ＰＩＤ＝９９のアプリケーション・プログラム１０からＲＲ選択要求を受けると、ＰＩＤ＝９９のリングの先頭ｉｄ＝０からＦＩＦＯに割り込みに係るデータが格納されているか確認する。そうすると、デバイスＡに割り込みが発生しているので、先頭のiop_dev構造体５１２（ｉｄ＝０）からリンクされているＦＩＦＯで割り込みに係るデータを発見するので、図７のフェーズ００１１及び００１２のように、デバイスＡのＣＩＤ＝Ａをアプリケーション・プログラム１０に通知すると共に、デバイスＡについてのＦＩＦＯから割り込みに係るデータを読み出し、ユーザ空間メモリ２０に格納する。そうすると、アプリケーション・プログラム１０は、ユーザ空間メモリ２０から当該デバイスＡについての割り込みに係るデータを読み出して所定の処理を実施する。なお、デバイスＡが選択されたので、次回開始ＩＤ記憶部５１に格納されている、ＰＩＤ＝９９についてのリングのデータのうち次回開始ＩＤは、次回開始ＩＤ＝１、すなわちリングにおいて次のデバイス（ここではデバイスＢ）に変更する。
【００６１】
さらに、状態７では、デバイスＢ及びＣに割り込みが発生し、その後ＰＩＤ＝９９のアプリケーション・プログラム１０からＲＲ選択要求を受けると、リングの先頭ｉｄ＝１からＦＩＦＯに割り込みに係るデータが格納されているか確認する。そうすると、デバイスＢ及びＣに割り込みが発生しているので、最初にデバイスＢが特定されるが、デバイスＣについては優先フラグ＝Ｙであるので、優先フラグＹのデバイスＣが優先される。従って、図７のフェーズ００１１及び００１２のように、デバイスＣのＣＩＤ＝Ｃをアプリケーション・プログラム１０に通知すると共に、デバイスＣについてのＦＩＦＯから割り込みに係るデータを読み出し、ユーザ空間メモリ２０に格納する。そうすると、アプリケーション・プログラム１０は、ユーザ空間メモリ２０から当該デバイスＣについての割り込みに係るデータを読み出して所定の処理を実施する。なお、デバイスＣが選択されたので、次回開始ＩＤ記憶部５１に格納されている、ＰＩＤ＝９９についてのリングのデータのうち次回開始ＩＤは、次回開始ＩＤ＝０、すなわちリングにおいて次のデバイス（ここではデバイスＡ）に変更する。
【００６２】
この後、状態８では、ＰＩＤ＝９９のアプリケーション・プログラム１０からデバイスＢ（ＣＩＤ＝Ｂ）のクローズが指示されると、ＰＩＤ＝９９についてのリング構造において、デバイスＢについてのiop_dev構造体５１２が削除される。具体的には、ＣＩＤ＝Ｂについてのiop_dev構造体５１２が削除されると共に、ＰＩＤ＝９９についてのリングに連結されている他のiop_dev構造体５１２でリングを構成するように次ポインタ及び前ポインタが変更される。すなわち、ｉｄ＝０のiop_dev構造体５１２の次ポインタ及び前ポインタは、ｉｄ＝２を示すようになる。同様に、ｉｄ＝２のiop_dev構造体５１２の次ポインタ及び前ポインタは、ｉｄ＝０を示すようになる。他の部分については変更はない。
【００６３】
以上のように、リング構造を図８及び図９の処理フローに従って辿ることによってデバイスを選択すると共に、アプリケーション・プログラム１０からのオープン又はクローズの指示に応じてiop_dev構造体５１２を追加又は削除してリンク構造を変更する。
【００６４】
なお、上で述べたようにＲＲ選択部４１４では、優先フラグを考慮した上でラウンドロビンでデバイスを選択している。しかしながら、ラウンドロビンではなく、同じデバイスが選択されないように制限を加えた上で乱数などによって割り込みに係るデータをＦＩＦＯに保持するデバイスを選択するようにしても良い。さらに、優先有り無しという指定ではなく、優先度を指定して、複数のデバイスについて割り込みが発生した場合には、優先度が最大となるデバイスを選択するようにしても良い。さらに、過去の選択実績を登録しておき、最も選択実績の低いデバイスを優先的に選択するような処理を行うようにしても良い。
【００６５】
次に、ioctlメソッド４１の再登録部４１３について上ではその処理について簡単に述べただけであったが、図１２及び図１３を用いて説明する。図１２では、図７で示したフェーズ０００１乃至０００３までの処理と同様の処理が行われる。具体的には、ステップ１でデバイス３から割り込み「in」がドライバ４０に通知され、その割り込みに係るデータがドライバ４０に出力される。ステップ１．１で、ドライバ４０は、割り込みに係るデータを、デバイス３についてのＦＩＦＯに書き込む。また、ステップ１．２で、ドライバ４０は、デバイス３からの割り込みをｋｉｌｌコマンドでカーネル３０に通知する。同様に、ステップ２でデバイス１から割り込み「in」がドライバ４０に通知され、その割り込みに係るデータがドライバ４０に出力される。ステップ２．１で、ドライバ４０は、割り込みに係るデータを、デバイス１についてのＦＩＦＯに書き込む。また、ステップ２．２で、ドライバ４０は、デバイス１からの割り込みはｋｉｌｌコマンドでカーネル３０に通知する。
【００６６】
その後ステップ３において、ドライバ４０からカーネル３０に通知された割り込みの発生は、ドライバ４０からシグナルＳＩＧＩＯによってアプリケーション・プログラム１０に通知される。
【００６７】
図１３の処理の説明に移行して、ステップ４で、アプリケーション・プログラム１０のＲＲ実行部１２は、ＲＲ選択要求としてioctlシステムコール３１をカーネル３０に出力する。これに対して、ステップ４．１で、カーネル３０は、ドライバ４０のioctlメソッド４１におけるＲＲ選択部４１４を呼び出す。呼び出されたioctlメソッド４１のＲＲ選択部４１４は、上で述べたようなＲＲ選択要求処理を実施する。ここではデバイス１を選択したものとする。
【００６８】
そうすると、ステップ４．１．１で、ＲＲ選択部４１４は、デバイス１のＦＩＦＯから割り込みに係るデータを取り出し、ステップ４．１．２で、ユーザ空間メモリ２０に書き込む。さらに、ＲＲ選択部４１４は、デバイス１のＣＩＤをreturnでカーネル３０に通知する。さらに、カーネル３０は、デバイス１のＣＩＤをアプリケーション・プログラム１０にreturnで通知する。そして、ステップ５で、アプリケーション・プログラム１０は、ユーザ空間メモリ２０を参照して、通知されたＣＩＤについての割り込みに係るデータを読み出す。
【００６９】
通常であれば、アプリケーション・プログラム１０は、そのまま割り込みに係るデータについて所定の処理を実施するが、ここではこの割り込みに係るデータを処理するための資源獲得できないなど、アプリケーション・プログラム１０側の都合で、読み出した割り込みに係るデータを処理できないものとする。
【００７０】
そうすると、ステップ６で、アプリケーション・プログラム１０の例えばＲＲ実行部１２は、ＣＩＤを指定してＦＩＦＯに割り込みに係るデータを再登録することを要求するioctlシステムコール３１をカーネル３０に出力する。ステップ６．１で、カーネル３０は、ドライバ４０のioctlメソッド４１における再登録部４１３を呼び出す。
【００７１】
呼び出された再登録部４１３は、ステップ６．１．１でユーザ空間メモリ２０を参照して、指定されたＣＩＤを含み且つ割り込みに係るデータを読み出し、ステップ６．１．２で指定されたＣＩＤのデバイスについてのＦＩＦＯに書き込む。
【００７２】
このようにすれば、ドライバ４０側で特定したデバイスについての割り込みに係るデータをアプリケーション・プログラム１０側で処理できなかった場合、当該割り込みに係るデータを、そのデータを発生させたデバイスのＦＩＦＯに戻すことができる。よって、割り込みに係るデータが破棄されるわけではないので、次回以降、ＲＲ選択要求としてioctlシステムコール３１をアプリケーション・プログラム１０が出力した場合に選択されて処理されるようになる。
【００７３】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。図４に示したサーバ・システム１００の機能ブロック図は一例であって必ずしも実際のモジュール構成を一致しない場合もある。特にアプリケーション・プログラム１０やドライバ４０のioctlメソッド４１の構成については、同様の機能を果たすことができればモジュール構成は別の態様であっても良い。なお、アプリケーション・プログラム１０、カーネル３０及びドライバ４０は、サーバ・システム１００のハードウエアと有機的に協働して上で述べた機能を実現する。
【００７４】
さらに、上では説明を省略している場合もあるが、メモリアクセスに必要なアドレスなどのデータは、各構成要素でやりとりするなどして取得・保持しており、特に説明しなくとも当業者は実施することができる。
【００７５】
なお、サーバ・システム１００は、コンピュータ装置であって、図１４に示すように、メモリ２５０１とＣＰＵ２５０３とハードディスク・ドライブ（ＨＤＤ）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。必要に応じてＣＰＵ２５０３は、表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ２５０１に格納され、必要があればＨＤＤ２５０５に格納される。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【００７６】
以上本実施の形態をまとめると以下のようになる。
【００７７】
本ドライバ・プログラムは、１のアプリケーション・プログラムに関連する複数のデバイスを管理するドライバ・プログラムである。そして、コンピュータに、特定のアプリケーション・プログラムからカーネルを介して特定のデバイスの利用を開始するための第１の要求を受け付けると、当該特定のアプリケーション・プログラムの識別子と特定のデバイスの識別子とを関連付けて第１のメモリ領域に格納するステップと、アプリケーション・プログラムの識別子が関連付けられているいずれかのデバイスから割り込みがあった場合、当該デバイスの識別子に関連付けて当該割り込みに係るデータを第１のメモリ領域に格納するステップと、特定のアプリケーション・プログラムからカーネルを介してデバイス選択を要求する第２の要求を受け付けると、第１のメモリ領域において特定のアプリケーション・プログラムの識別子に関連付けて割り込みに係るデータが格納されているデバイスのうち１のデバイスを選択し、当該１のデバイスについての割り込みに係るデータを、当該１のデバイスの識別子と共に第２のメモリ領域に格納するデバイス選択ステップと、カーネルを介して特定のアプリケーション・プログラムに処理の完了を通知するステップとを実行させる。
【００７８】
このようなドライバ・プログラムを導入することによって、アプリケーション・プログラムは、割り込みが発生しているデバイスを自ら特定する必要がなく割り込みに係るデータを取得できる。従って、アプリケーション・プログラムとデバイスとの通信回数を削減することができ、割り込み制御を高速化することができる。
【００７９】
また、特定のアプリケーション・プログラムからカーネルを介して第２のメモリ領域に格納されている上記１のデバイスについての割り込みに係るデータを第１のメモリ領域に再登録することを要求する第３の要求を受け付けると、第２のメモリ領域に格納されている上記１のデバイスについての割り込みに係るデータを読み出して、上記１のデバイスの識別子に対応付けて第１のメモリ領域に格納するステップをさらに実行させるようにしても良い。上で述べたように、ドライバ・プログラムが１のデバイスを選択するので、アプリケーション・プログラム側では、デバイスを選択できない。従って、ドライバ・プログラムが選択したデバイスについての割り込みに係るデータを処理できない場合も出てくる。そのような場合には、上で述べたようなステップを実施することにより、割り込みに係るデータを元に戻して、次回以降の処理に回すものである。
【００８０】
さらに、特定のアプリケーション・プログラムの識別子に関連付けられているデバイスの識別子をリング構造で管理するようにしてもよい。その場合、次回検査を開始すべきデバイスの識別子を別途管理するようにしてもよい。また、上で述べたデバイス選択ステップが、特定のアプリケーション・プログラムの識別子に関連付けられているデバイスの識別子を、次回検査を開始すべきデバイスの識別子からリング構造に従って探索して、割り込みに係るデータが関連付けられており且つ最初に検出されたデバイスを選択する選択ステップを含むようにしてもよい。このようにすれば、容易にデバイスを選択することができるようになる。
【００８１】
また、第１のメモリ領域において、デバイスの識別子に第１の要求で指定された優先度が関連付けられるようにしてもよい。また、特定のアプリケーション・プログラムの識別子に関連付けられているデバイスの識別子をリング構造で管理するようにしてもよい。さらに、次回検査を開始すべきデバイスの識別子を別途管理するようにしてもよい。その場合、上で述べたデバイス選択ステップが、特定のアプリケーション・プログラムの識別子に関連付けられているデバイスの識別子を、次回検査を開始すべきデバイスの識別子からリング構造に従って探索して、割り込みに係るデータが関連付けられており且つ最初に検出されたデバイス又は割り込みに係るデータが関連付けられており且つ関連付けられている優先度が最大であるデバイスを選択する選択ステップを含むようにしてもよい。このようにすれば、優先度を加味した形でデバイスを選択することができるようになる。
【００８２】
なお、上で述べたようなドライバ・プログラムは、例えばフレキシブル・ディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、コンピュータのメモリ等の記憶装置に一時保管される。
【００８３】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００８４】
（付記１）
特定のアプリケーション・プログラムに関連する複数のデバイスの管理処理をコンピュータに実行させるドライバ・プログラムであって、
コンピュータに、
前記特定のアプリケーション・プログラムを前記コンピュータが実行することにより、前記コンピュータが送信した、特定のデバイスの利用を開始するための第１の要求を受け付けると、当該特定のアプリケーション・プログラムの識別子と前記特定のデバイスの識別子とを関連付けて第１のメモリ領域に格納するステップと、
いずれかのデバイスから割り込みがあった場合、前記第１のメモリ領域において、前記特定のアプリケーション・プログラムの識別子が関連付けられていれば、当該デバイスの識別子に関連付けて当該割り込みに係るデータを前記第１のメモリ領域に格納するステップと、
前記特定のアプリケーション・プログラムを前記コンピュータが実行することにより、前記コンピュータが送信した、デバイス選択を要求する第２の要求を受け付けると、前記第１のメモリ領域において前記特定のアプリケーション・プログラムの識別子に関連付けて前記割り込みに係るデータが格納されているデバイスのうち１のデバイスを選択し、当該１のデバイスについての前記割り込みに係るデータを、当該１のデバイスの識別子と共に第２のメモリ領域に格納するデバイス選択ステップと、
前記特定のアプリケーション・プログラムに処理の完了を通知するステップと、
を実行させるためのドライバ・プログラム。
【００８５】
（付記２）
前記特定のアプリケーション・プログラムから前記カーネルを介して前記第２のメモリ領域に格納されている前記１のデバイスについての前記割り込みに係るデータを前記第１のメモリ領域に再登録することを要求する第３の要求を受け付けると、前記第２のメモリ領域に格納されている前記１のデバイスについての前記割り込みに係るデータを読み出して、前記１のデバイスの識別子に対応付けて前記第１のメモリ領域に格納するステップ
をさらに前記コンピュータに実行させるための付記１記載のドライバ・プログラム。
【００８６】
（付記３）
前記特定のアプリケーション・プログラムの識別子に関連付けられている前記デバイスの識別子をリング構造で管理し、
次回検査を開始すべき前記デバイスの識別子を別途管理し、
前記デバイス選択ステップが、
前記特定のアプリケーション・プログラムの識別子に関連付けられている前記デバイスの識別子を、前記次回検査を開始すべき前記デバイスの識別子から前記リング構造に従って探索して、前記割り込みに係るデータが関連付けられており且つ最初に検出された前記デバイスを選択する選択ステップ
を含む、付記１又は２記載のドライバ・プログラム。
【００８７】
（付記４）
前記第１のメモリ領域において、前記デバイスの識別子に前記第１の要求で指定された優先度が関連付けられており、
前記特定のアプリケーション・プログラムの識別子に関連付けられている前記デバイスの識別子をリング構造で管理し、
次回検査を開始すべき前記デバイスの識別子を別途管理し、
前記デバイス選択ステップが、
前記特定のアプリケーション・プログラムの識別子に関連付けられている前記デバイスの識別子を、前記次回検査を開始すべき前記デバイスの識別子から前記リング構造に従って探索して、前記割り込みに係るデータが関連付けられており且つ最初に検出された前記デバイス又は前記割り込みに係るデータが関連付けられており且つ関連付けられている前記優先度が最大であるデバイスを選択する選択ステップ
を含む、付記１又は２記載のドライバ・プログラム。
【００８８】
（付記５）
特定のアプリケーション・プログラムに関連する複数のデバイスの管理処理を実行するデバイス管理方法であって、
コンピュータが、
前記特定のアプリケーション・プログラムを前記コンピュータが実行することにより、前記コンピュータが送信した、特定のデバイスの利用を開始するための第１の要求を受け付けると、当該特定のアプリケーション・プログラムの識別子と前記特定のデバイスの識別子とを関連付けて第１のメモリ領域に格納するステップと、
いずれかのデバイスから割り込みがあった場合、前記第１のメモリ領域において、前記特定のアプリケーション・プログラムの識別子が関連付けられていれば、当該デバイスの識別子に関連付けて当該割り込みに係るデータを前記第１のメモリ領域に格納するステップと、
前記特定のアプリケーション・プログラムを前記コンピュータが実行することにより、前記コンピュータが送信した、デバイス選択を要求する第２の要求を受け付けると、前記第１のメモリ領域において前記特定のアプリケーション・プログラムの識別子に関連付けて前記割り込みに係るデータが格納されているデバイスのうち１のデバイスを選択し、当該１のデバイスについての前記割り込みに係るデータを、当該１のデバイスの識別子と共に第２のメモリ領域に格納するデバイス選択ステップと、
前記特定のアプリケーション・プログラムに処理の完了を通知するステップと、
を実行するデバイス管理方法。
【００８９】
（付記６）
複数のデバイスと、
第１のメモリ領域と第２のメモリ領域とを含むメモリと、
ドライバと、
を有し、
前記ドライバが、
特定のアプリケーション・プログラムから特定のデバイスの利用を開始するための第１の要求を受け付けると、当該特定のアプリケーション・プログラムの識別子と前記特定のデバイスの識別子とを関連付けて前記第１のメモリ領域に格納する手段と、
いずれかのデバイスから割り込みがあった場合、前記第１のメモリ領域において、前記特定のアプリケーション・プログラムの識別子が関連付けられていれば、当該デバイスの識別子に関連付けて当該割り込みに係るデータを前記第１のメモリ領域に格納する手段と、
前記特定のアプリケーション・プログラムからデバイス選択を要求する第２の要求を受け付けると、前記第１のメモリ領域において前記特定のアプリケーション・プログラムの識別子に関連付けて前記割り込みに係るデータが格納されているデバイスのうち１のデバイスを選択し、当該１のデバイスについての前記割り込みに係るデータを、当該１のデバイスの識別子と共に前記第２のメモリ領域に格納するデバイス選択手段と、
前記特定のアプリケーション・プログラムに処理の完了を通知する手段と、
を有することを特徴とするデバイス管理装置。
【符号の説明】
【００９０】
１００  サーバ・システム
１０  アプリケーション・プログラム
２０  ユーザ空間メモリ    ３０  ファイルシステム（カーネル）
４０  ドライバ    ５０  カーネル空間メモリ
１１  デバイス利用管理部    １２  ＲＲ実行部
２１  入力データ
３１  ioctlシステムコール
４１  ioctlメソッド
４１１  ＣＩＤ登録部    ４１２  優先ＣＩＤ登録部
４１３  再登録部    ４１４  ＲＲ選択部
４１５  ＰＩＤ識別部
【図１】
2010257099.tif 000003
【図２】
2010257099.tif 000004
【図３】
2010257099.tif 000005
【図４】
2010257099.tif 000006
【図５】
2010257099.tif 000007
【図６】
2010257099.tif 000008
【図７】
2010257099.tif 000009
【図８】
2010257099.tif 000010
【図９】
2010257099.tif 000011
【図１０】
2010257099.tif 000012
【図１１】
2010257099.tif 000013
【図１２】
2010257099.tif 000014
【図１３】
2010257099.tif 000015
【図１４】
2010257099.tif 000016