JP2007249634A - ロック管理方法及びロック管理システム - Google Patents
ロック管理方法及びロック管理システム Download PDFInfo
- Publication number
- JP2007249634A JP2007249634A JP2006072520A JP2006072520A JP2007249634A JP 2007249634 A JP2007249634 A JP 2007249634A JP 2006072520 A JP2006072520 A JP 2006072520A JP 2006072520 A JP2006072520 A JP 2006072520A JP 2007249634 A JP2007249634 A JP 2007249634A
- Authority
- JP
- Japan
- Prior art keywords
- lock
- user program
- socket
- recorded
- monitoring socket
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Storage Device Security (AREA)
Abstract
【課題】ロックが開放されずに残ってしまうことを回避する。
【解決手段】ユーザプログラム1の起動時に監視ソケットを開設し、ユーザプログラム1がロックを取得した際、ユーザプログラム1のプロセス番号及びスレッド番号をロック管理構造体400に記録し、監視ソケットの切断によりユーザプログラム1の終了を検出した際、ユーザプログラム1がロックを取得中であるプロセス番号が記録された全てのロック管理構造体400を検索し、検索されたロック管理構造体400に記録されたプロセス番号についてのロックを開放する。
【選択図】図1
【解決手段】ユーザプログラム1の起動時に監視ソケットを開設し、ユーザプログラム1がロックを取得した際、ユーザプログラム1のプロセス番号及びスレッド番号をロック管理構造体400に記録し、監視ソケットの切断によりユーザプログラム1の終了を検出した際、ユーザプログラム1がロックを取得中であるプロセス番号が記録された全てのロック管理構造体400を検索し、検索されたロック管理構造体400に記録されたプロセス番号についてのロックを開放する。
【選択図】図1
Description
本発明は、複数のスレッドが同時に実行される際のロックを管理するロック管理方法及びロック管理システムに関する。
一般に、プログラムカウンタやスタックといった、実行状態に関連する情報を持つプログラムの実行制御単位をスレッドと呼ぶ。また、プログラムコードやグローバルデータといった、プログラム全体で使われるリソースを持った実行制御単位をプロセスと呼ぶ。1つのプロセスには、1つもしくは複数のスレッドが存在する。
ある1つのスレッドがプログラム実行中に、OS(オペレーティングシステム)が不正アドレス参照など該当スレッドの実行を中断せざる得ない状況を検出した場合、OSは該当スレッドの属するプロセス配下の全スレッドの実行を中断して、プロセスを終了させる。また、利用者からOSに対してプロセスの停止が要求された場合も同様である。
複数のスレッドが並行して動作することが可能な計算機システムにおいて、複数のスレッドが同一の共有資源をアクセスする場合、共有資源の一貫性を保証するために、一貫性が保証されない危険領域(クリティカルセクション)の区間を複数のスレッドが同時に実行しないように、共有資源に対応するロックを取得するロック機構が用いられている(例えば、特許文献1参照。)。OSが提供する代表的なロック機能としては、セマフォやMutex Lock (Mutual exclusion lock)などが挙げられる。
このようなロック機構においては、正常にスレッドが動作している間は、危険領域に直前でロックを取得し、危険領域を抜けた直後でロックを解放する。
特開2000−339181号公報
しかしながら、スレッドが危険領域の区間を実行中に、該当スレッド自身もしくは同一プロセスに属する他スレッドの実行を中断せざる得ない状況が検出された場合、該当スレッドの実行が中断され、ロックが解放されることなく残ってしまう。こうしたロックの残留が発生すると、以降、同一のロックを取得しようとする全てのプロセスやスレッドが停止してしまい、致命的なシステム障害に及ぶ可能性が生じてしまうという問題点がある。
本発明は、上述したような従来の技術が有する問題点に鑑みてなされたものであって、ロックが開放されずに残ってしまうことを回避することができるロック管理方法及びロック管理システムを提供することを目的とする。
上記目的を達成するために本発明は、
ユーザプログラムのロックを管理するロック管理方法であって、
ユーザプログラムの起動時に監視ソケットを開設する処理と、
前記ユーザプログラムがロックを取得した際、該ユーザプログラムのプロセス番号及びスレッド番号を第1の構造体に記録する処理と、
前記監視ソケットの切断により前記ユーザプログラムの終了を検出した際、該ユーザプログラムがロックを取得中であるプロセス番号が記録された全ての前記第1の構造体を検索する処理と、
検索された前記第1の構造体に記録されたプロセス番号についてのロックを開放する処理とを有する。
ユーザプログラムのロックを管理するロック管理方法であって、
ユーザプログラムの起動時に監視ソケットを開設する処理と、
前記ユーザプログラムがロックを取得した際、該ユーザプログラムのプロセス番号及びスレッド番号を第1の構造体に記録する処理と、
前記監視ソケットの切断により前記ユーザプログラムの終了を検出した際、該ユーザプログラムがロックを取得中であるプロセス番号が記録された全ての前記第1の構造体を検索する処理と、
検索された前記第1の構造体に記録されたプロセス番号についてのロックを開放する処理とを有する。
上記のように構成された本発明においては、ユーザプログラムの起動時に監視ソケットを開設し、ユーザプログラムがロックを取得した際、該ユーザプログラムのプロセス番号及びスレッド番号を第1の構造体に記録しておき、監視ソケットの切断によりユーザプログラムの終了を検出した際、該ユーザプログラムがロックを取得中であるプロセス番号が記録された全ての第1の構造体を検索し、検索された第1の構造体に記録されたプロセス番号についてのロックを開放する。
このように、ユーザプログラムとロック管理手段との間で監視ソケットを開設すると同時に、ロック取得成功時、第1の構造体中にユーザプログラムのプロセス番号及びスレッド番号を記録し、監視ソケット切断によりユーザプログラムの終了を検出した際、該ユーザプログラムがロックを取得中である全ての第1の構造体を検索し、ロックを解放することにより、自動的にアンロック漏れを解消することを特徴とする。
本発明は、以上説明したように構成されているので、自動的にアンロック漏れを解消することが可能となる。
以下に、本発明の実施の形態について図面を参照して説明する。
図1は、本発明のロック管理システムの実施の一形態を示す図である。
本形態は図1に示すように、ユーザプログラム1と、ロック管理処理2と、第2の構造体である複数の監視ソケット管理構造体300と、第1の構造体である複数のロック管理構造体400とを含んで構成されている。
ユーザプログラム1は、1つもしくは複数のスレッドが存在するプロセスとして起動される。
ロック管理処理2は、監視ソケット接続受付手段3と、ロック取得手段4と、ロック解放手段5と、監視ソケット切断検出手段6と、取得ロック全検索手段7とから構成されている。
監視ソケット管理構造体300は、ソケット識別情報格納領域301と、ソケット接続プロセス番号情報格納領域302とを有している。
ロック管理構造体400は、ロックカウンタ401と、ロックオーナープロセス番号格納領域402と、ロックオーナースレッド番号格納領域403とを有している。ここでロックカウンタ401の初期値は1である。
以下に、上記のように構成されたロック管理システムの動作について説明する。
まず、ユーザプログラム1の起動時の動作について説明する。
図2は、図1に示したロック管理システムにおいてユーザプログラム1の起動時の動作を説明するためのフローチャートである。
ユーザプログラム1を含むプロセスが起動され、最初のスレッド(メインスレッド)が起動されると、ユーザプログラム1は、ロック管理システムに対して監視ソケット接続要求を出す。監視ソケット接続要求を受け取ったロック管理システムは、監視ソケット接続受付手段3を呼び出す。
監視ソケット接続受付手段3は、まず、呼び出し元であるユーザプログラム1との間に監視ソケットを接続することにより、監視ソケットを開設する(ステップS1)。
次に、空きの監視ソケット管理構造体300を確保する。もし、空きの監視ソケット管理構造体300の確保に失敗した場合は、接続した監視ソケットを切断し、処理を終了する。
また、監視ソケット管理構造体300の確保に成功した場合は、確保した監視ソケット管理構造体300に対して、接続された監視ソケットを識別可能なソケット識別番号をソケット識別情報格納領域301に格納するとともに(ステップS2)、呼び出し元のユーザプログラム1のプロセス番号をソケット接続プロセス番号格納領域302に格納し(ステップS3)、処理を終了する。これにより、接続された監視ソケットのソケット識別番号と、呼び出し元のユーザプログラム1のプロセス番号とが1つの監視ソケット管理構造体300にて対応づけられていることになる。
次に、ユーザプログラム1がロックを取得する際の処理について説明する。
図3は、図1に示したロック管理システムにおいてユーザプログラム1がロックを取得する際の処理を説明するためのフローチャートである。
ユーザプログラム1は、特定のロック管理構造体400のロックを取得する場合、ロック取得手段4を呼び出す。
ロック取得手段4は、まず、指定されたロック管理構造体400のロックカウンタ401を調べる(ステップS11)。
そして、ロックカウンタ401の値が1の場合は(ステップS12)、ロックカウンタ401の値を1減算すると同時に(ステップS13)、呼び出し元のユーザプログラム1のプロセス番号をロックオーナープロセス番号格納領域402に格納し(ステップS14)、また、呼び出し元のユーザプログラム1のスレッド番号をロックオーナースレッド番号格納領域403に格納し(ステップS15)、処理を終了する。
一方、ロックカウンタ401の値が0以下の場合は、ロックカウンタ401を1減算し(ステップS16)、ロック解放手段5からのロック解放通知を待ち合わせる。
そして、ロック解放手段5からロック解放通知が通知されたら(ステップS17)、呼び出し元のユーザプログラム1のプロセス番号をロックオーナープロセス番号格納領域402に格納し、また、呼び出し元のユーザプログラム1のスレッド番号をロックオーナースレッド番号格納領域403に格納し、処理を終了する。
次に、ユーザプログラム1がロックを解放する際の処理について説明する。
図4は、図1に示したロック管理システムにおいてユーザプログラム1がロックを解放する際の処理を説明するためのフローチャートである。
ユーザプログラム1は、特定のロック管理構造体400のロックを解放する場合、ロック解放手段5を呼び出す。
ロック解放手段5は、まず、指定されたロック管理構造体400のロックカウンタ401を調べる(ステップS21)。
そして、ロックカウンタ401の値が0以下の場合は(ステップS22)、指定されたロック管理構造体400のロックカウンタ401を1加算する(ステップS23)。
次に、指定されたロック管理構造体400のロックカウンタ401を再度調べ(ステップS24)、ロックカウンタ401の値が0以下の場合は(ステップS25)、ロック取得手段4にロック解放通知を通知し(ステップS26)、処理を終了する。
また、ステップS22,S25において、ロックカウンタ 401の値が1の場合は、そのまま処理を終了する。
次に、ユーザプログラム1が動作するプロセスが終了した際の処理について説明する。
図5は、図1に示したロック管理システムにおいてユーザプログラム1が動作するプロセスが終了した際の処理を説明するためのフローチャートである。
ユーザプログラム1が動作するプロセスが終了すると、該当プロセスとの間で接続された監視ソケットの切断が監視ソケット切断検出手段6に通知される。
監視ソケット切断検出手段6は、まず、切断された監視ソケットのソケット識別番号と同一の値をソケット識別情報格納領域301に格納している監視ソケット管理構造体300を検索する(ステップS31)。もし、ソケット管理構造体300の検索に失敗した場合は、処理を終了する。
また、ソケット管理構造体300の検索に成功した場合は、ソケット管理構造体300のソケット接続プロセス番号格納領域302からプロセス番号を取り出し(ステップS32)、該当ソケット管理構造体300を空き状態とした後、取得ロック全検索手段7に制御を渡す。
取得ロック全検索手段7は、ロックカウンタ401の値が0以下の場合(ステップS33)、監視ソケット切断検出手段6から渡されたプロセス番号と同じ値をロックオーナープロセス番号格納領域402に格納している全てのロック管理構造体400を検索し(ステップS34)、それぞれのロック管理構造体400を指定してロック解放手段5を呼び出す(ステップS35)。
1 ユーザプログラム
2 ロック管理処理
3 監視ソケット接続受付手段
4 ロック取得手段
5 ロック解放手段
6 監視ソケット切断検出手段
7 取得ロック全検索手段
200 監視ソケット管理構造体
201 ソケット識別情報格納領域
202 ソケット接続プロセス番号格納領域
400 ロック管理構造体
401 ロックカウンタ
402 ロックオーナープロセス番号格納領域
403 ロックオーナースレッド番号格納領域
2 ロック管理処理
3 監視ソケット接続受付手段
4 ロック取得手段
5 ロック解放手段
6 監視ソケット切断検出手段
7 取得ロック全検索手段
200 監視ソケット管理構造体
201 ソケット識別情報格納領域
202 ソケット接続プロセス番号格納領域
400 ロック管理構造体
401 ロックカウンタ
402 ロックオーナープロセス番号格納領域
403 ロックオーナースレッド番号格納領域
Claims (4)
- ユーザプログラムのロックを管理するロック管理方法であって、
ユーザプログラムの起動時に監視ソケットを開設する処理と、
前記ユーザプログラムがロックを取得した際、該ユーザプログラムのプロセス番号及びスレッド番号を第1の構造体に記録する処理と、
前記監視ソケットの切断により前記ユーザプログラムの終了を検出した際、該ユーザプログラムがロックを取得中であるプロセス番号が記録された全ての前記第1の構造体を検索する処理と、
検索された前記第1の構造体に記録されたプロセス番号についてのロックを開放する処理とを有するロック管理方法。 - 請求項1に記載のロック管理方法において、
前記監視ソケットを開設した際、該監視ソケットを識別可能なソケット識別番号と、該監視ソケットを開設したユーザプログラムのプロセス番号とを対応づけて第2の構造体に記録する処理と、
前記監視ソケットの切断により前記ユーザプログラムの終了を検出した際、該監視ソケットの識別番号が記録された前記第2の構造体を検索する処理と、
前記第2の構造体に記録されたプロセス番号を取り出す処理とを有し、
前記第2の構造体から取り出されたプロセス番号が記録された前記第1の構造体を検索することを特徴とするロック管理方法。 - ユーザプログラムのロックを管理するロック管理システムであって、
ロックを取得したユーザプログラムのプロセス番号及びスレッド番号が記録される複数の第1の構造体と、
ユーザプログラムの起動時に監視ソケットを開設し、前記ユーザプログラムがロックを取得した際、該ユーザプログラムのプロセス番号及びスレッド番号を前記第1の構造体に記録し、前記監視ソケットの切断により前記ユーザプログラムの終了を検出した際、該ユーザプログラムがロックを取得中であるプロセス番号が記録された全ての前記第1の構造体を検索し、検索された前記第1の構造体に記録されたプロセス番号についてのロックを開放するロック管理手段とを有するロック管理システム。 - 請求項3に記載のロック管理システムにおいて、
前記監視ソケットを識別可能なソケット識別番号と、該監視ソケットを開設したユーザプログラムのプロセス番号とが対応づけて記録される第2の構造体を有し、
前記ロック管理手段は、前記監視ソケットを開設した際、該監視ソケットを識別可能なソケット識別番号と、該監視ソケットを開設したユーザプログラムのプロセス番号とを対応づけて第2の構造体に記録し、前記監視ソケットの切断により前記ユーザプログラムの終了を検出した際、該監視ソケットの識別番号が記録された前記第2の構造体を検索し、前記第2の構造体に記録されたプロセス番号を取り出し、前記第2の構造体から取り出されたプロセス番号が記録された前記第1の構造体を検索することを特徴とするロック管理システム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006072520A JP2007249634A (ja) | 2006-03-16 | 2006-03-16 | ロック管理方法及びロック管理システム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006072520A JP2007249634A (ja) | 2006-03-16 | 2006-03-16 | ロック管理方法及びロック管理システム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007249634A true JP2007249634A (ja) | 2007-09-27 |
Family
ID=38593855
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006072520A Pending JP2007249634A (ja) | 2006-03-16 | 2006-03-16 | ロック管理方法及びロック管理システム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2007249634A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009199166A (ja) * | 2008-02-19 | 2009-09-03 | Nec Corp | 情報処理装置、その制御方法及びプログラム |
US9250980B2 (en) | 2009-12-18 | 2016-02-02 | International Business Machines Corporation | System, method, program, and code generation unit |
-
2006
- 2006-03-16 JP JP2006072520A patent/JP2007249634A/ja active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009199166A (ja) * | 2008-02-19 | 2009-09-03 | Nec Corp | 情報処理装置、その制御方法及びプログラム |
US9250980B2 (en) | 2009-12-18 | 2016-02-02 | International Business Machines Corporation | System, method, program, and code generation unit |
US9904581B2 (en) | 2009-12-18 | 2018-02-27 | International Business Machines Corporation | System, method, program, and code generation unit |
US10169092B2 (en) | 2009-12-18 | 2019-01-01 | International Business Machines Corporation | System, method, program, and code generation unit |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2431876B1 (en) | Method and device for exception handling in embedded system | |
US9798595B2 (en) | Transparent user mode scheduling on traditional threading systems | |
US8589733B2 (en) | Saving operational state of open applications when unexpected shutdown events occur | |
WO2011111172A1 (ja) | 情報処理装置、情報処理方法、およびプログラム | |
US20080209422A1 (en) | Deadlock avoidance mechanism in multi-threaded applications | |
US8495638B2 (en) | Component-specific disclaimable locks | |
US8060788B2 (en) | Real-time signal handling in guest and host operating systems | |
US8132174B2 (en) | Concurrency management in cluster computing of business applications | |
US20100174711A1 (en) | Concurrency object classification | |
JP2007249634A (ja) | ロック管理方法及びロック管理システム | |
CN107766131B (zh) | 任务调度方法和装置 | |
US8682914B2 (en) | Method and system for robust futexes | |
JP4275451B2 (ja) | 不正メモリアクセス検知方法及びそのプログラム | |
US9418175B2 (en) | Enumeration of a concurrent data structure | |
CN114461409A (zh) | 一种互斥信号量异常阻塞辅助分析方法、系统及存储介质 | |
CN111767155A (zh) | 死锁检测方法、装置、设备及计算机可读存储介质 | |
JP3603671B2 (ja) | データ共有管理装置およびデータ共有管理方法 | |
JP4611659B2 (ja) | 不正アクセス検出装置、不正アクセス検出方法、プログラム | |
JP2005078123A (ja) | 故障検出装置および故障検出方法ならびにそのプログラム | |
CN117762595A (zh) | Python进程池优化方法、装置、设备及存储介质 | |
CN118467188A (zh) | 进程死锁检测方法和系统 | |
CN116128493A (zh) | 基于分布式锁的业务处理方法、系统、装置及介质 | |
CN113742091A (zh) | 一种线程运行方法、装置、计算机设备和存储介质 | |
JP2001256065A (ja) | 排他制御方法及び計算機システム | |
JP2009199166A (ja) | 情報処理装置、その制御方法及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Effective date: 20081212 Free format text: JAPANESE INTERMEDIATE CODE: A971007 |
|
A131 | Notification of reasons for refusal |
Effective date: 20081217 Free format text: JAPANESE INTERMEDIATE CODE: A131 |
|
A02 | Decision of refusal |
Effective date: 20090729 Free format text: JAPANESE INTERMEDIATE CODE: A02 |