図1は、本発明の一実施形態に係る競合調停装置が適用されるコンピュータシステムの全体構成を示すブロック図である。図1において、コンピュータシステムは、競合調停装置1と、アプリケーション実行装置2と、複数の物理デバイス3と、デバイスドライバ実行装置4とを備える。なお、図1では、アプリケーション実行装置2およびデバイスドライバ実行装置4は、それぞれ一つずつだけ示すこととしたが、複数あってもよい。また、物理デバイス3の数および接続関係は、図1のものに限定されるものではない。
図1におけるコンピュータシステムは、携帯電話等の携帯通信端末や、PDA等の携帯端末、パソコン等の通信端末、複数の通信端末を接続しているLANシステム、複数のデジタル家電を接続している家庭内LANシステムなど、コンピュータ装置を使用するあらゆるシステムが想定される。
アプリケーション実行装置2は、アプリケーションを実行するためのコンピュータ装置であって、少なくとも、中央処理装置(以下、CPUという)および記憶装置を含む。アプリケーション実行装置2は、プログラムをメモリに読み込んで、CPUで実行することによって、アプリケーションを実行する。アプリケーション実行装置2は、マルチタスク機能によって、複数のアプリケーションを同時に実行することができる。
物理デバイス3は、入力装置や出力装置、補助記憶装置、通信装置等のハードウエアである。入力装置としての物理デバイス3は、たとえば、ボタンスイッチやジョグダイヤル、キーボード、マウス、ジョイスティック、マイクロホン等である。出力装置としての物理デバイス3は、たとえば、スピーカや液晶ディスプレイ、ブラウン管、プリンタ、SDSP装置、MIDI装置等である。なお、SDSP装置は、アプリケーションが有するデジタルデータを復号して、アナログ音声として出力するための装置である。補助記憶装置としての物理デバイス3は、ハードディスク装置や光ディスク装置、CD−ROMドライブ装置、DVDドライブ装置等である。通信装置としての論理デバイス3は、モデムやDSU、LANカード等である。
デバイスドライバ実行装置4は、物理デバイス3の動作を制御するためのソフトウエア(以下、デバイスドライバという)を実行するためのコンピュータ装置であって、少なくとも、CPUおよび記憶装置を含む。
競合調停装置1は、アプリケーション実行装置2が実行するアプリケーションが物理デバイス3へアクセスする際の競合を調停する装置であって、少なくとも、CPUおよび記憶装置を含む。競合調停装置1は、アプリケーションから物理デバイス3の使用を開始したい旨の要求があった場合、競合調停を行う。そして、競合調停装置1は、当該アプリケーションが当該物理デバイス3を使用できるように、デバイスドライバ実行装置4にデバイスドライバを実行させる。これによって、アプリケーションは、所望の物理デバイス3を使用することができる。
なお、上記では、説明を分かりやすくするために、競合調停装置1、アプリケーション実行装置2およびデバイスドライバ実行装置4は、それぞれ別々に構成されていることとしたが、共通のCPUおよび/または記憶装置を用い、マルチタスク処理によって、それぞれをソフトウエア的に構成するようにしてもよい。また、競合調停装置1、アプリケーション実行装置2およびデバイスドライバ実行装置4は、それぞれ、専用のLSIを用いてハードウエア的に実現しても、専用のプログラムを汎用のCPUで実行することによってソフトウエア的に実現してもよい。
本実施形態において、物理デバイス3の機能は、物理デバイス側とアプリケーション側との両方の視点から定義されている。
まず、物理デバイス側の視点から定義される物理デバイス3の機能について説明する。各物理デバイス3は、それぞれ特有の機能を有している。本実施形態において、競合調停装置1は、物理デバイスによって提供される機能を構造体によって定義している。本実施形態では、この構造体のことをリソースと呼ぶ。物理デバイスは少なくとも一つ以上の機能を提供しているので、一つの物理デバイスに対して、少なくとも一以上のリソースが対応することとなる。
次に、アプリケーション側の視点から定義される物理デバイス3の機能について説明する。各アプリケーションは、物理デバイス3の動作を制御することによって、所望の機能が実現されることを望む。本実施形態において、競合調停装置1は、アプリケーションによって所望される機能を構造体によって定義している。本実施形態では、この構造体のことを論理デバイスと呼ぶ。アプリケーションが所望する機能は、少なくとも一以上の物理デバイスが動作することによって実現される。物理デバイス3の機能は少なくとも一以上のリソースによって定義されているので、アプリケーションが所望する機能は、一以上のリソースによって提供される。すなわち、論理デバイスには、一以上のリソースが対応することとなる。
本発明の最大の特徴は、論理デバイスおよびリソースという概念を導入し、論理デバイスおよびリソースを用いて、競合調停を行う点にある。
アプリケーションは、物理デバイスに電気的に実際にアクセスして所望の機能を実現したい場合、競合調停装置1に対して、論理デバイスを指定し、競合調停を行ってもらう。競合調停装置1は、アプリケーションが物理デバイスにアクセスできるか否かをリソース単位で管理する。競合調停装置1は、論理デバイスに対応するリソースを認識して、認識したリソースにアプリケーションに対するアクセス権が与えられているか否かを判断する。与えられている場合、競合調停装置1は、当該アプリケーションが物理デバイスにアクセスできるように、デバイスドライバを実行する。
図2〜図4は、アプリケーション、論理デバイス、リソース、および物理デバイスの対応関係の例を示す模式図である。以下、図2〜図4を参照して、本実施形態の概要について説明する。
図2では、物理デバイスとして、SDSP物理デバイス、スピーカ物理デバイス、およびMIDI物理デバイスを用いている例を示している。ここでは、SDSP物理デバイスは、多重アクセスを許さない物理デバイスであると想定する。図2において、I/Oポートを持った物理デバイスは、SDSP物理デバイスとMIDI物理デバイスとであるとする。スピーカ物理デバイスは、SDSP物理デバイスとMIDI物理デバイスとに配線されており、I/Oポートは持っていないとする。
そのため、アプリケーションは、スピーカ物理デバイスのみを制御するということはできない。さらにスピーカ物理デバイスは、SDSP物理デバイスとMIDI物理デバイスとで共有されているため、アプリケーションA1がSDSP物理デバイスにアクセスするとき、アプリケーションA2は、MIDI物理デバイスにはアクセスできない。また、逆も起こり得る。
このように、複数のアプリケーションが同時にSDSP物理デバイスとMIDI物理デバイスとへのアクセスを所望した場合、アプリケーションからは見えないスピーカ物理デバイスに対してアクセス競合が発生する。このアクセス競合を回避するために、従来では、アプリケーション間で調停を行う必要があった。そのため、従来の方法では、アプリケーションやデバイスの種類が増えるに従って、調停が困難になる。しかし、本発明では、物理デバイスが提供する機能をリソースによって定義し、リソース単位で競合調停を行うので、アプリケーション間における調停が不要となり、アプリケーションやデバイスの種類が増えても、調停が容易である。
図2において、SDSP物理デバイスに対応するリソースは、SDSPリソースである。スピーカ物理デバイスに対応するリソースは、スピーカリソースである。MIDIに対応するリソースは、MIDIリソースである。SDSP機能を定義するSDSP論理デバイスは、SDSPリソースとスピーカリソースとを必要とする。MIDI機能を定義するMIDI論理デバイスは、MIDIリソースとスピーカリソースとを必要とする。
アプリケーションが論理デバイスにアクセス可能となるための条件は、論理デバイスが必要とする全てのリソースに対して、当該アプリケーションにアクセス権が与えられている場合である。本実施形態では、個々のリソースに対するアクセス権は、アプリケーションの優先度によって決められる。なお、先勝ちや後勝ちなどによって決めてもよい。
たとえば、図2において、アプリケーションA1がSDSP論理デバイスへのアクセスを所望し、アプリケーションA2がMIDI論理デバイスへのアクセスを所望した場合を想定する。ここで、アプリケーションA1とアプリケーションA2との間では、アプリケーションA2の方が優先度が高いとする。この場合、SDSPリソースへはアプリケーションA1しかアクセスを所望していないので、アプリケーションA1がSDSPリソースのアクセス権を取得する。同様に、MIDIリソースへはアプリケーションA2しかアクセスを所望していないので、アプリケーションA2がMIDIリソースのアクセス権を取得する。
アプリケーションA1とアプリケーションA2との両方が所望する論理デバイスが、共にスピーカリソースを必要としているので、競合が発生する。ここでは、アプリケーションA2の方が優先度が高いとしているので、アプリケーションA2がスピーカリソースのアクセス権を取得できる。そして、アプリケーションA2はアクセス対象のMIDI論理デバイスが必要とするリソース全てにおいてアクセス権を取得することとなるので、アプリケーションA2は、MIDI物理デバイスとスピーカデバイスとへのアクセスが可能となる。また、アプリケーションA1はアクセス対象のSDSP論理デバイスが必要とするリソースのうち、スピーカリソースについてアクセス権を取得できなかったため、SDSP物理デバイスとスピーカデバイスとへのアクセスが不可能となる。
図3では、物理デバイスとして、回線物理デバイスを用いている例を示している。図3において、物理デバイスは一つしか存在しない。しかし、実際には、多重アクセスを許し、同時に三回線まで使用できるマルチコール対応の回線物理デバイスを用いている。この場合、アプリケーションのアクセス対象である論理デバイスおよび回線物理デバイスは一つしかないが、回線リソースは三つ定義されることとなる。回線論理デバイスは、最低限一つの回線リソースを必要とする。
たとえば、図3において、アプリケーションA1、A2、A3、A4がともに回線論理デバイスへのアクセスを所望した場合を想定する。ここで、優先度は、アプリケーションA1、アプリケーションA2、アプリケーションA3、アプリケーションA4の順で高いとする。すなわち、アプリケーションA1が最も高い優先度を有するとする。
まず、アプリケーションA1が回線論理デバイスへのアクセスを所望すると、アプリケーションA1は、3つある回線リソースのうち、一つ目の回線リソース32のアクセス権を取得する。次に、アプリケーションA2が回線論理デバイスへのアクセスを所望すると、アプリケーションA2は、二つ目の回線リソース33のアクセス権を取得する。次に、最も優先度の低いアプリケーションA4が回線論理デバイスへのアクセスを所望すると、アプリケーションA4は三つ目の回線リソース34のアクセス権を取得する。
このような状況の下、アプリケーションA4より優先度の高いアプリケーションA3が回線論理デバイスへのアクセスを所望すると、競合調停装置1は、アプリケーションA4とアプリケーションA3との優先度を比較する。上記の例では、アプリケーションA3の方が優先度が高いため、アプリケーションA4は、3つ目の回線リソース34に対してアクセス不可となる。そして、アプリケーションA3は、回線リソース34へのアクセス権を取得する。結果、アプリケーションA1、A2、A3が回線論理デバイスにアクセス可能となる。
図4では、物理デバイスとして、SDSP物理デバイスを用いる例を示している。ここでは、SDSP物理デバイスは、多重アクセスを許す物理デバイスであると想定する。なお、図2に示す多重アクセスを許さないSDSP物理デバイスと図4で示す多重アクセスを許すSDSP物理デバイスは、一つのコンピュータ装置内で共存可能であるとする。図4において、物理デバイスは、一つしか存在しない。当該SDSP物理デバイスでは、録音機能と再生機能とは同時に使用できるとする。この場合、アプリケーションのアクセス対象論理デバイスは、SDSP録音論理デバイスとSDSP再生論理デバイスとの二つである。リソースは、コーデック機能を表すSDSPコーデックリソースと、録音機能を表すSDSP録音リソースと、再生機能を表すSDSP再生リソースとの三つである。さらにSDSPコーデックリソースは、コーデックが同じ場合、録音機能と再生機能とを同時に使用できる。そのため、SDSPコーデックリソースは、二つ存在すると考えるのではなく、コーデック情報を付加情報として持たせることによって、ただ一つだけ存在すると考え、多重アクセスを許していると考える。
このような状況の下、SDSP物理デバイスへのアクセスを所望しているアプリケーションが複数存在する場合、競合調停装置1は、優先度が最も高いアプリケーションのコーデックをSDSPコーデックリソースに設定する。優先度が低いアプリケーションのコーデックと設定されているコーデックとが同じであれば、競合調停装置1は、優先度が低いアプリケーションにもSDSPコーデックリソースへのアクセス権を付与する。
たとえば、図4においてアプリケーションA1およびA2がSDSP録音論理デバイスへのアクセスを所望し、アプリケーションA3がSDSP再生論理デバイスへのアクセスを所望していると想定する。優先度は、アプリケーションA1、アプリケーションA2、アプリケーションA3の順に高いものとする。すなわち、アプリケーションA1が最も高い優先度を有する。また、アプリケーションA1、A2、A3は、共に、同じコーデックXでアクセスを所望しているとする。
まず、アプリケーションA1がSDSP録音論理デバイスへのアクセスを所望すると、アプリケーションA1は、SDSPコーデックリソースのアクセス権を取得し、SDSPコーデックリソース内のコーデックをXに設定する。また、アプリケーションA1は、SDSP録音リソースに対してもアクセス権を取得する。次に、アプリケーションA2がSDSP録音論理デバイスへのアクセスを所望すると、アプリケーションA2は、優先度の高いA1と同じコーデックを有するためSDSPコーデックリソースに対するアクセス権を取得できるが、SDSP録音リソースに対してはA1と競合するためアクセス権を取得できない。
次に、アプリケーションA3がSDSP再生論理デバイスへのアクセスを所望するとする。アプリケーションA3は、優先度の高いA1と同じコーデックを有するためSDSPコーデックリソースに対するアクセス権を取得できる。さらに、アプリケーションA3は、SDSP再生リソースに対しては、競合が発生していないのでアクセス権を取得できる。
結果、アプリケーションA1、A3は、共に、アクセス対象論理デバイスが必要とする全てのリソースに対してアクセス可能であることとなる。そのため、それぞれ、アプリケーションA1、A3は、SDSP録音論理デバイスおよびSDSP再生論理デバイスにアクセス可能となる。一方、アプリケーションA2は、SDSP録音リソースのアクセス権が取得できないため、SDSP録音論理デバイスにアクセス不可能である。
図5は、競合調停装置1の機能的構成を示すブロック図である。図5において、競合調停装置1は、アプリケーションIF部11と、アプリケーション情報記憶部12と、使用リソース認識部13と、リソース情報記憶部14と、リソースアクセス判定部15と、デバイスアクセス判定部16と、実行部17と、デバイス情報記憶部18とを含む。図5に示した全ての機能部は、汎用のCPUを備えるコンピュータ装置を機能させるプログラムによってまとめて実現されてもよいし、専用のLSIによってまとめて実現されてもよい。また、各機能部は、それぞれ、汎用のCPUを実行させるプログラムによって実現されてもよいし、専用のLSIによって実現されてもよい。また、複数の機能部の組み合わせが、同様にして実現されてもよい。
アプリケーションIF部11は、物理デバイス3の使用を開始したい旨のアプリケーションからの要求(以下、アクセス開始要求という)を受信する。アクセス開始要求には、当該アプリケーションのアプリIDと、当該アプリケーションが使用したい論理デバイスの名称(以下、アクセス対象論理デバイス名という)と、当該アプリケーションの優先度とが指定されている。優先度は、予めアプリケーション毎に設定されていてもよいし、OSが後発的にアプリケーションに対して設定しても、アプリケーション自身が他のアプリケーションの種別を認識して自ら設定してもよい。
アクセス開始要求を受信したアプリケーションIF部11は、アプリケーションを識別するためのID(以下、アプリIDという)に対応させて、当該アクセス開始要求で指定されているアクセス対象論理デバイス名と優先度とをアプリケーション情報記憶部12に格納する。さらに、アクセス開始要求を受信したアプリケーションIF部11は、使用リソース認識部13に対して、当該アクセス開始要求で指定されているアクセス対象論理デバイスが使用するリソースを認識させる。
アクセス開始要求があった後、アプリケーションIF部11は、物理デバイス3にアクセスしたい旨のアプリケーションからの要求(以下、アクセス要求という)を受信する。アクセス要求には、アプリIDと、アクセス対象論理デバイス名と、当該アプリケーションの優先度とが指定されている。アクセス要求を受信したアプリケーションIF部11は、当該アクセス要求の内容を実行部17に通知して、当該アプリケーションが当該論理デバイスにアクセス可能であるか否かを示す情報を実行部17から受け取る。アクセス可能であることを示す情報を受け取った場合、アプリケーションIF部11は、当該アプリケーションに対して、当該アクセス対象論理デバイスにアクセス可能である旨を通知する。一方、アクセス不可能であることを示す情報を実行部17から受け取った場合、アプリケーションIF部11は、当該アプリケーションに対して、当該アクセス対象論理デバイスにアクセス不可能である旨を通知する。
アクセス要求があった後、アプリケーションIF部11は、物理デバイス3へのアクセスを終了したい旨のアプリケーションからの要求(以下、アクセス終了要求という)を受信する。アクセス終了要求を受信したアプリケーションIF部11は、使用リソース認識部13に対して、当該アプリケーションが保持しているアクセス権を開放するように指示する。
アプリケーション情報記憶部12は、アプリケーション情報をアプリケーション毎に格納する。ここで、アプリケーション情報は、対応するアプリケーションの優先度と、対応するアプリケーションのアクセス対象論理デバイス名と、アクセス対象論理デバイスに対応するアプリケーションがアクセス可能であるか否かを示す情報(以下、アクセス可否情報という)とから構成されている。
図6は、アプリケーション情報記憶部12に格納されているアプリケーション情報の一例を示す図である。図6に示すように、アプリケーション情報記憶部には、アプリIDと対応して、優先度と、アクセス対象論理デバイス名と、アクセス可否情報とが格納されている。たとえば、アプリIDが「1」のアプリケーションの優先度は「1」であり、アクセス対象論理デバイス名は「SDSP論理デバイス」であり、アクセス可否情報は「可」である。なお、ここでは、アクセス対象論理デバイス名は、識別IDによって表されていてもよい。アクセス可否情報は、フラグによって表されていてもよい。
デバイス情報記憶部18は、論理デバイスと当該論理デバイスが必要とするリソースとの関係を示すデバイス情報を保持している。図7は、デバイス情報の一例を示す図である。図7に示すように、デバイス情報では、論理デバイス名に対応するリソース名が指定されている。たとえば、SDSP論理デバイスには、SDSPリソースと、スピーカリソースとが指定されている。一つの論理デバイスに必要なリソースは、一つであってもよいし、複数であってもよい。
使用リソース認識部13は、アプリケーションIF部11からアクセス開始要求が通知されると、デバイス情報記憶部18に格納されているデバイス情報を参照して、アクセス対象論理デバイスが必要とするリソースを認識する。使用リソース認識部13は、認識したリソースと、当該アクセス対象論理デバイスの使用を希望しているアプリケーションのアプリIDと、当該アクセス対象論理デバイスと、当該アプリケーションの優先度とをリソースアクセス判定部15およびデバイスアクセス判定部16に通知する。一つの論理デバイスに必要なリソースが複数である場合、使用リソース認識部13は、複数のリソース名を同時にリソースアクセス判定部15に通知してもよいし、一つずつ順番に通知してもよい。
リソース情報記憶部14は、リソース情報を格納する。ここで、リソース情報とは、リソース毎に、アクセス権を有するアプリケーションを指定しておくための情報のことをいう。図8は、リソース情報の一例を示す図である。図8に示すように、リソース情報には、リソース名と対応して、当該リソースに対するアクセス権を有しているアプリケーションのアプリIDが登録されている。たとえば、図8において、SDSPリソースに対するアクセス権を有しているアプリケーションのアプリIDは、「1」である。また、アクセス権が設定されていないリソースに対しては、「NULL」が登録されている。リソース情報記憶部14に格納されているリソース情報は、リソースアクセス判定部15によって、リソースに対するアクセス権を保持するアプリケーションが変更になったと判断された場合に更新される。
リソースアクセス判定部15は、使用リソース認識部13から通知されるリソースに関するリソース情報をリソース情報記憶部14から読み出して、既にアクセス権を取得しているアプリケーションを判定する。リソースアクセス判定部15は、既にアクセス権を取得しているアプリケーションが存在する場合、そのアプリケーションとアクセス開始要求をなしているアプリケーションとの内、どちらの優先度が高いかを、アプリケーション情報記憶部12に格納してあるアプリケーションの優先度に基づいて判定する。リソースアクセス判定部15は、判定の結果、アクセス権を取得するアプリケーションが変更になった場合、リソース情報記憶部14におけるリソース情報の内容を更新する。
デバイスアクセス判定部16は、使用リソース認識部13が検出したリソースと、リソース情報記憶部14に格納されているリソース情報とに基づいて、アクセス開始要求をなしているアプリケーションが、アクセス対象論理デイバスによって使用される全てのリソースに対して、アクセス権を取得しているか否かを判定し、その情報を実行部17に通知する。デバイスアクセス判定部16は、全てのリソースに対してアクセス権を取得している場合、当該アプリケーションによる当該論理デバイスへのアクセスが可能であると決定する。
実行部17は、デバイスアクセス判定部16から論理デバイスへのアクセスが可能であるか否かを示す情報を受け取る。実行部17は、受け取った情報に基づいて、アプリケーション情報記憶部12に格納されているアプリケーション情報におけるアクセス可否情報を更新する。また、実行部17は、アプリケーションIF部11からアクセス要求が通知されると、アプリケーション情報記憶部12を参照して、当該アプリケーションがアクセス対象としている論理デバイスにアクセス可能であるか否かを判断する。アクセス可能である場合、実行部17は、当該論理デバイスに対応するデバイスドライバをデバイスドライバ実行装置4に実行させ、アクセス可能である旨を示す情報をアプリケーションIF部11に送る。一方、アクセス不可能である場合、実行部17は、アプリケーションIF部11にアクセス不可能である旨を示す情報を送る。
次に、競合調停装置1の動作を詳細に説明する。まず、競合調停装置1を備えるコンピュータシステムにおいて、アプリケーションは、物理デバイス3を使用したい場合、アクセス開始要求を競合調停装置1に通知する。実際に物理デバイス3を使用したい場合、アプリケーションは、アクセス要求を競合調停装置1に通知する。最後に、物理デバイス3へのアクセスを終了したい場合、アプリケーションは、アクセス終了要求を競合調停装置1に通知する。
図9は、アプリケーションからアクセス開始要求があったときの競合調停装置1の動作を示すフローチャートである。以下、図9を参照しながら、アプリケーションからアクセス開始要求があったときの競合調停装置1の動作について説明する。
まず、アプリケーションIF部11は、アプリケーションからのアクセス開始要求を受信する(ステップS101)。以下、アクセス開始要求をなしたアプリケーションをアプリケーションAP1という。また、当該アクセス開始要求におけるアクセス対象論理デバイスを論理デバイスDEV1という。上述のように、当該アクセス開始要求には、アプリケーションの優先度も指定されている。
次に、アプリケーションIF部11は、受信したアクセス開始要求に基づいて、アプリケーションAP1のアプリケーション情報をアプリケーション情報記憶部12に登録する。また、アプリケーションIF部11は、アクセス開始要求で指定されているアプリID、アクセス対象論理デバイス名および優先度を使用リソース認識部13に与えて、アクセス開始要求があった旨を通知する(ステップS102)。なお、この段階では、アプリケーション情報記憶部12におけるアプリケーションAP1に対応するアクセス可否情報は空白である。
次に、使用リソース認識部13は、デバイス情報記憶部18に格納されているデバイス情報を参照して、アプリケーションIF部11から通知されてきたアクセス対象論理デバイスDEV1が使用するリソース名を取得し、リソースアクセス判定部15およびデバイスアクセス判定部16に通知する(ステップS103)。このとき、アクセス対象論理デバイスDEV1が使用するリソースが複数ある場合、使用リソース認識部13は、全てのリソース名をリソースアクセス判定部15およびデバイスアクセス判定部16に通知する。
次に、リソースアクセス判定部15は、リソース情報記憶部14およびアプリケーション情報記憶部12を参照して、使用リソース認識部13から通知されてきた全てのリソースに対して、アクセス開始要求をなした当該アプリケーションが、アクセス権を取得できるか否かを判断し、当該判断結果をリソース情報記憶部14およびアプリケーション情報記憶部12に反映させる(ステップS104)。ステップS104における処理は、後で詳述する。
次に、デバイスアクセス判定部16は、リソース情報記憶部14に格納されているリソース情報を参照して、アプリケーションAP1がアクセス対象論理デバイスDEV1に必要な全てのリソースに関するアクセス権を有しているか否かを判断する(ステップS105)。
全てのリソースに関するアクセス権を有している場合、デバイスアクセス判定部16は、実行部17にその旨を通知する。これに応じて、実行部17は、アプリケーションAP1に対するアクセス可否情報が「可」となるようにアプリケーション情報記憶部12の登録内容を更新する(ステップS106)。次に、実行部17は、アクセス対象論理デバイスDEV1に関するデバイスドライバをデバイスドライバ実行装置4に実行させて(ステップS107)、処理を終了する。
一方、全てのリソースに関するアクセス権を有していない場合、デバイスアクセス判定部16は、実行部17にその旨を通知する。これに応じて、実行部17は、アプリケーションAP1に対するアクセス可否情報が「不可」となるようにアプリケーション情報記憶部12の登録内容を更新し(ステップS108)、処理を終了する。
図10は、ステップS104におけるリソースアクセス判定部15の動作を詳細に示したフローチャートである。以下、図10を参照しながら、ステップS104におけるリソースアクセス判定部15の動作について説明する。
まず、リソースアクセス判定部15は、リソース情報記憶部14を参照して、アクセス対象論理デバイスDEV1が使用するリソースについて、同一名のリソースが複数存在するか否かを判断する(ステップS201)。たとえば、図8に示したように、同一名のリソースとして、回線リソースがある。
複数存在する場合、リソースアクセス判定部15は、同一名のリソースに対して、アクセス権を持つアプリケーションが全て設定されているか否かを判断する(ステップS202)。全て設定されている場合、リソースアクセス判定部15は、アプリケーション情報記憶部12に格納されているアプリケーション情報を参照して、当該リソースにアクセス権が設定されているアプリケーションの内、最も優先度が低いアプリケーションを検索し(ステップS203)、ステップS204の動作に進む。ここで、優先度が最も低いアプリケーションをアプリケーションAP2ということにする。全て設定されていない場合、リソースアクセス判定部15は、ステップS208の動作に進む。
ステップS204において、リソースアクセス判定部15は、当該リソースが多重アクセスを許すリソースであるか否かを判断する。多重アクセスを許すリソースとは、所定の条件を満たすアプリケーションからの同時アクセスを許容するようなリソースのことをいう。多重アクセスを許すリソースであるか否かは、リソース情報に付加されている多重アクセス情報(図8上、図示は省略)によって示されている。
多重アクセスを許さないリソースである場合、リソースアクセス判定部15は、ステップS206の動作に進む。一方、多重アクセスを許すリソースである場合、リソースアクセス判定部15は、当該リソースへアクセスするアプリケーションAP1の属性と既に設定されているリソースの属性とが同一であるか否かを判断する(ステップS205)。
ここで、属性とは、リソースをアプリケーションがどのように利用するかの条件を示す情報のことをいう。たとえば、属性として、SDSPコーデックリソースに対しては、どのようなコーデックを用いるかを示す情報がある。この属性は、アクセス開始要求ともにアプリケーションから通知されてくる。属性が同一である場合、リソースアクセス判定部15は、ステップS208の動作に進んで、当該リソースに対して、アプリケーションAP1およびAP2にアクセス権を付与するようリソース情報を更新する。一方、属性が同一でない場合、リソースアクセス判定部15は、ステップS210の動作に進む。このように、本実施形態では、属性がアクセス開始要求をなしている全てのアプリケーション間において共通であるといった所定の条件を満たす場合に、リソースアクセス判定部15は、多重アクセスが可能なようにリソース情報を登録する。
なお、多重アクセスが許容されているアプリケーションの数に上限がある場合、ステップS205において、リソースアクセス判定部15は、当該上限数を超えているか否かを判断して、超えていない場合のみ、ステップS208の動作に進み、超えている場合、ステップS206の動作に進んで、最も優先度が低いアプリケーションの優先度と、アプリケーションAP1の優先度とを比較して、優先度が高いアプリケーションにアクセス権を設定するようにする。
ステップS206において、リソースアクセス判定部15は、アクセス開始要求をなしているアプリケーションAP1の優先度と、アプリケーションAP2の優先度とを比較する。次に、リソースアクセス判定部15は、比較の結果に基づいて、アプリケーションAP1の方が優先度が高いか否かを判断する(ステップS207)。アプリケーションAP1の方が優先度が高い場合、リソースアクセス判定部15は、ステップS208の動作に進み、優先度が高いアプリケーションにアクセス権を設定するよう、リソース情報を更新する。その後、リソースアクセス判定部15は、アプリケーション情報記憶部12におけるアプリケーションAP2に関するアクセス可否情報を「不可」となるように設定し(ステップS209)、ステップS210の動作に進む。一方、アプリケーションAP1の方が優先度が低い場合、リソースアクセス判定部15は、ステップS210の動作に進む。
一方、ステップS201において、複数存在しないと判断された場合、すなわち、アクセス対象論理デバイスDEV1が使用するリソースが一つだけであるか、あるいは使用するリソースは複数あるが、それぞれは一つずつである場合、リソースアクセス判定部15は、当該リソースのいずれか一つに対してアクセス権を取得している他のアプリケーションが存在するか否かを判断する(ステップS211)。ここで、アクセス権を取得している他のアプリケーションをアプリケーションAP3ということにする。それぞれは一つずつのリソースが複数ある場合、アクセス権を取得しているアプリケーションは複数ある場合があるが、ここではまず、いずれか一つのリソースについて以下の処理を行うこととする。
ステップS211において、存在しないと判断した場合、リソースアクセス判定部15は、ステップS208の動作に進み、アプリケーションAP1がアクセス権を取得するようにリソース情報を更新する。一方、存在すると判断した場合、リソースアクセス判定部15は、アプリケーション情報記憶部12を参照して、当該リソースに対応するアプリケーションのアプリケーション情報を取得し(ステップS212)、ステップS204に進む。
ステップS210において、リソースアクセス判定部15は、アクセス対象論理デバイスDEV1で使用される全てのリソースに関して、上記リソース情報およびアプリケーション情報の更新処理が終了しているか否かを判断する(ステップS210)。終了していない場合、リソースアクセス判定部15は、ステップS201の動作に戻る。この際、リソースアクセス判定部15は、一度判定したリソースに関しては、ステップS201以降の判定を行わないこととする。一方、終了している場合、競合調停装置1は、ステップS105以降の動作に進む。
図11は、アプリケーションからアクセス要求があったときの競合調停装置1の動作を示すフローチャートである。以下、図11を参照しながら、アプリケーションからアクセス要求があったときの競合調停装置1の動作について説明する。
アプリケーションAP1は、アクセス要求をする前に、アクセス開始要求を行っている。アクセス要求が行われたとき、上述のように、アクセス対象論理デバイスDEV1に対するアプリケーションAP1のアクセス可否情報がアプリケーション情報記憶部12に登録される。アクセス要求時の動作では、アクセス開始要求で設定されたアプリケーション情報を用いて、処理がなされる。
まず、アプリケーションIF部11は、アプリケーションAP1からのアクセス要求を受信して、実行部17に通知する(ステップS301)。次に、実行部17は、アプリケーション情報記憶部12を参照する(ステップS302)。
次に、実行部17は、アプリケーションAP1に対応するアクセス可否情報に基づいて、アクセス要求をなしたアプリケーションAP1がアクセス対象論理デバイスDEV1にアクセス可能と設定されているか否かを判断する(ステップS303)。
アクセス可能と設定されている場合、実行部17は、当該デバイスドライバをデバイスドライバ実行部17に実行させて(ステップS304)、処理を終了する。
一方、アクセス不可と設定されている場合、実行部17は、アプリケーションIF部11に対して、アクセス不可である旨のエラーメッセージを通知する。これに応じて、アプリケーションIF部11は、アプリケーションAP1に対して、論理デバイスDEV1にアクセス不可である旨を通知し(ステップS305)、処理を終了する。
図12は、アプリケーションからアクセス終了要求があったときの競合調停装置1の動作を示すフローチャートである。以下、図12を参照しながら、アプリケーションからアクセス終了要求があったときの競合調停装置1の動作について説明する。
まず、アプリケーションIF部11は、アプリケーションAP1からのアクセス終了要求を受信し、アプリID、アクセス対象論理デバイス名および優先度を使用リソース認識部13に送って、アクセス終了要求がきた旨を、使用リソース認識部13に通知する(ステップS401)。
これに応じて、使用リソース認識部13は、デバイス情報記憶部18を参照して、当該アクセス対象論理デバイスDEV1に必要なリソース名を取得して、リソースアクセス判定部15に通知する。これに応じて、リソースアクセス判定部15は、当該アクセス対象論理デバイスが必要とするリソースに対応するリソース情報をリソース情報記憶部14から取得する(ステップS402)。
次に、リソースアクセス判定部15は、デバイス情報記憶部18を参照して、ステップS402で認識したリソースを用いる論理デバイスを認識し、アプリケーション情報記憶部12を参照して、当該論理デバイスにアクセス開始要求をなしているがアクセス可否情報が「不可」となっているアプリケーションを認識する。これによって、リソースアクセス判定部15は、ステップS402で認識した全てのリソースに対して、アプリケーションAP1以外のアプリケーションがアクセス開始要求をなしているがアクセス権を取得できていない状況であるか否かを判断する。アクセス権を取得できていないアプリケーションがある場合、リソースアクセス判定部15は、リソース情報記憶部14の内容を書き換えて、当該アプリケーションに対して、アクセス権を設定する(ステップS403)。ステップS403における処理については、後で詳述する。
次に、リソースアクセス判定部15は、アプリケーション情報記憶部12を参照して、ステップS403の処理でアクセス権を取得したアプリケーションのアクセス対象論理デバイスを認識し、デバイス情報を参照して、当該アクセス対象論理デバイスが使用する全てのリソースを認識し、リソース情報記憶部14を参照して、当該全てのリソースに対して、当該アプリケーションにアクセス権が設定されているか否かを判断する。これによって、リソースアクセス判定部15は、使用する全てのリソースに対してアクセス権が設定されているアプリケーションを検索する(ステップS404)。以下、ステップS404で検索されたアプリケーションをアプリケーションAP4とする。
次に、リソースアクセス判定部15は、ステップS404での検索の結果、アプリケーションAP4が見つかったか否かを判断する(ステップS405)。見つからなかった場合、リソースアクセス判定部15は、ステップS408の動作に進んで、アクセス終了要求のあったアプリケーションAP1に関するアプリケーション情報をアプリケーション情報記憶部12から削除し、処理を終了する。
一方、見つかった場合、リソースアクセス判定部15は、アプリケーションAP4に関するアクセス可否情報が「可」となるように、アプリケーション情報記憶部12を更新する(ステップS406)。次に、実行部17は、アクセス可否情報が「可」となったアプリケーションが所望の論理デバイスを使用することができるように、当該論理デバイスに対応するデバイスドライバの設定をアプリケーションAP4が使用できるように変更して、ステップS408の動作に進んで、処理を終了する。
ただし、上記動作は、デバイスドライバが一度設定されたアクセス権を有するアプリケーションに関する設定を保持しておく機能を有している場合にのみ有効に実現する。もし、このような機能をデバイスドライバが有していない場合、実行部17は、アプリケーションAP4がアクセス要求をなしてきたときに、デバイス設定が必要だというエラーコードをアプリケーションAP4に返せばよい。また、デバイスドライバが上記の保持機能をサポートしている場合、デバイスドライバは、設定の自動復元ができる。
図13は、ステップS403におけるリソースアクセス判定部15の動作の詳細を示すフローチャートである。以下、図13を参照しながら、ステップS403におけるリソースアクセス判定部15の動作について説明する。
まず、リソースアクセス判定部15は、アプリケーション情報記憶部12を参照して、アプリケーションAP1のアクセス対象論理デバイスを認識し、デバイス情報を参照して、当該アクセス対象論理デバイスが使用する全てのリソースを認識し、リソース情報記憶部14を参照して、認識したいずれか一つのリソースに対してアプリケーションAP1にアクセス権が設定されているか否かを判断する(ステップS501)。
アクセス権が設定されている場合、リソースアクセス判定部15は、デバイス情報記憶部18を参照して、当該リソースを用いる論理デバイスを認識し、アプリケーション情報記憶部12を参照して、当該論理デバイスに対してアクセス開始要求をなしているアプリケーションを検索する(ステップS502)。ここで、検索されたアプリケーションをAP5ということにする。
次に、リソースアクセス判定部15は、ステップS502で認識したアプリケーションAP3が複数存在するか否かを判断する(ステップS503)。複数存在する場合、リソースアクセス判定部15は、アプリケーション情報記憶部12を参照して、その中から最も優先度の高いアプリケーションAP5を検索して(ステップS504)、ステップS505の動作に進む。一方、複数存在しない場合、リソースアクセス判定部15は、そのまま、ステップS505の動作に進む。
ステップS505において、リソースアクセス判定部15は、アプリケーションAP5にアクセス権が与えられるように、リソース情報記憶部14の内容を更新し、ステップS506の動作に進む。このとき、リソースアクセス判定部15は、アプリケーションAP1にアクセス権が与えられていたリソースを必要とするアプリケーションAP5が存在しない場合、当該リソースのリソース情報にNULLを設定する。また、多重アクセスを許すリソースのリソース情報が更新になった場合、リソースアクセス判定部15は、新たにリソースの属性を設定する。その上で、リソースアクセス判定部15は、新たに設定された属性とステップS502で検索された他のアプリケーションが用いる当該リソースの属性とを比較する。比較の結果、同一の属性であると判断した場合、リソースアクセス判定部15は、他のアプリケーションに対してもアクセス権を付与する。このとき、付与できるアクセス権の数に上限がある場合は、リソースアクセス判定部15は、優先度の高い順にアクセス権を付与することとする。
ステップS506において、リソースアクセス判定部15は、アプリケーションAP1のアクセス対象である論理デバイスが必要とする全てのリソースに対して、上記の処理が行われたか否かを判断する(ステップS506)。行われていない場合、リソースアクセス判定部15は、ステップS501の動作に戻る。一方、行われている場合、競合調停装置は、ステップS404の動作に進む。
図12および図13を用いて説明したように、競合調停装置1は、アプリケーションAP1が論理デバイスDEV1へのアクセスを終了した場合に、自動的に、今までリソース競合が起きていたためアクセスが不可になっていたアプリケーションに対して論理デバイスDEV1へのアクセス権を付与する。
図12および図13を用いて説明した処理は、アクセス終了処理がなされた論理デバイスDEV1以外の論理デバイス(たとえば、DEV2)に対しても、アクセス権を付与するといった特徴を有している。ここで、一例として、アプリケーションAP2がアクセス対象論理デバイスDEV2にアクセス開始要求をし、実際にはまだ論理デバイスDEV2にアクセスしていないときに、アプリケーションAP2より優先度の高いアプリケーションAP1が論理デバイスDEV1にアクセス開始要求をしてきた場合を考える。ここでは、論理デバイスDEV1と論理デバイスDEV2とは、共に、リソースRを必要とすると想定する。
まず始めに、アプリケーションAP2が論理デバイスDEV2にアクセス開始要求をなしたとき、リソースRに対してはアクセス競合が発生していない。そのため、アプリケーションAP2は、論理デバイスDEV2に対してアクセスできる。その後、アプリケーションAP1が論理デバイスDEV1にアクセス開始要求をなしたとする。ここでは、アプリケーションAP1の方が優先度が高いと想定しているため、リソースRへのアクセス権は、アプリケーションAP1が取得する。結果、アプリケーションAP2は、論理デバイスDEV2に対してアクセス不可となる。
しかし、アプリケーションAP2は、アクセス開始要求をなした段階で止まっているので、実際には論理デバイスDEV2に対してアクセス要求を未だなしていない。そのため、アプリケーションAP2は、論理デバイスDEV2に対してアクセス不可になったことを未だ知らない。
このような状況の下、アプリケーションAP1が論理デバイスDEV1にアクセスした後、必要な処理を終えてアクセス終了要求をなしたとする。これによって、リソースRは、アプリケーションAP1から解放される。論理デバイスDEV2はリソースRを必要としているので、図12および図13で説明した処理によって、アプリケーションAP2は、自動的に、論理デバイスDEV2へアクセス可となる(ステップS404〜S406参照)。すなわち、アプリケーションAP2は自分がアクセス開始要求をした後、論理デバイスDEV2にアクセスするまでの間、論理デバイスDEV2へアクセス不可となっていたことを知ることなく、論理デバイスDEV2へのアクセスできることとなる。このような処理によって、デバイスアクセスするためのアプリケーションの作りが簡潔になる。
次に、図9〜図13を用いて説明した処理の流れを、図2〜図4に示したアプリケーション、論理デバイス、リソース、および物理デバイスの対応関係を例にとって、具体的に説明する。
たとえば、図2において、既にアプリケーションA1がSDSP論理デバイスにアクセス可能であるときに、アプリケーションA2がMIDI論理デバイスにアクセス開始要求をなした状況を考える。ここでは、アプリケーションA2の方がアプリケーションA1よりも優先度が高いとする。
まず、競合調停装置1は、アプリケーションA2が必要なMIDIリソースとスピーカリソースとのリソース情報を取得する。MIDIリソースおよびスピーカリソースは、共に、同一名のリソースはなく、一つずつしか存在しない。そのため、競合調停装置1は、これらのリソースのアクセス権を既に取得しているアプリケーションが存在するか否かを判断する(図10:ステップS211参照)。ここで、スピーカリソースのアクセス権は、既に、アプリケーションA1が取得している。そのため、競合調停装置1は、アプリケーションA2とアプリケーションA1との優先度を比較する(図10:ステップS206参照)。ここでは、アプリケーションA2の方が優先度が高いと想定しているため、アプリケーションA2は、MIDIリソースおよびスピーカリソースのアクセス権を取得することとなり、MIDI論理デバイスにアクセス可能となる(図10:ステップS208参照)。
一方、アプリケーションA1は、スピーカリソースにアクセス不可となるため、SDSP論理デバイスに対してアクセス不可となる(図10:ステップS209参照)。
次に、アプリケーションA1がアクセス要求をなした場合、既にアプリケーション情報にアクセス不可と設定されているため、競合調停装置1は、アプリケーションA1に対して、エラーメッセージを返す(図11:ステップS305参照)。これにより、アプリケーションA1は、アクセス不可となったことを知る。
次に、アプリケーションA1がアクセス要求をなす前に、アプリケーションA2がアクセス終了要求をなした場合を考える。まず、競合調停装置1は、アプリケーションA2がアクセス権を取得していたリソース(MIDIリソースおよびスピーカリソース)のリソース情報を取得する。次に、競合調停装置1は、各リソースに対して、アクセス権を必要としているアプリケーションが存在するか否かを検索する。本事案では、MIDIリソースに対してアクセス権を必要としているアプリケーションが存在しないため、競合調停装置1は、MIDIリソースのリソース情報に、NULLを設定する。一方、アプリケーションA1がスピーカリソースに対してアクセス権を必要としているため、競合調停装置1は、スピーカリソース情報に、アプリケーションA1がアクセス権を取得したことを設定する(図12:ステップS403参照)。
もし、アプリケーションA1以外にもスピーカリソースを必要とするその他のアプリケーションが存在する場合、競合調停装置1は、アプリケーションA1とその他のアプリケーションとの優先度を比較し、優先度の高いアプリケーションにアクセス権を取得させる。
アプリケーションA1は、スピーカリソースのアクセス権を新たに取得したことによって、必要とするリソース全てにアクセス可能となったため、SDSP論理デバイスにアクセス可能となる。これにより、競合調停装置1は、アプリケーションA1のアプリケーション情報にSDSP論理デバイスへのアクセス可能である旨を設定する(図12:ステップS406参照)。
もし、SDSPデバイスドライバがアプリケーションA1の設定を復元することができる機能を有している場合、次にアプリケーションA1がアクセス要求をなしたとき、アプリケーションA1は、一度アクセス不可になっていたことを知ることなく、SDSP論理デバイスにアクセスできる。つまり、アプリケーションA1は、SDSP物理デバイスとスピーカ物理デバイスとにアクセスできる。
次に、図3の構成例の場合における具体的な処理の流れについて説明する。たとえば、図3において、アプリケーションA1、A2、A4が既に回線論理デバイスにアクセス可能であると想定する。このとき、アプリケーションA3が、回線論理デバイスにアクセス開始要求をなしたときを考える。ここで、優先度は、アプリケーションA1、アプリケーションA2、アプリケーションA3、アプリケーションA4の順に高いとする。すなわち、AP1の優先度が最も高い。
まず、競合調停装置1は、三つの回線リソース32〜34の内、アクセス権が設定されていない回線リソースを判断する(図10:ステップS202参照)。本事案では、既に、全ての回線リソース32〜34に対して、アプリケーションA1、A2、A4が、アクセス権を取得している。したがって、アクセス権が設定されていない回線リソース(空いている回線リソース)は、存在しない。
次に、競合調停装置1は、アプリケーションA1、A2、A4の中で最も優先度の低いアプリケーションを認識する(図10:ステップS203参照)。本事案では、アプリケーションA4の優先度が最も低い。次に、競合調停装置1は、アプリケーションA4とA3との優先度を比較する(図10:ステップS206参照)。本事案では、アプリケーションA3の優先度の方がアプリケーションA4の優先度よりも高い。したがって、競合調停装置1は、アプリケーションA4がアクセス権を取得していた回線リソースに対して、アプリケーションA3がアクセス権を取得するように設定する。これにより、アプリケーションA3は、回線論理デバイスに対してアクセス可能となる(図10:ステップS208参照)。一方、アプリケーションA4は、回線論理デバイスに対して、アクセス不可となる(図10:ステップS209参照)。
次に、アプリケーションA4より優先度の低いアプリケーションA5(図示せず)がアクセス開始要求をしてきた場合を考える。このとき、既に、回線リソースは全て埋まっているため、競合調停装置1は、アプリケーションA1、A2、A3の中で優先度の最も低いアプリケーションを認識する(図10:ステップS203参照)。この中では、アプリケーションA3が最も優先度が低い。次に、競合調停装置1は、アプリケーションA3とA5との優先度を比較する(図10:ステップS206参照)。本事案では、AP5の方が優先度が低い。したがって、競合調停装置1は、AP5は回線論理デバイスにアクセス不可となるように設定する(図9:ステップS108参照)。
次に、アプリケーションA4およびA5がともに回線論理デバイスにアクセス要求をなす前に、アプリケーションA2がアクセス終了要求をなした場合を考える。この場合、回線リソースを必要としているアプリケーションは、アプリケーションA4、A5の2つが存在する(図13:ステップS502参照)。競合調停装置1は、アプリケーションA4とA5との内、最も優先度が高いアプリケーションを認識する(図13:ステップS504参照)。本事案では、AP4の方が優先度が高い。したがって、競合調停装置1は、AP2がアクセス権を取得していた回線リソースに対して、アプリケーションA4にアクセス権を与える(図13:ステップS505参照)。これにより、アプリケーションA4は、回線論理デバイスにアクセス可能となる(図12:ステップS406参照)。
次に、図4の構成例の場合における具体的な処理の流れについて説明する。たとえば、図4において、アプリケーションA1が既にSDSP録音論理デバイスにアクセス可能であると想定する。このとき、アプリケーションA3がSDSP再生論理デバイスにアクセス開始要求をなしたときを考える。ここで、アプリケーションA1の優先度は、アプリケーションA3の優先度より高いとする。また、アプリケーションA1とA3とは、同じコーデックXを使用するとする。また、SDSPコーデックリソースは、付加情報を持ったリソースで、設定された状態と同じであれば多重アクセスを許す性質を持っているとする。
SDSPコーデックリソースが多重アクセスを許さないリソースであれば、SDSPコーデックリソースには、既にアプリケーションA1にアクセス権が設定されているため、競合調停装置1は、アプリケーションA1とアプリケーションA3との優先度を比較する(図10:ステップS206参照)。本事案では、アプリケーションA1の優先度の方が、アプリケーションA3の優先度よりも高い。したがって、このような場合、多重アクセスを許さない普通のリソースであれば、アプリケーションA3は、アクセス権を取得できない。
しかし、SDSPコーデックリソースは多重アクセスを許すリソースであるため、アプリケーションA3は、アクセス権を取得できる可能性がある。そこで、競合調停装置1は、SDSPコーデックリソースに設定されているコーデックの種別とアプリケーションA3が使用するコーデックの種別とを比較する(図10:ステップS205参照)。本事案では、二つの種別は同じコーデックXであるため、競合調停装置1は、アプリケーションA3に対してSDSPコーデックリソースへのアクセス権を付与する(図10:ステップS208)。これにより、アプリケーションA3は、SDSP再生論理デバイスに対してアクセス可能となる。
次に、アプリケーションA2がSDSP録音論理デバイスにアクセス開始要求をした場合を考える。ここで、アプリケーションA2の優先度は、アプリケーションA1の優先度よりも低く、アプリケーションA3の優先度よりも高いとする。
まず、競合調停装置1は、SDSPコーデックリソースに設定されているコーデックの種別とAP2の使用するコーデックの種別とを比較する(図10:ステップS205)。ここで、アプリケーションA2は、アプリケーションA1やA3とは異なるコーデックYを使用するとする。この場合、リソースに設定されている属性であるコーデックの種類が異なることとなるので、アプリケーションA2は、SDSPコーデックリソースのアクセス権を取得できないこととなる。よって、アプリケーションA2は、SDSP録音論理デバイスにはアクセス不可となる(図9:ステップS108参照)。
一方、アプリケーションA2は、アプリケーションA1やA3と同一のコーデックXを使用するとする。この場合、リソースに設定されている属性であるコーデックの種類と同一となるので、アプリケーションA2は、SDSPコーデックリソースのアクセス権を取得できる(図10:ステップS205参照)。しかし、SDSP録音リソースのアクセス権は、アプリケーションA1に付与されたままであるので、アプリケーションA2は、全てのリソースに対してのアクセス権を有していないこととなり(図9:ステップS105参照)、SDSP録音論理デバイスにはアクセス不可となる(図9:ステップS108参照)。
次に、アプリケーションA1がアクセス終了要求をなしたときを考える。まず、SDSP録音リソースに対して、アプリケーションA2がアクセス権を必要としているため(図13:ステップS502参照)、競合調停装置1は、アプリケーションA2にアクセス権を取得させる(図13:ステップS505参照)。
次に、SDSPコーデックリソースに対して、アプリケーションA2とA3とがアクセス権を必要としているため(図13:ステップS502参照)、競合調停装置1は、アプリケーションA2とA3との優先度を比較する(図13:ステップS504参照)。そして、アプリケーションA2の方が優先度が高いため、競合調停装置1は、アプリケーションA2にSDSPコーデックリソースのアクセス権を与える(図13:ステップS505参照)。このとき、コーデックの種別が変更になるので、競合調停装置1は、コーデックの種別を設定しなおす。
次に、競合調停装置1は、SDSPコーデックリソースに新たに設定されたコーデックの種別とアプリケーションA3が使用するコーデックの種別とを比較する(図13:ステップS505参照)。ここで、アプリケーションA2とA3とは異なるコーデックを使用することとしているので、競合調停装置1は、アプリケーションA3はSDSPコーデックリソースに対してアクセス不可となるように設定する。これにより、アプリケーションA3は、SDSP再生論理デバイスに対してアクセス不可となる。
このように、上記実施形態では、競合調停装置は、アプリケーションによって指定される論理デバイスと、実際に存在する物理デバイスと、物理デバイスと論理デバイスとを対応付けるリソースとに分離して、物理デバイスの機能およびアプリケーション所望する機能を管理し、リソース単位でアプリケーションから物理デバイスへのアクセスの競合調停を行う。したがって、物理デバイスの構成が変化したとしても、競合調停装置内のリソース情報およびデバイス情報を変更するだけでよいので、物理デバイスの構成変化に柔軟に対応することができる競合調停装置および競合調停方法を提供することができる。さらに、物理デバイスの機能をリソース単位に分割して競合調停を行うので、物理デバイスが様々な特性を有していたとしても、その特性を十分に活かしきることができる競合調停装置および競合調停方法を提供することができる。
たとえば、回線物理デバイスのように、ある上限数以内であれば多重アクセスを許すような場合や、SDSP物理デバイスにおけるSDSPコーデック機能のように、ある条件を満たせば多重アクセスを許すような場合において、競合調停装置は、複数のアプリケーションにアクセス権を付与することができる。このように、競合調停装置は、物理デバイスの特性を十分に活かしきるように競合調停を行うことができる。
また、たとえば、スピーカ物理デバイスのように、他の物理デバイスとは配線結合されているもの、単体ではI/Oポートを持たない物理デバイスが複数のデバイス間で共有されるような場合でも、競合調停装置は、当該物理デバイスへのアクセスの競合調停を行うことができる。
また、アプリケーションがアクセス要求をなしたときに、アクセスが可能であれば該当のデバイスドライバが実行され、アクセスが不可能であればアプリケーションにエラーが戻るという仕組みが提供されることとなる。したがって、アプリケーションは、アクセス要求をしたときのエラーの対処のみを考慮すれるだけでよい。このようなシステムは、アプリケーション開発者にとって、開発負担が軽減されたものである。
また、アプリケーションに付与された優先度を用いて競合調停を行うことで、優先度の高いアプリケーションから順に物理デバイスへのアクセスが許可されることとなる。特に、多重アクセスを許す物理デバイスにおいては、優先度のより高いものからアクセスが可能となり、優先度に応じた複雑な排他制御が可能となる。
また、アプリケーションが物理デバイスにアクセス可能であるか否かは、アプリケーション情報内に登録されることとなるので、アクセス要求がある度に、アクセス可能であるか否かを判断する必要がないので、処理が高速化される。
さらに、他のアプリケーションのアクセス要求により、物理デバイスへのアクセス権が奪われた場合、アクセス権が奪われる前のアプリケーションが次にアクセス要求するまでに、再びその物理デバイスへのアクセスが可能になったら、当該アプリケーションは、一度アクセスが不可能になったという事実を知ることなく、特別な処理を行うことなく、物理デバイスへのアクセスを継続することができる。
また、複数の物理デバイスを同時に制御することで所望の機能が実現されるといったアプリケーションを用いる場合、当該所望の処理を実現するには、当該複数の物理デバイスへのアクセスが許可されている必要がある。本発明のように、リソース単位でアクセス権を管理すれば、全ての物理デバイスにアクセス可能な場合に必要なデバイスドライバを実行させ、所望の機能を実現させることができる。一方、一つでもアクセス不可能な場合、競合調停装置は、アプリケーションにエラーを通知することができる。
なお、上記実施形態で示した物理デバイス、論理デバイスおよびリソースは一例であって、当然、これらに限定されるものではない。
なお、上記実施形態において、リソースアクセス判定部は、優先度が高いアプリケーションに対してリソースに対するアクセス権を付与することとした。この他、リソース情報毎に、先にアクセス要求をなしたアプリケーションに使用許可を与えるのか、それとも、後からアクセス要求をなしたアプリケーションに使用許可を与えるのかに関する先勝ち情報を付加しておいて、リソースアクセス判定部は、先勝ち情報に基づいて、アクセス権を与えるアプリケーションを判定してもよい。また、リソースアクセス判定部は、アプリケーションの優先度が同じ場合にのみ、先勝ち情報に基づいて、アクセス権を与えるアプリケーションを判定してもよい。
なお、上記実施形態において、競合調停装置は、アプリケーションが所望する論理デバイスに必要な全てのリソースに対してアクセス権が付与されている場合にのみ、当該アプリケーションが当該論理デバイスにアクセス可能であると設定することとした(図9:ステップS105〜S106参照)。しかし、全てのリソースに対してアクセス権が設定されていなくても、一部のリソースにのみアクセス権が設定されていれば、論理デバイスの一部の機能を実現できる場合がある。そのため、競合調停装置は、論理デバイスが使用するリソースの全てが使用できない場合であっても、使用可能なリソースのみアプリケーションが使用できるようにしてもよい。
図14は、論理デバイスが使用するリソースの全てが使用できない場合であっても、使用可能なリソースのみアプリケーションが使用できるようにするときの競合調停装置の動作を示すフローチャートである。図14に示すフローチャートは、図9に示すステップS105〜S108に置き換わるものである。図14において、図9に示すステップと同様の動作であるステップについては、同一のステップ番号を付し、説明を省略する。
競合調停装置1は、アクセス開始要求をなしたアプリケーションがアクセス対象論理デバイスが使用する全てのリソースに対してアクセス権を有していないと判断した場合、ステップS1081の動作に進む。ステップS1081において、競合調停装置1の実行部17は、アクセス対象論理デバイスが使用する全てのリソースの内、当該アプリケーションがアクセス可能なリソースを認識する。次に、実行部17は、ステップS1081で認識したリソースの内、単独で使用できるリソースが存在するか否かを判断する(ステップS1082)。このとき、実行部17は、リソース情報に付加されている単独で使用できるかを示す情報に基づいて、当該判断を行う。
単独で使用できるリソースが存在する場合、実行部17は、当該リソースの機能を実現するように、デバイスドライバ実行部5にデバイスドライバを実行させ(ステップS1083)、処理を終了する。一方、単独で使用できるリソースが存在しない場合、実行部17は、当該アプリケーションに対するアクセス可否情報が「不可」となるようにアプリケーション情報記憶部12の登録内容を更新し(ステップS108)、処理を終了する。
このように、全ての物理デバイスにアクセスできなくても、所望の機能の一部が実行できればよい場合、競合調停装置は、アプリケーションが当該所望の機能の一部を実行できるように、デバイスドライバを実行させることもできる。