(57)【特許請求の範囲】
【請求項１】
複数のタスクからアクセスされるアクセス対象と、
特定の初期値を持ち、前記アクセス対象へのアクセスの競合を回避するためのアクセスカウンターと、
前記アクセス対象へのアクセスを開始するとき前記アクセスカウンターをインクリメントし、
前記アクセス対象へのアクセスが完了したとき前記アクセスカウンターをデクリメントする高優先度タスクと、
前記アクセスカウンターが前記特定の初期値であるとき前記アクセス対象にアクセスする低優先度タスクと
を備えた
電子機器。
【請求項２】
請求項１に記載の電子機器であって、
前記低優先度タスクは、
前記アクセスカウンターの値が前記特定の初期値ではないとき、
特定の時間ごとに、前記アクセスカウンターをポーリングして前記アクセスカウンターの値を確認する
電子機器。
【請求項３】
請求項１に記載の電子機器であって、
前記低優先度タスクがイベントセマフォを待つ状態に入ったとき、前記低優先度タスクの処理を一時停止させ、
前記イベントセマフォがフラッシュされたとき、一時停止されていた前記低優先度タスクの処理を再開させるオペレーティングシステムをさらに備え、
前記低優先度タスクは、
前記アクセス対象にアクセスする前に前記アクセスカウンターの値を確認し、
前記アクセスカウンターの値が前記特定の初期値ではないとき、イベントセマフォを待つ状態に入り、
前記イベントセマフォがフラッシュされたとき、前記アクセス対象にアクセスし、
前記高優先度タスクは、
前記アクセス対象へのアクセスを完了して前記アクセスカウンターをデクリメントしたとき、前記アクセスカウンターの値を確認し、
前記アクセスカウンターの値が前記特定の初期値であるとき、前記イベントセマフォをフラッシュする
電子機器。
【請求項４】
請求項３に記載の電子機器であって、
前記低優先度タスクは、
前記イベントセマフォを待つ状態に入るとき、特定のタイムアウト時間を指定し、
前記オペレーティングシステムは、
前記特定のタイムアウト時間が経過したとき、前記低優先度タスクに前記特定のタイムアウト時間が経過したことを通知するためのものであり、
前記低優先度タスクは、
前記イベントセマフォを待つ状態にあり前記特定のタイムアウト時間が経過したことを通知されたとき、前記アクセスカウンターの値を確認する
電子機器。
【請求項５】
特定の初期値を持ち、複数のタスクからアクセスされるアクセス対象へのアクセスの競合を回避するためのアクセスカウンターを前記アクセス対象へのアクセスを開始するときインクリメントし、前記アクセス対象へのアクセスが完了したとき前記アクセスカウンターをデクリメントする高優先度タスクとしての手順および
前記アクセスカウンターが前記特定の初期値であるとき前記アクセス対象にアクセスする低優先度タスクとしての手順
をコンピューターに実行させる情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アクセス対象への複数アクセスの競合を制御する電子機器および情報処理プログラムに関する。
【背景技術】
【０００２】
従来、アクセス対象、例えばメモリー上の特定領域などに、複数のプロセスが同時にアクセスして競合が発生することを避けるために、様々な工夫が行われてきた。なお、以下ではこれらの工夫のことを競合回避制御と呼ぶ。
【０００３】
例えば、特許文献１の技術では、プリンター機能と複写機能を持つ画像形成装置において、両方の機能が同時に利用される場合、両方の機能で共有して利用される画像形成手段へのアクセスが競合しないように、複写機能に、プリンター機能よりも高い、画像形成手段への優先度を設定している。
【０００４】
また、例えば、特許文献２の技術では、複数の入力ポートに予め優先度を定めておき、出力ポートへの競合が発生すると、最高の優先度を持つ入力ポートからの入力に、最初に出力ポートへのアクセスが許可される。
【０００５】
なお、アクセス数を用いた制御として、例えば特許文献３の技術では、ファイルやフォルダーへのアクセス数をカウントして、アクセス数の多寡に応じて、画面上に各フォルダーを表示する順序を調整している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０００−１３４３９１号公報
【特許文献２】特表２００２−５０２０７０号公報
【特許文献３】特開２００６−３１８３１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
例えば、特許文献１の技術では、競合する機能間での優先度を判断するための競合回避制御に、フラグが用いられている。
【０００８】
しかし、フラグを用いる場合、競合する機能の数が増えると、競合回避制御のためのフラグの数も増やさなければならず、また、競合する機能１つにつき１つのフラグを用いなければならず、競合しないことを確認するためには全てのフラグをチェックしなければならないなど、判断のための処理が複雑になるという問題点があった。
【０００９】
以上のような事情に鑑み、本発明の目的は、簡単な方法で競合回避制御を行うことが出来る電子機器および情報処理プログラムを提供することにある。
【課題を解決するための手段】
【００１０】
上記目的を達成するため、本発明の一形態に係る電子機器は、複数のタスクからアクセスされるアクセス対象と、特定の初期値を持ち、前記アクセス対象へのアクセスの競合を回避するためのアクセスカウンターと、前記アクセス対象へのアクセスを開始するとき前記アクセスカウンターをインクリメントし、前記アクセス対象へのアクセスが完了したとき前記アクセスカウンターをデクリメントする高優先度タスクと、前記アクセスカウンターが前記特定の初期値であるとき前記アクセス対象にアクセスする低優先度タスクとを備える。そのため、簡単な方法で競合回避制御を行うことが出来る。
【００１１】
上記目的を達成するため、本発明の一形態に係る電子機器では、前記低優先度タスクは、前記アクセスカウンターの値が前記特定の初期値ではないとき、特定の時間ごとに、前記アクセスカウンターをポーリングして前記アクセスカウンターの値を確認する構成でもよい。
【００１２】
上記目的を達成するため、本発明の一形態に係る電子機器では、前記低優先度タスクがイベントセマフォを待つ状態に入ったとき、前記低優先度タスクの処理を一時停止させ、前記イベントセマフォがフラッシュされたとき、一時停止されていた前記低優先度タスクの処理を再開させるオペレーティングシステムをさらに備え、前記低優先度タスクは、前記アクセス対象にアクセスする前に前記アクセスカウンターの値を確認し、前記アクセスカウンターの値が前記特定の初期値ではないとき、イベントセマフォを待つ状態に入り、前記イベントセマフォがフラッシュされたとき、前記アクセス対象にアクセスし、前記高優先度タスクは、前記アクセス対象へのアクセスを完了して前記アクセスカウンターをデクリメントしたとき、前記アクセスカウンターの値を確認し、前記アクセスカウンターの値が前記特定の初期値であるとき、前記イベントセマフォをフラッシュする構成でもよい。
【００１３】
上記目的を達成するため、本発明の一形態に係る電子機器では、前記低優先度タスクは、前記イベントセマフォを待つ状態に入るとき、特定のタイムアウト時間を指定し、前記オペレーティングシステムは、前記特定のタイムアウト時間が経過したとき、前記低優先度タスクに前記特定のタイムアウト時間が経過したことを通知し、前記低優先度タスクは、前記イベントセマフォを待つ状態にあり前記特定のタイムアウト時間が経過したことを通知されたとき、前記アクセスカウンターの値を確認する構成でもよい。
【００１４】
上記目的を達成するため、本発明の一形態に係る情報処理プログラムは、特定の初期値を持ち、複数のタスクからアクセスされるアクセス対象へのアクセスの競合を回避するためのアクセスカウンターを前記アクセス対象へのアクセスを開始するときインクリメントし、前記アクセス対象へのアクセスが完了したとき前記アクセスカウンターをデクリメントする高優先度タスクとしての手順および前記アクセスカウンターが前記特定の初期値であるとき前記アクセス対象にアクセスする低優先度タスクとしての手順をコンピューターに実行させる。
【発明の効果】
【００１５】
以上のように、本発明によれば、簡単な方法で競合回避制御を行うことが出来る。
【図面の簡単な説明】
【００１６】
【図１】本発明の一実施形態に係る電子機器１０の構成図である。
【図２】ポーリングを用いてアクセスカウンターの値を確認し、競合回避制御を行う処理について説明するためのシーケンス図である。
【図３】イベントセマフォを用いてアクセスカウンターの値を確認し、競合回避制御を行う処理について説明するためのシーケンス図である。
【図４】イベントセマフォを用いて競合回避制御を行う場合の注意点について説明するためのシーケンス図である。
【発明を実施するための形態】
【００１７】
以下、図面を参照しながら、本発明の実施形態を説明する。
【００１８】
なお、以下の説明では、複数のアクセスが競合するアクセス対象の例として、ハードディスクドライブ（ＨＤＤ）などの記憶装置に記憶されたファイルを挙げて説明する。なお、アクセス対象は、ファイルに限らず、電子機器の有するリソースであればどのようなものでもよい。
【００１９】
また、以下の説明では、優先度の低いタスクおよび優先度の高いタスクに関するアクセス競合の回避について説明するが、優先度の高いタスクとは、例えば、画像形成装置（ＭＦＰ、Multifunction Peripheral）では、ファクシミリ機能が挙げられる。ファクシミリ機能では、一定時間以内に相手に応答を返さなければならないという制約がある為である。また、優先度の低いタスクとは、例えば、画像形成装置では、コピー機能、印刷機能が挙げられる。このように、各タスクは、対応する機能についての制約などの特性に応じて優先度が予め決められている。
【００２０】
［概要］
最初に、本発明の概要について説明する。
【００２１】
本発明では、上述したように、複数のアクセスによる競合を避けるためのアクセス制御を行う為に複数のフラグを用いる代わりに、優先度が高い処理、すなわち他の優先度の低い処理からのアクセスにより邪魔されて遅延を発生させたくない処理による、アクセス対象へのアクセス数をカウントするためのアクセスカウンターを用いる。
【００２２】
アクセスカウンターは、初期状態では"０"（特定の初期値）に設定されている。これは、アクセス対象にアクセスしている優先度の高い処理が無いことを意味している。
【００２３】
このアクセスカウンターでは、優先度の高い処理がアクセス対象にアクセスする際に、アクセスカウンターをインクリメントしてからアクセスを開始し、アクセスが終了した時点で、アクセスカウンターをデクリメントする。
【００２４】
優先度の高い処理が複数ある場合でも、１つのアクセスカウンターに対して、カウンターのインクリメントおよびデクリメントを行う。
【００２５】
そして、優先度の低い処理は、アクセス対象へのアクセスを開始する前に、アクセスカウンターを参照し、アクセスカウンターの値が正数（特定の初期値ではない）であれば、優先度の高い処理によるアクセス対象へのアクセスが行われていると判断し、アクセス対象へのアクセスは行わない。
【００２６】
また、優先度の低い処理は、アクセス対象へのアクセスを開始する前にアクセスカウンターを参照した時にアクセスカウンターの値が"０"であれば、優先度の高い処理によるアクセス対象へのアクセスは行われていないと判断し、アクセス対象へのアクセスを行う。
【００２７】
このように、優先度の低い処理は、自身がアクセス対象にアクセスすることが許されるか否かを判断するために、現在アクセス対象にアクセス中の優先度の高い処理の数は考慮せず、アクセスカウンターの値が正数であるか否かのみを判断すれば良いので、数多くのフラグを全て確認する場合に較べ、簡単に競合回避制御を行うことが出来る。
【００２８】
なお、優先度の低い処理がアクセス対象にアクセスするために、アクセスカウンターの値が"０"になったことを確認する方法として、例えば、ポーリングを用いる方法、またはイベントセマフォを用いる方法が挙げられる。
【００２９】
ポーリングを用いる方法およびイベントセマフォを用いる方法の詳細については後述する。また、通常の一般的なセマフォとイベントセマフォの相違についても後述する。
【００３０】
以上、本発明の概要について説明した。
【００３１】
［セマフォとイベントセマフォについて］
次に、一般的にセマフォと呼ばれるアクセス制御方法と、上述したイベントセマフォの違いについて説明する。
【００３２】
アクセス制御にセマフォを用いる場合、例えば、タスクＡが最初にセマフォを取り、次にタスクＢがセマフォを取り、次にタスクＣがセマフォを取ったとすると、最初にタスクＡがアクセス対象に対する処理を開始し、タスクＢおよびタスクＣはセマフォ待ちに入る。
【００３３】
タスクＡの処理が完了しセマフォを解放すると、セマフォ待ちに入っているタスクＢおよびタスクＣのうち、早い時期にセマフォを取ったタスクＢの、アクセス対象に対する処理が開始され、タスクＣはセマフォ待ちのままである。
【００３４】
タスクＢのアクセス対象に対する処理が完了しセマフォを解放すると、セマフォ待ちであったタスクＣの、アクセス対象に対する処理が実行される。
【００３５】
これに対し、アクセス制御にイベントセマフォを用いる場合、例えば、タスクＡが最初にイベントセマフォを取り、次にタスクＢがイベントセマフォを取り、次にタスクＣがイベントセマフォを取ったとすると、最初にタスクＡがアクセス対象に対する処理を開始し、タスクＢおよびタスクＣはイベントセマフォ待ちに入る。
【００３６】
タスクＡの、アクセス対象に対する処理が完了し、イベントセマフォを解放（フラッシュ）すると、イベントセマフォ待ちであった全てのタスク、すなわちタスクＢおよびタスクＣの、アクセス対象に対する処理が一度に開始される。
【００３７】
以上、一般的にセマフォと呼ばれるアクセス制御方法と、上述したイベントセマフォの違いについて説明した。なお、イベントセマフォの機能は、ＯＳ（Operating System）により実現されてもよい。
【００３８】
［構成］
次に、本発明の一実施形態に係る電子機器の構成を説明する。図１は、本発明の一実施形態に係る電子機器１０の構成図である。なお、以下の説明では、電子機器１０が一般的なコンピューターとして構成される場合の具体例を説明している。
【００３９】
図１に示すように、電子機器１０は、ＣＰＵ（Central Processing Unit）１１、ＲＯＭ（Read Only Memory）１２、ＲＡＭ（Random Access Memory）１３、操作入力部１４、ネットワークインターフェイス部１５、表示部１６、および記憶部１７を有し、これら各ブロックがバス１８を介して接続されている。
【００４０】
ＲＯＭ１２は、各種の処理を実行するためのファームウェア等の複数のプログラムやデータを固定的に記憶する。
【００４１】
ＲＡＭ１３は、ＣＰＵ１１の作業用領域として用いられ、ＯＳ、実行中の各種アプリケーション、処理中の各種データ、およびアクセスカウンター１３ａを一時的に保持する。アクセスカウンター１３ａは、複数のタスクによるアクセスの競合を防止するためのアクセス制御に用いられる。
【００４２】
記憶部１７は、例えばＨＤＤ（Hard Disk Drive）や、フラッシュメモリー、その他の不揮発性メモリーである。記憶部１７には、ＯＳや各種アプリケーション、各種データに加え、複数のタスクによりアクセスされるファイル１７ａが記憶される。
【００４３】
ネットワークインターフェイス部１５は、画像形成装置２０と情報のやりとりを行う為のネットワーク３０と結ばれており、画像形成装置２０から情報を収集したり、画像形成装置２０に収集した情報を提供したりする。
【００４４】
ＣＰＵ１１は、ＲＯＭ１２や記憶部１７に格納された複数のプログラムのうち、操作入力部１４から与えられる命令に対応するプログラムをＲＡＭ１３に展開し、この展開されたプログラムにしたがって、表示部１６及び記憶部１７を適宜制御する制御部である。
【００４５】
ＣＰＵ１１においてプログラムが実行されることにより、高優先度タスクＨ１、高優先度タスクＨ２、および低優先度タスクＬ１などの機能ブロックが実現される。なお、高優先度タスクおよび低優先度タスクは、幾つあってもよい。
【００４６】
高優先度タスクＨ１、高優先度タスクＨ２、および低優先度タスクＬ１などは、ＲＡＭ１３上のアクセスカウンター１３ａを参照してアクセス制御を行いつつ、記憶部１７内のファイル１７ａにアクセスして処理を行う。
【００４７】
操作入力部１４は、例えばマウス等のポインティングデバイス、キーボード、タッチパネル、その他の操作装置である。
【００４８】
表示部１６は、例えば液晶ディスプレイ、ＥＬ（Electro-Luminescence）ディスプレイ、プラズマディスプレイ、ＣＲＴ（Cathode Ray Tube）ディスプレイ等である。表示部１６は、電子機器１０に内蔵されていてもよいし、外部接続されていてもよい。
【００４９】
以上、電子機器１０の構成について説明した。
【００５０】
［ポーイングを用いた処理について］
次に、上述したポーリングを用いてアクセスカウンターの値を確認し、競合回避制御を行う処理について説明する。図２は、ポーリングを用いてアクセスカウンターの値を確認し、競合回避制御を行う処理について説明するためのシーケンス図である。
【００５１】
まず、高優先度タスクＨ１が、記憶部１７内のファイル１７ａにアクセスするとする。その場合、高優先度タスクＨ１は、アクセスカウンター１３ａをインクリメントする（ステップＳ２１）。
【００５２】
次に、高優先度タスクＨ１が、記憶部１７内のファイル１７ａにアクセスする（ステップＳ２２）。
【００５３】
次に、低優先度タスクＬ１がファイル１７ａにアクセスするために、アクセスカウンター１３ａの値を取得するとする（ステップＳ２３）。この時点では、既に高優先度タスクＨ１によりアクセスカウンター１３ａがインクリメントされているので、アクセスカンター１３ａの値として"１"が返される。
【００５４】
低優先度タスクＬ１は、アクセスカウンター１３ａの値として正数が返ってきたので、ファイル１７ａへのアクセスを待つ。
【００５５】
アクセスカウンター１３ａの値を取得してから一定時間経過後、低優先度タスクＬ１は、再度、アクセスカウンター１３ａの値を取得する（ステップＳ２４）。この時点でも、高優先度タスクＨ１によりアクセスカウンター１３ａがインクリメントされたままなので、アクセスカンター１３ａの値として"１"が返される。
【００５６】
次に、高優先度タスクＨ１におけるファイル１７ａへのアクセス処理が完了したとする。高優先度タスクＨ１は、アクセスカウンター１３ａをデクリメントする（ステップＳ２５）。
【００５７】
次に、高優先度タスクＨ２が、記憶部１７内のファイル１７ａにアクセスするとする。その場合、高優先度タスクＨ２は、アクセスカウンター１３ａをインクリメントする（ステップＳ２６）。
【００５８】
このように、ステップＳ２５とステップＳ２６の間では、アクセスカウンター１３ａの値は"０"である。そのため、低優先度タスクＬ１が、ステップＳ２５とステップＳ２６の間のタイミングでアクセスカウンター１３ａの値を取得すれば、値が"０"であることを検知できるので、ファイル１７ａにアクセスすることが出来る。
【００５９】
しかし、図２に示す例では、ステップＳ２５とステップＳ２６の間では、低優先度タスクＬ１は、次のポーリングのタイミングを待っている状態なので、アクセスカウンター１３ａの値が"０"になったことを知ることは出来ず、ファイル１７ａにアクセスすることは出来ない。
【００６０】
次に、低優先度タスクＬ１が、アクセスカウンター１３ａの値を取得したとする（ステップＳ２７）。この時点では、高優先度タスクＨ１によりデクリメントされたアクセスカウンター１３ａが、高優先度タスクＨ２により再度インクリメントされ、値が"１"になっているので、低優先度タスクＬ１は、ファイル１７ａにアクセスすることを待たなければならない。
【００６１】
次に、高優先度タスクＨ２が、記憶部１７内のファイル１７ａにアクセスする（ステップＳ２８）。
【００６２】
アクセスカウンター１３ａの値を取得してから一定時間経過後、低優先度タスクＬ１は、再度、アクセスカウンター１３ａの値を取得する（ステップＳ２９）。この時点でも、高優先度タスクＨ２によりアクセスカウンター１３ａがインクリメントされているので、アクセスカンター１３ａの値として"１"が返される。
【００６３】
次に、高優先度タスクＨ２が、ファイル１７ａへのアクセスを完了したとする。高優先度タスクＨ２は、アクセスカウンター１３ａをデクリメントする（ステップＳ３０）。
【００６４】
アクセスカウンター１３ａの値を取得してから一定時間経過後、低優先度タスクＬ１は、再度、アクセスカウンター１３ａの値を取得する（ステップＳ３１）。この時点では、高優先度タスクＨ２によりアクセスカウンター１３ａがデクリメントされているので、アクセスカンター１３ａの値として"０"が返される。
【００６５】
低優先度タスクＬ１は、アクセスカウンター１３ａの値として"０"が返されたので、ファイル１７ａにアクセスする（ステップＳ３２）。
【００６６】
以上のように、低優先度タスクＬ１は、ステップＳ２５とステップＳ２６の間でアクセスカウンター１３ａの値が"０"になったことを検知出来なかったので、ステップＳ３２の時点までファイル１７ａへのアクセスを待たなければならなかった。
【００６７】
もし、ステップＳ３０において高優先度タスクＨ２がアクセスカウンター１３ａをデクリメントしてから、低優先度タスクＬ１がアクセスカウンター１３ａの値を取得するまでに、他の高優先度タスクがアクセスカウンター１３ａをインクリメントしてしまった場合、低優先度タスクＬ１は、更に長い時間、ファイル１７ａへのアクセスを待たなければならなくなる。
【００６８】
以上、ポーリングを用いてアクセスカウンターの値を確認し、競合回避制御を行う処理について説明した。
【００６９】
［イベントセマフォを用いた処理について］
次に、上述したイベントセマフォを用いてアクセスカウンターの値を確認し、競合回避制御を行う処理について説明する。図３は、イベントセマフォを用いてアクセスカウンターの値を確認し、競合回避制御を行う処理について説明するためのシーケンス図である。
【００７０】
まず、高優先度タスクＨ１が、記憶部１７内のファイル１７ａにアクセスするとする。その場合、高優先度タスクＨ１は、アクセスカウンター１３ａをインクリメントする（ステップＳ１）。
【００７１】
次に、高優先度タスクＨ１が、記憶部１７内のファイル１７ａにアクセスする（ステップＳ２）。
【００７２】
次に、高優先度タスクＨ２が、記憶部１７内のファイル１７ａにアクセスするとする。その場合、高優先度タスクＨ２は、アクセスカウンター１３ａをインクリメントする（ステップＳ３）。
【００７３】
次に、高優先度タスクＨ２が、記憶部１７内のファイル１７ａにアクセスする（ステップＳ４）。
【００７４】
次に、低優先度タスクＬ１が、記憶部１７内のファイル１７ａにアクセスするとする。その場合、低優先度タスクＬ１は、アクセスカウンター１３ａの値を取得する（ステップＳ５）。低優先度タスクＬ１がアクセスカウンター１３ａの値を取得した時点では、２つの高優先度タスクＨ１およびＨ２がファイル１７ａにアクセスしているので、アクセスカウンター１３ａの値として"２"が返される。
【００７５】
アクセスカウンター１３ａの値として正数が返された場合、低優先度タスクＬ１は、タイムアウトの時間、たとえば１００ｍｓを指定して、イベントセマフォ待ちに入る（ステップＳ６）。
【００７６】
低優先度タスクＬ１がイベントセマフォのフラッシュを待っている間に、高優先度タスクＨ１のファイル１７ａへのアクセスが完了したとすると、高優先度タスクＨ１は、アクセスカウンター１３ａをデクリメントする（ステップＳ７）。
【００７７】
デクリメント後、高優先度タスクＨ１は、デクリメントの結果としてアクセスカウンター１３ａの値が"０"になったか否かを判断する。ここでは、アクセスカウンター１３ａの値は"１"なので、高優先度タスクＨ１に関する競合回避制御は完了する。
【００７８】
低優先度タスクＬ１がイベントセマフォのフラッシュを待っている間に、高優先度タスクＨ２のファイル１７ａへのアクセスが完了したとすると、高優先度タスクＨ２は、アクセスカウンター１３ａをデクリメントする（ステップＳ８）。
【００７９】
デクリメント後、高優先度タスクＨ２は、デクリメントの結果としてアクセスカウンター１３ａの値が"０"になったか否かを判断する。ここでは、アクセスカウンター１３ａの値は"０"なので、高優先度タスクＨ２は、イベントセマフォをフラッシュする（ステップＳ８．１）。
【００８０】
イベントセマフォがフラッシュされると、イベントセマフォ待ちであった全ての体優先度タスク（ここでは低優先度タスクＬ１）の処理が再開され、ファイル１７ａへのアクセスが行われる（ステップＳ９）。
【００８１】
以上、イベントセマフォを用いてアクセスカウンターの値を確認し、競合回避制御を行う処理について説明した。
【００８２】
上述したように、イベントセマフォを用いる場合、ポーリングを用いる場合と比較し、アクセスカウンター１３ａの値が"０"になった時点で、すぐにイベントセマフォのフラッシュが行われるので、イベントセマフォ待ちに入っていた低優先度タスクは、すぐにファイル１７ａへのアクセスを開始することが出来る。
【００８３】
［イベントセマフォを用いる場合の注意点について］
次に、イベントセマフォを用いて競合回避制御を行う場合の注意点について説明する。図４は、イベントセマフォを用いて競合回避制御を行う場合の注意点について説明するためのシーケンス図である。
【００８４】
まず、高優先度タスクＨ１が、記憶部１７内のファイル１７ａにアクセスするとする。その場合、高優先度タスクＨ１は、アクセスカウンター１３ａをインクリメントする（ステップＳ１１）。
【００８５】
次に、高優先度タスクＨ１が、記憶部１７内のファイル１７ａにアクセスする（ステップＳ１２）。
【００８６】
次に、低優先度タスクＬ１が、記憶部１７内のファイル１７ａにアクセスするとする。その場合、低優先度タスクＬ１は、アクセスカウンター１３ａの値を取得する（ステップＳ１３）。低優先度タスクＬ１がアクセスカウンター１３ａの値を取得した時点では、１つの高優先度タスクＨ１がファイル１７ａにアクセスしているので、アクセスカウンター１３ａの値として"１"が返される。
【００８７】
次に、高優先度タスクＨ１におけるファイル１７ａへのアクセス処理が完了したとする。その場合、高優先度タスクＨ１は、アクセスカウンター１３ａをデクリメントする（ステップＳ１４）。
【００８８】
デクリメント後、高優先度タスクＨ１は、デクリメントの結果としてアクセスカウンター１３ａの値が"０"になったか否かを判断する。ここでは、アクセスカウンター１３ａの値は"０"なので、高優先度タスクＨ１は、イベントセマフォをフラッシュする（ステップＳ１４．１）。
【００８９】
しかし、低優先度タスクＬ１はまだイベントセマフォ待ちに入っていないので、ステップＳ１４．１において行われたフラッシュは低優先度タスクＬ１に対して何の効果ももたらさず、低優先度タスクＬ１はイベントセマフォがフラッシュされた事を検知することが出来ない。
【００９０】
そして、低優先度タスクＬ１は、ステップＳ１３において取得した値が正数であった為、タイムアウト時間を指定してイベントセマフォ待ちの状態に入ってしまう（ステップＳ１５）。
【００９１】
タイムアウト時間経過後、低優先度タスクＬ１は、再度、アクセスカウンター１３ａの値を取得する（ステップＳ１６）。高優先度タスクＨ１のよるファイル１７ａへのアクセスは完了しているので、アクセスカウンター１３ａの値として"０"が返される。
【００９２】
アクセスカウンター１３ａの値が"０"なので、低優先度タスクＬ１は、ファイル１７ａへのアクセスを行う（ステップＳ１７）。
【００９３】
以上のように、低優先度タスクＬ１がアクセスカウンター１３ａの値を確認してからイベントセマフォ待ちに入るまでの間に、イベントセマフォのフラッシュが行われると、その後イベントセマフォ待ちに入った低優先度タスクＬ１の処理は、次にフラッシュが行われるまで再開されないことになる。
【００９４】
しかし、高優先度タスクによるアクセスカウンター１３ａのインクリメントとデクリメントが行われるまで、次のフラッシュは行われない。
【００９５】
そのため、低優先度タスクＬ１では、イベントセマフォ待ちに入る際に、イベントセマフォ待ちのタイムアウト時間を指定し、タイムアウト時間が到来する度にアクセスカウンター１３ａの値を確認しなければならない。
【００９６】
なお、低優先度タスクＬ１がタイムアウト時間が到来したことを検知する方法としては、ＯＳからタイムアウト時間が到来した旨の通知を受ける構成でもよい。
【００９７】
以上、イベントセマフォを用いて競合回避制御を行う場合の注意点について説明した。
【００９８】
［補足事項］
その他、本発明は、上述の実施形態にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。
【符号の説明】
【００９９】
１０  …  電子機器
１１  …  ＣＰＵ
１２  …  ＲＯＭ
１３  …  ＲＡＭ
１３ａ…  アクセスカウンター
１４  …  操作入力部
１５  …  ネットワークインターフェイス部
１６  …  表示部
１７  …  記憶部
１７ａ…  ファイル
１８  …  バス
Ｈ１、Ｈ２…  高優先度タスク
Ｌ１  …  低優先度タスク
【図１】
0006295990.tif 000002
【図２】
0006295990.tif 000003
【図３】
0006295990.tif 000004
【図４】
0006295990.tif 000005