JP3087701B2 - 排他制御装置 - Google Patents

排他制御装置

Info

Publication number
JP3087701B2
JP3087701B2 JP09260126A JP26012697A JP3087701B2 JP 3087701 B2 JP3087701 B2 JP 3087701B2 JP 09260126 A JP09260126 A JP 09260126A JP 26012697 A JP26012697 A JP 26012697A JP 3087701 B2 JP3087701 B2 JP 3087701B2
Authority
JP
Japan
Prior art keywords
entry
block
file
pointer
identifier
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.)
Expired - Fee Related
Application number
JP09260126A
Other languages
English (en)
Other versions
JPH11102300A (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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP09260126A priority Critical patent/JP3087701B2/ja
Publication of JPH11102300A publication Critical patent/JPH11102300A/ja
Application granted granted Critical
Publication of JP3087701B2 publication Critical patent/JP3087701B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Multi Processors (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は排他制御装置に関
し、特に複数のホストシステムからなる疎結合システム
における共有資源に対する排他制御装置に関する。
【0002】
【従来の技術】従来の排他制御装置については、例え
ば、特開平2−194442号公報や特開平8−305
622号公報に記載のように複数のホスト計算機(以下
ホストという)が外部記憶装置等の資源(以下共有資源
という)を共有するシステムにおいて、共有資源に対す
るホスト間での参照・更新アクセスを排他制御するため
に設けられたものである。
【0003】ホストは共有資源をアクセスする場合、ア
クセクするデータ部分を自身のローカルメモリに読み出
して、参照または更新を行なう。更新を行なった場合
は、更新したデータ部分を共有資源に書き戻す。
【0004】排他制御を行なわないと、例えば、二つの
ホストが共有資源の同一データに対して同時に更新アク
セスを行なおうとした場合、各々が読み出し、異なる更
新を行なった後、再度書き戻すことになり、一方の更新
データが上書きされてしまうことになる。これに気づか
ずに処理が進むと、システムのデータ破壊につながる。
【0005】排他制御は、複数のホストによる共有資源
の同一データに対するアクセスを逐次化することで、前
述の同時更新によるデータ破壊を防ぐことを目的とす
る。
【0006】排他制御の方法は、各々のホストがデータ
をアクセスする場合に、アクセスする前に排他制御装置
に当該データのアクセク許可要求(以下ロック要求とい
う)を行ない、排他制御装置から許可通知を受け取った
ら当該データのアクセスを行ない、アクセスを完了した
ら排他制御装置に開放要求(以下アンロック要求とい
う)を行なう。
【0007】排他制御装置は、ホストからのロック要求
・アンロック要求に基づき共有資源のデータのロック状
態を管理し、ロック要求を受け取ったら自身の管理情報
を参照し、当該データを他のホストがロックしていなけ
ればロック許可を通知し、他のホストがロックしていれ
ばロック不可を通知する。さらに、ロック不可を通知し
た場合は、管理情報にロック許可を待っているホストが
あることを記録しておき、当該ロックがアンロックされ
たとき、ロック許可を待っているホストにロック許可を
通知する。以上の方法により、共有資源の同一データに
対するアクセスを逐次化する。
【0008】通常の排他制御装置は、以上の機能を実現
するにあたり、共有資源を複数のフアイルの集まりと定
義し、さらに各フアイルを複数のブロックに分割し、排
他制御を行なう最小単位をブロック単位としている。ま
た、ロック・アンロックの要求はホスト上で動作するタ
スク(プロセスともいう)単位に行なわせている。
【0009】
【発明が解決しようとする課題】以上の機能は、単一ホ
ストシステムであれば不要な機能である。しかし、複数
ホストによる共有資源利用においては必須であり、共有
資源のデータをアクセスする度に、排他制御装置に対し
てロック・アンロック要求を行なう必要があり、単一ホ
ストシステムと比べ、排他制御装置に対するアクセス分
性能が低下する。したがって、排他制御装置の処理に要
する時間は限りなく短くする必要がある。
【0010】排他制御装置における処理性能のネック
は、管理情報の検索処理である。管理する情報が多くな
ればなるほど、要求の度に目的の管理情報を検索するの
に多くの時間を要する。
【0011】本発明は以上の点に着目してなされたもの
で、管理情報の検索に要する時間を短縮させる排他制御
装置を提供することにある。
【0012】
【0013】
【課題を解決するための手段】の発明の排他制御装
置は、複数のホスト計算機が外部記憶装置等の共有資源
を共有するシステムで前記共有資源を複数のフアイルの
集合と定義しさらに前記各フアイルのそれぞれを複数の
ブロックに分割し前記ホスト計算機のタスク単位による
排他制御を前記ブロック単位に行なう排他制御装置にお
いて、前記ブロックのロック状態を示すロック情報の管
理のために管理対象中のフアイルの情報を複数のフアイ
ルグループのいずれかに振り分けてフアイル情報列とし
て一列にポインタで接続登録し管理対象中のブロックの
情報をフアイル毎に複数のブロックグループのいずれか
に振り分けてブロック情報列として一列にポインタで接
続登録する管理テーブルと、前記フアイルの識別子から
振り分けられるフアイルグループの識別子を決定するフ
アイルグループ識別子決定手段と、前記ブロックの識別
子から振り分けられるブロックグループの識別子を決定
するブロックグループ識別子決定手段と、ロックまたは
アンロック要求に対応するフアイル情報は前記フアイル
グループ識別子を介して検索しブロック情報は前記ブロ
ックグループ識別子を介して検索する検索手段とを含ん
で構成されている。
【0014】第の発明の排他制御装置は、第1の発明
の排他制御装置において、ブロックグループ識別子決定
手段はブロックグループの数が16のときにはブロック
識別子を構成するnバイトのデータの1番目のバイトと
2番目のバイトとの排他論理和をとりこの結果と3番目
のバイトとの排他論理和をとり、これをn番目まで遂行
した結果の1バイトのデータの上位4ビットと下位4ビ
ットとの排他論理和を求めてブロックグループ識別子を
決定することを特徴としている。
【0015】第の発明の排他制御装置は、第1の発明
の排他制御装置において、ブロックグループ識別子決定
手段は2のp乗をブロックグループの数とするときブロ
ック識別子を構成するmビットのデータの中から予じめ
p個のビット位置を決めておき、ブロック識別子のデー
タ中の前記p個のビット位置に該当するビットの値を抽
出しこれを連結した値をブロックグループ識別子と決定
することを特徴としている。
【0016】第の発明の排他制御装置は、第1の発明
の排他制御装置において、ブロックグループ識別子決定
手段はブロック識別子を構成するデータ値をブロックグ
ループの数qで割算しその剰余をブロックグルーブ識別
子と決定することを特徴としている。
【0017】第の発明の排他制御装置は、第の発明
の排他制御装置において、フアイルグループ識別子決定
手段はフアイルグループの数が16のときにはフアイル
識別子を構成するnバイトのデータの1番目のバイトと
2番目のバイトとの排他論理和をとりこの結果と3番目
のバイトとの排他論理和をとり、これをn番目まで遂行
した結果の1バイトのデータの上位4ビットと下位4ビ
ットとの排他論理和を求めてフアイルグループ識別子を
決定することを特徴としている。
【0018】第の発明の排他制御装置は、第の発明
の排他制御装置において、フアイルグループ識別子決定
手段は2のp乗をフアイルグループの数とするときフア
イル識別子を構成するmビットのデータの中から予じめ
p個のビット位置を決めておき、フアイル識別子のデー
タ中の前記p個のビット位置に該当するビットの値を抽
出しこれを連結した値をフアイルグループ識別子と決定
することを特徴としている。
【0019】第の発明の排他制御装置は、第の発明
の排他制御装置において、フアイルグループ識別子決定
手段はフアイル識別子を構成するデータ値をフアイルグ
ループの数qで割算しその剰余をフアイルグルーブ識別
子と決定することを特徴としている。
【0020】
【発明の実施の形態】次に、本発明の実施の形態につい
て図面を参照して説明する。
【0021】図4は本発明の排他制御装置の一実施の形
態を示すブロック図であり、(a)は排他制御装置にお
けるフアイルエントリ、タスクエントリの管理テーブル
構造を、(b)は空きエントリの管理テーブル構造を示
す。
【0022】管理テーブルは、フアイル情報を示すエン
トリ(フアイルエントリ10−1〜10−n)と、タス
ク情報を示すエントリ(タスクエントリ20−1〜20
−n)と、ブロック情報を示すエントリ(ブロックエン
トリ30−1〜30−n)と、ロック情報を示すエント
リ(ロックエントリ40−1〜40−n)の4種類のエ
ントリ、および以上のいずれのエントリとしても使われ
ていない未使用のエントリ(空きエントリ50−1〜5
0−n)を持つ。エントリ数は、総べてnとしたが本発
明はこれに限定されるものではない。
【0023】空きエントリはポインタで結ばれ(空きエ
ントリ列)、先頭エントリと末尾エントリを指し示す空
きエントリ管理エリア50(図4(b))によって管理
される。
【0024】現在登録されているフアイルエントリはポ
インタで結ばれ(フアイルエントリ列)、先頭エントリ
と末尾エントリを指し示すフアイルエントリ管理エリア
10(図4(a))によって管理される。
【0025】現在登録されているタスクエントリはポイ
ンタで結ばれ(タスクエントリ列)、先頭エントリと末
尾エントリを指し示すタスクエントリ管理エリア20
(図4(a))によって管理される。
【0026】現在登録されているブロックエントリは本
ブロックを持つフアイルに該当するフアイルエントリと
ポインタで結ばれている。同一フアイル配下に複数のブ
ロックが存在している場合は複数のブロックエントリが
ポインタで結ばれ(ブロックエントリ列)、フアイルエ
ントリが先頭エントリと末尾エントリを指し示してい
る。
【0027】ロックされているブロックエントリとタス
クエントリとはロックエントリを介してポインタで結ば
れ、どのタスクがどのブロックをロックしているかを管
理している。また、ひとつのタスクが複数のブロックを
ロックしている場合は、各々のロックエントリがポイン
タで結ばれ(ロックエントリ列)、タスクエントリが先
頭エントリと末尾エントリを指し示している。
【0028】図5は各エントリと各エントリ管理エリア
の構造を示す。
【0029】フアイルエントリ10−nは、フアイル識
別子エリアと、先頭ブロックエントリポインタと、末尾
ブロックエントリポインタと、グループ分のブロックグ
ループポインタ(図5は一例としてグループを16グル
ープに分類する)と、フアイルエントリ列を構成するた
めの次エントリポインタと前エントリポインタを備えて
いる(図5(a))。
【0030】タスクエントリ20−nはホスト識別子エ
リアと、タスク識別子エリアと、先頭ロックエントリポ
インタと、末尾ロックエントリポインタと、タスクエン
トリ列を構成するための次エントリポインタと前エント
リポインタを備えている(図5(b))。
【0031】ブロックエントリ30−nはブロック識別
子エリアと、グループ識別子エリアと、ロックエントリ
ポインタと、ロック待ちエントリポインタと、ブロック
エントリ列を構成するための次エントリポインタと前エ
ントリポインタを備えている(図5(c))。グループ
識別子の決定については後述する。
【0032】ロックエントリ40−nはブロックエント
リポインタとタスクエントリポインタと、ロックエント
リ列を構成するための次エントリポインタと前エントリ
ポインタを備えている(図5(d))。
【0033】空きエントリ50−nは空きエントリ列を
構成するための次エントリポインタと前エントリポイン
タを備えている(図5(e))。
【0034】空きエントリ管理エリア50は空きエント
リ列の先頭エントリポインタと末尾エントリポインタを
備えている(図5(h))。
【0035】フアイルエントリ管理エリア10はフアイ
ルエントリ列の先頭エントリポインタと末尾エントリポ
インタを備えている(図5(f))。
【0036】タスクエントリ管理エリア20はタスクエ
ントリ列の先頭エントリポインタと末尾エントリポイン
タを備えている(図5(g))。
【0037】次にグループ識別子の決定方法について説
明する。ホストがブロック識別子としてJIS等の文字
コードを使った場合、ブロック識別子の特定のビットデ
ータが識別子間で同一になってしまい、これを使ってグ
ループ分けを行なうと特定のグループにブロックが偏っ
てしまうので、これを避ける、すなわち、ブロック識別
子の値に依存せず、偏りなくほぼ均等にグループ分けを
する必要がある。そこで、実施例としてブロック識別子
はnバイトのデータとし、グループは16個に分類する
ものとして、その方法を説明する。
【0038】第1の方法は、最初にブロック識別子を構
成するバイト1、バイト2〜バイトnよりなるnバイト
データのバイト1とバイト2の排他論理和を求める。次
に得られた結果(1バイトのデータ)とブロック識別子
のバイト3との排他論理和を求める。これをバイトnま
で繰り返す。最後に得られた1バイトのデータの上位4
ビットと下位4ビットとの排他論理和を求める。この最
後に得られた4ビットのデータは10進数で0から15
の値をとる。この値をグループ番号、すなわち、グルー
プ識別子とする。
【0039】第2の方法は、ブロック識別子を構成する
nバイトのデータは、n*8個のビットを有する。この
各ビット1、2、3〜n*8の中から予め任意の4つの
ビット位置を決定しておく。この4つの位置は主記憶上
に記憶しておく。グループ識別子を求めるとき、ブロッ
ク識別子のn*8ビットのデータの前述の4つの位置に
該当するビットの値を抽出し、それらを連結して4ビッ
トの数値データを作成する。この最後に得られた4ビッ
トのデータは10進数で0から15の値をとる。この値
をグループ番号、すなわち、グループ識別子とする。上
述の4つの位置データはシステムによって変更可能とす
る。これによりそのシステムで最適なグループ分けが可
能となる。
【0040】第3の方法は、ブロック識別子のnバイト
データに相当する数値を16で割り算し、その余りを求
める。余りは10進数で0から15の値をとる。この値
をグループ番号、すなわち、グループ識別子とする。
【0041】図6に示すフアイルは現在11個のブロッ
クエントリが登録されている。グループは図5のフアイ
ルエントリと同じ16グループに分類する。11個のブ
ロックエントリはグループ1に属するエントリが2個、
グループ2に属するエントリが1個、グループ3に属す
るエントリが3個、グループ4〜14に属するエントリ
が0個、グループ15に属するエントリが2個、グルー
プ16に属するエントリが3個の状態である。11個の
ブロックエントリは全てが図5(c)で示す次エントリ
ポインタと前エントリポインタで接続され、かつ、図5
(a)で示すフアイルエントリの先頭ブロックエントリ
ポインタと末尾ブロックエントリントリポインタで先頭
ブロックエントリ1と末尾ブロックエントリ11が指し
示されている。さらに、各グループの先頭のブロックエ
ントリがフアイルエントリのグループ別ポインタで指し
示されている。
【0042】グループ1ポインタはブロックエントリ1
を、グループ2ポインタはブロックエントリ3を、グル
ープ3ポインタはブロックエントリ4を、グループ15
ポインタはブロックエントリ7を、グループ16ポイン
タはブロックエントリ9を指し示している。なお、グル
ープ4〜14に属するブロックエントリはないため、グ
ループ4〜14ポインタはいずれのブロックエントリも
指し示していない。
【0043】図7、図8はあるブロックにおけるロック
の管理状態を示している。
【0044】図7は、フアイルエントリ10−1配下の
ブロックエントリ30−1をタスクエントリ20−1が
ロックしている状態で、ブロックエントリ30−1とタ
スクエントリ20−1の双方がロックエントリ40−1
を指し示している。
【0045】図8は、図7と同様にフアイルエントリ1
0−1配下のブロックエントリ30−1をタスクエント
リ20−1がロックしている状態だが、さらに本ブロッ
クをタスクエントリ20−2がロック待ちの状態で、ブ
ロックエントリ30−1とタスクエントリ20−2の双
方がロックエントリ40−2を指し示している。なおブ
ロックエントリ30−1は、自身のロックエントリポイ
ンタでロックエントリ40−1を、ロック持ちエントリ
ポインタでロックエントリ40−2を指し示している。
【0046】各エントリの登録または削除は、ロック要
求およびアンロック要求に伴なって生ずるものであり、
その際に、ロック、アンロックに対応するホスト、タス
ク、フアイルおよびブロックの各識別子が要求内容に含
まれて供給される。
【0047】最初に空きエントリ列の利用手順について
説明する。各エントリは空きエントリを共用利用する。
登録時に空きエントリ列から1つエントリを取得し、削
除時に空きエントリに戻す。
【0048】空きエントリの取得は以下の手順で行な
う。 1.空きエントリ管理エリア50から、先頭空きエント
リのアドレスを取得する。 2.「1.」で取得した空きエントリから次空きエント
リのアドレスを取得し空きエントリ管理エリア50の先
頭空きエントリポインタに格納する。 3.「2.」で次空きエントリがなかった場合(次エン
トリポインタが0)は、空きエントリ管理エリア50の
先頭および末尾空きエントリポインタの双方に0を格納
する。 以上の手順により空きエントリは空きエントリ列の先頭
から取り出される。
【0049】空きエントリ列にエントリを戻すのは以下
の手順で行なう。 1.戻すエントリの次エントリポインタに0を格納す
る。 2.空きエントリ管理エリア50の先頭エントリポイン
タを調べ値が0(空きエントリが1つもない状態)なら
「3.」を、0以外なら「4.」を実行する。 3.空きエントリ管理エリア50の先頭空きエントリポ
インタと末尾空きエントリポインタの双方に戻すエント
リのアドレスを格納する。 4.空きエントリ管理エリア50から末尾空きエントリ
のアドレスを取得し、このエントリの次エントリポイン
タと空きエントリ管理エリア50の末尾空きエントリポ
インタの双方に戻すエントリのアドレスを格納する。 以上の手順によりエントリは空きエントリ列の最後尾に
戻される。
【0050】次に各エントリの登録・削除手順について
説明する。
【0051】フアイルエントリの登録は以下の手順で行
なう。 1.空きエントリ列から空きエントリを1つ取得し、フ
アイル識別子エリアにフアイル識別子を格納し次エント
リポインタと前エントリポインタと先頭ブロックエント
リポインタと末尾ブロックエントリポインタと全てのブ
ロックグループポインタに0を格納する。 2.フアイルエントリ管理エリア10の先頭フアイルエ
ントリポインタを調べ、値が0(フアイルエントリが1
つもない状態)なら「3.」を、0以外なら「4.」を
実行する。 3.フアイルエントリ管理エリア10の先頭フアイルエ
ントリポインタと末尾フアイルエントリポインタの双方
に「1.」で作成したフアイルエントリのアドレスを格
納する。 4.フアイルエントリ管理エリア10から末尾フアイル
エントリのアドレスを取得し、「1.」で作成したフア
イルエントリの前エントリポインタに末尾フアイルエン
トリのアドレスを格納し、末尾フアイルエントリの次エ
ントリポインタとフアイルエントリ管理エリア10の末
尾フアイルエントリポインタの双方に「1.」で作成し
たフアイルエントリのアドレスを格納する。 以上の手順によりエントリはフアイルエントリ列の最後
尾に登録される。
【0052】フアイルエントリの削除は以下の手順で行
なう。 1.削除するフアイルエントリの前エントリポインタと
次エントリポインタを調べ、双方ともに0であれば
「2.」を、前エントリポインタのみ0であれば
「3.」を、次エントリポインタのみ0であれば
「4.」を、双方ともに0でなければ「5.」を実行す
る。 2.本ケースは他にフアイルエントリがないケースであ
る。この場合は、フアイルエントリ管理エリア10の先
頭フアイルエントリポインタと末尾フアイルエントリポ
インタの双方に0を格納し、削除するフアイルエントリ
を空きエントリ列に戻す。 3.本ケースは複数のフアイルエントリが存在し、削除
されるフアイルエントリが先頭に位置するケースであ
る。この場合は、削除するフアイルエントリから次フア
イルエントリのアドレスを取得し、次フアイルエントリ
の前エントリポインタに0を格納し、フアイルエントリ
管理エリア10の先頭フアイルエントリポインタに次フ
アイルエントリのアドレスを格納した後、削除するフア
イルエントリを空きエントリ列に戻す。 4.本ケースは複数のフアイルエントリが存在し、削除
されるフアイルエントリが末尾に位置するケースであ
る。この場合は、削除するフアイルエントリから前フア
イルエントリのアドレスを取得し、前フアイルエントリ
の次エントリポインタに0を格納し、フアイルエントリ
管理エリア10の末尾フアイルエントリポインタに前フ
アイルエントリのアドレスを格納した後、削除するフア
イルエントリを空きエントリ列に戻す。 5.本ケースは複数のフアイルエントリが存在し、削除
されるフアイルエントリが中間に位置するケースであ
る。この場合は、削除するフアイルエントリから前フア
イルエントリのアドレスと次フアイルエントリのアドレ
スを取得し、前フアイルエントリの次エントリポインタ
に次フアイルエントリのアドレスを格納し、次フアイル
エントリの前エントリポインタに前フアイルエントリの
アドレスを格納した後、削除するフアイルエントリを空
きエントリ列に戻す。
【0053】タスクエントリの登録は以下の手順で行な
う。 1.空きエントリ列から空きエントリを1つ取得し、ホ
スト識別子エリアにホスト識別子を、タスク識別子エリ
アにタスク識別子を格納し、次エントリポインタと前エ
ントリポインタと先頭ロックエントリポインタと末尾ロ
ックエントリポインタに0を格納する。 2.タスクエントリ管理エリア20の先頭タスクエント
リポインタを調べ、値が0(タスクエントリが1つもな
い状態)なら「3.」を、0以外なら「4.」を実行す
る。 3.タスクエントリ管理エリア20の先頭タスクエント
リポインタと末尾タスクエントリポインタの双方に
「1.」で作成したタスクエントリのアドレスを格納す
る。 4.タスクエントリ管理エリア20から末尾タスクエン
トリのアドレスを取得し、「1.」で作成したタスクエ
ントリの前エントリポインタに末尾タスクエントリのア
ドレスを格納し、末尾タスクエントリの次エントリポイ
ンタとタスクエントリ管理エリア20の末尾タスクエン
トリポインタの双方に「1.」で作成したタスクエント
リのアドレスを格納する。 以上の手順によりエントリはタスクエントリ列の最後尾
に登録される。
【0054】タスクエントリの削除は以下の手順で行な
う。 1.削除するタスクエントリの前エントリポインタと次
エントリポインタを調べ、双方ともに0であれば
「2.」を、前エントリポインタのみ0であれば
「3.」を、次エントリポインタのみ0であれば
「4.」を、双方ともに0でなければ「5.」を実行す
る。 2.本ケースは他にタスクエントリがないケースであ
る。この場合は、タスクエントリ管理エリア20の先頭
タスクエントリポインタと末尾タスクエントリポインタ
の双方に0を格納し、削除するタスクエントリを空きエ
ントリ列に戻す。 3.本ケースは複数のタスクエントリが存在し、削除さ
れるタスクエントリが先頭に位置するケースである。こ
の場合は、削除するタスクエントリから次タスクエント
リのアドレスを取得し、次タスクエントリの前エントリ
ポインタに0を格納し、タスクエントリ管理エリア20
の先頭タスクエントリポインタに次タスクエントリのア
ドレスを格納した後、削除するタスクエントリを空きエ
ントリ列に戻す。 4.本ケースは複数のタスクエントリが存在し、削除さ
れるタスクエントリが末尾に位置するケースである。こ
の場合は、削除するタスクエントリから前タスクエント
リのアドレスを取得し、前タスクエントリの次エントリ
ポインタに0を格納し、タスクエントリ管理エリア20
の末尾タスクエントリポインタに前タスクエントリのア
ドレスを格納した後、削除するタスクエントリを空きエ
ントリ列に戻す。 5.本ケースは複数のタスクエントリが存在し、削除さ
れるタスクエントリが中間に位置するケースである。こ
の場合は、削除するタスクエントリから前タスクエント
リのアドレスと次タスクエントリのアドレスを取得し、
前タスクエントリの次エントリポインタに次タスクエン
トリのアドレスを格納し、次タスクエントリの前エント
リポインタに前タスクエントリのアドレスを格納した
後、削除するタスクエントリを空きエントリ列に戻す。
【0055】ブロックエントリの登録は以下の手順で行
なう。 1.空きエントリ列から空きエントリを1つ取得し、ブ
ロック識別子エリアにブロック識別子を格納し、次エン
トリポインタと前エントリポインタとロックエントリポ
インタとロック待ちエントリポインタに0を格納する。 2.本ブロックのブロックグループ識別子をブロック識
別子から求め、ブロックグループ識別子エリアに格納す
る。本ブロックグループ識別子のポインタを調べ、0な
らば「1.」で作成したブロックエントリのアドレスを
これに格納する。 3.本ブロックを持つフアイルエントリの先頭ブロック
エントリポインタを調べ、値が0(ブロックエントリが
1つもない状態)なら「4.」を、0以外なら「5.」
を実行する。 4.フアイルエントリの先頭ブロックエントリポインタ
と末尾ブロックエントリポインタに「1.」で作成した
ブロックエントリのアドレスを格納する。 5.フアイルエントリの本ブロックのブロックグループ
の次のブロックグループに該当するブロックグループポ
インタから最後のブロックグループポインタまでを順に
調べ、最初に値が0でないポインタを求め、「7.」を
実行する。なお、全てが0の場合は「6.」を実行す
る。 6.本ケースは次ブロックグループ以降のグループのブ
ロックエントリが1つもないケースで、フアイルエント
リ下のブロックエントリ列の最後尾に「1.」で作成し
たブロックエントリを登録する。この場合は、フアイル
エントリから末尾ブロックエントリのアドレスを取得
し、「1.」で作成したブロックエントリの前エントリ
ポインタに末尾ブロックエントリのアドレスを格納し、
末尾ブロックエントリの次エントリポインタとフアイル
エントリの末尾ブロックエントリポインタの双方に
「1.」で作成したブロックエントリのアドレスを格納
する。 7.本ケースは次ブロックグループ以降のグループのブ
ロックエントリが存在するケースで、最初に見つけたグ
ループの先頭ブロックエントリの直前に「1.」で作成
したブロックエントリを登録する。この場合は、
「5.」で求めたブロックグループポインタが示すブロ
ックエントリの前エントリポインタを調べ、値が0(見
つけたブロックエントリがフアイル下の最初のブロック
エントリ)なら「8.」を、0以外なら「9.」以降を
実行する。 8.「1.」で作成したブロックエントリの次エントリ
ポインタに「5.」で求めたブロックグループポインタ
のアドレスを格納し、このアドレスが示すブロックエン
トリの前エントリポインタとフアイルエントリの先頭ブ
ロックエントリポインタに「1.」で作成したブロック
エントリのアドレスを格納する。 9.「5.」で求めたブロックグループポインタが示す
ブロックエントリの前エントリポインタが示すブロック
エントリの次エントリポインタに「1.」で作成したブ
ロックエントリのアドレスを格納し、「1.」で作成し
たブロックエントリの前エントリポインタに「5.」で
求めたブロックグループポインタが示すブロックエント
リの前エントリポインタが示すブロックエントリのアド
レスを格納し、「1.」で作成したブロックエントリの
次エントリポインタに「5.」で求めたブロックグルー
プポインタのアドレスを格納し、「5.」で求めたブロ
ックグループポインタが示すブロックエントリの前エン
トリポインタに「1.」で作成したブロックエントリの
アドレスを格納する。
【0056】ブロックエントリの削除は以下の手順で行
なう。 1.削除するブロックエントリの前エントリポインタと
次エントリポインタを調べ、双方ともに0であれば
「2.」を、前エントリポインタのみ0であれば
「3.」を、次エントリポインタのみ0であれば
「4.」を、双方ともに0でなければ「5.」を実行す
る。 2.本ケースは他にブロックエントリがないケースであ
る。この場合は、本ブロックを持っているフアイルエン
トリの先頭ブロックエントリポインタと末尾ブロックエ
ントリポインタの双方に0を格納し、削除するブロック
エントリを空きエントリ列に戻す。 3.本ケースは複数のブロックエントリが存在し、削除
するブロックエントリが先頭に位置するケースである。
この場合は、削除するブロックエントリから次エントリ
のアドレスを取得し、次ブロックエントリの前エントリ
ポインタに0を格納し、フアイルエトリの先頭ブロック
エントリポインタに次ブロックエントリのアドレスを格
納した後、削除するブロックエントリを空きエントリ列
に戻す。 4.本ケースは複数のブロックエントリが存在し、削除
するブロックエントリが末尾に位置するケースである。
この場合は削除するブロックエントリから前エントリの
アドレスを取得し、前ブロックエントリの次エントリポ
インタに0を格納し、フアイルエントリの末尾ブロック
エントリポインタに前ブロックエントリのアドレスを格
納した後、削除するブロックエントリを空きエントリ列
に戻す。 5.本ケースは複数のブロックエントリが存在し、削除
されるブロックエントリが中間に位置するケースであ
る。この場合は、削除するブロックエントリから前ブロ
ックエントリのアドレスと次ブロックエントリのアドレ
スを取得し、前ブロックエントリの次エントリポインタ
に次ブロックエントリのアドレスを格納し、次ブロック
エントリの前エントリポインタに前ブロックエントリの
アドレスを格納した後、削除するブロックエントリを空
きエントリ列に戻す。 6.「2.」〜「5.」のいずれの処理も、削除するブ
ロックエントリを空きエントリに戻す前に、削除される
本ブロックのグループに該当するブロックグループポイ
ンタに格納されているアドレスを調べ、これが削除され
るブロックエントリのアドレスと一致したら、削除され
るブロックエントリの次エントリポインタが示すブロッ
クエントリのグループ識別子を調べ、これが同一グルー
プであれば、このブロックエントリのアドレスをブロッ
クグループポインタに格納し、異なるグループであれば
ブロックグループポインタに0を格納する。
【0057】ロックエントリの登録は以下の手順で行な
う。 1.空きエントリ列から1つエントリを取得する。 2.ロック状態として登録する場合はブロックエントリ
のロックエントリポインタに「1.」で作成したロック
エントリのアドレスを格納する。ロック待ちエントリと
して登録する場合は、ブロックエントリのロック待ちエ
ントリポインタに「1.」で作成したロックエントリの
アドレスを格納する。「1.」で作成したロックエント
リのブロックエントリポインタに接続するブロックエン
トリのアドレスを格納する。 3.「1.」で作成したロックエントリのタスクエント
リポインタに接続するタスクエントリのアドレスを格納
する。次にタスクエントリの先頭ロックエントリポイン
タを調べる。値が0(ロックエントリが1つもない状
態)なら「4.」を、0以外なら「5.」を実行する。 4.タスクエントリの先頭ロックエントリポインタと末
尾ロックエントリポインタの双方に「1.」で作成した
ロックエントリのアドレスを格納する。 5.タスクエントリから末尾ロックエントリのアドレス
を取得し、「1.」で作成したロックエントリの前エン
トリポインタに末尾ロックエントリのアドレスを格納
し、末尾ロックエントリの次エントリポインタとタスク
エントリの末尾ロックエントリポインタの双方に
「1.」で作成したロックエントリのアドレスを格納す
る。 以上の手順により、ロックエントリはロックエントリ列
の末尾に登録される。
【0058】ロックエントリの削除は以下の手順で行な
う。 1.本ロックエントリを接続しているブロックエントリ
のロック待ちエントリポインタが0か調べ、0ならロッ
クエントリポインタに0を格納し、0以外ならロック待
ちエントリポインタのアドレスをロックエントリポイン
タにコピーし、ロック待ちエントリポインタに0を格納
する(ロック待ちのロック許可)。 2.削除するロックエントリの前エントリポインタと次
エントリポインタを調べ、双方ともに0であれば
「3.」を、前エントリポインタのみ0であれば
「4.」を、次エントリポインタのみ0であれば
「5.」を、双方ともに0でなければ「6.」を実行す
る。 3.本ケースは他にロックエントリがないケースであ
る。この場合は、タスクエントリの先頭ロックエントリ
ポインタと末尾ロックエントリポインタの双方に0を格
納し、削除するロックエントリを空きエントリ列に戻
す。 4.本ケースは複数のロックエントリが存在し、本ロッ
クエントリが先頭に位置するケースである。この場合は
削除するロックエントリから次ロックエントリのアドレ
スを取得し、次ロックエントリの前エントリポインタに
0を格納し、タスクエントリの先頭ロックエントリポイ
ンタに次ロックエントリのアドレスを格納した後、削除
するロックエントリを空きエントリ列に戻す。 5.本ケースは複数のロックエントリが存在し、本ロッ
クエントリが末尾に位置するケースである。この場合は
削除するロックエントリから前ロックエントリのアドレ
スを取得し、前ロックエントリの次エントリポインタに
0を格納し、タスクエントリの末尾ロックエントリポイ
ンタに前ロックエントリのアドレスを格納した後、削除
するロックエントリを空きエントリ列に戻す。 6.本ケースは複数のロックエントリが存在し、本ロッ
クエントリが中間に位置するケースである。この場合
は、削除するロックエントリから前ロックエントリのア
ドレスと次ロックエントリのアドレスを取得し、前ロッ
クエントリの次エントリポインタに次ロックエントリの
アドレスを格納し、次ロックエントリの前エントリポイ
ンタに前ロックエントリのアドレスを格納した後、削除
するロックエントリを空きエントリ列に戻す。
【0059】次に、ホストからロック要求およびアンロ
ック要求を受け取ったときの処理について説明する。ロ
ック要求またはアンロック要求の際には前述のように対
応するホスト、タスク、フアイルおよびブロックの各識
別子が要求内容に含まれて供給される。
【0060】ロック要求の処理を以下に示す。図1は本
発明の排他制御装置の一実施の形態のロック動作の第1
の部分を示す流れ図を、図2は図1に示す以外の第2の
部分を示す流れ図である。
【0061】最初にロック要求のフアイル識別子を取得
し、フアイルエントリを検索する。その手順を以下に示
す。 1.フアイルエントリ管理エリア10の先頭フアイルエ
ントリポインタを参照し、値が0なら当該フアイルエン
トリは存在しない(ステップ101のY枝)。値が0以
外なら、「2.」を実行する(ステップ101のN
枝)。 2.先頭フアイルエントリポインタが示すフアイルエン
トリから順に次エントリポインタのアドレスをたどりな
がら、ロック要求のフアイル識別子と一致するフアイル
エントリを探す。もし、最後のフアイルエントリまで一
致するフアイルエントリが見つからなければ該当フアイ
ルエントリは存在しない(ステップ102のN枝)。
【0062】フアイルエントリが見つかった場合(ステ
ップ103)、次にロック要求のブロック識別子を取得
し、ブロックエントリを検索する。その手順を以下に示
す。 1.ブロック識別子からロック要求のブロックのブロッ
クグループ識別子を求め、(ステップ112)先に見つ
けたフアイルエントリの該当するブロックグループポイ
ンタの値を参照し、値が0なら該当ブロックエントリは
存在しない(ステップ104のY枝)。値が0以外なら
(ステップ104のN枝)、「2.」を実行する。 2.「1.」で参照したブロックグループポインタが示
すブロックエントリから順に次エントリポインタのアド
レスをたどりながら、ロック要求のブロック識別子と一
致するブロックエントリを探す(ステップ105)。こ
こで、探す範囲は、最後のブロックエントリまでではな
く、同一ブロックグループのブロックエントリだけであ
る。もし、一致するブロックエントリが見つからなけれ
ば、該当ブロックエントリは存在しない(ステップ10
5のN枝)。
【0063】ブロックエントリが見つかった場合(ステ
ップ106)、次にロックエントリの有無を調べる。見
つけたブロックエントリのロックエントリポインタの値
が0ならロックエントリはなく(ステップ107のY
枝)、当該ブロックをロックしているタスクは存在しな
い。値が0以外ならロックエントリが存在し(ステップ
111)、当該ブロックを他のタスクがロックしてい
る。
【0064】以上の処理により、ロックエントリが見つ
かれば、本ロック要求はロック不可である。この場合
は、前述のロックエントリの登録手順にしたがい、ロッ
クエントリをロック待ちエントリとして登録し(ステッ
プ135)、ロック待ちを通知する(ステップ13
6)。この際、本ロック要求のタスクエントリが存在し
なければ(ステップ131のY枝、132のN枝)、予
め前述のタスクエントリの登録手順にしたがいタスクエ
ントリを登録する(ステップ134)。
【0065】また、ロックエントリが見つからないか
(ステップ107のY枝)、フアイルエントリもしくは
ブロックエントリが見つからなければ(ステップ101
のY枝、102のN枝、104のY枝、105のN
枝)、本ロック要求はロック可能である。この場合は、
前述の各エントリの登録手順により存在しないエントリ
を登録する(ステップ108、109、125)。この
際、本ロック要求のタスクエントリが存在しなければ
(ステップ121のY枝、122のN枝)、予め前述の
タスクエントリの登録手順にしたがいタスクエントリを
登録する(ステップ124)。以上の手順の結果、ロッ
ク可能であった場合にはロック要求を行なったタスクに
対してロック可能を通知する(ステップ126)。
【0066】次に、アンロック要求の処理を以下に示
す。図3は本実施の形態の排他制御装置におけるアンロ
ック動作の一例を示す流れ図である。
【0067】最初に前述のロック要求の手順と同一方法
で、フアイルエントリ、ブロックエントリおよびロック
エントリを検索する(ステップ301〜310)。次に
前述のロックエントリの削除手順により、見つけたロッ
クエントリを削除する(ステップ311)。次に本ロッ
クエントリを持つタスクエントリを調べ、本ロックエン
トリを削除したことでロックエントリが1つもなくなっ
たら(ステップ312のY枝)、前述のタスクエントリ
の削除手順により本タスクエントリを削除する(スデッ
プ313)。次に本ロックエントリを持つブロックエン
トリを調べ、本ロックエントリを削除したことでロック
エントリが1つもなくなったら(ステップ317のY
枝)、ブロックエントリの削除手順によってブロックエ
ントリを削除する(ステップ318)。さらに、フアイ
ルエントリを調べ、本ブロックエントリを削除したこと
でブロックエントリが1つもなくなったら(ステップ3
19のY枝)、前述のフアイルエントリの削除手順によ
って本フアイルエントリを削除する(ステップ32
0)。
【0068】ここで、本発明の特徴であるブロックエン
トリの検索について図6を用いて具体的に説明する。
【0069】最初に図6におけるブロックエントリ6を
検索する手順を説明する。
【0070】従来であれば、グループポインタがないた
め、先頭ポインタが示すブロックエントリ1から順にブ
ロックエントリをたどり、ブロック識別子を比較しなが
らブロックエントリ6を検索する。そのため、検索まで
に6エントリの検索比較が必要となる。
【0071】しかし、本発明によれば、先にブロックエ
ントリ6の属するグループを調べ(ここではグループ
3)、そのグループ3ポインタが指し示すブロックエン
トリ4から検索すればよい。よって、ブロックエントリ
6を検索するまでに3エントリの検索比較で済む。
【0072】次にグループ15に属するブロックで本フ
アイルエントリにまだ登録されていないブロックを検索
する場合を説明する。
【0073】従来であれば、ブロックエントリ1から順
にブロックエントリをたどり、ブロック識別子を比較し
ながらブロックエントリを検索する。本ケースの場合
は、末尾のブロックエントリ11まで11エントリを検
索して初めて当該ブロックが登録されていないことがわ
かる。
【0074】しかし、本発明によれば、グループ15ポ
インタが指し示すブロックエントリ7から次のグループ
16ポインタが指し示すブロックエントリの直前のブロ
ックエントリ(ここではブロックエントリ8)までを検
索すればよい。よって、2エントリの検索で当該ブロッ
クが登録されていないことがわかる。
【0075】以上説明したように、本実施の形態の排他
制御装置はフアイルエントリ下で管理されるブロックエ
ントリを一定の規則によりグループ分けすることによ
り、管理情報の検索に要する時間を短縮させることがで
きる。
【0076】なお本実施の形態では、ブロックをグルー
プ化した場合について示したが、フアイルおよびタスク
に対しても同様のグループ化を行なえば、同様の効果が
得られることは明白である。
【0077】
【発明の効果】以上説明したように、本発明の排他制御
装置は、管理されるエントリ列を一定の規則によりグル
ープ分けすることにより、管理情報の検索に要する時間
を短縮させることができるという効果を有している。
【図面の簡単な説明】
【図1】本発明の排他制御装置の一実施の形態のロック
動作の第1の部分を示す流れ図である。
【図2】本発明の排他制御装置の一実施の形態のロック
動作の図1に示す以外の第2の部分を示す流れ図であ
る。
【図3】本実施の形態の排他制御装置におけるアンロッ
ク動作の一例を示す流れ図である。
【図4】各登録情報の管理テーブル構造を示すブロック
図であり、(a)はフアイルエントリ、ブロックエント
リ、ロックエントリ、タスクエントリの管理構造を、
(b)は空きエントリの管理構造をそれぞれ示す。
【図5】各エントリおよびエントリ管理エリアの構造を
示す詳細図であり.(a)はフアイルエントリ、(b)
はタスクエントリ、(c)はブロックエントリ、(d)
はロックエントリ、(e)は空きエントリ、(f)はフ
アイルエントリ管理エリア、(g)はタスクエントリ管
理エリア、(h)は空きエントリ管理エリアをそれぞれ
示している。
【図6】フアイルエントリによるブロックエントリの管
理構造を示す詳細図である。
【図7】管理テーブルにおけるロック状態の一例を示す
詳細図である。
【図8】管理テーブルにおけるロック状態とロック待ち
状態の一例を示す詳細図である。
【符号の説明】
10 フアイルエントリ管理エリア 10−1〜10−n フアイルエントリ 20 タスクエントリ管理エリア 20−1〜20−n タスクエントリ 30−1〜30−n ブロックエントリ 40−1〜40−n ロックエントリ 50 空きエントリ管理エリア 50−1〜50−n 空きエントリ
───────────────────────────────────────────────────── フロントページの続き (58)調査した分野(Int.Cl.7,DB名) G06F 9/46 G06F 15/16 G06F 12/00

Claims (7)

    (57)【特許請求の範囲】
  1. 【請求項1】 複数のホスト計算機が外部記憶装置等の
    共有資源を共有するシステムで前記共有資源を複数のフ
    アイルの集合と定義しさらに前記各フアイルのそれぞれ
    を複数のブロックに分割し前記ホスト計算機のタスク単
    位による排他制御を前記ブロック単位に行なう排他制御
    装置において、前記ブロックのロック状態を示すロック
    情報の管理のために管理対象中のフアイルの情報を複数
    のフアイルグループのいずれかに振り分けてフアイル情
    報列として一列にポインタで接続登録し管理対象中のブ
    ロックの情報をフアイル毎に複数のブロックグループの
    いずれかに振り分けてブロック情報列として一列にポイ
    ンタで接続登録する管理テーブルと、前記フアイルの識
    別子から振り分けられるフアイルグループの識別子を決
    定するフアイルグループ識別子決定手段と、前記ブロッ
    クの識別子から振り分けられるブロックグループの識別
    子を決定するブロックグループ識別子決定手段と、ロッ
    クまたはアンロック要求に対応するフアイル情報は前記
    フアイルグループ識別子を介して検索しブロック情報は
    前記ブロックグループ識別子を介して検索する検索手段
    とを含むことを特徴とする排他制御装置。
  2. 【請求項2】 ブロックグループ識別子決定手段はブロ
    ックグループの数が16のときにはブロック識別子を構
    成するnバイトのデータの1番目のバイトと2番目のバ
    イトとの排他論理和をとりこの結果と3番目のバイトと
    の排他論理和をとり、これをn番目まで遂行した結果の
    1バイトのデータの上位4ビットと下位4ビットとの排
    他論理和を求めてブロックグループ識別子を決定するこ
    とを特徴とする請求項1記載の排他制御装置。
  3. 【請求項3】 ブロックグループ識別子決定手段は2の
    p乗をブロックグループの数とするときブロック識別子
    を構成するmビットのデータの中から予じめp個のビッ
    ト位置を決めておき、ブロック識別子のデータ中の前記
    p個のビット位置に該当するビットの値を抽出しこれを
    連結した値をブロックグループ識別子と決定することを
    特徴とする請求項1記載の排他制御装置。
  4. 【請求項4】 ブロックグループ識別子決定手段はブロ
    ック識別子を構成するデータ値をブロックグループの数
    qで割算しその剰余をブロックグルーブ識別子と決定す
    ることを特徴とする請求項1記載の排他制御装置。
  5. 【請求項5】 フアイルグループ識別子決定手段はフア
    イルグループの数が16のときにはフアイル識別子を構
    成するnバイトのデータの1番目のバイトと2番目のバ
    イトとの排他論理和をとりこの結果と3番目のバイトと
    の排他論理和をとり、これをn番目まで遂行した結果の
    1バイトのデータの上位4ビットと下位4ビットとの排
    他論理和を求めてフアイルグループ識別子を決定するこ
    とを特徴とする請求項記載の排他制御装置。
  6. 【請求項6】 フアイルグループ識別子決定手段は2の
    p乗をフアイルグループの数とするときフアイル識別子
    を構成するmビットのデータの中から予じめp個のビッ
    ト位置を決めておき、フアイル識別子のデータ中の前記
    p個のビット位置に該当するビットの値を抽出しこれを
    連結した値をフアイルグループ識別子と決定することを
    特徴とする請求項記載の排他制御装置。
  7. 【請求項7】 フアイルグループ識別子決定手段はフア
    イル識別子を構成するデータ値をフアイルグループの数
    qで割算しその剰余をフアイルグルーブ識別子と決定す
    ることを特徴とする請求項記載の排他制御装置。
JP09260126A 1997-09-25 1997-09-25 排他制御装置 Expired - Fee Related JP3087701B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP09260126A JP3087701B2 (ja) 1997-09-25 1997-09-25 排他制御装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP09260126A JP3087701B2 (ja) 1997-09-25 1997-09-25 排他制御装置

Publications (2)

Publication Number Publication Date
JPH11102300A JPH11102300A (ja) 1999-04-13
JP3087701B2 true JP3087701B2 (ja) 2000-09-11

Family

ID=17343663

Family Applications (1)

Application Number Title Priority Date Filing Date
JP09260126A Expired - Fee Related JP3087701B2 (ja) 1997-09-25 1997-09-25 排他制御装置

Country Status (1)

Country Link
JP (1) JP3087701B2 (ja)

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Mourice J.Bach著,坂本文、外2名訳,「UNIXカーネルの設計」,共立出版株式会社,1990年10月,p.34−36

Also Published As

Publication number Publication date
JPH11102300A (ja) 1999-04-13

Similar Documents

Publication Publication Date Title
EP1342173B1 (en) Database management system and method for databases having large objects
US9767131B2 (en) Hierarchical tablespace space management
US7418544B2 (en) Method and system for log structured relational database objects
US6209000B1 (en) Tracking storage for data items
US6738790B1 (en) Approach for accessing large objects
US5544357A (en) Database accelerator
US5999943A (en) Lob locators
US6314417B1 (en) Processing multiple database transactions in the same process to reduce process overhead and redundant retrieval from database servers
US5495609A (en) System and method for managing concurrent access to data files consisting of data entries referenced by keys comprising sequence of digits
US5553303A (en) Data processing system for dynamically switching access control process and for performing recovery process
US7376674B2 (en) Storage of multiple pre-modification short duration copies of database information in short term memory
US11048757B2 (en) Cuckoo tree with duplicate key support
US7493464B2 (en) Sparse matrix
JP4199888B2 (ja) データベース管理方法
JPH05128072A (ja) システム間排他制御方式
JP3087701B2 (ja) 排他制御装置
JP3085260B2 (ja) 排他制御装置
JP2924786B2 (ja) 疎結合多重計算機システムにおける共有ファイルの排他制御システム、排他制御方法、および排他制御プログラムを記憶する媒体
GB2328531A (en) Storing a long record in a set of shorter keyed records
JPS61160133A (ja) デ−タの入力管理方法
JPH09305449A (ja) データベース管理システム
JP2672818B2 (ja) メモリのセグメント管理方式
JPH02252036A (ja) ファイルのアクセス制御方式
JPH0474232A (ja) タスク実行方法及びキャッシュ装置の割り当て方法
JPH0797345B2 (ja) ファイル制御方式

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20000613

LAPS Cancellation because of no payment of annual fees