説明

排他制御プログラム、排他制御装置および排他制御方法

【課題】マルチプロセッサ動作におけるシステムの性能を向上させる。
【解決手段】OS20は、それぞれ独立してユーザプログラム11、12を実行するプロセッサを複数有する情報処理装置1に以下の処理を実行させる。すなわち、OS20は、複数のユーザプログラム11、12によって共用される共用リソースである複数の装置31〜33に対して発行されたリクエストのI/O処理の内容を判別する。そして、OS20は、判別した内容に応じて、共有リソースに対するアクセスを1つのI/O処理のみに認める排他ロック、または、共有リソースが有する1つの装置に対するアクセスを1つのI/O処理のみに認める共有排他ロックをリクエストに獲得させる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、排他制御プログラム、排他制御装置および排他制御方法に関する。
【背景技術】
【0002】
従来、複数のプロセスを実行するマルチプロセッサのシステムにおいて、単一のロックによりOS(Operating System)のカーネルを排他制御し、共有リソースに対するI/O(Input Output)処理の実行を制御するジャイアントロック方式が知られている。
【0003】
以下、このようなジャイアントロック方式が適用されたOSの一例について説明する。図9は、ジャイアントロック方式が適用されたOSの一例を説明するための図である。なお、図9には、複数のプロセスが共有する共有リソースである装置A、装置B、装置Cを含むハードウェア層と、各装置A〜Cに対してI/O処理を発行するOS層と、I/O処理の要求を発行するユーザプログラムを実行するユーザ空間とを示す。
【0004】
また、図9に示す例では、OSは、カーネルにI/O処理受領部41、I/O処理部42、ジャイアントロック制御部43を有する。ここで、I/O処理部42は、I/O発行処理部42a、装置認識処理部42b、エラー処理部42cを有する。また、ジャイアントロック制御部43は、確認部43a、判別部43b、獲得部43cを有する。
【0005】
I/O処理受領部41は、各装置A〜Cに対するI/O処理の要求をユーザプログラムが発行した場合は、I/O処理の内容に応じて、I/O処理部42が有する各部42a〜42cに要求を振り分ける。具体的には、I/O処理受領部41は、I/O処理を実行するI/O発行処理の要求をI/O発行処理部42aに振り分け、各装置A〜Cを認識する装置認識処理の要求を装置認識処理部42bに振り分ける。また、I/O処理受領部41は、各装置A〜Cにおいて発生したエラーに対応するエラー処理の要求をエラー処理部42cに振り分ける。
【0006】
I/O発行処理部42aは、I/O処理受領部41からI/O発行処理の要求を振り分けられた場合は、ジャイアントロック制御部43に全ての装置A〜Cに関わる排他ロックの獲得を要求する。また、I/O発行処理部42aは、排他ロックを獲得した場合には、I/O発行処理を実行し、I/O発行処理が終了した場合には、獲得した排他ロックを解放する。
【0007】
また、装置認識処理部42b、および、エラー処理部42cは、I/O発行処理部42aと同様に、各要求が振り分けられた場合は、ジャイアントロック制御部43に排他ロックの獲得を要求する。そして、装置認識処理部42b、および、エラー処理部42cは、排他ロックを獲得した場合には、各種I/O処理を実行し、各種I/O処理の実行が終了した場合には、獲得した排他ロックを解放する。
【0008】
確認部43aは、各部42a〜42cが排他ロックの獲得を要求した場合には、各部42a〜42cによる排他ロックの獲得状況を確認する。また、判別部43bは、各部42a〜42cのいずれかが排他ロックを獲得しているか否かを判別する。そして、獲得部43cは、各部42a〜42cのいずれもが排他ロックを獲得していないと判別部43bが判別した場合には、排他ロックを獲得させる。
【0009】
また、獲得部43cは、各部42a〜42cのいずれかが排他ロックを獲得していると判別部43bが判別した場合には、排他ロックの獲得を一定時間待機させる。その後、獲得部43cは、排他ロックが解放され、各部42a〜42cのいずれもが排他ロックを獲得していないと判別部43bが判別した場合には、排他ロックの獲得を要求した処理部に排他ロックを獲得させる。
【0010】
以下、装置Aに対するI/O発行処理の要求Xと装置認識処理の要求Yとをユーザプログラムが発行した際にOSが実行する処理の一例について説明する。例えば、I/O処理受領部41は、ユーザプログラムから装置Aに対するI/O発行処理の要求Xが発行された場合には、要求XをI/O発行処理部42aに振り分ける。
【0011】
このような場合には、I/O発行処理部42aは、ジャイアントロック制御部43に排他ロックの獲得を要求する。すると、ジャイアントロック制御部43は、各部42a〜42cが排他ロックを獲得していないので、I/O発行処理部42aに排他ロックを獲得させる。このため、I/O発行処理部42aは、装置Aに対するI/O発行処理を実行する。
【0012】
続いて、I/O処理受領部41は、装置認識処理の要求Yを装置認識処理部42bに振り分ける。この場合には、装置認識処理部42bは、ジャイアントロック制御部43に排他ロックの獲得を要求する。すると、ジャイアントロック制御部43は、I/O発行処理部42aが排他ロックを獲得しているので、装置認識処理部42bに排他ロックの獲得を一定時間待機させる。
【0013】
その後、I/O発行処理部42aは、装置Aに対するI/O発行処理が終了した場合には、排他ロックを解放する。すると、ジャイアントロック制御部43は、各部42a〜42cが排他ロックを獲得していないので、装置認識処理部42bに排他ロックを獲得させる。そして、装置認識処理部42bは、装置認識処理を実行する。
【先行技術文献】
【特許文献】
【0014】
【特許文献1】特開2011−118688号公報
【発明の概要】
【発明が解決しようとする課題】
【0015】
しかしながら、上述したジャイアントロックの技術では、1つのI/O処理に対して、共有リソース全体の排他ロックを一括して獲得させるので、複数のI/O処理を並行して実行することができないという問題がある。このため、マルチプロセッサの技術が適用された場合等、複数のプロセスを並行して実行する際に、I/O処理を並行して実行することができず、システムの性能を向上させることができない。
【0016】
本願は、1つの側面では、マルチプロセッサを備えた処理装置の性能を向上させる。
【課題を解決するための手段】
【0017】
1つの側面では、本願に関わる排他制御プログラムは、それぞれ独立してプロセスを実行するプロセッサを複数有する情報処理装置に以下の処理を実行させる。すなわち、排他制御プログラムは、複数の装置を含み、複数のプロセスにより共有される共有リソースに対して発行されたI/O処理の内容を判別させる。そして、排他制御プログラムは、判別した内容に応じて、共有リソースに対するアクセスを1つのI/O処理のみに認める排他ロック、または、共有リソースが有する1つの装置に対するアクセスを1つのI/O処理のみに認める共有排他ロックをI/O処理の要求に獲得させる。
【発明の効果】
【0018】
1つの側面では、マルチプロセッサを備えた処理装置の性能の向上を図ることができる。
【図面の簡単な説明】
【0019】
【図1】図1は、実施例1に関わる排他制御プログラムの一例を説明するための図である。
【図2】図2は、ロックの獲得可否を判別する処理の一例を説明するための図である。
【図3】図3は、I/O処理の振分の一例を説明するための図である。
【図4】図4は、ロック獲得状態の遷移の一例を説明するための図である。
【図5】図5は、ロック獲得状態の遷移の一例を説明するための図である。
【図6】図6は、実施例1に関わるOSが実行するリクエストの振分処理の一例を説明するための図である。
【図7】図7は、実施例1に関わる装置単位排他ロック制御部が装置単位排他ロックを獲得する処理の一例を説明するための図である。
【図8】図8は、実施例1に関わる一括排他ロック制御部が一括排他処理を獲得する処理の一例を説明するための図である。
【図9】図9は、ジャイアントロック方式が適用されたOSの一例を説明するための図である。
【発明を実施するための形態】
【0020】
以下に添付図面を参照して本願に係る排他制御プログラム、排他制御装置および排他制御方法について説明する。
【実施例1】
【0021】
以下の実施例1では、図1を用いて、マルチプロセッサの技術が適用された情報処理装置が実行する排他制御プログラムの一例を説明する。図1は、実施例1に関わる排他制御プログラムの一例を説明するための図である。図1に示す例では、排他制御プログラムがOS20の一部として実行されているものとする。なお、図1には、情報処理装置1が実行するプログラムについて、ユーザ空間10で実行されるプログラム、OS(カーネル)20として実行されるプログラムおよび各プログラムが共用する共用リソースであるハードウェア30とを階層的に示した。
【0022】
例えば、図1に示す例では、情報処理装置1は、ユーザ空間10において複数のユーザプログラム11、12を実行する。また、情報処理装置1は、OS20を実行する。また、ハードウェア30は、各ユーザプログラム11、12によって共用される複数の装置31〜33を有する。ここで、各装置31〜33は、例えば、ディスク装置等のハードウェアである。
【0023】
OS20は、I/O(Input Output)処理振分部21、I/O発行処理部22、認識処理部24、一覧取得処理部26、ロック情報記憶部27を有する。また、I/O発行処理部22は、装置単位排他ロック制御部23、実行部22aを有する。また、認識処理部24は、一括排他ロック制御部25、実行部24aを有する。また、一覧取得処理部26は、一括排他ロック制御部25、実行部26aを有する。また、ロック情報記憶部27は、共有カウンタ27a、一括排他フラグ27b、一括排他待ちフラグ27c、ロック状態記憶部27dを有する。
【0024】
また、装置単位排他ロック制御部23は、ロック獲得可否判別部23a、ロック状態遷移部23b、ロック獲得部23cを有する。また、一括排他ロック制御部25は、ロック獲得可否判別部25a、ロック状態遷移部25b、ロック獲得部25cを有する。
【0025】
このような、I/O発行処理部22は、各装置31〜33のいずれかに対してI/O処理を実行する処理部であり、認識処理部24は、ハードウェア30が有する装置の認識を行う処理部である。また、一覧取得処理部26は、ハードウェア30が有する装置の一覧を作成する処理部である。
【0026】
なお、OS20は、図1に図示したI/O発行処理部22、認識処理部24、一覧取得処理部26以外にも、複数の処理部を有する。例えば、OS20は、各装置31〜33においてエラーのリカバリ処理を実行するエラー処理部を有する。また、例えば、OS20は、1つの装置に対する処理の実行中に任意の割り込み処理を実行するI/O割り込み処理部を有する。すなわち、OS20は、各装置31〜33に対してそれぞれ特定の種類のI/O処理を実行する処理部を複数有する。
【0027】
ここで、各処理部22、24、26は、1つの装置に対するアクセスを1つの処理部のみに認める装置単位排他ロック、全ての装置31〜33に対するアクセスを1つの処理部のみに認める一括排他ロック、すなわちジャイアントロックのいずれかを獲得する。なお、各処理部22、24、26は、装置単位排他ロックを獲得する場合には、1つの装置に対するアクセスを複数の処理部に認める共有ロックを同時に獲得する。
【0028】
具体的には、I/O発行処理部22は、装置単位排他ロックを獲得する装置単位排他ロック制御部23を有する。また、認識処理部24および一覧取得処理部26は、一括排他ロックを獲得する一括排他ロック制御部25を有する。そして、各処理部22、24、26は、自身が有する装置単位排他ロック制御部23、または、一括排他ロック制御部25のいずれかを用いて、ロックを獲得する。
【0029】
なお、図1に示す例では、各制御部が装置単位排他ロック制御部23、または、一括排他ロック制御部25を有する例について記載した。しかし、例えば、各制御部は、自身が実行するI/O処理の種別に応じて、装置単位排他ロック制御部23、または、一括排他ロック制御部25をサブルーチンとして呼び出す方式を採用しても良い。
【0030】
次に、I/O処理振分部21が実行する処理について説明する。I/O処理振分部21は、ユーザープログラム11、12がI/O処理のリクエストを発行した場合は、リクエストの対象となるI/O処理の内容を判別する。そして、I/O処理振分部21は、判別した内容のI/O処理を実行する処理部に、リクエストを振り分ける。
【0031】
例えば、I/O処理振分部21は、ユーザプログラム11、12がI/O発行処理のリクエストを発行した場合には、リクエストをI/O発行処理部22に振り分ける。また、I/O処理振分部21は、ユーザプログラム11が、ハードウェア30が有する各装置31〜33の認識処理のリクエストを発行した場合には、リクエストを認識処理部24に発行する。また、I/O処理振分部21は、ユーザプログラム11がハードウェア30が有する装置の一覧取得処理のリクエストを発行した場合には、リクエストを一覧取得部処理部26に振り分ける。
【0032】
次に、ロック情報記憶部27について説明する。共有カウンタ27aは、装置単位排他ロック制御部23が獲得中の共有ロックの数をカウントするカウンタである。例えば、共有カウンタ27aは、2つの装置単位排他ロック制御部23が2つの共有ロックを獲得した場合には、獲得数「2」を記憶する。一括排他フラグ27bは、一括排他ロック制御部25が一括排他ロックを獲得しているか否かを示すフラグである。例えば、一括排他フラグ27bは、一括排他ロック制御部25が一括排他ロックを獲得している場合には「on」を保持し、一括排他ロック制御部25が一括排他ロックを獲得していない場合には「off」を保持する。
【0033】
一括排他待ちフラグ27cは、一括排他ロックの獲得を待機する処理部が存在するか否かを示すフラグである。例えば、一括排他待ちフラグ27cは、いずれかの処理部が一括排他ロックを獲得中に、他の処理部が一括排他ロックを獲得しようとした場合には、「on」となる。また、一括排他待ちフラグ27cは、一括排他ロックを獲得しようとした処理部が一括排他ロックを獲得した場合には、「off」となる。
【0034】
ロック状態記憶部27dは、各処理部22、24、26が獲得した装置単位排他ロックおよび一括排他ロックのロック獲得状態を記憶する。例えば、ロック状態記憶部27dは、装置31に対する装置単位排他ロックと共有ロックとが併せて獲得されている場合には、ロック獲得状態として「共有ロック+装置31に対する装置単位獲得済み状態」を記憶する。また、ロック状態記憶部27dは、装置31および装置32に対する装置単位排他ロックと共有ロックとが併せて獲得されている場合には、ロック獲得状態として「共有ロック+装置31に対する装置単位排他ロック獲得+装置32に対する装置単位排他ロック獲得状態」を記憶する。
【0035】
なお、ロック状態記憶部27dがロック獲得状態を記憶する具体的な方法としては、例えば、各装置31〜33ごとに装置単位排他ロックが獲得されているか否かを示すフラグを記憶することとしてもよい。
【0036】
次に、I/O発行処理部22が有する装置単位排他ロック制御部23および実行部22aが実行する処理について説明する。ロック獲得可否判別部23aは、I/O処理振分部21からI/O発行処理部22にリクエストが振り分けられた場合には、装置単位排他ロックを獲得できるか否かを判別する。
【0037】
具体的には、ロック獲得可否判別部23aは、ロック情報記憶部27が有する一括排他待ちフラグ27cを参照し、一括排他待ちフラグ27cが「off」であるか否かを判別する。そして、ロック獲得可否判別部23aは、一括排他待ちフラグ27cが「on」である場合には、一定時間待機し、その後、一括排他待ちフラグ27cが「off」であるか否かを再度判別する。
【0038】
一方、ロック獲得可否判別部23aは、一括排他待ちフラグ27cが「off」である場合には、一括排他フラグ27bを参照する。そして、ロック獲得可否判別部23aは、一括排他フラグが「on」である場合には、一定時間待機し、その後、一括排他フラグ27bが「off」であるか否かを再度判別する。また、ロック獲得可否判別部23aは、一括排他フラグ27bが「off」である場合には、ロック状態記憶部27dを参照する。そして、ロック獲得可否判別部23aは、I/O発行処理部22に振り分けられたリクエストがI/O処理の対象となる装置の装置単位排他ロックが獲得されているか否かを判別する。
【0039】
また、ロック獲得可否判別部23aは、I/O発行処理部22に振り分けられたリクエストがI/O処理の対象となる装置の装置単位排他ロックが獲得されていると判別した場合には、一定時間待機する。その後、ロック獲得可否判別部23aは、ロック状態記憶部27dを参照し、I/O発行処理部22に振り分けられたリクエストがI/O処理の対象となる装置の装置単位排他ロックが獲得されているか否かを再度判別する。
【0040】
また、ロック獲得可否判別部23aは、I/O発行処理部22に振り分けられたリクエストがI/O処理の対象となる装置の装置単位排他ロックが獲得されていないと判別した場合には、装置単位排他ロックが獲得できる旨をロック獲得部23cに通知する。
【0041】
なお、ロック獲得可否判別部23aは、一括排他フラグ27bおよび一括排他待ちフラグ27cが「on」である際や、I/O処理の対象となる装置の装置単位排他ロックが獲得されている際に、一定時間待機する場合には、以下の処理を併せて実行する。すなわち、ロック獲得可否判別部23aは、ロック状態遷移部23bに対して、一定時間待機する旨を通知する。また、ロック獲得可否判別部23aは、I/O発行処理部22に振り分けられたリクエストがI/O処理の対象となる装置の装置単位排他ロックが獲得されていないと判別した場合には、装置単位排他ロックが獲得できる旨をロック状態遷移部23bに通知する。
【0042】
ロック状態遷移部23bは、ロック獲得可否判別部23aから一定時間待機する旨の通知を受付けた場合には、I/O発行処理部22に対して振り分けられたI/O処理のリクエストを発行したユーザプログラムの状態を待ち状態に遷移させる。なお、待ち状態に遷移したユーザプログラムは、ビジーループ状態となる。また、ロック状態遷移部23bは、ロック獲得可否判別部23aから装置単位排他ロックが獲得できる旨の通知を受付けた場合には、上述したユーザプログラムの待ち状態を解除し、ユーザプログラムが発行したI/O処理のリクエストを情報処理装置に実行させる。
【0043】
ロック獲得部23cは、ロック獲得可否判別部23aから装置単位排他ロックが獲得できる旨の通知を受付けた場合には、以下の処理を実行する。すなわち、ロック獲得部23cは、ロック情報記憶部27が有する共有カウンタ27aの値を1インクリメントする。
【0044】
また、ロック獲得部23cは、ロック状態記憶部27dに記憶されたロック獲得状態を書換え、ロックの獲得状態を遷移させる。詳細には、ロック獲得部23cは、ロック状態記憶部27dが記憶するロック状態に、I/O処理の対象となる装置について装置単位排他ロックを獲得した旨を追加する。その後、ロック獲得部23cは、装置単位排他ロックを獲得した旨を実行部22aに通知する。
【0045】
また、ロック獲得部23cは、実行部22aがI/O処理を終了した場合には、ロック状態記憶部27dから、I/O処理の対象となる装置について装置単位排他ロックを獲得した旨を削除し、共有カウンタ27aの値を1デクリメントする。すなわち、ロック獲得部23cは、実行部22aがI/O処理を終了した場合には、I/O処理の対象となる装置について装置単位排他ロックと共有ロックとを解放する。
【0046】
実行部22aは、ロック獲得部23cからロックを獲得した旨の通知を受付けた場合には、I/O発行処理部22に振り分けられたリクエストが示すI/O処理、すなわち、I/O発行処理を実行する。換言すると、実行部22aは、ロック獲得部23cが装置単位排他ロックを獲得した装置に対してI/O発行処理を実行する。
【0047】
次に、認識処理部24が有する一括排他ロック制御部25および実行部24aが実行する処理について説明する。ロック獲得可否判別部25aは、I/O処理振分部21から認識処理部24にリクエストが振り分けられた場合には、一括排他ロックを獲得できるか否かを判別する。
【0048】
具体的には、ロック獲得可否判別部25aは、ロック情報記憶部27が有する共有カウンタ27a、一括排他フラグ27b、一括排他待ちフラグ27c、ロック状態記憶部27dを参照し、一括排他ロックまたは共有ロックが獲得されているか否かを判別する。そして、ロック獲得可否判別部25aは、一括排他ロックおよび共有ロックが獲得されていないと判別した場合には、一括排他ロックが獲得できる旨をロック状態遷移部25bおよびロック獲得部25cに通知する。
【0049】
一方、ロック獲得可否判別部25aは、共有ロックが獲得されており、かつ、一括排他ロック待ちフラグが「off」である場合、すなわち、一括排他ロックが獲得されておらず、かつ、装置単位排他ロックが獲得されている場合には、以下の処理を実行する。すなわち、ロック獲得可否判別部25aは、一括排他待ちフラグ27cを「on」に遷移させ、一定時間待機する。その後、ロック獲得可否判別部25aは、再度、一括排他ロックおよび共有ロックが獲得されていないか判別する。
【0050】
また、ロック獲得可否判別部25aは、共有ロックが獲得されており、かつ、一括排他ロック待ちフラグが「on」である場合には、共有ロックが全て解放されるのを待ち合わせる。すなわち、ロック獲得可否判別部25aは、共有ロックが全て解放された後に、一括排他ロックの獲得を待っている処理部が一括排他ロックを獲得し、その後、一括排他ロックが解放されれるまで待機する。そして、ロック獲得可否判別部25aは、一定時間待機し、その後、一括排他ロックおよび共有ロックが獲得されていないか再度判別する。
【0051】
また、ロック獲得可否判別部25aは、一括排他ロックが獲得されており、かつ、一括排他ロック待ちフラグが「off」である場合には、一括排他ロックの解放を待ち合わせする。その後、ロック獲得可否判別部25aは、共有ロックおよび一括排他ロックが獲得されていないか再度判別する。
【0052】
なお、ロック獲得可否判別部25aは、一定時間待機する場合には、ロック状態遷移部25bに対して、一定時間待機する旨を通知する。このような場合には、ロック状態遷移部25bは、ロック状態遷移部23bと同様に、認識処理部24にI/O処理のリクエストを発行したユーザプログラムの状態を待ち状態に遷移させる。また、ロック状態遷移部25bは、ロック獲得可否判別部25aから一括排他ロックが獲得できる旨の通知を受付けた場合には、ユーザプログラムの待ち状態を解除し、ユーザプログラムが発行したI/O処理のリクエストを情報処理装置に実行させる。
【0053】
ロック獲得部25cは、ロック獲得可否判別部25aから一括排他ロックが獲得できる旨の通知を受付けた場合には、以下の処理を実行する。すなわち、ロック獲得部25cは、一括排他フラグ27bを「on」にし、ロック状態記憶部27dに記憶されたロック獲得状態を書換え、ロックの獲得状態を遷移させる。
【0054】
詳細には、ロック獲得部25cは、ロック状態記憶部27dが記憶するロック状態に、一括排他ロックを獲得した旨を追加する。その後、ロック獲得部25cは、一括排他ロックを獲得した旨を実行部24aに通知する。また、ロック獲得部25cは、実行部24aがI/O処理を終了した場合には、ロック状態記憶部27dから、一括排他ロックを獲得した旨を削除し、一括排他フラグ27bを「off」にする。すなわち、ロック獲得部25cは、一括排他ロックを解放する。
【0055】
実行部24aは、ロック獲得部25cから一括排他ロックを獲得した旨の通知を受付けた場合には、認識処理部24に振り分けられたリクエストが示すI/O処理、すなわち、各装置31〜33の認識処理を実行する。
【0056】
なお、一覧取得処理部26が有する一括排他ロック制御部25は、認識処理部24が有する一括排他ロック制御部25と同様の機能を発揮する。また、実行部26aは、一括排他ロック制御部25が一括排他ロックを獲得した場合には、ハードウェア30に含まれる共用リソースである各装置31〜33の一覧を取得する。すなわち、一覧取得処理部26は、I/O処理振分部21からI/O処理のリクエストを受信した場合には、一括排他ロックを獲得し、その後、ハードウェア30に含まれる共用リソースである各装置31〜33の一覧を取得する処理を実行する処理部である。
【0057】
ここで、図2を用いて、装置単位排他ロック制御部23および一括排他ロック制御部25が、装置単位排他ロックおよび一括排他ロックの獲得状況と、新たに獲得するロックの種別とに応じて、ロックの獲得可否を判別する処理について説明する。図2は、ロックの獲得可否を判別する処理の一例を説明するための図である。なお、以下の説明では、装置単位排他ロック制御部23および一括排他ロック制御部25を各ロック制御部23、25と適宜記載する。
【0058】
例えば、図2に示す例では、装置単位排他ロック制御部23および一括排他ロック制御部25は、一括排他ロックおよび装置単位排他ロックが獲得されていない場合には、新たな装置単位排他ロックおよび一括排他ロックの獲得を許可する。また、ある装置に対して装置単位排他ロックが獲得されている場合には、装置単位排他ロック制御部23は、他の装置に対する装置単位排他ロックの獲得を許可する。
【0059】
一方、一括排他ロック制御部25は、全ての共有ロックが解放されるまで、一括排他ロックの獲得を許可せず、I/O処理のリクエストを発行したユーザプログラムを待ち状態に遷移させる。また、一括排他ロックが獲得されている場合には、各ロック制御部23、25は、装置単位排他ロックおよび一括排他ロックの獲得を許可せず、I/O処理のリクエストを発行したユーザプログラムを待ち状態に遷移させる。
【0060】
次に、各処理部22、24、26が取得するロックの種別と、各処理部22、24、26が実行するI/O処理との関係について説明する。例えば、実行するI/O処理の内容が、全ての装置31〜33における一意性を要する処理である場合には、各処理部22、24、26は、全ての装置31〜33に対する一括排他ロックを取得する必要がある。一方、実行するI/O処理の内容が、1つの装置における一意性を要する処理であり、他の装置に対する処理と並行して実行することで、I/O処理に要する時間を短縮できる処理である場合には、各処理部22、24、26は、装置単位排他ロックを獲得すればよい。
【0061】
ここで、全ての装置31〜33における一意性を要するI/O処理とは、処理を実行するたびに状態が変動することが許されないような処理であり、例えば、識別処理、一覧取得処理、エラー処理等である。また、1つの装置における一意性を要する処理とは、I/O割り込み処理やI/O発行処理等である。
【0062】
このため、全ての装置31〜33における一意性を要する処理を実行する認識処理部24や一覧取得処理部26は、一括排他ロックを獲得する一括排他ロック制御部25を有する。また、1つの装置における一意性を要する処理を実行するI/O発行処理部22は、装置単位排他ロックを獲得する装置単位排他ロック制御部23を有する。
【0063】
すなわち、図1に示すOS20は、I/O処理振分部21を用いて、I/O処理の内容を判別することで、I/O処理の内容が全ての装置31〜33における一意性を要するか否かを判別する。そして、OS20は、I/O処理の内容が全ての装置31〜33における一意性を要する場合には、このI/O処理を実行する処理部に一括排他ロックを獲得させる。また、OS20は、I/O処理の内容が1つの装置における一意性を要する場合には、このI/O処理を実行する処理部に装置単位排他ロックを獲得させる。そして、OS20は、一括排他ロック、または、装置単位排他ロックを獲得させた各処理部に、I/O処理を実行させる。
【0064】
ここで、OS20は、装置単位排他ロックを獲得した複数のI/O処理については、並行して実行することとなる。例えば、OS20は、ユーザプログラム11が装置31に対するI/O発行処理のリクエストを発行し、ユーザプログラム12が装置32に対するI/O割り込み処理のリクエストを発行した場合には、各処理に装置単位排他ロックを獲得させる。
【0065】
この結果、OS20は、装置31に対するI/O発行処理と、装置32に対するI/O割り込み処理とを並行して実行することができる。この結果、OS20は、並行に実行可能な複数のI/O処理のリクエストが発行された場合には、いずれかのI/O処理を待たせることなく、並行して実行するので、マルチプロセッサ動作におけるシステムの性能を向上させることができる。
【0066】
次に、OS20が各種I/O処理の内容に応じた種別のロックを獲得させる処理について図3を用いて説明する。図3は、I/O処理の振分の一例を説明するための図である。
なお、図3に示す例では、ユーザプログラムの一例として、装置一覧参照コマンド11a、装置認識コマンド11b、アプリケーションI/O11cが各種I/O処理のリクエストを発行したものとする。
【0067】
例えば、また、図3中(A)に示すように、装置認識コマンド11bが装置認識処理のリクエストを発行した場合には、I/O処理振分部21は、認識処理部24に装置認識処理のリクエストを振り分け、図3中(B)に示すように一括排他ロックを獲得させる。また、図3中(C)に示すように、装置一覧参照コマンド11aが装置一覧通知処理のリクエストを発行した場合には、I/O処理振分部21は、以下の処理を実行する。すなわち、I/O処理振分部21は、一覧取得処理部26に装置一覧通知処理のリクエストを振り分け、図3中(D)に示すように、一括排他ロックを獲得させる。
【0068】
また、図3中(E)に示すように、アプリケーションI/O11cが装置33に対するI/O発行処理のリクエストを発行した場合は、図3中(F)に示すように、I/O処理振分部21は、I/O発行処理部22にリクエストを振り分ける。すなわち、I/O処理振分部21は、I/O発行処理のリクエストに、装置単位排他ロックを獲得させる。
【0069】
また、認識処理部24は、一括排他ロックを獲得した場合には、図3中(G)〜(H)に示すように、各処理31〜33の認識処理を実行する。ここで、装置一覧処理部26は、認識処理部24が一括排他ロックを獲得しているため、処理を実行せずに待機する。そして、一覧取得処理部26は、認識処理部24が処理を終了し、一括排他ロックを解放した場合には、一括排他ロックを獲得し、装置一覧通知処理を実行する。
【0070】
また、I/O発行処理部22は、一覧取得処理部26が処理を終了し、一括排他ロックを解放した場合には、図3中(I)に示すように、装置33に対する装置単位排他ロックを獲得する。そして、I/O発行処理部22は、図3中(J)に示すように、装置33に対するI/O処理を実行する。その後、I/O発行処理部22は、装置33に対するI/O処理が完了した場合には、図3中(K)に示すように、割り込みでI/O完了処理を実行し、図3中(L)に示すように完了通知をアプリケーションI/O11cに通知する。
【0071】
このように、OS20は、I/O処理のリクエストが発行された場合には、I/O処理の内容に応じて、一括排他ロック、または、装置単位排他ロックを獲得する。そして、OS20は、異なる装置について装置単位排他ロックを獲得したI/O処理を並行して実行する。このため、OS20は、異なる装置に対して実行するI/O処理を並行して実行することができる。
【0072】
また、OS20は、排他対象の装置単位排他ロックの獲得、解放処理を実行するための複雑な機能をユーザプログラムに追加せずとも、適切にロックを取得することができる。すなわち、ジャイアントロックである一括排他ロックの他に、デッドロックを発生させること無く、排他対象の装置単位排他ロックを獲得、解放するための機能をユーザプログラムに追加するためには、ロックの獲得順番等について細部の検討を必要とする。しかし、OS20は、ユーザプログラムが発行したI/O処理の内容に応じた種別のロックを獲得するので、ユーザプログラムの改変を不要とすることができる。
【0073】
ここで、実行するI/O処理の対象となる共用リソースを記憶し、対象となる共用リソースが競合しないI/O処理を並行して実行する手法も考えられる。しかし、このような手法では、各I/O処理の対象となる共用リソースを記憶したり、競合の有無を判別するので、処理コストが増大してしまう。一方、OS20は、単にI/O処理の内容に応じて、ジャイアントロックである一括排他ロック、または、装置単位のロックである装置単位排他ロックを獲得するので、複雑な処理を行わずとも、並行して実行可能な複数のI/O処理を並行して実行できる。
【0074】
また、OS20は、一括排他ロックのロック資源については、従来のジャイアントロックの資源を用いることができるため、容易に実装が可能である。このため、OS20の実装には、一括排他ロックと共用ロック及び装置単位排他ロック間の競合とロック獲得状態の遷移を考慮すればよい。以下、図4を用いて、一括排他ロックと共用ロック及び装置単位排他ロック間の競合とロック獲得状態の遷移の一例について説明する。
【0075】
図4は、ロック獲得状態の遷移の一例を説明するための図である。なお、図中の実線による矢印は、先発プロセスによるロック獲得状態の遷移を示し、点線で示される矢印は、後発プロセスによるロック獲得状態の遷移を示す。例えば、初期状態においては、一括排他ロック、共用ロック、装置単位排他ロックが獲得されていないため、ロック獲得状態は、図4中(1)に示すように「空き」である。
【0076】
ここで、図4中(2)に示すように、共有ロックが獲得されると、図4中(3)に示すように、「共有ロック獲得」状態となる。また、図4中(4)に示すように、装置単位排他ロックの獲得が要求されると、すなわち、装置単位排他ロックを獲得させるI/O処理のリクエストが発行されると、図4中(5)に示すように、「装置単位排他ロック獲得」状態となる。ここで、装置単位排他ロックおよび共有ロックが解放されると、ロック獲得状態は、図4中(6)および(7)に示すように、再度「空き」となる。
【0077】
一方、図4中(8)に示すように、装置単位排他ロックが獲得されている際に、装置単位排他ロックの獲得が要求されると、ロック獲得状態は、図4中(9)に示すように、「装置単位排他ロック獲得待ち」状態となる。その後、図4中(10)に示すように、先行して獲得された装置単位排他ロックが解放されると、ロック獲得状態は、後発の要求に関わる「装置単位排他ロックを獲得」状態となる。
【0078】
一方、図4中(11)に示すように、ロック獲得状態が「空き」である際に、一括排他ロックの獲得が要求されると、図4中(12)に示すように、ロック獲得状態は、「一括排他ロック獲得」状態となる。また、図4中(13)に示すように、一括排他ロックが解放されると、図4中(1)に示すように、ロック獲得状態は、「空き」となる。
【0079】
また、図4中(14)に示すように、ロック獲得状態が「一括排他ロック獲得」状態である際に、一括排他ロックの獲得が要求されると、図4中(15)に示すように、ロック獲得状態は、「一括排他ロック獲得待ち」状態となる。その後、図4中(16)に示すように、一括排他ロックが解放されると、図4中(12)に示すように、ロック獲得状態は「一括排他ロック獲得」状態となる。
【0080】
また、図4中(17)に示すように、ロック獲得状態が「共有ロック獲得」状態である際に、一括排他ロック獲得が要求されると、図4中(18)に示すように、ロック獲得状態は、「一括排他ロック獲得待ち」状態となる。その後、図4中(19)に示すように、全ての共有ロックが解放されると、図4中(12)に示すように、ロック獲得状態は、「一括排他ロック獲得」状態となる。
【0081】
また、図4中(20)に示すように、ロック獲得状態が「一括排他ロック獲得」状態である際に、共有ロックの獲得が要求されると、図4中(21)に示すように、ロック獲得状態は、「共有ロック獲得待ち」状態となる。また、図4中(22)に示すように、一括排他ロックが解放されると、図4中(3)に示すように、ロック獲得状態は、「共有ロック獲得」状態となる。
【0082】
次に、図5を用いて、ロック獲得状態の遷移の一例を説明する。図5は、ロック獲得状態の遷移の一例を説明するための図である。なお、図5に示す例では、現在のロック獲得状態(横軸)と、新たに獲得を要求されたロックの種別(縦軸)とに応じて、新たなロック獲得状態の一例を示した。
【0083】
例えば、OS20は、一括排他ロックおよび装置単位排他ロックが獲得されていないロック未獲得状態で、一括排他待ちフラグ27cが「off」である際に、一括排他ロックの獲得が要求された場合には、一括排他フラグ27bを「on」にするとともに、ロック獲得状態を「一括排他ロック獲得状態」とする。
【0084】
一方、OS20は、一括排他ロックおよび装置単位排他ロックが獲得されておらず、一括排他待ちフラグ27cが「off」である際に、共有ロックと装置31に対する装置単位排他ロックの獲得が要求された場合には、以下の処理を行う。すなわち、OS20は、共有カウンタ27aの値を「0」から「1」にインクリメントする。また、OS20は、「共有ロック+装置31に対する装置単位排他ロック獲得済み」状態を新たなロック状態とする。
【0085】
また、OS20は、一括排他ロックおよび装置単位排他ロックが獲得されておらず、一括排他待ちフラグ27cが「off」である際に、共有ロックと装置32に対する装置単位排他ロックの獲得が要求された場合には、以下の処理を行う。すなわち、OS20は、共有カウンタ27aの値を「0」から「1」にインクリメントする。また、OS20は、「共有ロック+装置32に対する装置単位排他ロック獲得済み」状態を新たなロック状態とする。
【0086】
また、OS20は、共有ロックと装置32に対する装置単位排他ロックが獲得されており、かつ、一括排他待ちフラグ27cが「off」である際に、一括排他ロックの獲得が要求された場合は、以下の処理を行う。すなわち、OS20は、一括排他待ちフラグ27cを「on」にする。そして、OS20は、共有ロックの解除を待ち合わせた後に、一括排他ロックの獲得をリトライする。
【0087】
また、OS20は、共有ロックと装置32に対する装置単位排他ロックが獲得されており、かつ、一括排他待ちフラグ27cが「off」である際に、共有ロックと装置31に対する装置単位排他ロックの獲得が要求された場合は、以下の処理を行う。すなわち、OS20は、共有カウンタ27aの値を「1」から「2」にインクリメントする。また、OS20は、「共有ロック+装置31に対する装置単位排他ロック獲得+装置32に対する装置単位排他ロック獲得状態」を新たなロック獲得状態とする。
【0088】
また、OS20は、共有ロックと装置32に対する装置単位排他ロックが獲得されており、かつ、一括排他待ちフラグ27cが「off」である際に、共有ロックと装置32に対する装置単位排他ロックの獲得が要求された場合は、以下の処理を行う。すなわち、OS20は、装置32に対する装置単位排他ロックが解放されるまで待ち合わせた後に、装置32に対する装置単位排他ロックの獲得をリトライする。
【0089】
また、OS20は、共有ロックと装置32に対する装置単位排他ロックが獲得されており、かつ、一括排他待ちフラグ27cが「on」である際に、一括排他ロックの獲得が要求された場合には、以下の処理を行う。すなわち、OS20は、共有ロックが解放されるのを待ち合わせた後に、一括排他ロックの獲得をリトライする。
【0090】
また、OS20は、共有ロックと装置32に対する装置単位排他ロックが獲得されており、かつ、一括排他待ちフラグ27cが「on」である際に、共有ロックと装置31に対する装置単位排他ロックの獲得が要求された場合は、以下の処理を行う。すなわち、OS20は、一括排他待ちフラグ27cが「off」になるのを待ち合わせした後に、共有ロックと装置31に対する装置単位排他ロックの獲得をリトライする。
【0091】
また、OS20は、共有ロックと装置32に対する装置単位排他ロックが獲得されており、かつ、一括排他待ちフラグ27cが「on」である際に、共有ロックと装置32に対する装置単位排他ロックの獲得が要求された場合は、以下の処理を行う。すなわち、OS20は、一括排他待ちフラグ27cが「off」になるのを待ち合わせした後に、共有ロックと装置32に対する装置単位排他ロックの獲得をリトライする。
【0092】
また、OS20は、一括排他ロック獲得状態、すなわち一括排他フラグ27bが「on」であり、一括排他待ちフラグ27cが「off」である際に、一括排他ロックの獲得が要求された場合には、以下の処理を行う。すなわち、OS20は、一括排他ロックの解放を待ち合わせし、その後リトライする。
【0093】
また、OS20は、一括排他ロック獲得状態、すなわち一括排他フラグ27bが「on」であり、一括排他待ちフラグ27cが「off」である際に、共有ロックと装置31に対する装置単位排他ロックの獲得が要求された場合は、一括排他ロックの解放を待ち合わせし、その後リトライする。また、OS20は、一括排他ロック獲得状態、すなわち一括排他フラグ27bが「on」であり、一括排他待ちフラグ27cが「off」である際に、共有ロックと装置32に対する装置単位排他ロックの獲得が要求された場合は、一括排他ロックの解放を待ち合わせし、その後リトライする。
【0094】
次に、図6〜8を用いて、OS20が有するI/O処理振分部21、装置単位排他ロック制御部23、一括排他ロック制御部25が実行する処理の一例について説明する。なお、図6は、実施例1に関わるOSが実行するリクエストの振分処理の一例を説明するための図である。また、図7は、実施例1に関わる装置単位排他ロック制御部が装置単位排他ロックを獲得する処理の一例を説明するための図である。また、図8は、実施例1に関わる一括排他ロック制御部が一括排他処理を獲得する処理の一例を説明するための図である。
【0095】
まず、図6を用いて、OS20がI/O処理の内容に応じて、リクエストを振り分ける処理の流れの一例について説明する。例えば、OS20は、ユーザプログラム11、12等が発行したI/O処理のリクエストを受領した場合には(ステップS101)、実行するI/O処理の内容を判別する(ステップS102)。そして、OS20は、判別した処理内容を実行する処理部に、I/O処理のリクエストを振り分け(ステップS103)、振分処理を終了する。
【0096】
次に、図7を用いて、装置単位排他ロック制御部23が装置単位排他ロックを獲得する処理の流れの一例について説明する。まず、装置単位排他ロック制御部23は、I/O処理のリクエストがI/O発行処理部22等の処理部に振り分けられた場合には、一括排他ロックが獲得されているか否かを判別する(ステップS201)。そして、装置単位排他ロック制御部23は、一括排他ロックが獲得されている場合には(ステップS201肯定)、一定時間待機し(ステップS202)、その後、一括排他ロックが獲得されているか否かを再度判別する(ステップS201)。
【0097】
また、装置単位排他ロック制御部23は、一括排他ロックが獲得されていない場合には(ステップS201否定)、共有ロックを獲得する(ステップS203)。そして、装置単位排他ロック制御部23は、I/O処理の対象となる装置について装置単位排他ロックが獲得されているか否かを判別する(ステップS204)。また、装置単位排他ロック制御部23は、装置単位排他ロックが獲得されている場合には(ステップS204肯定)、一定時間待機し(ステップS205)、その後、装置単位排他ロックが獲得されているか否かを再度判別する(ステップS204)。
【0098】
また、装置単位排他ロック制御部23は、I/O処理の対象となる装置について装置単位排他ロックが獲得されていないと判別した場合には(ステップS204否定)、I/O処理の対象となる装置について装置単位排他ロックを獲得する(ステップS206)。また、装置単位排他ロック制御部23は、I/O処理が実施されると(ステップS207)、獲得した装置単位排他ロックを解放し(ステップS208)、その後、共有ロックを解放し(ステップS209)、処理を終了する。
【0099】
次に、図8を用いて、一括排他ロック制御部25が一括排他ロックを獲得する処理の流れの一例について説明する。まず一括排他ロック制御部25は、認識処理部24等のI/O処理を実行する処理部にI/O処理のリクエストが振り分けられた場合には、共有ロックまたは一括排他ロックが獲得されているか否かを判別する(ステップS301)。そして、一括排他ロック制御部25は、共有ロックまたは一括排他ロックが獲得されていると判別した場合には(ステップS301肯定)、一定時間待機する(ステップS302)。
【0100】
その後、一括排他ロック制御部25は、共有ロックまたは一括排他ロックが獲得されているか否かを再度判別する(ステップS301)。また、一括排他ロック制御部25は、共有ロックまたは一括排他ロックが獲得されていると判別した場合には(ステップS301否定)、一括排他ロックを獲得する(ステップS303)。また、一括排他ロック制御部25は、I/O処理が実施されると(ステップS304)、一括排他ロックを解放し(ステップS305)、処理を終了する。
【0101】
[実施例1の効果]
上述したように、OS20は、実行するI/O処理の内容に応じて、一括排他ロック、または、共有排他ロックを獲得する複数の処理部22〜26を有する。そして、OS20は、I/O処理のリクエストが発行された場合には、実行するI/O処理の内容を判別し、判別した内容を実行する処理部22〜26に振り分ける。すなわち、OS20は、I/O処理のリクエストが発行された場合には、実行するI/O処理の内容に応じて、一括排他ロック、または、装置単位排他ロックを獲得させる。
【0102】
このため、OS20は、並列に実行可能なI/O処理のリクエストが複数発行された場合には、各I/O処理を同時に実行させることができる。この結果、OS20は、マルチプロセッサ動作におけるシステムの性能を向上させることができる。
【0103】
例えば、従来のOSや各処理部22、24、26が仮想化された場合には、ハードウェア30が有する各装置31〜33に対する命令をエミュレーションするので、オーバーヘッドが発生する。このため、従来のOSや各処理部22、24、26を仮想化した場合には、ジャイアントロックの獲得時間が増大する。
【0104】
この結果、プロセッサ数が増え、同時に実行されるユーザプログラムの数が増大するたびに、I/O処理に関わる性能の劣化が著しくなってしまう。しかし、OS20は、並列に実行可能な複数のI/O処理を同時に実行することができるので、プロセッサ数を増やした際にも、I/O処理に関わる性能の劣化を防ぐ結果、システムの性能を向上させることができる。
【0105】
また、OS20が有する各処理部22、24、26は、実行するI/O処理が全ての装置31〜33における一意性を要する場合には、一括排他ロックを獲得し、一意性が不要、すなわち、並行に実行可能なI/O処理である場合には、装置単位排他ロックを獲得する。すなわち、OS20は、実行するI/O処理の内容が全ての装置31〜33における一意性を要する場合には、I/O処理のリクエストに一括排他ロックを獲得させ、一意性を要しない場合には、I/O処理の対象となる装置の装置単位排他ロックを獲得させる。
【0106】
このため、OS20は、I/O処理のリクエストを発行するユーザプログラム11、12の改変を行わずとも、各I/O処理の内容に即した種別のロックを獲得させることができる。この結果、OS20は、ユーザプログラム11、12の改変を行わずとも、並列に実行可能な複数のI/O処理を同時に実行させることができる。
【0107】
また、OS20は、認識処理、一覧取得処理、エラー処理のリクエストが発行された場合には、全ての装置31〜33に対して一意性を要する処理であるため、一括排他ロックを獲得させる。この結果、例えば、OS20は、エラー処理を実行中に他のI/O処理によるアクセスを許可するようなことを防ぐので、適切にI/O処理を実行させることができる。
【0108】
また、OS20は、一括排他ロックを獲得させるI/O処理のリクエストが新たに発行された際に、一括排他ロックまたは装置単位排他ロックが獲得されている場合には、一定時間待機する。その後、OS20は、一括排他ロックまたは装置単位排他ロックが解放された場合には、新たに発行されたI/O処理のリクエストに一括排他ロックを獲得させる。このため、OS20は、一括排他ロックを獲得させるI/O処理のリクエストが発行された際に、他のリクエストとの競合を適切に防ぐことができる。
【0109】
また、OS20は、装置単位排他ロックを獲得させるI/O処理のリクエストが新たに発行された際に、同一の装置に対する装置単位排他ロック、または、一括排他ロックが獲得されている場合には、一定時間待機する。そして、OS20は、同一の装置に対する装置単位排他ロック、または、一括排他ロックが解放された場合には、新たに発行されたI/O処理のリクエストに装置単位排他ロックを獲得させる。このため、OS20は、装置単位排他ロックを獲得させるI/O処理のリクエストが発行された際に、他のリクエストとの競合を適切に防ぐことができる。
【実施例2】
【0110】
これまで本発明の実施例について説明したが実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例2として本発明に含まれる他の実施例を説明する。
【0111】
(1)OS20の態様について
上述したOS20は、実行するI/O処理が定められた複数の処理部22〜26を有し、各処理部22、24、26は、それぞれ実行するI/O処理の内容に応じて、装置単位排他ロック制御部23、または、一括排他ロック制御部25を有していた。しかし、実施例はこれに限定されるものではない。例えば、OS20は、装置単位排他ロック制御部23および一括排他ロック制御部25を1つづつ有する。
【0112】
そして、OS20は、I/O処理のリクエストが発行された場合は、I/O処理の内容に応じて、装置単位排他ロック制御部23または一括排他ロック制御部25の機能を呼び出し、発行されたリクエストに装置単位排他ロックまたは一括排他ロックを獲得させる。その後、OS20は、装置単位排他ロックまたは一括排他ロックを獲得させたリクエストから順にI/O処理を実行させることとしてもよい。
【0113】
すなわち、OS20は、I/O処理のリクエストが発行された場合には、I/O処理の内容に応じて、一括排他ロック、または、装置単位排他ロックを獲得させ、いずれかのロックを獲得したI/O処理のリクエストから実行させればよい。
【0114】
なお、I/O発行処理部22、認識処理部24、一覧取得処理部26は、サブルーチンとして動作させてもよい。すなわち、OS20は、I/O処理のリクエストが発行された場合には、I/O処理の内容に応じて、リクエストを実行するサブルーチンを呼び出す。例えば、OS20は、I/O発行処理のリクエストが発行された場合には、I/O発行処理部22をサブルーチンとして呼び出す。そして、I/O発行処理部22は、装置単位排他ロック制御部23をサブルーチンとして呼び出し、装置単位排他ロックを獲得した後に、I/O発行処理を実行することとしてもよい。
【0115】
なお、本発明は、実施例1として説明したOS20の他に、I/O処理振分部21、装置単位排他ロック制御部23、一括排他ロック制御部25を有する排他制御プログラムとしても実施可能である。このようなOS20や排他制御プログラムは、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク(FD)、CD−ROM(Compact Disc Read Only Memory)、MO(Magneto Optical Disc)、DVD(Digital Versatile Disc)などのコンピュータで読取可能な記録媒体に記録される。また、このプログラムは、コンピュータによって記録媒体から読み出されることによって実行することもできる。
【符号の説明】
【0116】
1 情報処理装置
10 ユーザ空間
11、12 ユーザプログラム
11a 装置一覧参照コマンド
11b 装置認識コマンド
11c アプリケーションI/O
20 OS(カーネル)
21 I/O処理振分部
22 I/O発行処理部
23 装置単位排他ロック制御部
25 一括排他ロック制御部
23a、25a ロック獲得可否判別部
23b、25b ロック状態遷移部
23c、25c ロック獲得部
22a、24a、26a 実行部
27 ロック情報記憶部
27a 共有カウンタ
27b 一括排他フラグ
27c 一括排他待ちフラグ
27d ロック状態記憶部
30 ハードウェア
31、32、33 装置
41 I/O処理受領部
42 I/O処理部
42a I/O発行処理部
42b 装置認識処理部
42c エラー処理部
43 ジャイアントロック制御部
43a 確認部
43b 判別部
43c 獲得部

