(57)【要約】  マルチスレッドコンピュータアプリケーションは、デッドロック状態が防止されるように、単一のプログラムのインスタンシエーション（スレッド）としてよりロバストな相互排他的アクセスを提供する。このアプリケーション方法は、排他的アクセスが許可されるべき機能的コードに対して'ゲート'機能Ｓ１、Ｓ４、Ｓ６、Ｓ２１、Ｓ２４、Ｓ３０を提供するシステムサービスを実施するのにシステムプリミティブを使用する。クリティカルセクションは依然として存在するが、状態変数の管理及びこの'ゲート'機構の決定分岐に対してのみ使用される。また、タイムリミット規定Ｓ１５は、非許可スレッドの遮断を防止するように実施される。前記方法は、前記クリティカルセクションの外側で'排他的機能的コードセクション'を実行するステップを含み、これは従来技術の設計モデルのように決して終了しない又は無限クリティカルセクションによる遮断効果のカスケードを防止する。【特許請求の範囲】
【請求項１】
同期Ｉ／Ｏ障害の影響を最小化する方法において、前記方法が、
少なくとも１つのクリティカルセクションの範囲を定めるクリティカルセクションプリミティブを初期化するステップと、
排他的機能コードセクションに対するスレッドアクセスを制御及び許可する決定変数を初期化するステップと、
前記スレッドによる前記排他的機能コードセクションに対するアクセスに対する要求に応答して前記排他的機能コードセクションのステータスを決定するステップと、
前記ステータスが許可済みである場合に前記排他的機能コードセクションを実行し、前記実行の完了によって、前記排他的機能コードセクションを解放し、解放信号を送信するステップと、
前記ステータスが許可済みでない場合に前記スレッドをサスペンドし、前記解放信号の受信によって、前記排他的機能コードセクションを実行し、前記実行の完了によって前記排他的機能コードセクションを解放するステップと、
を有し、
前記少なくとも１つのクリティカルセクションが、外部依存性条件を含まない、方法。
【請求項２】
前記クリティカルセクションプリミティブが、'クリティカルセクションに入る'、'クリティカルセクションを出る'、同期｛｝からなる、請求項１に記載の方法。
【請求項３】
前記決定変数が、'所有済み'、'所有者ＩＤ'、'要求カウント'からなる、請求項１に記載の方法。
【請求項４】
前記ステータスが許可済みである場合に前記排他的機能コードセクションを実行するステップが、前記スレッドに対して１より多い決定変数を設定するステップを更に有する、請求項１に記載の方法。
【請求項５】
前記ステータスが許可済みでない場合に前記スレッドをサスペンドするステップが、要求カウントを増加するステップを更に有する、請求項１に記載の方法。
【請求項６】
同期Ｉ／Ｏ障害の影響を最小化する方法において、前記方法が、
少なくとも１つのクリティカルセクションの範囲を定めるクリティカルセクションプリミティブを初期化するステップと、
排他的機能コードセクションに対するスレッドアクセスを制御及び許可する決定変数を初期化するステップと、
前記スレッドによる前記排他的機能コードセクションに対するアクセスに対する要求に応答して前記排他的機能コードセクションのステータスを決定するステップと、
前記ステータスが許可済みである場合に前記排他的機能コードセクションを実行し、前記実行の完了によって、前記排他的機能コードセクションを解放し、解放信号を送信するステップと、
前記ステータスが許可済みでない場合に前記スレッドをサスペンドし、システムタイムアウト信号の受信によって、前記排他的機能コードセクションを実行し、前記実行の完了によって前記排他的機能コードセクションを解放するステップと、
を有し、
前記少なくとも１つのクリティカルセクションが、外部依存性条件を含まない、方法。
【請求項７】
クリティカルセクションが、タイムアウト要求をフラッシュするために入られる、請求項６に記載の方法。
【請求項８】
回復動作状態が、前記システムタイムアウト信号に応答して実行される、請求項６に記載の方法。
【請求項９】
信号が、前記システムタイムアウト信号に応答して専用モニタリングタスクに対して送信される、請求項６に記載の方法。
【請求項１０】
前記信号が、前記スレッドを示し、前記専用モニタリングタスクが、診断プロセスを開始し、疑わしい回路を分離する、請求項９に記載の方法。
【請求項１１】
前記クリティカルセクションプリミティブが、'クリティカルセクションに入る'、'クリティカルセクションを出る'、同期｛｝からなる、請求項６に記載の方法。
【請求項１２】
前記決定変数が、'所有済み'、'所有者ＩＤ'、'要求カウント'からなる、請求項６に記載の方法。
【請求項１３】
前記ステータスが許可済みである場合に前記排他的機能コードセクションを実行するステップが、前記スレッドに対して１より多い決定変数を設定するステップを更に有する、請求項６に記載の方法。
【請求項１４】
前記ステータスが許可済みでない場合に前記スレッドをサスペンドするステップが、要求カウントを増加するステップを更に有する、請求項６に記載の方法。
【請求項１５】
同期Ｉ／Ｏ障害の影響を最小化する方法ステップを実行するように機械により読み取り可能かつ実行可能な命令のセットを具体化するコンピュータ読み取り可能媒体において、前記方法ステップが、
少なくとも１つのクリティカルセクションの範囲を定めるクリティカルセクションプリミティブを初期化するステップと、
排他的機能コードセクションに対するスレッドアクセスを制御及び許可する決定変数を初期化するステップと、
前記スレッドによる前記排他的機能コードセクションに対するアクセスに対する要求に応答して前記排他的機能コードセクションのステータスを決定するステップと、
前記ステータスが許可済みである場合に前記排他的機能コードセクションを実行し、前記実行の完了によって、前記排他的機能コードセクションを解放し、解放信号を送信するステップと、
前記ステータスが許可済みでない場合に前記スレッドをサスペンドし、システムタイムアウト信号の受信によって、前記排他的機能コードセクションを実行し、前記実行の完了によって前記排他的機能コードセクションを解放するステップと、
を有し、
前記少なくとも１つのクリティカルセクションが、外部依存性条件を含まない、コンピュータ読み取り可能媒体。
【請求項１６】
前記クリティカルセクションプリミティブが、'クリティカルセクションに入る'、'クリティカルセクションを出る'、同期｛｝からなる、請求項１５に記載のコンピュータ読み取り可能媒体。
【請求項１７】
前記決定変数が、'所有済み'、'所有者ＩＤ'、'要求カウント'からなる、請求項１５に記載のコンピュータ読み取り可能媒体。
【請求項１８】
前記ステータスが許可済みである場合に前記排他的機能コードセクションを実行する方法ステップが、前記スレッドに対して１より多い決定変数を設定するステップを更に有する、請求項１５に記載のコンピュータ読み取り可能媒体。
【請求項１９】
前記ステータスが許可済みでない場合に前記スレッドをサスペンドする方法ステップが、要求カウントを増加するステップを更に有する、請求項１５に記載のコンピュータ読み取り可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、広くは、複数のクライアントからの１より多いリソースに対する相互排他的アクセスを持つ自律マルチスレッドコンピュータシステムに関し、特には、デッドロック状態が防止されるように、単一のプログラムのインスタンシエーション（スレッド）としてよりロバストな相互排他的アクセスを必要とするマルチスレッドコンピュータアプリケーションに関する。
【背景技術】
【０００２】
電子及びコンピュータ装置における"クライアント"からの複数の機能的要求の非同期並列サービスは、高い頻度で、マルチスレッドプログラミングモデルを、このモデルをサポートするシステムプラットフォーム上で使用して実施されるソフトウェアである。典型的な例は、有限状態機械（ＦＳＭ）が、全ての可能な入力信号を処理するのに必要とされる全ての状態及び遷移を実施するマルチポート通信システムのシグナルハンドラである。同じＦＳＭの多くの仮想的なインスタンシエーションは、独立に非同期通信ポートを果たすように並列に実行される。このアプローチは、前記システムが、周期的システムプリエンプション又はアプリケーション決定に基づいてコンテキストを適時に切り替えることができることを要する。この環境において、少数のスレッド関連変数のみが、果たされるべき各チャネルに対する状態を具体化するのに使用される。
【０００３】
アクティブスレッドは、同じプロセス空間及びローカルリソースを共有するので、マルチプロセス構成と比較して、マルチスレッドアプリケーションは、コンテキスト切り替え性能及びシステムリソース割り当てに関してはるかに効率的である。良い例は、通信機器に対する高速マトリクス構造スイッチ領域を管理することである。各スイッチは、ホストシステム上で実行され、関連したスイッチを制御するのに使用される共通のインタフェースを通して通信するソフトウェア有限状態機械から操作される。例えば、マルチスレッドＯＳ環境において実行されるマイクロコントローラは、Ｉ／Ｏ操作により前記スイッチを制御するのに適している。
【０００４】
このシステムの古典的実施は、ソフトウェアコードのクリティカルセクション、すなわち共有されるアクセスが実行されるコードの範囲を定める単純な"同期"プリミティブの使用により行われる。このようなプリミティブは、マルチスレッドＯＳ又はＪＡＶＡ言語をサポートするのに使用される仮想機械において様々な形で存在する。この単純な設計方法は、開発者が、外的理由でハングアップすることにはなっていないクリティカルセクションにおける共有リソース管理に対する通常規則に従う場合に、良好に動作する。不幸なことに、同期Ｉ／Ｏは、しばしば、共有される機器の制御に専用化されたクリティカルセクションにおいて実行される。このＩ／Ｏがいかなる理由でも終了しない場合、全てのスレッドが前記スレッドの番に前記クリティカルセクションに入ろうと試み、各々が無限サスペンド状態になるので、システム全体が、完全なデッドロック状態に達する可能性がある。
【０００５】
マルチスレッディングの問題は、共有アドレス空間から生じるデータ破壊及び頻繁なデッドロックに対するより高い脆弱性である。このような障害は、発生の状況及び時間がほとんどの場合予測不可能であるので、検出及び修理するのが難しい。
【０００６】
プリエンプションシステム上で実行されるマルチスレッドアプリケーションは、共有リソースに対する排他的アクセスを許可する追加の手段を必要とする。上述のように、これは、通常は、このような操作を目的としたソフトウェアコードの'クリティカルセクション'の範囲を定めるシステムプリミティブに対する呼び出しにより達成され、前記ソフトウェアコードの'クリティカルセクション'は、１より多い共有リソースにアクセスする'保護コード'又は命令を含む。前記システムは、１つのスレッドアクセスのみが一度に前記クリティカルセクションコードに入り、実行することを許可し、このクリティカルセクションに入ろうと試みるいかなる同時のスレッドも、許可されたスレッドが前記クリティカルセクションを出るまで、サスペンドされ、すなわち、サスペンド状態に置かれる。
【０００７】
共有リソースに対する保護された又は排他的なアクセスは、ソフトウェアコードのクリティカルセクションの使用を含む、複数の方法により保証されることができる。米国特許５９４１９７５は、例えば、マルチユーザ環境をサポートするシステムにおいてクリティカルセクションに対するユーザの同時アクセスを効果的に制御するラッチデータ構造を開示している。前記ラッチデータ構造は、ユーザ要求に対してスケジュールを提供するのに使用される。共有リソースに対する保護されたアクセスを保証する他の方法は、スレッドにロックを割り当てることにより実施されるロックを開示する米国特許６７２２１５３において見つけられることができる。前記ロックの状態は、非共有からオブジェクト共有をサポートするアトミック操作に変更されることができる。
【０００８】
クリティカルセクションソフトウェアコードに関する主な問題は、使用及び実施の単純性から生じる。例えば、一部のシステムにおいて、同時スレッドのサスペンド状態は、時間制限されない。更に、正しいソフトウェア実装を仮定すると、クリティカルセクションコード実行が全ての場合に有限の持続時間を持つことを合理的に期待することができる。不幸なことに、クリティカルセクションコードは、依然として、決して戻らないメモリマップＩ／Ｏ操作のような遮断する外的条件のため、ハングアップする、又は終了するのを失敗する可能性がある。この無限条件は、許可されたスレッドを無限に前記クリティカルセクション内でサスペンドさせ、更に、全ての同時スレッドを、同じクリティカルセクションに入ろうと試みる場合にサスペンド状態にトラップされるようにする。従来技術は、無限クリティカルセクション、すなわち、Ｉ／Ｏ障害のためにデッドロックする又は終了するのに失敗するクリティカルセクションにアドレスしない。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明の目的は、デッドロック状態が防止されるマルチスレッドコンピュータシステム及び方法を提供することである。
【００１０】
本発明の他の目的は、自律マルチスレッドシステムにおいて同期Ｉ／Ｏ障害の影響を最小化する方法を提供することである。
【課題を解決するための手段】
【００１１】
これらの目的に加えて、ソフトウェアコードのクリティカルセクションが、少数のシステムプリミティブを通して保護されたコードに対するアクセス条件を支配する状態変数にアクセスすることにのみ使用されるような解決法が提供される。これらの新しいプリミティブの適切な設計により、前記保護されたコードは、クリティカルセクションコード境界の外側に配置され、したがってカスケードデッドロック効果を防止する。
【００１２】
例えば、Ｉ／Ｏ装置のような共有装置にアクセスするコード又は命令のような機能的コードをカプセル化又は描写するのに、クリティカルセクションプリミティブ、例えばENTER、EXITを使用することは、当技術分野において既知である。本発明の方法は、しかしながら、排他的アクセスが許可されるべきである機能的コードに対して'ゲート'機能を提供するシステムサービスを実施するのに前記プリミティブを使用する。クリティカルセクションは依然として存在するが、状態変数の管理及びこの'ゲート'機構の決定分岐に対してのみ使用される。また、時間制限規定は、非許可スレッドの遮断を防止するために実施される。新しいサービスの適切な設計により、'排他的機能的コードセクション'は、前記クリティカルセクションの外側で実行され、これは、従来技術の設計モデルのように決して終了しない又は無限クリティカルセクションによる遮断効果のカスケードを防止する。
【００１３】
本発明の目的、フィーチャ及び利点は、以下に記載されるように、好適実施例の説明の文脈内で理解される。前記好適実施例の説明は、本開示の重要な部分を形成する添付図面との関連で理解される。
【図面の簡単な説明】
【００１４】
【図１】本発明の概略図を示す。
【図２】本発明の一実施例のフローチャートを描く。
【発明を実施するための形態】
【００１５】
'クリティカルセクション'は、前記セクションに入る許可スレッドを同じセクションに対する同時スレッドアクセスから自動的に保護する、２つのシステムプリミティブ、例えばENTER、EXITにより区切られたコードのセクションである。
【００１６】
'排他的機能的コードセクション'は、一度に１つの単一スレッドによりアクセスされるべきである機能的コードである。
【００１７】
本発明は、埋め込みシステムにおいて見つけられる単純なマルチスレッディング環境において利用可能な既存のＯＳサービスのみを使用する純粋なソフトウェア実装を可能にする。標準的なシステムプリミティブ、例えば'クリティカルセクションに入る（Enter Critical Section）'、'クリティカルセクションを出る（Leave Critical Section）'、同期｛｝は、前記排他的機能的コードセクションに対するスレッドアクセスを制御及び許可するのに必要とされる決定変数、例えば'所有済み（owned）'、'所有者ＩＤ（owner ID）'、'要求カウント（Request Count）'を試験及び操作するのに使用されることができる。したがって、これらの試験及び操作動作は、全て相互排他モードで実行される。相互アクセス条件で実施される全てのシーケンスは、Ｉ／Ｏ又は他の外部依存性条件を含まないので、有限時間内に完了する。したがって、'同期'スレッドは、決して遮断されない。加えて、動作状態を診断又は回復するストラテジは、リソースを要求するサービスがタイムアウトするときに開始されることができる。
【００１８】
図１は、本発明の一実施例の概略図であり、図２は、この実施例のフローチャートであり、両方とも以下に詳細に記載される。
【００１９】
このシステムは、ステップＳ１において開始され、ここで前記クリティカルセクションは入られる。ステップＳ２は、前記要求カウント変数をゼロに初期化し（要求カウント＝０）、ステップＳ３は、前記所有済み変数をFALSEに初期化する。ステップＳ４において、前記クリティカルセクションは出られる。
【００２０】
前記排他的機能的コードセクションに対するアクセスが、例えばスレッド１により必要とされる場合、手順は以下のとおりである。ステップＳ５において、スレッド１は、初めに、'要求'プリミティブに対する呼び出しにより前記排他的機能的コードセクションに対する排他的アクセスを要求する。この要求サービスは、ステップＳ６においてクリティカルセクションに入り、ステップＳ７において前記要求された排他的機能的コードセクションのステータスを確認する。前記ステータスが値'許可済みでない（not granted）'を持つ場合、以下のアクションが生じる。アクセスがスレッド１に対して可能にされ、前記ステータスは、ステップＳ８において'スレッド１に対して許可済み（granted to Thread 1）'（例えば、所有済み＝TRUE）に変更され、前記所有者ＩＤ変数は、ステップＳ９において呼び出し者（caller）ＩＤ（スレッド１）に設定される。次いで、前記要求サービスは、ステップＳ１０において前記クリティカルセクションを出て、ステップＳ１１において結果として'許可済み'とともにスレッド１に戻る。スレッド１は、この場合、前記排他的機能的コードセクションを実行する。
【００２１】
アクセスがスレッド１に対して既に許可済みである間に、スレッド２は、ステップＳ５において前記排他的機能的コードセクションに対する排他的アクセスを要求する。このシステムサービスは、ステップＳ６において前記クリティカルセクションに入り、ステップＳ７において前記排他的機能的コードセクションのステータスを確認する。前記ステータスが値'許可済み'を持ち、スレッド所有者識別（所有者ＩＤ）がスレッド２ではない場合、アクセスは、スレッド２に対して直ちに許可されない。代わりに、前記要求カウントが、ステップＳ１２において増加され、前記システムサービスは、ステップＳ１３において前記クリティカルセクションを出て、ステップＳ１４においてスレッド２（呼び出しスレッド）をサスペンド状態にする。スレッド２は、この場合、前記排他的機能的コードセクションの完了時における前記サービスにより、又はタイムアウト条件における前記システムにより送信される'解放'信号を待機する。
【００２２】
前記排他的機能的コードセクションが完了すると、スレッド１は、ステップＳ２３において'解放'プリミティブを明確に呼び出す。この解放サービスは、ステップＳ２４においてクリティカルセクションに入り、ステップＳ２５において、前記要求された機能的コードのステータスを示す変数を確認し、ステップＳ２６において前記所有者識別を示す変数を確認する。前記ステータスが'スレッド１に対して許可済み'である場合、前記サービスは、前記許可されたアクセスを解放する資格を与えられており、以下のステップを実行する。ステップＳ２７において、前記ステータスは、'許可済みでない'に変更され、例えば変数所有済みがFALSEに設定され、ステップＳ２８において、前記要求カウントは、可能なサスペンド中のスレッドについて確認される。サスペンド中のスレッドが示される、例えばステップＳ２９において要求カウントがゼロではない場合、信号が、前記サスペンド中のスレッドを起こすために送信される。次いで、前記サービスは、ステップＳ３０において前記クリティカルセクションを出て、ステップＳ３１において結果として'解放済み（released）'とともにスレッド１に戻る。
【００２３】
サスペンド中のスレッド（スレッド２）が、ステップＳ１５において、タイムアウト条件（例えば、ｔ＝＝ｔｍａｘ）において解放信号を受信する場合、クリティカルセクションは、タイムアウトになった要求をフラッシュするために、ステップＳ１９において入られ、以下のステップが実行される。前記要求カウントは、ステップＳ２０において減少され、前記クリティカルセクションは、ステップＳ２１において出られ、前記サスペンド中のスレッドは、ステップＳ２２において再開する。
【００２４】
サスペンド中のスレッド（スレッド２）が、解放信号を受信し、ステップ１５において、タイムアウトが生じていない（例えば、ｔがｔｍａｘに等しくない）と決定される場合、クリティカルセクションは、ステップＳ１６において入られる。前記排他的機能的コードが許可されない（例えばステップ１７において所有済みがTRUEではない）場合、前記要求カウントは、ステップＳ１８において減少され、前記ステータスは、ステップＳ８において'スレッド２に対して許可済み'（例えば、所有済み＝TRUE）に変更され、前記所有者ＩＤ変数は、ステップＳ９において呼び出し者ＩＤ（スレッド２）に設定される。次いで、前記要求サービスが、ステップＳ１０において前記クリティカルセクションを出て、ステップＳ１１において結果として'許可済み'とともにスレッド２に戻る。スレッド２は、この場合、前記排他的機能的コードセクションを実行する。しかしながら、前記排他的機能的コードが許可済みである（例えばステップ１７において所有済みがTRUEである）場合、前記クリティカルセクションは、ステップＳ１３において出られ、スレッド２はサスペンドのままである。
【００２５】
更に、タイムアウト試行は、例えば、専用モニタリングタスクに対する信号の送信を始めることができる。ステップＳ２２に示されるように、前記信号は、モニタが診断プロセスを開始し、疑わしい回路を分離することができるようにリソースを異常に所有するスレッドＩＤを示すことができる。
【００２６】
前記ステータス変数（許可、カウンタ等）は、前記排他的機能的コードセクションに対して局所的であり、すなわち、保護されるべき排他的機能的コードと一対一関係を持つユニークなオブジェクトを一緒に形成する。前記排他的機能的コードセクションが、前記システムにとって普通ではない場合、前記オブジェクトは、要求／解放プリミティブの特性（パラメータ）として参照されなければならない。このような場合、前記ステータスオブジェクトを割り当てる／初期化する追加のプリミティブが、実装される必要がある。
【００２７】
ここに開示された本発明が、上に記載された目的を満たすように良好に計算されていることは明らかであるが、多くの修正及び実施例が当業者により考案されてもよいと理解され、添付の請求項が、本発明の真の精神及び範囲に入る全てのこのような修正及び実施例をカバーすると意図される。
【図１】
2010504581.tif 000002
【図２】
2010504581.tif 000003
【国際調査報告】
2010504581.tif 000004