(57)【要約】【課題】情報処理装置において、最適な範囲で排他制御を実施する。【解決手段】１つ以上のリソースを備える情報処理装置１０において、処理を排他獲得する第1フェーズと、処理を実行する第２フェーズとで処理を分類し、前記第１フェーズは複数のリソースの処理が並行して楽観的排他制御により排他を獲得し、前記第２フェーズは悲観的排他制御により排他を獲得した状態で前記リソースの処理を実行する。【選択図】図４
2019125100.tif 000002
【特許請求の範囲】
【請求項１】
１つ以上のリソースを備える情報処理装置において、
処理を排他獲得する第1フェーズと、処理を実行する第２フェーズとで処理を分類し、
前記第１フェーズは複数のリソースの処理が並行して楽観的排他制御により排他を獲得し、
前記第２フェーズは悲観的排他制御により排他を獲得した状態で前記リソースの処理を実行する、
ことを特徴とする、情報処理装置。
【請求項２】
前記第２フェーズにおいて、競合するリソースが存在する場合は、処理を待ちキューに追加する制御を行なう、
ことを特徴とする、請求項１記載の情報処理装置。
【請求項３】
前記リソース毎に当該リソースの排他状態を表す排他制御情報を作成し、前記排他制御情報を参照して、前記第１フェーズから前記第２フェーズへの移行を制御する、
ことを特徴とする、請求項１または２記載の情報処理装置。
【請求項４】
前記排他制御情報が、
リソースに対する参照状態，前記リソースの版状態および排他を獲得したジョブ、のうち少なくともいずれかの情報を含む、
ことを特徴とする、請求項３記載の情報処理装置。
【請求項５】
前記排他制御情報を管理用データベースに格納する制御を行なう、
ことを特徴とする、請求項３または４記載の情報処理装置。
【請求項６】
１つ以上のリソースを備える情報処理装置において、
処理を排他獲得する第1フェーズと、処理を実行する第２フェーズとで処理を分類し、
前記第１フェーズは複数のリソースの処理が並行して楽観的排他制御により排他を獲得し、前記第２フェーズは悲観的排他制御により排他を獲得した状態で前記リソースの処理を実行する、
処理をコンピュータに実行させることを特徴とする、制御プログラム。
【請求項７】
１つ以上のリソースを備える情報処理装置において、
処理を排他獲得する第1フェーズと、処理を実行する第２フェーズとで処理を分類し、
前記第１フェーズは複数のリソースの処理が並行して楽観的排他制御により排他を獲得し、前記第２フェーズは悲観的排他制御により排他を獲得した状態で前記リソースの処理を実行する、
ことを特徴とする、制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、制御方法、及び制御プログラムに関する。
【背景技術】
【０００２】
情報処理システムにおいて、複数のボリューム（ｖｏｌｕｍｅ）や、各ボリュームを一定の論理ブロックサイズごとに分割したチャンク（ｃｈｕｎｋ）に対して、複数のジョブ（ｊｏｂ）が同時にアクセス等の処理を実行する競合動作が発生することがある。このような競合動作を回避するために、ボリュームやチャンク等のリソース（以下、単にオブジェクトという）毎に排他制御が行なわれている。
【０００３】
図１３は、比較例に係る排他制御を例示したものである。この図１３に示すように、オブジェクト間には、例えば、１つのボリューム１０１に、１つ以上のチャンク１０２ｘ，１０２ｙ，１０２ｚが含まれるといったような包含関係が存在する。なお、以下、チャンクを示す符号としては、複数のチャンクのうち１つを特定する必要があるときには符号１０２ｘ，１０２ｙ，１０２ｚを用いるが、任意のチャンクを指すときには符号１０２を用いる。また、チャンク１０２ｘをチャンクＸ，チャンク１０２ｙをチャンクＹ，チャンク１０２ｚをチャンクＺという場合がある。ボリューム１０１とチャンク１０２とは相互にアクセスし得るので、ボリューム１０１からチャンク１０２へアクセスする場合と、これとは逆の関係性（ルート）を辿るアクセス、すなわち、チャンク１０２からボリューム１０１へアクセスする場合とがある。図１３の（ａ）は、チャンクＸからボリューム１０１へのアクセスを例示したものである。この図１３の（ａ）に示す場合の排他制御では、最初にチャンクＸについて排他を獲得し、次にボリューム１０１について排他を獲得することが必要となる。すなわち、チャンクＸ，ボリューム１０１の順序で、排他を獲得することが必要になる。この排他を獲得する順序を、排他順序ともいう。また、図１３の（ｂ）は、ボリューム１０１から、チャンクＸとチャンクＹとへのアクセスを例示したものである。この図１３の（ｂ）に示す排他制御では、ボリューム１０１について排他を獲得した後に、チャンクＸ及びチャンクＹについて排他を獲得する、という排他順序が必要となる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−１７８８３１号公報
【特許文献２】特開２００９−３７５４４号公報
【特許文献３】特開２０１６−９５６３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
このような従来の排他制御では、例えば、最初にボリュームについて排他を獲得し、次にチャンクについて排他を獲得する、というように設計段階で排他順序を決定しておくことがある。図１４は、比較例に係るジャイアントロック方式による排他制御を例示したものである。この図１４の（ａ）に示すように、上述のような排他制御のもと、チャンクＸからボリュームＡに対してアクセスを行なう場合には、設計段階とは逆の排他順序で排他を獲得する必要があるので、このアクセス処理を完了することができない。そこで、設計段階において決定された排他順序を維持しつつ、広範囲に排他制御を行なうジャイアントロック方式が知られている。
【０００６】
図１４の（ｂ）を用いて、ジャイアントロック方式を適用した情報処理システムにおいて、アクセス元（更新元）のチャンクＸから、アクセス先（更新先）のボリュームＡ（１０１ａ）に対してアクセスを行なう場合を例にとり説明する。なお、以下、ボリュームを示す符号としては、複数のボリュームのうち１つを特定する必要があるときには符号１０１ａ，１０１ｂを用いるが、任意のチャンクを指すときには符号１０１を用いる。また、ボリューム１０１ａをボリュームＡ，ボリューム１０１ｂをボリュームＢという場合がある。ジャイアントロック方式では、アクセス要求の有無に関係なく、アクセス先のオブジェクト（ボリュームＡ）に繋がるすべてのオブジェクト（チャンクＸ，チャンクＹ，チャンクＺ）について排他を獲得する。同時に、一定の条件のもと関連性があると判断されたオブジェクト、例えば、ボリュームＢについても排他を獲得する場合がある。
【０００７】
上述した、チャンクＸからボリュームＡへのアクセスにおいては、アクセス元とアクセス先のみを含む範囲についてのみ排他制御を実施すれば十分であることが多い。ここで、排他を獲得する範囲を、排他範囲ともいい、図中符号１０３を付して示す。しかしながら、ジャイアントロック方式を採用した場合には、排他範囲１０３は図１４の（ｂ）に示すように、ボリュームＢや、チャンクＹ，チャンクＺも含むように設定される。そのため、必要最低限の排他範囲を超えて排他制御が実施されるので、最適な範囲で排他制御を行なうことができないという課題がある。そこで、設計段階での排他順序を維持しつつ、排他範囲を最小限にするためには、排他範囲に含まれるオブジェクトをすべて検索する手法が知られている。この手法では、アクセス元のチャンクＸに繋がるボリュームを、チャンクテーブル等を用いて全検索することにより、排他を獲得する対象となるオブジェクトを求める。この手法を採用した場合、プログラムコードの量が膨大になるという課題がある。
【０００８】
１つの側面では、情報処理システムにおいて、最適な範囲で排他制御を実施することを目的とする。
【課題を解決するための手段】
【０００９】
本発明に係る情報処理装置は、１つ以上のリソースを備え、処理を排他獲得する第１フェーズと、処理を実行する第２フェーズとで処理を分類し、前記第１フェーズは複数のリソースの処理が並行して楽観的排他制御により排他を獲得し、前記第２フェーズは悲観的排他制御により排他を獲得した状態で前記リソースの処理を実行する。
【発明の効果】
【００１０】
一実施形態によれば、情報処理システムにおいて、最適な範囲で排他制御を実施することができる。
【図面の簡単な説明】
【００１１】
【図１】実施形態の一例としての情報処理システムのハードウェア構成を例示する図である。
【図２】実施形態の一例としての情報処理システムにおける記憶装置の永続化の動作を説明するための図である。
【図３】実施形態の一例としての情報処理システムにおけるハードウェア構成の表示例である。
【図４】実施形態の一例としての情報処理システムにおけるサーバの機能ブロックを例示する図である。
【図５】実施形態の一例としての情報処理システムにおけるボリュームテーブルとチャンクテーブルのオブジェクト指向モデルによる表示例である。
【図６】実施形態の一例としての情報処理システムにおける排他制御を例示する図である。
【図７】実施形態の一例としての情報処理システムにおける排他処理フェーズを説明するためのフローチャートである。
【図８】実施形態の一例としての情報処理システムにおける排他処理フェーズを例示する図である。
【図９】実施形態の一例としての情報処理システムにおける排他制御表を例示する図である。
【図１０】実施形態の一例としての情報処理システムにおける処理実行フェーズを説明するためのフローチャートである。
【図１１】実施形態の一例としての情報処理システムにおける処理実行フェーズを例示する図である。
【図１２】実施形態の一例としての情報処理システムにおける追い越しを例示する図である。
【図１３】一実施形態の比較例に係る排他制御を例示する図である。
【図１４】一実施形態の比較例に係るジャイアントロック方式による排他制御を例示する図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照して本発明の実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示あり、以下に明示しない種々の変形や技術の適用を排除する意図等はない。例えば、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。なお、以下の実施形態で用いる図面において、同一符号を付した部分は、特に断らない限り、同一若しくは同様の部分を表す。
【００１３】
〔１〕一実施形態
〔１−１〕一実施形態に係る情報処理システムの構成例
図１は、実施形態の一例としての情報処理システム１のハードウェア構成を例示する図である。
【００１４】
この図１に示すように、情報処理システム１は、サーバ１０ａ、サーバ１０ｂ、及びスイッチ３０を備え、サーバ１０ａ，１０ｂとスイッチ３０とはネットワーク３で接続される。なお、以下、サーバを示す符号としては、複数のサーバのうち１つを特定する必要があるときには符号１０ａ，１０ｂを用いるが、任意のサーバを指すときには符号１０を用いる。また、サーバ１０ａをサーバＡ，サーバ１０ｂをサーバＢという場合がある。さらに、情報処理システム１は、記憶装置２０ａ〜２０ｄを備え、サーバ１０と記憶装置２０ａ〜２０ｄとはネットワーク３で接続されている。なお、以下、記憶装置を示す符号としては、複数の記憶装置のうち１つを特定する必要があるときには符号２０ａ，２０ｂ，２０ｃ，２０ｄを用いるが、任意の記憶装置を指すときには符号２０を用いる。また、記憶装置２０ａを記憶装置Ａ，記憶装置２０ｂを記憶装置Ｂ，記憶装置２０ｃを記憶装置Ｃ，記憶装置２０ｄを記憶装置Ｄという場合がある。情報処理システム１は、図示しないネットワークを介して、例えば、外部装置であるホストコンピュータ２に接続されている。図１には、情報処理システム１が、１つのスイッチ３０を備えることを図示したが、情報処理システム１は、スイッチ３０を複数備えてよい。図１には、情報処理システム１が、サーバ１０と記憶装置２０とをそれぞれ複数備えることを図示したが、情報処理システム１は、サーバ１０と記憶装置２０とをそれぞれ１つ備えてもよい。
【００１５】
サーバ１０は、マルチコア構成の複数のＣＰＵ（Central Processing Unit）１１を備える。さらに、サーバ１０は、ＲＡＭ（Random-Access Memory）１２，及び記憶部１３を備える。ＣＰＵ１１は、記憶部１３に格納されるＯＳ（Operating System）やプログラムを実行し、外部装置、例えば、ホストコンピュータ２から入力されたアクセス要求に対して、オブジェクトの排他制御を行なう。記憶部１３は、例えば、不揮発性メモリであり、ホストコンピュータ２との通信制御や排他制御を実行するためのプログラムの他、ボリュームテーブル５１、チャンクテーブル５２、待ちキュー５４、及び排他制御表５３を格納する（図４参照）。
【００１６】
記憶装置（管理用データベース）２０は、ＲＤＢ（リレーショナル・データベース；Ｒｅｌａｔｉｏｎａｌ  Ｄａｔａｂａｓｅ）に利用される物理ディスクであり、複数のオブジェクトはＲＤＢにマッピングされている。記憶装置２０は、永続化を目的としたデータベース（永続化ＤＢ）等であり、記憶する情報は、永続化を実現するための情報、すなわち、永続化情報である。図２は、本実施形態における記憶装置２０の永続化の動作を説明するための図である。図２の（ａ）に示すように、サーバ１０のＯＳのプロセスダウン等によりアプリケーションが再起動となった場合を想定する。このような場合、本情報処理システム１では、図２の（ｂ）に示すように、記憶装置２０に格納される永続化情報を用いて、サーバ１０のジョブやオブジェクトが復元される。これにより、サーバ１０は、記憶装置２０に格納されている、再起動直前のオブジェクトやジョブを用いて、サーバ１０のアプリケーションの実行を再開できる。
【００１７】
次に、図３は、本情報処理システム１のハードウェア構成の表示例を示したものである。図３の（ａ）は、本情報処理システム１のハードウェア構成例を示している。この図３の（ａ）に示すように、スイッチ３０は、サーバＡ，サーバＢに接続されている。そして、サーバＡには記憶装置Ａと記憶装置Ｂとが接続されており、サーバＢには記憶装置Ｃと記憶装置Ｄとが接続されている。図３の（ａ）に示すハードウェア構成について、オブジェクト指向モデルを用いて表した例を図３の（ｂ）に示す。この図３の（ｂ）に示すように、オブジェクト指向モデルを用いると、スイッチ３０，サーバ１０，記憶装置２０等のオブジェクト毎に属性が明示される。例えば、スイッチ３０について、属性“ｎａｍｅ”の値（属性値）は“Ａ”であり、属性“ｉｎｄｅｘ”の値は“１”であることが明示される。また、図３の（ｂ）内の矢印は、オブジェクト間での参照関係を示す。この参照関係は、例えば、各オブジェクトが格納する参照テーブルによって実現される。参照テーブルには、スイッチ３０からサーバＡへの参照関係や、サーバＡから記憶装置Ｂへの参照関係が定義されている。なお、この参照テーブルには、上記とは逆の参照ルート、すなわち、記憶装置ＢからサーバＡへの参照関係や、サーバＡからスイッチ３０への参照関係が定義されてもよい。なお、オブジェクトは、複数の参照テーブルを格納してもよい。このような参照テーブルは公知であるため、ここではその説明を省略する。
【００１８】
〔１−２〕一実施形態に係る情報処理システムにおけるサーバの機能構成例
図４は、図１に示す情報処理システム１におけるサーバ１０の機能構成を例示したブロック図である。
【００１９】
図４に示すように、一実施形態に係る情報処理システム１のサーバ１０は、例示的に、制御部４０と記憶部１３とを備えてよい。そして、制御部４０は、ディスク制御部４２、ボリュームテーブル管理部４５、チャンクテーブル管理部４６、及び、排他制御部４１を備えてよい。また、この排他制御部４１は、排他獲得部４３、処理実行部４４、及び、排他制御表管理部４７を備えてよい。
【００２０】
排他制御部４１は、本情報処理システム１にホストコンピュータ２が接続されている場合において、ホストコンピュータ２からのアクセス要求に対して、このアクセス要求に関連するオブジェクトの排他制御を行なう。
【００２１】
ディスク制御部４２は、本情報処理システム１にホストコンピュータ２が接続されている場合において、記憶装置２０に対するデータの書き込みや読み出し等のアクセス処理を制御する。すなわち、ディスク制御部４２は、例えば、記憶部１３のデータを記憶装置２０に書き込んだり、記憶装置２０のデータを記憶部１３に格納する。
【００２２】
排他獲得部４３は、排他制御部４１による排他制御のうち、後述する、排他獲得フェーズ（ｐｒｅｐａｒｅ）を実行する。この排他獲得フェーズは、第１フェーズともいう。
【００２３】
処理実行部４４は、排他制御部４１による排他制御のうち、後述する、処理実行フェーズ（ｅｘｅｃｕｔｅ）を実行する。この処理実行フェーズは、第２フェーズともいう。
【００２４】
ボリュームテーブル管理部４５は、後述する、ボリュームテーブル５１を管理する。すなわち、ボリュームテーブル管理部４５は、本情報処理システム１に備えられる各ボリュームに関する属性値等をボリュームテーブル５１を用いて管理する。
【００２５】
チャンクテーブル管理部４６は、後述する、チャンクテーブル５２を管理する。すなわち、チャンクテーブル管理部４６は、ボリュームに含まれるチャンクに対する物理領域の割り当てをチャンクテーブル５２を用いて管理する。
【００２６】
排他制御表管理部４７は、後述するオブジェクトの排他制御表５３を取得（参照）し、当該排他制御表５３に格納されている値の更新等を行なう。各オブジェクトが、自身の排他制御表５３を格納している場合には、排他制御表管理部４７は、ネットワーク３を介して、各オブジェクトの排他制御表５３を取得又は更新する。
【００２７】
また、サーバ１０の記憶部１３は、ボリュームテーブル５１、チャンクテーブル５２、排他制御表５３、及び待ちキュー５４を格納する。さらに、記憶部１３は、ボリュームテーブル５１，チャンクテーブル５２，排他制御表５３，待ちキュー５４をそれぞれ複数備えてもよい。
【００２８】
図５は、実施形態の一例としての情報処理システム１におけるボリュームテーブル５１とチャンクテーブル５２とを表示したものである。図５の（ａ）は、ボリュームＡ，チャンク１０２の各オブジェクトを、オブジェクト指向モデルを用いて表現したものである。図５の（ｂ）は、図５の（ａ）に示したオブジェクト指向モデルを、ＯＲ（Ｏｂｊｅｃｔ／Ｒｅｌａｔｉｏｎａｌ）マッピングを用いて、リレーショナルデータモデルで表現したものである。
【００２９】
ボリュームテーブル５１は、各ボリューム１０１のボリューム名を格納するためのフィールド“ｖ＿ｎａｍｅ”，当該ボリューム１０１のサイズを格納するためのフィールド“ｓｉｚｅ”を備える。図５の（ｂ）は、ボリュームＡのボリュームテーブル５１を例示しており、このボリュームテーブル５１は、ボリューム名が“Ａ”であるボリュームのサイズが“２００”であることを示す。なお、ボリューム１０１のサイズの単位は任意のものとする。
【００３０】
チャンクテーブル５２は、各チャンク１０２のチャンク名を格納するためのフィールドである“ｃ＿ｎａｍｅ”，当該チャンク１０２のインデックスを格納するためのフィールドである“ｉｎｄｅｘ”を備える。さらに、チャンクテーブル５２は、対応するボリューム名を格納するためのフィールドである“ｖ＿ｎａｍｅ”を備える。チャンク１０２のインデックスとは、各チャンク１０２に付与された識別番号であり、対応するボリューム名とは、当該チャンク１０２に対して物理領域が割り当てられているボリュームである。図５の（ｂ）には、チャンクＸ，チャンクＹ，チャンクＺの情報を格納するチャンクテーブル５２を例示する。例えば、チャンクテーブル５２の１レコード目は、チャンク名が“Ｘ”のチャンク１０２について、そのインデックスが“１”であり、当該チャンク１０２に対して物理領域が割り当てられているボリュームが“Ａ”であることを示す。
【００３１】
排他制御表５３は、ジョブの競合が発生している状態（競合状態）を管理する情報であり、オブジェクト毎に備えられる。排他制御表５３については、図９を用いて後述する。本実施形態では、排他制御表５３を表形式で表しているが、これに限定されるものではない。
【００３２】
待ちキュー５４は、競合するジョブのうち、排他を獲得することができないジョブを格納するキューである。
【００３３】
〔１−３〕一実施形態に係る情報処理システムにおける排他制御処理
実施形態の一例としての情報処理システム１における排他制御の処理について説明する。
【００３４】
本実施形態では、情報処理システム１における排他制御を、排他獲得フェーズと処理実行フェーズとの２段階に分割して処理する。
【００３５】
まず、本実施形態における排他獲得フェーズについて説明する。排他獲得フェーズは、排他を獲得するための準備段階であり、この段階では楽観的排他制御を実行する。したがって、複数のジョブは、並行してオブジェクトにアクセスすることが可能となり、アクセス先のオブジェクトについての排他を獲得し合う。この楽観的排他制御は公知であるため、ここではその説明を省略する。この排他獲得フェーズは、排他獲得部４３によって実現される。
【００３６】
次に、本実施形態における処理実行フェーズについて説明する。処理実行フェーズは、排他獲得フェーズにおいて排他が獲得された後に、処理の実行を行なう段階であり、この段階では悲観的排他制御を実行する。したがって、排他を獲得したジョブだけが目的のオブジェクトにアクセスできることになり、排他を獲得できなかった（競合する）ジョブが存在する場合、これらのジョブは待ちキュー５４に追加される。この悲観的排他制御は公知であるため、ここではその説明を省略する。この処理実行フェーズは、処理実行部４４によって実現される。
【００３７】
図６に、本実施形態における排他制御を例示する。図６では、例えば、管理者によって、ホストコンピュータ２から、２つのジョブ（ｊｏｂ１，ｊｏｂ２）が投入された場合を想定する。ここで、ｊｏｂ１は、チャンクＸからボリュームＡを読み出す処理を含み、ｊｏｂ２は、チャンクＺからボリュームＡを読み出す処理を含む。図６に示す各ジョブの命令（コマンド）を参照すると、排他獲得フェーズにおける２番目の命令から明らかなように、ｊｏｂ１，ｊｏｂ２は、共に、ボリュームＡを検索する処理を含む。そして、ｊｏｂ１，ｊｏｂ２における処理実行フェーズでの１番目の命令から明らかなように、ｊｏｂ１，ｊｏｂ２は、共に、各チャンクに対して書き込みを行なう。すなわち、ｊｏｂ１，ｊｏｂ２は、いずれもボリュームＡについては書き込みを行なわないことから、これらのジョブを同時に実行することが可能な確率が高い。
【００３８】
図６に示すようなジョブｊｏｂ１，ｊｏｂ２が投入された場合、ジャイアントロック方式を適用した排他制御では、いずれかのジョブのみがボリュームＡにアクセスするような排他範囲１０３ａを設定することになる。その結果、ジョブｊｏｂ１，ｊｏｂ２を並列に実行することができず、どちらか一方のジョブのみを実行することになる。本実施形態における排他制御では、排他範囲を、チャンクＸとボリュームＡとを対象にする排他範囲１０３ｘと、チャンクＺとボリュームＡとを対象にする排他範囲１０３ｚとに限定することにで、ジョブｊｏｂ１，ｊｏｂ２を並列に実行することを可能にする。これにより、情報処理システム１全体の処理におけるスループットを向上させることができると共に、排他順序に関わらず目的のオブジェクトへのアクセスを可能とする。
【００３９】
〔１−４〕動作例
次に、上述の如く構成された情報処理システム１による排他獲得フェーズ及び処理実行フェーズのそれぞれの動作例を説明する。
【００４０】
〔１−４−１〕一実施形態に係る情報処理システムによる排他獲得フェーズの動作例
本実施形態における排他獲得フェーズの処理の一例を、図８及び図９を参照しながら、図７に示すフローチャート（ステップＥ１〜Ｅ６）に従って説明する。図８は、本実施形態における排他処理フェーズを例示する図であり、管理者によって、ホストコンピュータ２からジョブ（ｊｏｂ１）が投入された場合の処理を例示している。また、図９は、本実施形態における排他制御表５３を例示する図である。
【００４１】
ステップＥ１において、排他制御部４１は、管理者によってホストコンピュータ２からジョブが投入された場合、この投入されたジョブを受け取り、受け取ったジョブを、例えば、ディスク制御部４２に依頼して、記憶装置２０に格納する。このジョブは、記憶装置２０に格納されることにより、永続化を実現するための情報となる。そして、排他制御部４１は、排他獲得部４３に、ステップＥ１において受け取ったジョブについての排他獲得フェーズの実行を命令する。図８に示す例では、排他制御部４１は、ｊｏｂ１を受け取ると、排他獲得部４３に、ｊｏｂ１についての排他獲得フェーズの実行を命令する（Ｓ１参照）。
【００４２】
ステップＥ２では、ジョブに含まれるオブジェクトに対する参照を行なうと共に、排他獲得部４３が、排他制御表管理部４７に、当該オブジェクトの排他制御表５３の更新を依頼する。
【００４３】
ここで、図９を用いて、本実施形態における排他制御表５３について説明する。
【００４４】
排他制御表（排他制御情報）５３は、排他を実施するために用いられる制御情報であり、オブジェクト毎に備えられる。この排他制御表５３は、例えば、記憶装置２０に格納される。排他制御表５３は、構成要素として、参照カウンタ５３１，バージョンカウンタ５３２，ロック保持者５３３を備える。
【００４５】
参照カウンタ（参照状態）５３１は、当該オブジェクトがジョブによって参照されている数をリアルタイムに表す。この参照カウンタ５３１は、ジョブによって当該オブジェクトに対する参照があった時に、その値に“１”が加算され、後述する処理実行フェーズが完了した後に、その値から“１”が減算される。図９は、ボリュームＡの排他制御表５３と、チャンクＸの排他制御表５３とを例示したものである。図９に示す例では、ボリュームＡとチャンクＸの参照カウンタ５３１の値が“０”であることから、ボリュームＡとチャンクＸとを参照しているジョブがないことを示す。
【００４６】
バージョンカウンタ（版状態）５３２は、オブジェクト内のデータに関する更新（バージョン）の状態を示すものである。バージョンカウンタ５３２は、そのデータの書き込み（更新）が行われると、後述する処理実行フェーズが完了した後、その値に“１”が加算される。図９に示す例では、チャンクＸの排他制御表５３には、バージョンカウンタ５３２の値が“１０”に設定されていることから、チャンクＸ内のデータのバージョンが“１０”であることを示している。また、ボリュームＡの排他制御表５３には、バージョンカウンタ５３２の値が“５”に設定されていることから、ボリュームＡ内のデータのバージョンが“５”であることを示している。
【００４７】
ロック保持者（排他を獲得したジョブ）５３３は、排他を獲得するジョブを示すものであり、例えば、ロック保持者５３３の値にはジョブの識別子（ＩＤ）が設定される。本実施形態において、このロック保持者５３３の値は、図７のステップＥ２において書き込まれるものとし、後述する処理実行フェーズの完了時に削除されるものとする。また、ロック保持者５３３が設定されていない場合には、図９に示すように、ロック保持者５３３の値に“ＮＵＬＬ”が設定されるものとする。
【００４８】
なお、本実施形態において、オブジェクト毎に備えられる排他制御表５３は、当該オブジェクトに対する処理の実行によって参照又は更新されることから、最新の状態を示すものであるといえる。また、各オブジェクトによる処理の実行後に更新された最新の排他制御表５３は、サーバ１０の記憶部１３に格納されてもよい。
【００４９】
本実施形態では、以上のような値を備える排他制御表５３を用いて排他制御の処理を実行する。
【００５０】
図７に示すフローチャートにおけるステップＥ２の説明に戻る。ステップＥ２において、ジョブによってオブジェクトが参照されると、排他獲得部４３が、排他制御表管理部４７に、ジョブによって参照されたオブジェクトの排他制御表５３の更新を依頼する。排他制御表管理部４７は、排他獲得部４３からの依頼を受け、更新対象となるオブジェクトの排他制御表５３を取得する。図８に例示するｊｏｂ１の場合、（２）の処理においてチャンクＸが検索され、（３）の処理においてボリュームＡが検索される。これにより、チャンクＸとボリュームＡとが参照されるので、排他制御表管理部４７は、チャンクＸとボリュームＡの排他制御表５３を取得する。これらの排他制御表５３が、各オブジェクトに格納されている場合には、排他制御表管理部４７は、例えば、ネットワーク３を介して、記憶装置２０から当該排他制御表５３を取得するものとする。また、排他制御表管理部４７は、取得した排他制御表５３を記憶部１３に一時的に格納してもよく、これらの排他制御表５３を獲得した時点で、記憶部１３に格納される最新の排他制御表５３を更新してもよい。そして、排他制御表管理部４７は、ｊｏｂ１によってチャンクＸとボリュームＡとが参照されたことを受け、チャンクＸとボリュームＡとの排他制御表５３における参照カウンタ５３１の値に、それぞれ１を加算する（Ｓ２参照）。次に、排他制御表管理部４７は、図８に例示するｊｏｂ１において、（４）の処理にチャンクＸの更新準備が含まれることから、チャンクＸの排他制御表５３におけるロック保持者５３３の値に、“ｊｏｂ１”を設定する（Ｓ３参照）。
【００５１】
続くステップＥ３において、排他獲得部４３は、ジョブによって参照されるオブジェクトの排他制御表５３における、参照カウンタ５３１の値，バージョンカウンタ５３２の値について、更新の有無を確認する。例えば、ジョブによって読み出し処理が行なわれる場合、排他獲得部４３は、対象となるオブジェクトの排他制御表５３におけるバージョンカウンタ５３２の値の変更の有無を確認する。バージョンカウンタ５３２の値の変更の有無を確認するのは、データを読み出す直前に、他のジョブによって当該データが更新されていないことを確認するためである。また、例えば、ジョブによって書き込み処理が行なわれる場合、排他獲得部４３は、対象となるオブジェクトの排他制御表５３における参照カウンタ５３１の値，バージョンカウンタ５３２の値の変更の有無を確認する。参照カウンタ５３１の値，バージョンカウンタ５３２の値の変更の有無を確認するのは、データを書き込む直前に、他のジョブによって当該データが参照又は更新されていないことを確認するためである。図８の例では、（５）の処理において、排他獲得部４３は、読み出し対象のボリュームＡの排他制御表５３におけるバージョンカウンタ５３２の値の変更の有無を確認する。同時に、排他獲得部４３は、書き込み対象のチャンクＸの排他制御表５３における参照カウンタ５３１の値，バージョンカウンタ５３２の値の変更の有無を確認する。そして、排他獲得部４３は、上記値のうちいずれにも変更がなければ、排他獲得フェーズの条件を満たしたと判断し、処理がステップＥ４に進む（ステップＥ３でＹｅｓ）。一方、排他獲得部４３が、上記値のうちいずれかに変更があれば、排他獲得フェーズの条件を満たしていないと判断し、処理がステップＥ２に戻る（ステップＥ３でＮｏ）。
【００５２】
ステップＥ４において、排他獲得部４３は、ジョブによって参照されるオブジェクトの排他制御表５３におけるロック保持者５３３の値に、“ＮＵＬＬ”が設定されているか否かを判定する。排他獲得部４３が、ロック保持者５３３の値に、“ＮＵＬＬ”が設定されていると判定した場合、処理がステップＥ５に進む（ステップＥ４でＹｅｓ）。一方、排他獲得部４３が、ロック保持者５３３の値に、“ＮＵＬＬ”ではない値が設定されていると判定した場合（ステップＥ４でＮｏ）、参照されるオブジェクトに対して他のジョブが排他を獲得した可能性が高い。そこで、このような場合に、排他を獲得することができないと判断された当該ジョブは、待ちキュー５４に格納される（ステップＥ６）。ここでは図示していないが、待ちキュー５４に格納されたジョブについては、所定のタイミングで処理獲得フェーズでの処理を再開（再実行）してもよく、その場合、例えば、図７のステップＥ１から処理を実行してもよい。
【００５３】
ステップＥ５では、完了処理として、排他の獲得処理を実行する。図８の例では、排他を獲得することが必要となる必要最小限のオブジェクトは、チャンクＸとボリュームＡとである。そこで、排他獲得部４３は、ｊｏｂ１に対して、チャンクＸ，ボリュームＡの排他を同時に獲得する。この排他を獲得するための具体的な手法については公知の手法を用いればよい。そして、ステップＥ５の処理が終了すると、排他獲得フェーズを終了する。
【００５４】
上記排他処理フェーズにおけるステップ（ステップＥ１〜Ｅ６）を経て、排他を獲得した場合、次の処理フェーズである処理実行フェーズに移行する。
【００５５】
〔１−４−２〕一実施形態に係る情報処理システムによる処理実行フェーズの動作例
実施形態の一例としての情報処理システム１において、処理実行フェーズの処理の一例を、図１１を参照しながら、図１０に示すフローチャート（ステップＦ１〜Ｆ３）に従って説明する。図１１は、本実施形態における実行フェーズを例示する図である。
【００５６】
処理実行部４４は、排他獲得部４３から、排他処理フェーズが終了した旨の通知（排他獲得が完了した旨の通知）を受け取り、処理実行フェーズ（ステップＦ１〜Ｆ３）に移行する。ステップＦ１において、処理実行部４４は、ディスク制御部４２に、当該ジョブによって参照される排他制御表５３を、例えば、記憶装置２０に格納するよう依頼する。ディスク制御部４２が排他制御表５３を記憶装置２０に格納することにより、永続化を行なう。図１１の例では、（６）の処理のように、ディスク制御部４２は、ボリュームＡとチャンクＸとの排他制御表５３を記憶装置２０に格納する。
【００５７】
続くステップＦ２において、処理実行部４４は実処理を実行し、オブジェクトは更新される。処理実行部４４が実行する実処理の具体的内容は、ジョブ固有の処理である。図１１の例では、処理実行部４４は、ボリュームＡからのデータの読み出しと、チャンクＸへのデータの書き込みを実行する。その結果、チャンクＸ（内のデータ）が更新されることになる。
【００５８】
続くステップＦ３において、処理実行部４４は、処理実行フェーズにおける完了処理を実行する。具体的には、処理実行部４４は、ディスク制御部４２に、ジョブによって参照されたオブジェクト（の情報）を、例えば、記憶装置２０に格納するよう依頼する。さらに、処理実行部４４は、当該ジョブについて獲得されていた排他を解消する等の処理を行なうと共に、排他制御表管理部４７に、排他制御表５３の情報の更新を依頼する。図１１の例では、ｊｏｂ１の（８）において、チャンクＸに対する参照が終了したことから、排他制御表管理部４７は、チャンクＸの排他制御表５３の参照カウンタ５３１の値から１を減算する（Ｔ１参照）。同時に、チャンクＸに対する書き込みが行われたことから、排他制御表管理部４７は、チャンクＸの排他制御表５３のバージョンカウンタ５３２の値に“１”を加算する（Ｔ２参照）。同時に、ｊｏｂ１の処理について獲得されていた排他が解消されたことから、排他制御表管理部４７は、チャンクＸの排他制御表５３のロック保持者５３３の値に“ＮＵＬＬ”を設定する（Ｔ３，“（８）−１”参照）。また、ボリュームＡに対する参照も終了したことから、排他制御表管理部４７は、ボリュームＡの排他制御表５３の参照カウンタ５３１の値から“１”を減算する（Ｔ４，“（８）−１”参照）。
【００５９】
また、ステップＦ３では、処理実行部４４は、ディスク制御部４２に、更新した排他制御表５３を、例えば、記憶装置２０に格納するよう依頼する。このように、ディスク制御部４２が、参照されたオブジェクト（の情報）や更新された排他制御表５３を記憶装置２０に格納することにより、永続化を行なう。図１１の例では、“（８）−２”に示す処理のように、ディスク制御部４２は、ボリュームＡとチャンクＸの情報や、ボリュームＡとチャンクＸの排他制御表５３を記憶装置２０に格納する。
【００６０】
このようにして、本実施形態では、競合するジョブがある場合、いずれかのジョブが処理を開始する直前に排他の獲得処理を実施して、処理が完了してすぐに排他の獲得を解消すればよいことになる。これにより、処理を依頼してから処理が完了するまでの間ずっと排他の獲得処理を実施しなくてすむ。したがって、本実施形態では、排他の獲得処理を実施する時間が短くなるため、他のジョブがアクセス可能な時間帯が長くなり、処理効率が高くなる。
【００６１】
〔１−５〕一実施形態に係る情報処理システムによる追い越し発生時の処理
実施形態の一例としての情報処理システム１において、追い越しが発生した場合の処理を、図１２を用いて説明する。
【００６２】
図１２には、先行するジョブとしてｊｏｂ１が投入されており、ｊｏｂ１についての排他獲得フェーズを実行している最中に、後続のジョブであるｊｏｂ２が追い越してしまい、参照されるオブジェクトを更新し、その結果、ｊｏｂ１が再実行となる場合を例示する。このｊｏｂ１は、所定のオブジェクトに対して読み出し処理を行なうものである。ｊｏｂ１は、図１２に示すように、バージョンが“５”であるデータの読み出しを行なうものである。このようなｊｏｂ１が投入された場合、ｊｏｂ１に関して排他獲得フェーズに移行し、ｊｏｂ１の排他制御表５３が取得され、その後、ｊｏｂ１によって参照されるオブジェクトの排他制御表５３の参照カウンタ５３１の値に１が加算される（Ｐ１参照）。そして、参照されるオブジェクトの排他制御表５３のロック保持者５３３の値に“ｊｏｂ１”が設定される（Ｐ２参照）。また、ｊｏｂ２についても、参照されるオブジェクトの排他制御表５３において、参照カウンタ５３１の値に１が加算され（Ｐ４参照）、ロック保持者５３３の値に“ｊｏｂ２”が設定される（Ｐ５参照）。
【００６３】
図１２に示すように、後続するジョブとしてｊｏｂ２が投入されるものとする。このｊｏｂ２は、ｊｏｂ１と同一のオブジェクトに対して書き込み処理を行なうものである。ｊｏｂ１とｊｏｂ２の排他獲得フェーズにおいて、ｊｏｂ２について、ｊｏｂ１よりも先に排他が獲得されてしまった場合、すなわち、ｊｏｂ２の方が先に処理実行フェーズに移行した場合を想定する。図１２に示すように、ｊｏｂ１に先行して、ｊｏｂ２による書き込み処理が実行された結果、当該オブジェクトのデータのバージョンが、“５”から“６”に更新されてしまう状態、すなわち、他のジョブによる追い越しが発生する。その結果、ｊｏｂ１の排他獲得フェーズにおいて、参照されるオブジェクトの排他制御表５３のバージョンカウンタ５３２の値が変化したと判断し（Ｐ３参照）、ｊｏｂ１についての処理を再実行する。ｊｏｂ２の処理実行フェーズ完了後、参照されたオブジェクトの排他制御表５３において、参照カウンタ５３１の値から“１”が減算され（Ｐ６参照）、バージョンカウンタ５３２の値に“１”が加算される（Ｐ７参照）。また、同時に、ｊｏｂ２よって参照されたオブジェクトの排他制御表５３において、ロック保持者５３３の値に“ＮＵＬＬ”が設定される（Ｐ８参照）。
【００６４】
以上のように、排他制御表５３において、参照カウンタ５３１だけでなく、バージョンカウンタ５３２も設けることにより、図１２に示すような追い越しが発生した場合にも、処理を中断して再実行することができる。
【００６５】
〔２〕効果
このように、本実施形態の情報処理システム１においては、排他制御を、排他獲得フェーズと処理実行フェーズとの２段階に分割し、排他獲得フェーズでは、楽観的排他制御を実施するので処理実行の直前まで排他を獲得しない。これにより、特定のオブジェクトについて排他が獲得されている時間が短くなり、他のジョブによってアクセス可能な時間（帯）を短縮することができる。さらに、本実施形態の情報処理システム１においては、排他範囲を限定して最適な範囲での排他制御を実施することができる。これにより、情報処理システム１全体の処理におけるスループットを向上させることができる。
【００６６】
また、本実施形態の情報処理システム１においては、実装に用いるプログラムコードの量が少なくてすみ、汎用性のある実装が可能になる。
【００６７】
また、本実施形態の情報処理システム１においては、排他制御表５３を用いて排他制御を行なうので、複数のジョブの競合状態に対して効率よく排他制御を実施することが可能になる。
【００６８】
また、本実施形態の情報処理システム１においては、図１２に示すような追い越しが発生しても、排他を獲得できなかったジョブについての処理を中断して再実行することができる。これにより、読み出しの対象となるデータのバージョンが、所望のものとは異なっている場合には、異なるバージョンのデータを読み出すことを回避できる。
【００６９】
〔３〕その他
上述した一実施形態に係る技術は、以下のように変形、変更して実施することができる。
【００７０】
上述した実施形態では、情報処理システム１において、オブジェクト毎の排他制御表５３は、記憶装置２０に格納されるものとしたが、サーバ１０の記憶部１３等に格納されるものとしてもよい。
【００７１】
また、上述した実施形態では、排他制御表５３はオブジェクト毎に備えるものとしたが、複数のオブジェクトに対する競合状態を一括して１つのテーブルで管理するようにしてもよい。
【００７２】
〔４〕付記
以上の実施形態に関し、さらに以下の付記を開示する。
【００７３】
（付記１）
１つ以上のリソースを備える情報処理装置において、
処理を排他獲得する第1フェーズと、処理を実行する第２フェーズとで処理を分類し、
前記第１フェーズは複数のリソースの処理が並行して楽観的排他制御により排他を獲得し、
前記第２フェーズは悲観的排他制御により排他を獲得した状態で前記リソースの処理を実行する、
ことを特徴とする、情報処理装置。
【００７４】
（付記２）
前記第２フェーズにおいて、競合するリソースが存在する場合は、処理を待ちキューに追加する制御を行なう、
ことを特徴とする、付記１記載の情報処理装置。
【００７５】
（付記３）
前記リソース毎に当該リソースの排他状態を表す排他制御情報を作成し、前記排他制御情報を参照して、前記第１フェーズから前記第２フェーズへの移行を制御する、
ことを特徴とする、付記１または２記載の情報処理装置。
【００７６】
（付記４）
前記排他制御情報が、
リソースに対する参照状態，前記リソースの版状態および排他を獲得したジョブ、のうち少なくともいずれかの情報を含む、
ことを特徴とする、付記３記載の情報処理装置。
【００７７】
（付記５）
前記排他制御情報を管理用データベースに格納する制御を行なう、
ことを特徴とする、付記３または４記載の情報処理装置。
【００７８】
（付記６）
１つ以上のリソースを備える情報処理装置において、
処理を排他獲得する第1フェーズと、処理を実行する第２フェーズとで処理を分類し、
前記第１フェーズは複数のリソースの処理が並行して楽観的排他制御により排他を獲得し、前記第２フェーズは悲観的排他制御により排他を獲得した状態で前記リソースの処理を実行する、
処理をコンピュータに実行させることを特徴とする、制御プログラム。
【００７９】
（付記７）
前記第２フェーズにおいて、競合するリソースが存在する場合は、処理を待ちキューに追加する制御を行なう、
処理をコンピュータに実行させることを特徴とする、付記６記載の制御プログラム。
【００８０】
（付記８）
前記リソース毎に当該リソースの排他状態を表す排他制御情報を作成し、前記排他制御情報を参照して、前記第１フェーズから前記第２フェーズへの移行を制御する、
処理をコンピュータに実行させることを特徴とする、付記６または７記載の制御プログラム。
【００８１】
（付記９）
前記排他制御情報が、
リソースに対する参照状態，前記リソースの版状態および排他を獲得したジョブ、のうち少なくともいずれかの情報を含む、
ことを特徴とする、付記８記載の制御プログラム。
【００８２】
（付記１０）
前記排他制御情報を管理用データベースに格納する制御を行なう、
ことを特徴とする、付記８または９記載の制御プログラム。
【００８３】
（付記１１）
１つ以上のリソースを備える情報処理装置において、
処理を排他獲得する第1フェーズと、処理を実行する第２フェーズとで処理を分類し、
前記第１フェーズは複数のリソースの処理が並行して楽観的排他制御により排他を獲得し、前記第２フェーズは悲観的排他制御により排他を獲得した状態で前記リソースの処理を実行する、
ことを特徴とする、制御方法。
【００８４】
（付記１２）
前記第２フェーズにおいて、競合するリソースが存在する場合は、処理を待ちキューに追加する制御を行なう、
処理をコンピュータに実行させることを特徴とする、付記１１記載の制御方法。
【００８５】
（付記１３）
前記リソース毎に当該リソースの排他状態を表す排他制御情報を作成し、前記排他制御情報を参照して、前記第１フェーズから前記第２フェーズへの移行を制御する、
処理をコンピュータに実行させることを特徴とする、付記１１または１２記載の制御方法。
【００８６】
（付記１４）
前記排他制御情報が、
リソースに対する参照状態，前記リソースの版状態および排他を獲得したジョブ、のうち少なくともいずれかの情報を含む、
ことを特徴とする、付記１３記載の制御方法。
【００８７】
（付記１５）
前記排他制御情報を管理用データベースに格納する制御を行なう、
ことを特徴とする、付記１３または１４記載の制御方法。
【符号の説明】
【００８８】
１    情報処理システム
２    ホストコンピュータ
３    ネットワーク
１０    サーバ
１１    ＣＰＵ
１２    ＲＡＭ
１３    記憶部
２０    記憶装置
３０    スイッチ
４０    制御部
４１    排他制御部
４２    ディスク制御部
４３    排他獲得部
４４    処理実行部
４５    ボリュームテーブル管理部
４６    チャンクテーブル管理部
４７    排他制御表管理部
５１    ボリュームテーブル
５２    チャンクテーブル
５３    排他制御表
５４    待ちキュー
５５    参照テーブル
１０１    ボリューム
１０２    チャンク
１０３    排他範囲
５３１    参照カウンタ
５３２    バージョンカウンタ
５３３    ロック保持者
【図１】
2019125100.tif 000003
【図２】
2019125100.tif 000004
【図３】
2019125100.tif 000005
【図４】
2019125100.tif 000006
【図５】
2019125100.tif 000007
【図６】
2019125100.tif 000008
【図７】
2019125100.tif 000009
【図８】
2019125100.tif 000010
【図９】
2019125100.tif 000011
【図１０】
2019125100.tif 000012
【図１１】
2019125100.tif 000013
【図１２】
2019125100.tif 000014
【図１３】
2019125100.tif 000015
【図１４】
2019125100.tif 000016