【特許請求の範囲】
【請求項1】
プロセスを実行するプロセッサを複数有する情報処理装置に、
複数の前記プロセスにより共有される複数の装置を含む共有リソースを対象として前記プロセスが発行したI/O処理の内容を判別し、
前記判別した内容に応じて、前記共有リソースに対するアクセスを1つのI/O処理のみに認める排他ロックを該I/O処理の要求に獲得させる処理、または、前記共有リソースが有する1つの装置に対するアクセスを1つのI/O処理のみに認める共有排他ロックを該I/O処理の要求に獲得させる処理
を実行させることを特徴とする排他制御プログラム。
【請求項2】
前記I/O処理の内容を判別する処理として、該I/O処理の内容が前記共有リソースにおける一意性を要するか否かを判別し、
前記排他ロックまたは前記共有排他ロックを該I/O処理の要求に獲得させる処理として、前記I/O処理の内容が前記共有リソースにおける一意性を要すると判別した場合は、前記排他ロックを該I/O処理の要求に獲得させ、前記I/O処理の内容が前記共有リソースにおける一意性を要しないと判別した場合は、前記共有排他ロックを該I/O処理の要求に獲得させる
処理を実行させることを特徴とする請求項1に記載の排他制御プログラム。
【請求項3】
前記判別したI/O処理の内容が、前記共有リソースに含まれる装置を識別する装置識別処理、または、前記共有リソースに含まれる全ての装置の一覧を取得する装置一覧取得処理、または、前記共有リソースに含まれる装置においてエラーが発生した際に当該装置のリカバリ処理を実行するエラー対応処理である場合は、前記I/O処理の内容が前記共有リソースにおける一意性を要すると判別することを特徴とする請求項2に記載の排他制御プログラム。
【請求項4】
前記排他ロックを前記I/O処理の要求に獲得させる処理として、前記排他ロック、または、前記共有排他ロックが他の要求に獲得されているか否かを判別し、前記排他ロック、または、前記共有排他ロックが他の要求に獲得されていると判別した場合には、当該I/O処理の要求を待機させ、前記他の要求が獲得した前記排他ロックが解放され、かつ、全ての前記共有排他ロックが解放された場合には、該I/O処理の要求に前記排他ロックを獲得させることを特徴とする請求項1〜3のいずれか1つに記載の排他制御プログラム。
【請求項5】
前記共有排他ロックを前記I/O処理の要求に獲得させる処理として、当該I/O処理の対象と同一の装置に対する前記共有排他ロック、または、前記排他ロックが他の要求によって獲得されているか否かを判別し、当該共有排他ロック、または、前記排他ロックが他の要求によって獲得されている場合には、当該I/O処理の要求を待機させ、当該共有排他ロックが解放され、かつ、前記排他ロックが解放された場合には、該I/O処理の要求に前記共有排他ロックを獲得させることを特徴とする請求項1〜4のいずれか1つに記載の排他制御プログラム。
【請求項6】
複数の演算処理装置が実行するプロセスにより共有される複数の装置を含む共有リソースを対象として前記プロセスが発行したI/O処理の内容を判別する判別部と、
前記判別部が判別した内容に応じて、前記共有リソースに対するアクセスを1つのI/O処理のみに認める排他ロック、または、前記共有リソースが有する1つの装置に対するアクセスを1つのI/O処理のみに認める共有排他ロックを該I/O処理の要求に獲得させるロック制御部と、
を有することを特徴とする排他制御装置。
【請求項7】
プロセスを実行するプロセッサを複数有する情報処理装置が実行する排他制御方法において、
複数の前記プロセスにより共有される複数の装置を含む共有リソースを対象として前記プロセスが発行したI/O処理の内容を判別し、
前記判別した内容に応じて、前記共有リソースに対するアクセスを1つのI/O処理のみに認める排他ロック、または、前記共有リソースが有する1つの装置に対するアクセスを1つのI/O処理のみに認める共有排他ロックを該I/O処理の要求に獲得させる
処理を実行することを特徴とする排他制御方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公開番号】特開2013−97623(P2013−97623A)
【公開日】平成25年5月20日(2013.5.20)
【国際特許分類】
【出願番号】特願2011−240595(P2011−240595)
【出願日】平成23年11月1日(2011.11.1)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】