JP5621904B2 - ロック制御装置、ロック制御プログラムおよびロック制御方法 - Google Patents

ロック制御装置、ロック制御プログラムおよびロック制御方法 Download PDF

Info

Publication number
JP5621904B2
JP5621904B2 JP2013500805A JP2013500805A JP5621904B2 JP 5621904 B2 JP5621904 B2 JP 5621904B2 JP 2013500805 A JP2013500805 A JP 2013500805A JP 2013500805 A JP2013500805 A JP 2013500805A JP 5621904 B2 JP5621904 B2 JP 5621904B2
Authority
JP
Japan
Prior art keywords
lock
task
acquisition
acquired
mode
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.)
Active
Application number
JP2013500805A
Other languages
English (en)
Other versions
JPWO2012114516A1 (ja
Inventor
直人 青島
直人 青島
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JPWO2012114516A1 publication Critical patent/JPWO2012114516A1/ja
Application granted granted Critical
Publication of JP5621904B2 publication Critical patent/JP5621904B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2308Concurrency control
    • G06F16/2336Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
    • G06F16/2343Locking methods, e.g. distributed locking or locking implementation details
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/524Deadlock detection or avoidance

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、ロック制御装置、ロック制御プログラムおよびロック制御方法に関する。
従来、タスクがメモリやCPU(Central Processing Unit)等の共用資源を利用するためのロック機構が知られている。このようなロック機構の一例として、ロックを取得したタスクのみが共用資源を利用する「排他モード」、または、他のタスクにも共用資源の参照を認める「共用モード」でタスクがロックを取得する技術が知られている。
このようなタスクは、新たにロックを取得する場合には、共用資源を利用中の他のタスクが取得したロックのモードと、自身が新たに取得しようとするロックのモードとの組み合わせに応じて、共用資源のロックを取得する。具体的には、タスクは、現在のロックのモードと新たなモードとの組み合わせにロック取得の可否を対応付けたマトリックスに従って、共用資源のロックを取得する。その後、タスクは、共用資源の利用を終えた場合には、ロックを解放する。
図16は、共用資源のロック取得の可否を示すマトリックスを説明するための図である。ここで、図16中の「Y」とは、ロックを取得できる旨を示し、「N」とは、ロックを取得できない旨を示す。例えば、タスクは、自身が新たに取得しようとするロックのモードと、他のタスクが取得した現在のロックのモードとの組み合わせが、図16に示すマトリックスの「N」となる組み合わせである場合には、ロックを取得している他のタスクによるロックの解放まで待機する。そして、タスクは、ロックが解放され、モードの組み合わせがマトリックスの「Y」となる組み合わせとなった場合には、新たなモードでロックを取得する。
ここで、図16に示すようなマトリックスを用いて共用資源を利用する場合には、新たに「排他モード」でロックを取得しようとしたタスクが有限な時間内でロックを取得できない場合がある。例えば、あるタスクAは、自身がロックを「排他モード」で取得しようとした際に、タスクBが「共用モード」でロックを取得していた場合には、モードの組み合わせが図16に示すマトリックス上「N」となるので、タスクBがロックを解放するまで待機する。
ここで、タスクBがロックを解放する前に、別のタスクB2がロックを「共用モード」で取得しようとした場合には、モードの組み合わせがマトリックス上「Y」となるので、タスクAより先にタスクB2が「共用モード」でロックを取得する。このような「共用モード」でロックを取得しようとするタスクが発生し続けた場合には、「排他モード」でロックを取得しようとするタスクAがロックを有限な時間内に取得できず、待機し続けてしまう。
このため、現在のロックのモードが「共用モード」である際に、新たなタスクが「排他モード」でロックを取得しようとした場合には、新たなタスクに「排他モード」でロックを取得させる技術が知られている。このような技術では、現在のモードが「共用モード」である場合に、新たに「排他モード」でロックを取得しようとするタスクに対して、ロックを「排他モード」で取得することが認められる。そして、「排他モード」でロックを取得したタスクは、「共用モード」でロックを取得したタスクがロックを解放するまで共用資源を利用せずに待機する。
そして、「排他モード」でロックを取得したタスクは、「共用モード」でロックを取得した他のタスクがロックを解放した場合には、共用資源を利用する。このような処理によって、「排他モード」でロックを取得しようとするタスクは、後に発生した「共用モード」でロックを取得しようとするタスクによるロックの取得を防ぎ、有限な時間内に共用資源を利用する。
特許第2898012号公報 特開平03−083142号公報
しかしながら、現在のロックが「共用モード」である際に「排他モード」でのロック取得を認める技術では、同一のタスクが重複してロックを取得することができる場合には、デッドロックが発生してしまうという問題があった。
図17は、デッドロックの発生を説明するための図である。図17に示す例では、タスク30とタスク31によるロックの取得処理について、上方向から下方向に向かって処理が進むものとする。図17中(A)に示すように、タスク30は、ロックのモードが「解放状態」である際に、ロックを「共用モード」で取得しようとした場合には、図17中(B)に示すように、ロックを「共用モード」で取得する。
次に、図17中(C)に示すように、タスク31は、タスク30がロックを「共用モード」で取得している際に、自身が「排他モード」でロックを取得しようとした場合には、図17中(D)に示すように、「排他モード」でロックを取得する。また、タスク31は、共用資源の利用を行わずに、タスク30によるロックの解放を待つ。
ここで、図17中(E)に示すように、タスク30が「共用モード」でロックを重複して取得しようとした場合には、現在のロックのモードが「排他モード」であるので、図17中(F)に示すように、タスク30はタスク31によるロックの解放を待つ。この結果、タスク30がタスク31によるロックの解放待ちとなり、タスク31がタスク30によるロックの解放待ちとなるので、図17中(G)に示すようにタスク30とタスク31との処理が進まず、デッドロックが発生してしまう。
なお、このようなデッドロックの発生を防止するため、同一のタスクによる重複したロックの取得を禁止する手法が考えられる。しかし、同一のタスクによる重複したロックの取得が行えない場合には、各タスクが取得したロックのモードを記憶し、重複したロックの取得を省略する論理を各タスクに組み込むため、実装が煩雑になる。また、各タスクは、それぞれ別々に開発されることが多いため、同一のタスクによる重複したロックの取得の回避を徹底することが困難である。
本願に開示の技術は、上述した問題に鑑みてなされたものであって、デッドロックを回避する。
一つの側面では、複数のタスクが共用する共用資源を利用するために前記タスクにより取得されているロックの種別と取得が要求されたロックの種別との組み合わせごとに、当該取得が要求されたロックの取得を許可するか否かを示す第1のロック情報に従って、前記タスクによるロックの取得を制御する制御部と、前記タスクによるロックの取得要求により前記第1のロック情報に従って前記ロックの取得を制御した場合に新たなロックの取得が行えないデッドロックが生じるか否かを判別する判別部とを有し、前記制御部は、前記判別部により前記デッドロックが生じると判別された場合には、前記デッドロックを回避するように、現在取得されているロックの種別と取得が要求されたロックの種別との組み合わせごとに当該取得が要求されたロックの取得の可否が設定された第2のロック情報に従って、前記タスクによるロックの取得を制御することを特徴とする。
一つの側面では、デッドロックを回避する。
図1は、実施例1に係るリソース管理装置を説明するための図である。 図2は、非対称マトリックスの一例を説明するための図である。 図3は、一時マトリックスの一例を説明するための図である。 図4は、ロック管理情報の一例を説明するための図である。 図5は、ロックのモードの遷移を説明するための図である。 図6は、実施例1に関わるロック要求処理部が実行する処理の流れを説明するための図である。 図7は、実施例1に関わる競合判定部が実行する処理の流れの一例を説明するための図である。 図8は、実施例1に関わるロック解放処理部が実行する処理の流れの一例を説明するための図である。 図9は、実施例2に係るリソース管理装置を説明するための図である。 図10は、実施例2に係るロック要求処理部が実行する処理の流れを説明するためのフローチャートである。 図11は、実施例2に係る競合判定部が実行する競合判定処理の流れを説明するためのフローチャートである。 図12は、定期競合判定処理を説明するための図である。 図13は、競合が発生したか否かを判別するための処理の一例を説明するためのフローチャート(1)である。 図14は、競合が発生したか否かを判別するための処理の一例を説明するためのフローチャート(2)である。 図15は、ロック制御プログラムを実行するコンピュータの一例を説明するための図である。 図16は、共用資源のロック取得の可否を示すマトリックスを説明するための図である。 図17は、デッドロックの発生を説明するための図である。
以下に添付図面を参照して本願に係るロック制御装置、ロック制御プログラムおよびロック制御方法について説明する。
以下の実施例1では、図1を用いて、ロック制御装置を有するリソース管理装置の一例を説明する。図1は、実施例1に係るリソース管理装置を説明するための図である。なお、リソース管理装置1は、複数のタスクが共用する複数の共用リソースの管理を行う管理装置である。
図1に示すように、リソース管理装置1は、非対称マトリックス記憶部10、一時マトリックス記憶部12、ロック管理情報記憶部14、ロック制御装置20を有する。また、非対称マトリックス記憶部10は、非対称マトリックス11を有し、一時マトリックス記憶部12は、一時マトリックス13を有する。また、ロック管理情報記憶部14は、ロック管理情報15を有する。また、ロック制御装置20は、ロック要求処理部21、競合判定部22、ロック解放処理部23を有する。
非対称マトリックス記憶部10は、共用リソースを利用するためのタスクによるロックの取得を許可するか否かを示す非対称マトリックス11を有する。具体的には、非対称マトリックス記憶部10は、あるタスクが現在取得しているロックのモードと新たにタスクが取得を要求したロックのモードとの組にロック取得の可否を対応付けたマトリックスである非対称マトリックス11を有する。
図2は、非対称マトリックスの一例を説明するための図である。図2に示すように、非対称マトリックス11は、各行に現在取得されているロックのモードが割当てられており、各列に新たにタスクが取得を要求したロックのモードが割当てられている。
ここで、図2中の「排他モード」とは、ロックを取得したタスクのみがリソースを利用するロックのモードであり、「共用モード」とは、ロックを取得したタスク以外にも共用リソースの参照を認めるロックのモードである。なお、図2中の「解放状態」とは、ロックを取得していたタスクがリソースのロックを解放した際に、同じリソースのロックを取得しているタスクが他に存在していない状態を示す。なお、ロックを解放できるのは、解放するロックを取得したタスクのみである。
また、図2中の「N」は、新たなタスクによるロックの取得を許可しない旨を示し、「Y」は、ロックの取得を要求したタスクによるロックの取得を許可する旨を示す。また、図2中の「Y(待ち)」は、ロックの取得を要求したタスクによるロックの取得を認めるとともに、現在ロックを取得しているタスクがロックを解放するまでロックの取得を要求したタスクによる共用リソースの利用または参照を待機させる旨を示す。
つまり、図2に示す例では、非対称マトリックス11は、あるタスクが現在取得しているロックのモードが「排他モード」である際に、他のタスクが取得を要求したロックのモードが「排他モード」である場合には、ロック取得を要求したタスクによるロックの取得を許可しない旨を示す。また、非対称マトリックス11は、あるタスクが現在取得しているロックのモードが「排他モード」である際に、他のタスクが取得を要求したロックのモードが「共用モード」である場合には、ロック取得を要求したタスクによるロックの取得を許可しない旨を示す。また、非対称マトリックス11は、あるタスクが現在取得しているロックのモードが「共用モード」である場合には、他のタスクが取得を要求したロックのモードに係らず、ロック取得を要求したタスクにロックの取得を許可する旨を示す。
ただし、非対称マトリックス11は、あるタスクが現在取得しているロックのモードが「共用モード」である際に、他のタスクが取得を要求したロックのモードが「排他モード」である場合には、以下の制約をタスクに課す旨を示す。すなわち、非対称マトリックス11は、ロック取得を要求したタスクの「排他モード」によるロックの取得を許可するとともに、現在のロックを取得したタスクがロックを解放するまで、ロック取得を要求したタスクによる共用リソースの利用を待機させる旨を示す。
図1に戻って、一時マトリックス記憶部12は、共用リソースに対するロック取得の要求が競合している際にロックの取得を許可するか否かを示す一時マトリックス13を有する。ここで、ここで、競合とは、以下の状態を示す。すなわち、あるタスクが「共用モード」でのロックの取得を要求し、他のタスクが「排他モード」でのロックの取得を要求し、その後、「共用モード」でロックの取得を要求したタスクが、「共用モード」で重複するロックの取得を再度要求した状態を言う。
具体的には、一時マトリックス記憶部12は、非対称マトリックス11と同様に、あるタスクが現在取得しているロックのモードと他のタスクが新たに取得を要求したロックのモードとの組にロック取得の可否を対応付けた一時マトリックス13を有する。
図3は、一時マトリックスの一例を説明するための図である。なお、図3中「Y(排他モードのまま)」とは、新たなタスクによるロック取得を許可するとともに、現在取得されているロックのモードを「排他モード」に保持する旨を示す。つまり、一時マトリックス13は、「排他モード」でロックを取得したタスクを待機させたまま、「共用モード」でロックの取得を要求したタスクに共用リソースの閲覧を認める旨を示す。
図3に示すように、一時マトリックス13は、あるタスクが現在取得しているロックのモードが「排他モード」であり、他のタスクが取得を要求したモードが「排他モード」である場合には、ロック取得を要求したタスクにロック取得を許可しない旨を示す。また、一時マトリックス13は、あるタスクが現在取得しているロックのモードが「排他モード」であり、タスクが取得を要求したロックのモードが「共用モード」である場合には、ロック取得を要求したタスクに「共用モード」でのロック取得を許可する旨を示す。
ただし、一時マトリックス13は、あるタスクが現在取得しているロックのモードが「排他モード」であり、タスクが取得を要求したロックのモードが「共用モード」である場合には、以下の制約をタスクに課す旨を示す。すなわち、一時マトリックス13は、あるタスクが現在取得しているロックのモードを「排他モード」に保ったまま、ロックの取得を要求したタスクに「共用モード」でのロックの取得を許可する旨を示す情報を有する。つまり、一時マトリックス13は、ロックの取得を要求したタスクに、共用リソースの参照を許可する旨を示す情報を有する。
図1に戻って、ロック管理情報記憶部14は、リソース管理装置1が管理する共用リソースに係る現在のロックの状態を示すロック管理情報15を有する。図4は、ロック管理情報の一例を説明するための図である。図4に示す例では、ロック管理情報15は、ロックの状態を示す情報として、「ロックのモード」、「ロック取得待ちキュー」、「ロック取得済みキュー」、「ロック解放待ちキュー」を有する。なお、ロック管理情報記憶部14は、リソース管理装置1が管理する各共用リソースについて、それぞれ個別にロック管理情報15と同様の情報を有する。
ここで、「ロックのモード」とは、ロック管理情報15に対応する共用リソースについて、あるタスクが現在取得しているロックのモードが「排他モード」であるか「共用モード」であるか「解放状態」であるかを示す。つまり、「ロックのモード」とは、対応する共用リソースについて、現在取得されているロックのモードを示す情報である。また、「ロック取得待ちキュー」とは、対応する共用リソースのロックの取得を待機しているタスクを示す情報である。また、「ロック取得済みキュー」とは、対応する共用リソースのロックを取得しているタスクを示す情報である。また、「ロック解放待ちキュー」とは、対応する共用リソースについて取得されたロックを解放するのを待機しているタスクを示す情報である。
例えば、図4に示す例では、ロック管理情報15は、あるタスクが現在取得しているロックのモードが「排他モード」であることを示す。また、ロック管理情報15は、「ロック取得待ちキュー」に情報を格納しておらず、ロック取得済みキューに「タスク4」を示す情報と「タスク3」を示す情報とを有する。また、ロック管理情報15は、「ロック解放待ちキュー」に「タスク3」を示す情報を有する。
なお、ロック管理情報記憶部14は、各共用リソースごとにロック管理情報15と同様のロック管理情報を有する。以下の説明では、ロック管理情報15に関わる共用リソースに対するロックの取得を各タスク2〜4が要求するものとする。
図1に戻って、ロック制御装置20は、非対称マトリックス11に従って、各タスク2〜4によるロックの取得を制御する。また、ロック制御装置20は、各タスク2〜4によるロック取得の要求が競合しているか否かを判別し、競合していると判別した場合には、一時マトリックス13に従って、ロックの取得を制御する。
以下、ロック制御装置20が有するロック要求処理部21、競合判定部22、ロック解放処理部23について説明する。ロック要求処理部21は、非対称マトリックス記憶部10に記憶された非対称マトリックス11に従って、各タスク2〜4によるロックの取得を制御する。また、ロック要求処理部21は、競合判定部22によって競合が発生していると判定された場合には、一時マトリックス13に従って、各タスク2〜4によるロックの取得を制御する。
具体的には、ロック要求処理部21は、タスク2〜4がロックの取得を要求した場合には、取得を要求されたロックのモードが「共用モード」であるか否かを判別する。そして、ロック要求処理部21は、要求されたロックのモードが「共用モード」ではない場合には、非対称マトリックス11に従って、要求されたロックのモードとロック管理情報15の「ロックのモード」とに応じたロック取得の可否を判別する。
一方、ロック要求処理部21は、要求されたロックのモードが「共用モード」である場合には、競合判定部22の呼び出しを行い、競合が発生しているか否かを判定させる。そして、ロック要求処理部21は、競合判定部22から競合が発生していると通知された場合には、一時マトリックス13に従って、要求されたロックのモードとロック管理情報15の「ロックのモード」とに応じたロック取得の可否を判別する。また、ロック要求処理部21は、競合判定部22から競合が発生していないと通知された場合には、非対称マトリックス11に従って、ロック取得の可否を判別する。
ここで、ロック要求処理部21は、ロック取得の可否を判別する場合には、ロック管理情報15の「ロックのモード」を、あるタスクが現在取得しているロックのモードとして判別する。また、ロック要求処理部21は、判別したロックのモードと要求されたロックのモードとの組に対応付けられたロック取得の可否を、非対称マトリックス11または一時マトリックス13から参照する。そして、ロック要求処理部21は、参照した結果が「N」であった場合には、ロック取得を要求したタスクを待ち状態にし、タスクをロック管理情報15の「ロック取得待ちキュー」の最後尾に繋ぐ。
一方、ロック要求処理部21は、参照した結果が「Y」である場合には、ロック管理情報15の「ロックのモード」を要求されたロックのモードに変更する。また、ロック要求処理部21は、ロックの取得を要求したタスクをロック管理情報15が有する「ロック取得済みキュー」の最後尾に繋ぐ。
また、ロック要求処理部21は、参照した結果が「Y(待ち)」である場合は、新たにロック取得を要求したタスクを待ち状態にするととともに、新たにロック取得を要求したタスクをロック管理情報15が有する「ロック解放待ちキュー」の最後尾に繋ぐ。さらに、ロック要求処理部21は、ロック管理情報15の「ロックのモード」を新たにロック取得を要求したタスクから要求されたロックのモードに変更する。
また、ロック要求処理部21は、参照した結果が「Y(排他モードのまま)」である場合は、ロック管理情報15の「ロックのモード」を変更せずに、新たにロック取得を要求したタスクをロック管理情報15が有する「ロック取得済みキュー」の最後尾に繋ぐ。つまり、ロック要求処理部21は、新たにロック取得を要求したタスクに対して、共用モードによるロックを取得させる一方で、ロック管理情報15の「ロックのモード」については、変更を行わず、排他モードを保持させる。
このように、ロック要求処理部21は、あるタスクが現在取得しているロックのモードが「共用モード」である際に、新たなタスクが「排他モード」でのロックの取得を要求した場合には、新たなタスクに「排他モード」でのロックを取得させる。また、ロック要求処理部21は、「共用モード」でロックを取得したタスクがロックを解放するまで、新たなタスクによる共用リソースの利用を待機させる。
また、ロック要求処理部21は、あるタスクが現在取得しているロックのモードが「排他モード」である際に、既に「共用モード」でロックを取得したタスクが「共用モード」で重複したロックの取得を要求した場合には、競合判定部22に競合の有無を判定させる。そして、ロック要求処理部21は、競合判定部22によって競合が発生していると判定された場合には、ロックのモードを「排他モード」に保ったまま、重複したロックの取得を要求したタスクに共用リソースの参照を許可する。つまり、ロック要求処理部21は、ロック管理情報15の「ロックのモード」を変更することなく、重複したロックの取得を要求したタスクに「共用モード」でのロック取得を許可する。
競合判定部22は、各タスク2〜4によるロック取得の要求が競合しているか否かを判定する。具体的には、競合判定部22は、あるタスクが「共用モード」でロックを取得した際に「排他モード」でロックを取得して待機しているタスクが存在し、「共用モード」でロックを取得していたタスクが再度「共用モード」でロックの取得を要求した場合には、競合が発生したと判定する。
詳細には、競合判定部22は、ロック要求処理部21から機能を呼び出された場合には、ロック管理情報15の「ロックのモード」が「排他モード」であるか否かを判別する。また、競合判定部22は、ロック管理情報15の「ロックのモード」が「排他モード」である場合には、ロック管理情報15の「ロック解放待ちキュー」にタスクが繋がっているか否かを判別する。また、競合判定部22は、ロック管理情報15の「ロック解放待ちキュー」にタスクが繋がっていた場合には、新たにロックの取得を要求したタスクがロック管理情報15の「ロック取得済みキュー」に繋がっているか否かを判別する。
そして、競合判定部22は、新たにロックの取得を要求したタスクがロック管理情報15の「ロック取得済みキュー」に繋がっていた場合には、競合が発生したと判定し、競合発生の旨をロック要求処理部21に通知する。また、競合判定部22は、ロック管理情報15の「ロックのモード」が「排他モード」ではなく、ロック管理情報15の「ロック解放待ちキュー」にタスクが繋がっていない場合には、競合が発生していないと判定し、その旨をロック要求処理部21に通知する。また、競合判定部22は、新たにロックの取得を要求したタスクがロック管理情報15の「ロック取得済みキュー」に繋がっていない場合には、競合が発生していないと判定し、その旨をロック要求処理部21に通知する。
ロック解放処理部23は、共用リソースの利用や参照を終えたタスクがロックを解放した場合には、ロックの解放を待っていたキューにロックを取得させる。具体的には、ロック解放処理部23は、共用リソースの利用や参照を行っていたタスクがロックを解放した場合には、ロック管理情報15の「ロック取得済みキュー」からロックを解放したタスクを削除する。また、ロック解放処理部23は、ロック管理情報15の「ロック取得済みキュー」に繋げられたタスクがまだ存在する場合には、ロック管理情報15の「ロック取得済みキュー」に存在する全てのタスクが「ロック解放待ちキュー」に存在するか否かを判別する。
そして、ロック解放処理部23は、ロック管理情報15の「ロック取得済みキュー」に存在する全てのタスクが「ロック解放待ちキュー」に存在すると判別した場合には、「ロック解放待ちキュー」のタスクの待ち状態を解放する。つまり、ロック解放処理部23は、「ロック解放待ちキュー」に繋げられたタスクに共用リソースの利用や参照を実行させる。
一方、ロック解放処理部23は、ロック管理情報15の「ロック取得済みキュー」に存在する全てのタスクが「ロック解放待ちキュー」に存在していないと判別した場合には、そのまま処理を終了する。また、ロック解放処理部23は、ロック管理情報15の「ロック取得済みキュー」にタスクが存在しない場合には、ロック管理情報15の「ロックのモード」を「解放状態」に変更する。また、ロック解放処理部23は、「ロック取得待ちキュー」に繋げられたタスクの待ち状態を解放し、タスクに対してロックの取得を再度要求させる。
次に、ロック制御装置20が有するロック要求処理部21、競合判定部22、ロック解放処理部23が実行する処理の一例について説明する。以下の例では、タスク4が「共用モード」でロックを取得している間に、タスク3が「排他モード」でロックの取得を要求し、その後、タスク4が「共用モード」で重複したロックの取得を要求する例について説明する。
例えば、ロック要求処理部21は、ロック管理情報15の「ロックのモード」が「解放状態」である際に、タスク4が「共用モード」によるロックの取得を要求した場合には、競合判定部22を呼び出し、競合が発生しているか否かを判定させる。
このような場合には、ロック管理情報15の「ロックのモード」が「排他モード」ではないため、競合判定部22は、競合が発生していないと判定し、その旨をロック要求処理部21に通知する。
このため、ロック要求処理部21は、非対称マトリックス11を参照し、現在のロックのモードである「解放状態」とタスク4が取得を要求した「共用モード」との組に対応付けられたロック取得の可否が「Y」であることを判別する。そして、ロック要求処理部21は、ロック管理情報15の「ロックのモード」を「共用モード」に変更し、タスク4をロック管理情報15の「ロック取得済みキュー」に繋ぐ。タスク4は、「ロック取得済みキュー」に繋がれたタスクのうち、一番最初のタスクとなるので、共用リソースの参照を行う。
次に、ロック要求処理部21は、タスク3が「排他モード」でロックの取得を要求した場合には、非対称マトリックス11を参照する。そして、ロック要求処理部21は、タスク4が現在取得しているロックのモードである「共用モード」とタスク3が要求した「排他モード」との組に対応付けられたロック取得の可否が「Y(待ち)」であることを判別する。
このため、ロック要求処理部21は、タスク3を待ち状態にするとともに、タスク3をロック管理情報15の「ロック解放待ちキュー」に繋ぐ。また、ロック要求処理部21は、ロック管理情報15の「ロックのモード」をタスク3が要求したロックのモードである「排他モード」に変更する。つまり、この時点では、ロック管理情報15の「ロック取得済みキュー」には、1番目にタスク4が繋がっており、2番目にタスク3が繋がっている。
次に、ロック要求処理部21は、タスク4が「共用モード」で重複したロックの取得を要求した場合には、競合判定部22を呼び出し、競合が発生しているか否かを判定させる。このような場合には、競合判定部22は、ロック管理情報15の「ロックのモード」が「排他モード」であり、かつ、「ロック解放待ちキュー」にタスク3が繋がっており、かつ、ロックの取得を要求したタスク4が「ロック取得済みキュー」に繋がっていると判別する。このため、競合判定部22は、競合が発生していると判定し、競合が発生している旨をロック要求処理部21に通知する。
このため、ロック要求処理部21は、一時マトリックス13を参照し、ロック管理情報15が示す「排他モード」とタスク4が取得を要求した「共用モード」との組に対応付けられたロック取得の可否が「Y(排他モードのまま)」であることを判別する。このため、ロック要求処理部21は、ロック管理情報15の「ロック取得済みキュー」の最後尾にタスク4を繋げる。
つまり、ロック要求処理部21は、ロック管理情報15の「ロックのモード」を変更せず、ロック管理情報15の「ロック取得済みキュー」のみにタスク4を繋げる。ここで、ロック管理情報15の「ロック取得済みキュー」には、タスク3とタスク4が繋がっているが、タスク3は、待機しているため、共用リソースの利用を行わない。
一方、タスク4は、共用リソースの参照を行い、共用リソースの参照が終了した場合には、ロックを解放する。すると、ロック解放処理部23は、タスク4を「ロック取得済みキュー」から削除し、「ロック解放待ちキュー」のタスク3の待ち状態を解放する。このため、タスク3は、「排他モード」で共用リソースを利用し、その後、ロックを解放する。
図5は、ロックのモードの遷移を説明するための図である。なお、図5に示す例では、上から下に向かって、タスク4が「共用モード」でロックの取得を要求し、その後、タスク3が「排他モード」でロックの取得を要求し、さらにその後、タスク4が「共用モード」で重複したロックの取得を要求した例である。また、図5中のロックのモードとは、ロック管理情報15の「ロックのモード」である。
図5中(H)に示すように、タスク4が「共用モード」のロックの取得を要求する。このような場合には、ロック制御装置20は、図5中(I)に示すように、タスク4に「共用モード」のロックを取得させる。また、ロック制御装置20は、ロックのモードを「共用モード」に遷移させる。
次に、図5中(J)に示すように、タスク3が「排他モード」でのロックの取得を要求する。このような場合には、ロック制御装置20は、図5中(K)に示すように、タスク3に「排他モード」のロックを取得させるとともに、タスク4によるロックの解放まで共用リソースの利用を待機させる。また、ロック制御装置20は、ロックのモードを「排他モード」に遷移させる。
次に、図5中(L)に示すように、タスク4が「共用モード」での重複したロックの取得を要求する。このような場合には、ロック制御装置20は、競合が発生したと判定し、一時マトリックス13に従って、ロック取得の可否を判断する。この結果、ロック制御装置20は、図5中(M)に示すように、ロックのモードを「排他モード」に保持したまま、タスク4に「共用モード」での重複したロックを取得させる。
この結果、タスク4は、共用リソースを参照し、図5中(N)および図5中(O)に示すように、重複したロックを解放する。すると、図5中(P)に示すように、タスク3は、共用リソースを「排他モード」で利用する。その後、図5中(Q)に示すように、タスク3は、共用リソースの利用を終了し、ロックを解放する。この結果、ロック制御装置20は、ロックのモードを「解放状態」に遷移させる。
上述したように、ロック制御装置20は、競合が発生していない場合には、非対称マトリックス11に従って、ロックの取得を制御し、競合が発生している場合には、一時マトリックス13に従って、ロックの取得を制御する。このため、ロック制御装置20は、競合が発生したことによるデッドロックを防ぐことができる。
例えば、ロック要求処理部21、競合判定部22、ロック解放処理部23とは、電子回路である。ここで、電子回路の例として、ASIC(Application Specific Integrated Circuit)やFPGA (Field Programmable Gate Array)などの集積回路、またはCPU(Central Processing Unit)やMPU(Micro Processing Unit)などを適用する。
また、非対称マトリックス記憶部10、一時マトリックス記憶部12、ロック管理情報記憶部14とは、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ(flash memory)などの半導体メモリ素子などの記憶装置である。
[処理の流れ]
次に、図6〜8を用いて、ロック制御装置20が有するロック要求処理部21、競合判定部22、ロック解放処理部23が実行する処理の流れを説明する。まず、図6を用いて、ロック要求処理部21が実行する処理の流れを説明する。図6は、実施例1に関わるロック要求処理部が実行する処理の流れを説明するための図である。ロック要求処理部21は、タスク2〜4がロックの取得を要求したことをトリガとして、処理を開始する。
まず、ロック要求処理部21は、各タスク2〜4が取得を要求したロックのモードが「共用モード」であるか否かを判別する(ステップS101)。そして、ロック要求処理部21は、各タスク2〜4が取得を要求したロックのモードが「共用モード」である場合には(ステップS101肯定)、競合判定部22を呼び出し、競合が発生しているか否かを判定させる(ステップS102)。
次に、ロック要求処理部21は、競合判定部22によって競合が発生していると判定されたか否かを判別し(ステップS103)、競合が発生している場合には、(ステップS103肯定)、一時マトリックス13を参照する(ステップS104)。つまり、ロック要求処理部21は、ロック管理情報15の「ロックのモード」と各タスク2〜4が取得を要求したロックのモードとの組に対応付けられたロック取得の可否を一時マトリックス13から参照する。
一方、ロック要求処理部21は、各タスク2〜4が取得を要求したロックのモードが「共用モード」ではない場合には(ステップS101否定)、非対称マトリックス11を参照する(ステップS105)。また、ロック要求処理部21は、競合が発生していない場合には(ステップS103否定)、非対称マトリックス11を参照する(ステップS105)。つまり、ロック要求処理部21は、ロック管理情報15の「ロックのモード」と各タスク2〜4が取得を要求したロックのモードとの組に対応付けられたロック取得の可否を非対称マトリックス11から参照する。
次に、ロック要求処理部21は、非対称マトリックス11又は一時マトリックス13の参照結果が「N」であるか否かを判別する(ステップS106)。そして、ロック要求処理部21は、参照結果が「N」ではなかった場合には(ステップS106否定)、参照結果が「Y(待ち)」であるか否かを判別する(ステップS107)。また、ロック要求処理部21は、参照結果が「Y(待ち)」であった場合には(ステップS107肯定)、ロックの取得を要求したタスクを待ち状態にするとともに(ステップS108)、ロック管理情報15の「ロック解放待ちキュー」に繋ぐ(ステップS109)。なお、ステップS108およびステップS109の処理を実行する順番は逆でもよい。
次に、ロック要求処理部21は、参照結果が「Y(排他モードのまま)」であるか否かを判別する(ステップS110)。そして、ロック要求処理部21は、マトリックスの参照結果が「Y(排他モードのまま)」ではないと判別した場合には(ステップS110否定)、ロック管理情報15の「ロックのモード」を変更する(ステップS111)。具体的には、ロック要求処理部21は、ロック管理情報15の「ロックのモード」を各タスク2〜4が取得を要求したロックのモードに変更する。その後、ロック要求処理部21は、ロックの取得を要求したタスクをロック管理情報15の「ロック取得済みキュー」に繋ぎ(ステップS112)、処理を終了する。
一方、ロック要求処理部21は、非対称マトリックス11または一時マトリックス13の参照結果が「Y(待ち)」ではないと判別した場合には(ステップS107否定)、参照結果が「Y(排他モードのまま)」であるか否かを判別する(ステップS110)。そして、ロック要求処理部21は、参照結果が「Y(排他モードのまま)」であると判別した場合には(ステップS110肯定)、ロックの取得を要求したタスクを「ロック取得済みキュー」に繋ぎ(ステップS112)、処理を終了する。
また、ロック要求処理部21は、非対称マトリックス11または一時マトリックス13の参照結果が「N」であると判別した場合には(ステップS106肯定)、ロックの取得を要求したタスクを待ち状態にする(ステップS113)。そして、ロック要求処理部21は、ロックの取得を要求したタスクをロック管理情報15の「ロック取得待ちキュー」に繋ぎ(ステップS114)、処理を終了する。なお、ステップS113の処理とステップS114の処理を実行する順序は、逆でもよい。
次に、図7を用いて、競合判定部22が実行する処理の流れについて説明する。図7は、実施例1に関わる競合判定部が実行する処理の流れの一例を説明するための図である。競合判定部22は、ロック要求処理部21から機能を呼び出されることによって、処理を開始する。
まず、競合判定部22は、ロック管理情報15の「ロックのモード」が「排他モード」であるか否かを判別する(ステップS201)。また、競合判定部22は、ロック管理情報15の「ロックのモード」が「排他モード」であると判別した場合には(ステップS201肯定)、「ロック解放待ちキュー」にタスクが繋がっているか否かを判別する(ステップS202)。
そして、競合判定部22は、「ロック解放待ちキュー」にタスクが繋がっていると判別した場合には(ステップS202肯定)、ロックの取得を要求したタスクがロック管理情報15の「ロック取得済みキュー」に繋がっているか否かを判別する(ステップS203)。そして、競合判定部22は、ロックの取得を要求したタスクがロック管理情報15の「ロック取得済みキュー」に繋がっていた場合には(ステップS203肯定)、競合が発生したと判定する(ステップS204)。その後、競合判定部22は、競合が発生した旨をロック要求処理部21に通知し、処理を終了する。
一方、競合判定部22は、ロック管理情報15の「ロックのモード」が「排他モード」ではないと判定した場合には(ステップS201否定)、競合が発生していないと判定し(ステップS205)、その旨をロック要求処理部21に通知して、処理を終了する。また、競合判定部22は、ロック管理情報15の「ロック解放待ちキュー」にタスクが存在しない場合には(ステップS202否定)、競合が発生していないと判定する(ステップS205)。また、競合判定部22は、ロックの取得を要求したタスクがロック管理情報15の「ロック取得済みキュー」に繋がっていない場合には(ステップS203否定)、競合が発生していないと判定する(ステップS205)。
次に、図8を用いて、ロック解放処理部23が実行する処理の流れについて説明する。図8は、実施例1に関わるロック解放処理部が実行する処理の流れの一例を説明するための図である。ロック解放処理部23は、ロックを取得したタスクがロックを解放したことを契機として、処理を開始する。
まず、ロック解放処理部23は、ロック管理情報15の「ロック取得済みキュー」からロックを解放したタスクを削除する(ステップS301)。次に、ロック解放処理部23は、ロック管理情報15の「ロック取得済みキュー」にタスクが繋がっているか否かを判別する(ステップS302)。そして、ロック解放処理部23は、「ロック取得済みキュー」にタスクが繋がっていると判別した場合には(ステップS302肯定)、ロック管理情報15の「ロック取得済みキュー」に存在する全てのタスクが「ロック解放待ちキュー」に存在するか否かを判別する(ステップS303)。
そして、ロック解放処理部23は、ロック管理情報15の「ロック取得済みキュー」に存在する全てのタスクが「ロック解放待ちキュー」に存在すると判別した場合には(ステップS303肯定)、「ロック解放待ちキュー」に繋がったタスクの待ち状態を解放する(ステップS304)。その後、ロック解放処理部23は、「ロック解放待ちキュー」からタスクを削除し(ステップS305)、処理を終了する。一方、ロック解放処理部23は、ロック管理情報15の「ロック取得済みキュー」に存在する全てのタスクが「ロック解放待ちキュー」に存在していないと判別した場合には(ステップS303否定)、処理を終了する。
また、ロック解放処理部23は、「ロック取得済みキュー」にタスクが繋がっていないと判別した場合には(ステップS302否定)、ロック管理情報15の「ロックのモード」を「解放状態」に変更する(ステップS306)。次に、ロック解放処理部23は、ロック管理情報15の「ロック取得待ちキュー」にタスクが繋がれているか否かを判別する(ステップS307)。
そして、ロック解放処理部23は、「ロック取得待ちキュー」にタスクが繋がれていると判別した場合には(ステップS307肯定)、「ロック取得待ちキュー」に繋がれた先頭のタスクの待ち状態を解放し、ロックの取得を再度要求させる(ステップS308)。その後、ロック解放処理部23は、処理を終了する。また、ロック解放処理部23は、「ロック取得待ちキュー」にタスクが繋がれていないと判別した場合には(ステップS307否定)、処理を終了する。
[実施例1の効果]
上述したように、実施例1に関わるロック制御装置20は、非対称マトリックス11に従って、各タスク2〜4による共用リソースのロックの取得を制御する。また、ロック制御装置20は、各タスク2〜4によるロックの取得要求が競合しているか否かを判定する。そして、ロック制御装置20は、各タスク2〜4によるロックの取得要求が競合していると判定した場合には、一時マトリックス13に従って、各タスク2〜4による共用リソースのロックの取得を制御する。
このため、ロック制御装置20は、デッドロックを回避することができる。すなわち、ロック制御装置20は、各タスク2〜4によるロックの取得要求が競合している場合には、デッドロックを回避するように設定された一時マトリックス13に従って、各タスク2〜4によるロックの取得を制御する。この結果、ロック制御装置20は、デッドロックを防ぐことができる。
また、ロック制御装置20は、同一のタスクによる重複したロックの取得を禁止する論理を各タスクに組み込まずとも、デッドロックを防ぐことができる。このため、ロック制御装置20は、各タスク2〜4の実装を容易にすることができる。
また、非対称マトリックス11は、ロック管理情報15の「ロックのモード」が「共用モード」である際に、要求されたロックのモードが「排他モード」である場合には、以下の処理を実行させる旨を示す。すなわち、非対称マトリックス11は、ロックの取得を要求したタスクに対して、「排他モード」でのロックの取得を許可するとともに、「共用モード」でロックを取得したタスクがロックを解放するまで、共用リソースの利用を待機させることを示す。
この結果、ロック制御装置20は、非対称マトリックス11を用いて、各タスク2〜4によるロックの取得を制御した場合には、以下の効果を奏する。すなわち、ロック制御装置20は、「共用モード」でのロックの取得を要求するタスクが発生し続けても、「排他モード」でロックを取得したタスクに、有限な時間内で共用リソースを利用させることができる。
また、一時マトリックス13は、ロック管理情報15の「ロックのモード」が「排他モード」である際に、要求されたロックのモードが「共用モード」である場合には、以下の処理を実行させる旨を示す。すなわち、一時マトリックス13は、ロックの取得を要求したタスクに対して「共用モード」でのロックの取得を許可するとともに、ロック管理情報15の「ロックのモード」を「排他モード」のままにする旨を示す。換言すると、一時マトリックス13は、あるタスクによって現在取得されているロックのモードをそのままに保持するとともに、「共用モード」でのロックの取得を要求したタスクに、共用リソースの参照のみを許可する旨を示す。このため、ロック制御装置20は、競合発生時に一時マトリックス13に従ってロックの取得を制御した場合には、競合発生時のデッドロックを適切に防ぐことができる。
また、ロック制御装置20は、ロック管理情報15の「ロックのモード」が「共用モード」である際に、「排他モード」でロックを取得したタスクが存在し、その後、以下の条件を満たした場合には、競合が発生したと判定する。すなわち、ロック制御装置20は、「共用モード」でロックを取得していたタスクが「共用モード」で重複するロックの取得を要求した場合には、競合が発生したと判定する。このため、ロック制御装置20は、適切に競合の発生を判定することができる結果、デッドロックを回避することができる。
上述したロック制御装置20は、各タスク2〜4によるロック取得の要求に応じて、競合が発生しているか否かを判定していた。しかし、実施例は、これに限定されるものではなく、他の方法を用いて、ロック取得の要求が競合しているか否かを判定するものとしてもよい。
図9は、実施例2に係るリソース管理装置を説明するための図である。なお、図9中に示す各部1〜4、10〜15、20〜23のうち、実施例1と同様の処理を実行するものについては、図1と同じ符号を付すものとし、その符号での説明を省略する。
例えば、実施例2に係るロック制御装置20aは、ロック要求処理部21a、競合判定部22a、ロック解放処理部23を有する。また、ロック制御装置20aは、「共用モード」でロックを取得したタスクが所定の時間が経過するまでの間、「排他モード」でロックを取得したタスクによるロックの解放を待機しつづけた場合には、競合が発生したと判定する。つまり、ロック制御装置20aは、所定の時間が経過するまでの間、タスクが待機しつづけた場合には、競合が発生していると判断し、一時マトリックス13に従ってロック取得の可否を判別する。
以下、このようなロック制御装置20aが有するロック要求処理部21a、競合判定部22aが実行する処理について説明する。図10は、実施例2に係るロック要求処理部が実行する処理の流れを説明するためのフローチャートである。なお、図10に示す処理のうち、ステップS401〜S407については、図6に示すステップS101〜107と同一の処理であるので、説明を省略する。
実施例2に係るロック要求処理部21aは、マトリックスの参照結果が「Y(待ち)」であった場合には(ステップS407肯定)、タスクを待ち状態にする(ステップS408)。次に、ロック要求処理部21aは、マトリックスの参照結果が「Y(排他モードのまま)」であるか否かを判別する(ステップS409)。そして、ロック要求処理部21aは、マトリックスの参照結果が「Y(排他モードのまま)」である場合には(ステップS409肯定)、処理を終了する。
一方、ロック要求処理部21aは、マトリックスの参照結果が「Y(排他モードのまま)」ではない場合には(ステップS409否定)、タスクから要求されたロックのモードに応じて、ロック管理情報15のモードを変更する(ステップS410)。また、ロック要求処理部21aは、マトリックスの参照結果が「N」である場合には(ステップS406肯定)、タスクを待ち状態にし(ステップS411)、処理を終了する。なお、ロック要求処理部21aは、マトリックスの参照結果が「Y(待ち)」ではない場合には(ステップS407否定)、マトリックスの参照結果が「Y(排他モードのまま)」であるか否かを判別する(ステップS409)。
図11は、実施例2に係る競合判定部が実行する競合判定処理の流れを説明するためのフローチャートである。まず、実施例2に係る競合判定部22aは、ロック管理情報15の「ロックのモード」が「排他モード」であるか否かを判別する(ステップS501)。そして、競合判定部22は、ロック管理情報15の「ロックのモード」が「排他モード」である場合には(ステップS501肯定)、すべての既存タスクによるロックの解放を待機しているタスクが存在するか否かを判別する(ステップS502)。
また、競合判定部22aは、ロックの解放を待機しているタスクが存在する場合には(ステップS502肯定)、ロック管理情報15の「ロックのモード」が「排他モード」になってから所定の時間が経過したか否かを判別する(ステップS503)。そして、競合判定部22aは、ロック管理情報15の「ロックのモード」が「排他モード」になってから所定の時間が経過したと判別した場合には(ステップS503肯定)、次の処理を実行する。すなわち、競合判定部22aは、最後のタスクがロックを「共用モード」で取得してから所定の時間が経過したか否かを判別する(ステップS504)。
その後、競合判定部22aは、最後のタスクがロックを「共用モード」で取得してから所定の時間が経過したと判別した場合には(ステップS504肯定)、競合が発生したと判定する(ステップS505)。その後、競合判定部22aは、競合が発生した旨をロック要求処理部21aに通知し、処理を終了する。
一方、競合判定部22aは、ロックの解放を待機しているタスクが存在しない場合には(ステップS502否定)、競合の発生はないと判定し(ステップS507)、その旨をロック要求処理部21aに通知して、処理を終了する。また、競合判定部22aは、ロック管理情報15の「ロックのモード」が「排他モード」になってから所定の時間が経過していない場合には(ステップS503否定)、以下の処理を行う。すなわち、競合判定部22aは、一定時間が経過したあとで、後述する定期競合判定処理を起動するように自装置を設定する(ステップS506)。その後、競合判定部22aは、競合が発生していないと判定し(ステップS507)、処理を終了する。また、最後のタスクがロックを「共用モード」で取得成功してから所定の時間が経過していないと判別した場合には(ステップS504否定)、一定時間経過後に定期競合判定処理を起動するように自装置を設定する(ステップS506)。
図12は、定期競合判定処理を説明するための図である。競合判定部22aは、図11に示すステップS506にて、定期競合判定処理を起動するよう設定した場合には、一定時間経過後に、図12に示す処理を実行する。具体的には、競合判定部22aは、図11に示した競合判定処理(図11中ステップS501〜507)を実行する(ステップS601)。次に、競合判定部22aは、競合が発生したか否かを判定する(ステップS602)。
そして、競合判定部22aは、競合が発生したと判定した場合には(ステップS602肯定)、ロック要求処理部21aを呼び出し、ロック取得待ちの全てのタスクについて、図10に示すロック要求処理を再実行させる(ステップS603)。その後、競合判定部22aは、処理を終了する。また、競合判定部22aは、競合が発生していないと判定した場合には(ステップS602否定)、処理を終了する。つまり、競合判定部22aは、所定の時間間隔で図11および図12に示す処理を実行し、競合が発生しているか否かを判定する。
[実施例2の効果]
上述したように、実施例2に係るロック制御装置20aは、「排他モード」でロックを取得したタスクによるロックの解放を、「共用モード」でロックを取得したタスクが、所定の時間が経過するまでの間、待機した場合には、競合が発生したと判定する。つまり、ロック制御装置20aの競合判定部22aは、「排他モード」でロックを取得したタスクと「共用モード」でロックを取得したタスクとが、所定の時間が経過するまでの間、待機した場合には、競合が発生したと判定する。
このため、ロック制御装置20aは、競合が発生したか否かを容易に判定することができる。つまり、ロック制御装置20aは、今までロックの取得を要求してきたタスクの情報をロック管理情報15として記憶させなくとも、競合の発生を判定することができる。この結果、ロック制御装置20aは、リソース管理装置1の回路規模を抑えるとともに、容易に実装を行う事ができる。
これまで、実施例について説明したが、実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例3として本発明に含まれる他の実施例を説明する。
(1)競合判定について
上述した競合判定部22は、あるタスクが「共用モード」でロックを取得している際に、他のタスクが「排他モード」でロックを取得し、さらに、「共用モード」でロックを取得していたタスクが「共用モード」で重複するロックの取得を要求した場合には、競合が発生したと判定した。また、上述した競合判定部22aは、あるタスクが「排他モード」でロックを取得し、他のタスクが「共用モード」でロックを取得してから、所定の時間が経過するまでの間、両タスクが待機した場合には、競合が発生したと判定した。
しかし、実施例は、これに限定されるものではなく、様々な方法を用いて、競合が発生した否かを判定するようにしてもよい。以下、図13、図14を用いて、競合が発生したか否かを判定する処理の他の例について説明する。
図13は、競合が発生したか否かを判定するための処理の一例を説明するためのフローチャート(1)である。なお、図13に示す処理は、図7に示す処理を一般化した処理に対応する。また、以下の説明では、実施例3に係るロック制御装置20bは、ロック要求処理部21b、競合判定部22b、ロック解放処理部23を有するものとする。
例えば、実施例3に係る競合判定部22bは、ロック管理情報15の「ロックのモード」が「排他モード」であるか否かを判別する(ステップS701)。そして、競合判定部22bは、ロック管理情報15の「ロックのモード」が「排他モード」である場合には(ステップS701肯定)、全ての既存タスクのロック解放を待っているタスクが存在するか否かを判別する(ステップS702)。そして、競合判定部22bは、全ての既存タスクのロック解放を待っているタスクが存在する場合には(ステップS702肯定)、ロックを要求したタスクが既にロックを「共用モード」で取得済みであるか否かを判別する(ステップS703)。
その後、競合判定部22bは、ロックを要求したタスクが既にロックを「共用モード」で取得済みであった場合には(ステップS703肯定)、競合が発生したと判定する(ステップS704)。一方、競合判定部22bは、ロック管理情報15のモードが「排他モード」でない場合には(ステップS701否定)、競合が発生していないと判定する(ステップS705)。同様に、競合判定部22bは、全ての既存タスクのロック解放を待機しているタスクが存在しない場合には(ステップS702否定)、競合が発生していないと判定する(ステップS705)。また、競合判定部22bは、ロックを要求したタスクが既にロックを「共用モード」で取得済みではない場合には(ステップS703否定)、競合が発生していないと判定する(ステップS705)。
このような競合判定部22bを有するロック制御装置20bは、競合の発生を判定することができる。結果として、ロック制御装置20bは、デッドロックを適切に防ぐことができる。
他の例では、競合判定部22bは、ロックのモードが「共用モード」である際にあるタスクが「排他モード」でロックを取得し、さらに他のタスクが「共用モード」でロックの取得を要求した場合には、以下の判定をおこなう。すなわち、競合判定部22bは、「競合モード」でロックの取得を要求したタスクが他にも「共用モード」でロックを取得しているか否かを判別する。そして、競合判定部22bは、「競合モード」でロックの取得を要求したタスクが他にも「共用モード」でロックを取得していると判定した場合には、競合が発生したと判定してもよい。
図14は、競合が発生したか否かを判定するための処理の一例を説明するためのフローチャート(2)である。なお、図14中のステップS801、S802、S804、S805については、図7中のステップS201、S202、S204、S205と同じ処理であるため、説明を省略する。
競合判定部22bは、全ての既存タスクのロック解放を待っているタスクが存在する場合には(ステップS802肯定)、ロックの取得を要求したタスクが既に何らかのロックを取得済みであるか否かを判別する(ステップS803)。そして、競合判定部22bは、ロックの取得を要求したタスクが既に何らかのロックを取得済みである場合には(ステップS803肯定)、競合が発生したと判定する(ステップS804)。
このように、競合判定部22bは、ロックの取得を要求したタスクが他にもロックを取得済みであるか否かを判別することで、競合が発生したか否かを判定する。この結果、ロック制御装置20bは、ロック管理情報15にロックを取得した全タスクを「ロック取得済みキュー」に繋げずとも、各キューがロックを取得したか否かを記憶させればよいので、リソース管理装置1の回路規模を抑え、実装を容易にすることができる。
(2)マトリックスについて
図2に示す非対称マトリックス11は、ロック取得の可否を示す情報として「Y」、「Y(待ち)」、「N」が格納されていた。また、図3に示す一時マトリックス13は、ロック取得の可否を示す情報として「Y(排他モードのまま)」、「N」が格納されていた。しかし、これらロック取得の可否を示す情報は、あくまで例示であり、上述した機能を果たすための情報であれば、任意の情報を格納することができる。
(3)プログラム
ところで、上記した実施例1〜3では、ハードウェアを利用して各種の処理を実現する場合を説明した。しかし、実施例はこれに限定されるものではなく、あらかじめ用意されたプログラムをコンピュータで実行することによって実現するようにしてもよい。そこで、以下では、図15を用いて、実施例1に示したロック制御装置20と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図15は、ロック制御プログラムを実行するコンピュータの一例を説明するための図である。
図15に例示されたコンピュータ100は、RAM(Random Access Memory)120、HDD(Hard Disk Drive)150がバス170で接続される。また、図15に例示されたコンピュータ100は、CPU(Central Processing Unit)140がバス170で接続される。
HDD150には、ロック制御プログラム151があらかじめ保存される。CPU140が、HDD150からロック制御プログラム151を読み出して実行することによって、RAM120には、非対称マトリックス121、一時マトリックス122が展開される。なお、非対称マトリックス121は、図1の非対称マトリックス11と同じマトリックスであり、一時マトリックス122は、図1の一時マトリックス13と同じマトリックスである。
また、CPU140がロック制御プログラム151を読み出して実行することによって、CPU140では、ロック要求処理プロセス141、競合判定プロセス142、ロック解放処理プロセス143が機能するようになる。なお、各プロセス141〜143は、図1に示した各部21〜23と同様の機能を発揮する。また、各プロセス141〜143は、実施例2または実施例3に係る各部と同等の機能を発揮するようにすることも可能である。
なお、本実施例で説明したロック制御プログラムは、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク(FD)、CD−ROM(Compact Disc Read Only Memory)、MO(Magneto Optical Disc)、DVD(Digital Versatile Disc)などのコンピュータで読取可能な記録媒体に記録される。また、このプログラムは、コンピュータによって記録媒体から読み出されることによって実行することもできる。
1 リソース管理装置
2〜4、30、31 タスク
10 非対称マトリックス記憶部
11 非対称マトリックス
12 一時マトリックス記憶部
13 一時マトリックス
14 ロック管理情報記憶部
15 ロック管理情報
20 ロック制御装置
21 ロック要求処理部
22 競合判定部
23 ロック解放処理部

Claims (8)

  1. 複数のタスクが共用する共用資源を利用するために前記タスクにより取得されているロックの種別と取得が要求されたロックの種別との組み合わせごとに、当該取得が要求されたロックの取得を許可するか否かを示す第1のロック情報に従って、前記タスクによるロックの取得を制御する制御部と、
    前記タスクによるロックの取得要求により前記第1のロック情報に従って前記ロックの取得を制御した場合に新たなロックの取得が行えないデッドロック生じるか否かを判別する判別部と
    を有し、
    前記制御部は、前記判別部により前記デッドロックが生じると判別された場合には、前記デッドロックを回避するように、現在取得されているロックの種別と取得が要求されたロックの種別との組み合わせごとに当該取得が要求されたロックの取得の可否が設定された第2のロック情報に従って、前記タスクによるロックの取得を制御することを特徴とするロック制御装置。
  2. 前記制御部は、現在取得されているロックの状態が、当該ロックを取得したタスク以外にも共用資源の参照を認める共用状態である際に、ロックを取得したタスクのみが共用資源を利用することができる排他状態でのロックの取得を他のタスクが要求した場合には、当該他のタスクに前記排他状態でのロックの取得を許可するとともに、前記共用状態でロックを取得したタスクがロックを解放するまでの間、前記他のタスクによる共用資源の利用を待機させることを示す前記第1のロック情報に従う
    ことを特徴とする請求項1に記載のロック制御装置。
  3. 前記制御部は、現在取得されているロックの状態が前記排他状態である際に、他のタスクが前記共用状態でのロックの取得を要求した場合には、前記取得されているロックの状態を前記排他状態に保ったまま、前記他のタスクによる前記共用資源の参照を許可することを示す前記第2のロック情報に従うことを特徴とする請求項に記載のロック制御装置。
  4. 前記判別部は、前記共用状態でロックを取得したタスクが、所定の時間が経過するまでの間、前記排他状態でロックを取得したタスクによるロックの解放を待機した場合には、前記デッドロックか生じたと判別することを特徴とする請求項2または3に記載のロック制御装置。
  5. 前記判別部は、前記ロックの状態が前記共用状態である際に前記排他状態でロックを取得したタスクが存在し、かつ、前記共用状態のロックを取得したタスクが再度前記共用状態でロックの取得を要求した場合には、前記デッドロックか生じたと判別することを特徴とする請求項2または3に記載のロック制御装置。
  6. 前記判別部は、前記ロックの状態が前記共用状態である際に前記排他状態でロックを取得したタスクが存在する際に、新たなタスクが前記共用状態によるロックの取得を要求した場合には、当該新たなタスクが他にも前記共用状態でロックを取得しているか否かを判別し、前記新たなタスクが他にも前記共用状態でロックを取得していると判別した場合には、前記デッドロックか生じたと判別することを特徴とする請求項2または3に記載のロック制御装置。
  7. タスクを実行する情報処理装置によって実行されるロック制御プログラムであって、
    複数のタスクが共用する共用資源を利用するために前記タスクにより取得されているロックの種別と取得が要求されたロックの種別との組み合わせごとに、当該取得が要求されたロックの取得を許可するか否かを示す第1のロック情報に従って、前記タスクによるロックの取得を制御し、
    前記タスクによるロックの取得要求により前記第1のロック情報に従って前記ロックの取得を制御した場合に新たなロックの取得が行えないデッドロック生じるか否かを判別し、
    前記デッドロックが生じると判別された場合には、前記デッドロックを回避するように、現在取得されているロックの種別と取得が要求されたロックの種別との組み合わせごとに当該取得が要求されたロックの取得の可否が設定された第2のロック情報に従って、前記タスクによるロックの取得を制御する
    処理を前記情報処理装置が有するコンピュータに実行させることを特徴とするロック制御プログラム。
  8. 複数のタスクが共用する共用資源を管理する情報処理装置によって実行されるロック制御方法であって、
    前記共用資源を利用するために前記タスクにより取得されているロックの種別と、取得が要求されたロックの種別との組み合わせごとに、当該取得が要求されたロックの取得を許可するか否かを示す第1のロック情報に従って、前記タスクによるロックの取得を制御し、
    前記タスクによるロックの取得要求により前記第1のロック情報に従って前記ロックの取得を制御した場合に新たなロックの取得が行えないデッドロック生じるか否かを判別し、
    前記デッドロックが生じると判別された場合には、前記デッドロックを回避するように、現在取得されているロックの種別と取得が要求されたロックの種別との組み合わせごとに当該取得が要求されたロックの取得の可否が設定された第2のロック情報に従って、前記タスクによるロックの取得を制御する
    処理を前記情報処理装置が実行することを特徴とするロック制御方法。
JP2013500805A 2011-02-25 2011-02-25 ロック制御装置、ロック制御プログラムおよびロック制御方法 Active JP5621904B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2011/054353 WO2012114516A1 (ja) 2011-02-25 2011-02-25 ロック制御装置、ロック制御プログラムおよびロック制御方法

Publications (2)

Publication Number Publication Date
JPWO2012114516A1 JPWO2012114516A1 (ja) 2014-07-07
JP5621904B2 true JP5621904B2 (ja) 2014-11-12

Family

ID=46720332

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013500805A Active JP5621904B2 (ja) 2011-02-25 2011-02-25 ロック制御装置、ロック制御プログラムおよびロック制御方法

Country Status (3)

Country Link
US (1) US9411660B2 (ja)
JP (1) JP5621904B2 (ja)
WO (1) WO2012114516A1 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104461707B (zh) * 2014-11-28 2018-09-28 华为技术有限公司 一种锁请求处理方法及装置
US10459909B2 (en) * 2016-01-13 2019-10-29 Walmart Apollo, Llc System for providing a time-limited mutual exclusivity lock and method therefor
US11157332B2 (en) * 2016-07-06 2021-10-26 International Business Machines Corporation Determining when to release a lock from a first task holding the lock to grant to a second task waiting for the lock
US11113261B2 (en) * 2018-01-19 2021-09-07 Sap Se Data locking
US10802874B1 (en) * 2018-09-26 2020-10-13 Vmware, Inc. Cloud agnostic task scheduler
US11075823B1 (en) 2018-10-31 2021-07-27 Vmware, Inc. Techniques for network packet event related script execution
CN109901933B (zh) * 2019-01-18 2022-02-25 口碑(上海)信息技术有限公司 业务系统的操作方法及装置、存储介质、电子装置
US11960942B2 (en) * 2021-04-12 2024-04-16 EMC IP Holding Company, LLC System and method for identifying lock sequence conflicts

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63124139A (ja) * 1986-11-14 1988-05-27 Nec Corp 共有資源排他制御方式
JPH02291028A (ja) * 1989-04-28 1990-11-30 Fujitsu Ltd 計算機資源の排他制御方式
JPH0423047A (ja) * 1990-05-17 1992-01-27 Nec Corp 共有資源排他制御方式
JPH0659917A (ja) * 1992-08-05 1994-03-04 Hitachi Ltd 共用資源の排他制御方式
JPH06282448A (ja) * 1993-03-29 1994-10-07 Nec Corp 共有資源排他制御方式
JPH1011302A (ja) * 1996-06-20 1998-01-16 Hitachi Ltd 共有ロックを許す排他制御のデッドロック検出方法及び検出装置

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4096561A (en) * 1976-10-04 1978-06-20 Honeywell Information Systems Inc. Apparatus for the multiple detection of interferences
US4249241A (en) * 1978-10-23 1981-02-03 International Business Machines Corporation Object access serialization apparatus for a data processing system
JPH0383142A (ja) 1989-08-28 1991-04-09 Nec Corp 共有資源排他制御方式
US5161227A (en) * 1989-11-13 1992-11-03 International Business Machines Corporation Multilevel locking system and method
JP2699600B2 (ja) * 1990-01-30 1998-01-19 日本電気株式会社 資源の排他制御方式
US5247672A (en) * 1990-02-15 1993-09-21 International Business Machines Corporation Transaction processing system and method with reduced locking
US5263155A (en) * 1991-02-21 1993-11-16 Texas Instruments Incorporated System for selectively registering and blocking requests initiated by optimistic and pessimistic transactions respectively for shared objects based upon associated locks
JP2781092B2 (ja) * 1991-11-06 1998-07-30 富士通株式会社 システム間排他制御方式
US5392433A (en) * 1992-09-25 1995-02-21 International Business Machines Corporation Method and apparatus for intraprocess locking of a shared resource in a computer system
US5469575A (en) * 1992-10-16 1995-11-21 International Business Machines Corporation Determining a winner of a race in a data processing system
US5734909A (en) * 1995-09-01 1998-03-31 International Business Machines Corporation Method for controlling the locking and unlocking of system resources in a shared resource distributed computing environment
US5737611A (en) * 1996-04-05 1998-04-07 Microsoft Corporation Methods for dynamically escalating locks on a shared resource
US6052781A (en) * 1997-02-21 2000-04-18 Savvy Frontiers Property Trust Multiple user computer including anti-concurrent user-class based disjunctive separation of plural hard drive operation
US6141720A (en) * 1997-06-12 2000-10-31 Cabletron Systems, Inc. Method and apparatus for coordination of a shared object in a distributed system
US6480918B1 (en) * 1998-12-22 2002-11-12 International Business Machines Corporation Lingering locks with fairness control for multi-node computer systems
US6542891B1 (en) * 1999-01-29 2003-04-01 International Business Machines Corporation Safe strength reduction for Java synchronized procedures
US6412034B1 (en) * 1999-04-16 2002-06-25 Oracle Corporation Transaction-based locking approach
US7500037B2 (en) * 2007-01-30 2009-03-03 International Business Machines Corporation System, method and program for managing locks
US8352658B2 (en) * 2010-05-27 2013-01-08 Microsoft Corporation Fabric based lock manager service

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63124139A (ja) * 1986-11-14 1988-05-27 Nec Corp 共有資源排他制御方式
JPH02291028A (ja) * 1989-04-28 1990-11-30 Fujitsu Ltd 計算機資源の排他制御方式
JPH0423047A (ja) * 1990-05-17 1992-01-27 Nec Corp 共有資源排他制御方式
JPH0659917A (ja) * 1992-08-05 1994-03-04 Hitachi Ltd 共用資源の排他制御方式
JPH06282448A (ja) * 1993-03-29 1994-10-07 Nec Corp 共有資源排他制御方式
JPH1011302A (ja) * 1996-06-20 1998-01-16 Hitachi Ltd 共有ロックを許す排他制御のデッドロック検出方法及び検出装置

Also Published As

Publication number Publication date
WO2012114516A1 (ja) 2012-08-30
US9411660B2 (en) 2016-08-09
JPWO2012114516A1 (ja) 2014-07-07
US20130339560A1 (en) 2013-12-19

Similar Documents

Publication Publication Date Title
JP5621904B2 (ja) ロック制御装置、ロック制御プログラムおよびロック制御方法
US8875151B2 (en) Load balancing method and apparatus in symmetric multi-processor system
US9778962B2 (en) Method for minimizing lock contention among threads when tasks are distributed in multithreaded system and apparatus using the same
CN101253483B (zh) 管理资源锁的方法和系统
EP2437168A2 (en) Method and device for balancing load of multiprocessor system
US20090172686A1 (en) Method for managing thread group of process
US9875141B2 (en) Managing pools of dynamic resources
JP2017534994A (ja) 複数の同時実行中スレッド間における共有可能リソースの排他的制御を管理するための方法、システム、およびコンピュータ・プログラム
JP2008191949A (ja) マルチコアシステムおよびマルチコアシステムの負荷分散方法
US20150301871A1 (en) Busy lock and a passive lock for embedded load management
JP5818824B2 (ja) デュアル・モード・リーダ・ライタ・ロック
JP2011175378A (ja) マルチプロセッサシステム、及びマルチプロセッサシステムの動作方法
JP5300005B2 (ja) スレッド実行制御方法、およびシステム
US8677373B2 (en) Computation resource control apparatus, computation resource control method, and non-transitory computer-readable recording medium
CN110032441B (zh) 提升服务器性能的方法及装置和电子设备
CN106557477B (zh) 在存储器中锁定文件的方法和设备
JP2009541852A5 (ja)
JP5676664B2 (ja) リソース管理装置、リソースの管理方法、及びプログラム
KR20180082560A (ko) 태스크의 시간-기반 스케줄링을 위한 방법 및 장치
CN102662742A (zh) 一种基于锁的线程管理方法及装置
JP2017201486A (ja) 情報処理装置、情報処理プログラム、及び情報処理方法
JP6462521B2 (ja) 通常部の故障が安全部へ伝播することを防止するapi及びその処理部
WO2019044226A1 (ja) アクセス制御装置
JP2010026575A (ja) スケジューリング方法およびスケジューリング装置並びにマルチプロセッサシステム
JP2011118688A (ja) 排他制御装置

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140610

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140801

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140826

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140908

R150 Certificate of patent or registration of utility model

Ref document number: 5621904

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150