(57)【要約】【課題】マルチプロセッサ動作におけるシステムの性能を向上させる。【解決手段】ＯＳ２０は、それぞれ独立してユーザプログラム１１、１２を実行するプロセッサを複数有する情報処理装置１に以下の処理を実行させる。すなわち、ＯＳ２０は、複数のユーザプログラム１１、１２によって共用される共用リソースである複数の装置３１〜３３に対して発行されたリクエストのＩ／Ｏ処理の内容を判別する。そして、ＯＳ２０は、判別した内容に応じて、共有リソースに対するアクセスを１つのＩ／Ｏ処理のみに認める排他ロック、または、共有リソースが有する１つの装置に対するアクセスを１つのＩ／Ｏ処理のみに認める共有排他ロックをリクエストに獲得させる。【選択図】図１
2013097623.tif 000002
【特許請求の範囲】
【請求項１】
プロセスを実行するプロセッサを複数有する情報処理装置に、
複数の前記プロセスにより共有される複数の装置を含む共有リソースを対象として前記プロセスが発行したＩ／Ｏ処理の内容を判別し、
前記判別した内容に応じて、前記共有リソースに対するアクセスを１つのＩ／Ｏ処理のみに認める排他ロックを該Ｉ／Ｏ処理の要求に獲得させる処理、または、前記共有リソースが有する１つの装置に対するアクセスを１つのＩ／Ｏ処理のみに認める共有排他ロックを該Ｉ／Ｏ処理の要求に獲得させる処理
を実行させることを特徴とする排他制御プログラム。
【請求項２】
前記Ｉ／Ｏ処理の内容を判別する処理として、該Ｉ／Ｏ処理の内容が前記共有リソースにおける一意性を要するか否かを判別し、
前記排他ロックまたは前記共有排他ロックを該Ｉ／Ｏ処理の要求に獲得させる処理として、前記Ｉ／Ｏ処理の内容が前記共有リソースにおける一意性を要すると判別した場合は、前記排他ロックを該Ｉ／Ｏ処理の要求に獲得させ、前記Ｉ／Ｏ処理の内容が前記共有リソースにおける一意性を要しないと判別した場合は、前記共有排他ロックを該Ｉ／Ｏ処理の要求に獲得させる
処理を実行させることを特徴とする請求項１に記載の排他制御プログラム。
【請求項３】
前記判別したＩ／Ｏ処理の内容が、前記共有リソースに含まれる装置を識別する装置識別処理、または、前記共有リソースに含まれる全ての装置の一覧を取得する装置一覧取得処理、または、前記共有リソースに含まれる装置においてエラーが発生した際に当該装置のリカバリ処理を実行するエラー対応処理である場合は、前記Ｉ／Ｏ処理の内容が前記共有リソースにおける一意性を要すると判別することを特徴とする請求項２に記載の排他制御プログラム。
【請求項４】
前記排他ロックを前記Ｉ／Ｏ処理の要求に獲得させる処理として、前記排他ロック、または、前記共有排他ロックが他の要求に獲得されているか否かを判別し、前記排他ロック、または、前記共有排他ロックが他の要求に獲得されていると判別した場合には、当該Ｉ／Ｏ処理の要求を待機させ、前記他の要求が獲得した前記排他ロックが解放され、かつ、全ての前記共有排他ロックが解放された場合には、該Ｉ／Ｏ処理の要求に前記排他ロックを獲得させることを特徴とする請求項１〜３のいずれか１つに記載の排他制御プログラム。
【請求項５】
前記共有排他ロックを前記Ｉ／Ｏ処理の要求に獲得させる処理として、当該Ｉ／Ｏ処理の対象と同一の装置に対する前記共有排他ロック、または、前記排他ロックが他の要求によって獲得されているか否かを判別し、当該共有排他ロック、または、前記排他ロックが他の要求によって獲得されている場合には、当該Ｉ／Ｏ処理の要求を待機させ、当該共有排他ロックが解放され、かつ、前記排他ロックが解放された場合には、該Ｉ／Ｏ処理の要求に前記共有排他ロックを獲得させることを特徴とする請求項１〜４のいずれか１つに記載の排他制御プログラム。
【請求項６】
複数の演算処理装置が実行するプロセスにより共有される複数の装置を含む共有リソースを対象として前記プロセスが発行したＩ／Ｏ処理の内容を判別する判別部と、
前記判別部が判別した内容に応じて、前記共有リソースに対するアクセスを１つのＩ／Ｏ処理のみに認める排他ロック、または、前記共有リソースが有する１つの装置に対するアクセスを１つのＩ／Ｏ処理のみに認める共有排他ロックを該Ｉ／Ｏ処理の要求に獲得させるロック制御部と、
を有することを特徴とする排他制御装置。
【請求項７】
プロセスを実行するプロセッサを複数有する情報処理装置が実行する排他制御方法において、
複数の前記プロセスにより共有される複数の装置を含む共有リソースを対象として前記プロセスが発行したＩ／Ｏ処理の内容を判別し、
前記判別した内容に応じて、前記共有リソースに対するアクセスを１つのＩ／Ｏ処理のみに認める排他ロック、または、前記共有リソースが有する１つの装置に対するアクセスを１つのＩ／Ｏ処理のみに認める共有排他ロックを該Ｉ／Ｏ処理の要求に獲得させる
処理を実行することを特徴とする排他制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、排他制御プログラム、排他制御装置および排他制御方法に関する。
【背景技術】
【０００２】
従来、複数のプロセスを実行するマルチプロセッサのシステムにおいて、単一のロックによりＯＳ（Operating  System）のカーネルを排他制御し、共有リソースに対するＩ／Ｏ（Input  Output）処理の実行を制御するジャイアントロック方式が知られている。
【０００３】
以下、このようなジャイアントロック方式が適用されたＯＳの一例について説明する。図９は、ジャイアントロック方式が適用されたＯＳの一例を説明するための図である。なお、図９には、複数のプロセスが共有する共有リソースである装置Ａ、装置Ｂ、装置Ｃを含むハードウェア層と、各装置Ａ〜Ｃに対してＩ／Ｏ処理を発行するＯＳ層と、Ｉ／Ｏ処理の要求を発行するユーザプログラムを実行するユーザ空間とを示す。
【０００４】
また、図９に示す例では、ＯＳは、カーネルにＩ／Ｏ処理受領部４１、Ｉ／Ｏ処理部４２、ジャイアントロック制御部４３を有する。ここで、Ｉ／Ｏ処理部４２は、Ｉ／Ｏ発行処理部４２ａ、装置認識処理部４２ｂ、エラー処理部４２ｃを有する。また、ジャイアントロック制御部４３は、確認部４３ａ、判別部４３ｂ、獲得部４３ｃを有する。
【０００５】
Ｉ／Ｏ処理受領部４１は、各装置Ａ〜Ｃに対するＩ／Ｏ処理の要求をユーザプログラムが発行した場合は、Ｉ／Ｏ処理の内容に応じて、Ｉ／Ｏ処理部４２が有する各部４２ａ〜４２ｃに要求を振り分ける。具体的には、Ｉ／Ｏ処理受領部４１は、Ｉ／Ｏ処理を実行するＩ／Ｏ発行処理の要求をＩ／Ｏ発行処理部４２ａに振り分け、各装置Ａ〜Ｃを認識する装置認識処理の要求を装置認識処理部４２ｂに振り分ける。また、Ｉ／Ｏ処理受領部４１は、各装置Ａ〜Ｃにおいて発生したエラーに対応するエラー処理の要求をエラー処理部４２ｃに振り分ける。
【０００６】
Ｉ／Ｏ発行処理部４２ａは、Ｉ／Ｏ処理受領部４１からＩ／Ｏ発行処理の要求を振り分けられた場合は、ジャイアントロック制御部４３に全ての装置Ａ〜Ｃに関わる排他ロックの獲得を要求する。また、Ｉ／Ｏ発行処理部４２ａは、排他ロックを獲得した場合には、Ｉ／Ｏ発行処理を実行し、Ｉ／Ｏ発行処理が終了した場合には、獲得した排他ロックを解放する。
【０００７】
また、装置認識処理部４２ｂ、および、エラー処理部４２ｃは、Ｉ／Ｏ発行処理部４２ａと同様に、各要求が振り分けられた場合は、ジャイアントロック制御部４３に排他ロックの獲得を要求する。そして、装置認識処理部４２ｂ、および、エラー処理部４２ｃは、排他ロックを獲得した場合には、各種Ｉ／Ｏ処理を実行し、各種Ｉ／Ｏ処理の実行が終了した場合には、獲得した排他ロックを解放する。
【０００８】
確認部４３ａは、各部４２ａ〜４２ｃが排他ロックの獲得を要求した場合には、各部４２ａ〜４２ｃによる排他ロックの獲得状況を確認する。また、判別部４３ｂは、各部４２ａ〜４２ｃのいずれかが排他ロックを獲得しているか否かを判別する。そして、獲得部４３ｃは、各部４２ａ〜４２ｃのいずれもが排他ロックを獲得していないと判別部４３ｂが判別した場合には、排他ロックを獲得させる。
【０００９】
また、獲得部４３ｃは、各部４２ａ〜４２ｃのいずれかが排他ロックを獲得していると判別部４３ｂが判別した場合には、排他ロックの獲得を一定時間待機させる。その後、獲得部４３ｃは、排他ロックが解放され、各部４２ａ〜４２ｃのいずれもが排他ロックを獲得していないと判別部４３ｂが判別した場合には、排他ロックの獲得を要求した処理部に排他ロックを獲得させる。
【００１０】
以下、装置Ａに対するＩ／Ｏ発行処理の要求Ｘと装置認識処理の要求Ｙとをユーザプログラムが発行した際にＯＳが実行する処理の一例について説明する。例えば、Ｉ／Ｏ処理受領部４１は、ユーザプログラムから装置Ａに対するＩ／Ｏ発行処理の要求Ｘが発行された場合には、要求ＸをＩ／Ｏ発行処理部４２ａに振り分ける。
【００１１】
このような場合には、Ｉ／Ｏ発行処理部４２ａは、ジャイアントロック制御部４３に排他ロックの獲得を要求する。すると、ジャイアントロック制御部４３は、各部４２ａ〜４２ｃが排他ロックを獲得していないので、Ｉ／Ｏ発行処理部４２ａに排他ロックを獲得させる。このため、Ｉ／Ｏ発行処理部４２ａは、装置Ａに対するＩ／Ｏ発行処理を実行する。
【００１２】
続いて、Ｉ／Ｏ処理受領部４１は、装置認識処理の要求Ｙを装置認識処理部４２ｂに振り分ける。この場合には、装置認識処理部４２ｂは、ジャイアントロック制御部４３に排他ロックの獲得を要求する。すると、ジャイアントロック制御部４３は、Ｉ／Ｏ発行処理部４２ａが排他ロックを獲得しているので、装置認識処理部４２ｂに排他ロックの獲得を一定時間待機させる。
【００１３】
その後、Ｉ／Ｏ発行処理部４２ａは、装置Ａに対するＩ／Ｏ発行処理が終了した場合には、排他ロックを解放する。すると、ジャイアントロック制御部４３は、各部４２ａ〜４２ｃが排他ロックを獲得していないので、装置認識処理部４２ｂに排他ロックを獲得させる。そして、装置認識処理部４２ｂは、装置認識処理を実行する。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特開２０１１−１１８６８８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１５】
しかしながら、上述したジャイアントロックの技術では、１つのＩ／Ｏ処理に対して、共有リソース全体の排他ロックを一括して獲得させるので、複数のＩ／Ｏ処理を並行して実行することができないという問題がある。このため、マルチプロセッサの技術が適用された場合等、複数のプロセスを並行して実行する際に、Ｉ／Ｏ処理を並行して実行することができず、システムの性能を向上させることができない。
【００１６】
本願は、１つの側面では、マルチプロセッサを備えた処理装置の性能を向上させる。
【課題を解決するための手段】
【００１７】
１つの側面では、本願に関わる排他制御プログラムは、それぞれ独立してプロセスを実行するプロセッサを複数有する情報処理装置に以下の処理を実行させる。すなわち、排他制御プログラムは、複数の装置を含み、複数のプロセスにより共有される共有リソースに対して発行されたＩ／Ｏ処理の内容を判別させる。そして、排他制御プログラムは、判別した内容に応じて、共有リソースに対するアクセスを１つのＩ／Ｏ処理のみに認める排他ロック、または、共有リソースが有する１つの装置に対するアクセスを１つのＩ／Ｏ処理のみに認める共有排他ロックをＩ／Ｏ処理の要求に獲得させる。
【発明の効果】
【００１８】
１つの側面では、マルチプロセッサを備えた処理装置の性能の向上を図ることができる。
【図面の簡単な説明】
【００１９】
【図１】図１は、実施例１に関わる排他制御プログラムの一例を説明するための図である。
【図２】図２は、ロックの獲得可否を判別する処理の一例を説明するための図である。
【図３】図３は、Ｉ／Ｏ処理の振分の一例を説明するための図である。
【図４】図４は、ロック獲得状態の遷移の一例を説明するための図である。
【図５】図５は、ロック獲得状態の遷移の一例を説明するための図である。
【図６】図６は、実施例１に関わるＯＳが実行するリクエストの振分処理の一例を説明するための図である。
【図７】図７は、実施例１に関わる装置単位排他ロック制御部が装置単位排他ロックを獲得する処理の一例を説明するための図である。
【図８】図８は、実施例１に関わる一括排他ロック制御部が一括排他処理を獲得する処理の一例を説明するための図である。
【図９】図９は、ジャイアントロック方式が適用されたＯＳの一例を説明するための図である。
【発明を実施するための形態】
【００２０】
以下に添付図面を参照して本願に係る排他制御プログラム、排他制御装置および排他制御方法について説明する。
【実施例１】
【００２１】
以下の実施例１では、図１を用いて、マルチプロセッサの技術が適用された情報処理装置が実行する排他制御プログラムの一例を説明する。図１は、実施例１に関わる排他制御プログラムの一例を説明するための図である。図１に示す例では、排他制御プログラムがＯＳ２０の一部として実行されているものとする。なお、図１には、情報処理装置１が実行するプログラムについて、ユーザ空間１０で実行されるプログラム、ＯＳ（カーネル）２０として実行されるプログラムおよび各プログラムが共用する共用リソースであるハードウェア３０とを階層的に示した。
【００２２】
例えば、図１に示す例では、情報処理装置１は、ユーザ空間１０において複数のユーザプログラム１１、１２を実行する。また、情報処理装置１は、ＯＳ２０を実行する。また、ハードウェア３０は、各ユーザプログラム１１、１２によって共用される複数の装置３１〜３３を有する。ここで、各装置３１〜３３は、例えば、ディスク装置等のハードウェアである。
【００２３】
ＯＳ２０は、Ｉ／Ｏ（Input  Output）処理振分部２１、Ｉ／Ｏ発行処理部２２、認識処理部２４、一覧取得処理部２６、ロック情報記憶部２７を有する。また、Ｉ／Ｏ発行処理部２２は、装置単位排他ロック制御部２３、実行部２２ａを有する。また、認識処理部２４は、一括排他ロック制御部２５、実行部２４ａを有する。また、一覧取得処理部２６は、一括排他ロック制御部２５、実行部２６ａを有する。また、ロック情報記憶部２７は、共有カウンタ２７ａ、一括排他フラグ２７ｂ、一括排他待ちフラグ２７ｃ、ロック状態記憶部２７ｄを有する。
【００２４】
また、装置単位排他ロック制御部２３は、ロック獲得可否判別部２３ａ、ロック状態遷移部２３ｂ、ロック獲得部２３ｃを有する。また、一括排他ロック制御部２５は、ロック獲得可否判別部２５ａ、ロック状態遷移部２５ｂ、ロック獲得部２５ｃを有する。
【００２５】
このような、Ｉ／Ｏ発行処理部２２は、各装置３１〜３３のいずれかに対してＩ／Ｏ処理を実行する処理部であり、認識処理部２４は、ハードウェア３０が有する装置の認識を行う処理部である。また、一覧取得処理部２６は、ハードウェア３０が有する装置の一覧を作成する処理部である。
【００２６】
なお、ＯＳ２０は、図１に図示したＩ／Ｏ発行処理部２２、認識処理部２４、一覧取得処理部２６以外にも、複数の処理部を有する。例えば、ＯＳ２０は、各装置３１〜３３においてエラーのリカバリ処理を実行するエラー処理部を有する。また、例えば、ＯＳ２０は、１つの装置に対する処理の実行中に任意の割り込み処理を実行するＩ／Ｏ割り込み処理部を有する。すなわち、ＯＳ２０は、各装置３１〜３３に対してそれぞれ特定の種類のＩ／Ｏ処理を実行する処理部を複数有する。
【００２７】
ここで、各処理部２２、２４、２６は、１つの装置に対するアクセスを１つの処理部のみに認める装置単位排他ロック、全ての装置３１〜３３に対するアクセスを１つの処理部のみに認める一括排他ロック、すなわちジャイアントロックのいずれかを獲得する。なお、各処理部２２、２４、２６は、装置単位排他ロックを獲得する場合には、１つの装置に対するアクセスを複数の処理部に認める共有ロックを同時に獲得する。
【００２８】
具体的には、Ｉ／Ｏ発行処理部２２は、装置単位排他ロックを獲得する装置単位排他ロック制御部２３を有する。また、認識処理部２４および一覧取得処理部２６は、一括排他ロックを獲得する一括排他ロック制御部２５を有する。そして、各処理部２２、２４、２６は、自身が有する装置単位排他ロック制御部２３、または、一括排他ロック制御部２５のいずれかを用いて、ロックを獲得する。
【００２９】
なお、図１に示す例では、各制御部が装置単位排他ロック制御部２３、または、一括排他ロック制御部２５を有する例について記載した。しかし、例えば、各制御部は、自身が実行するＩ／Ｏ処理の種別に応じて、装置単位排他ロック制御部２３、または、一括排他ロック制御部２５をサブルーチンとして呼び出す方式を採用しても良い。
【００３０】
次に、Ｉ／Ｏ処理振分部２１が実行する処理について説明する。Ｉ／Ｏ処理振分部２１は、ユーザープログラム１１、１２がＩ／Ｏ処理のリクエストを発行した場合は、リクエストの対象となるＩ／Ｏ処理の内容を判別する。そして、Ｉ／Ｏ処理振分部２１は、判別した内容のＩ／Ｏ処理を実行する処理部に、リクエストを振り分ける。
【００３１】
例えば、Ｉ／Ｏ処理振分部２１は、ユーザプログラム１１、１２がＩ／Ｏ発行処理のリクエストを発行した場合には、リクエストをＩ／Ｏ発行処理部２２に振り分ける。また、Ｉ／Ｏ処理振分部２１は、ユーザプログラム１１が、ハードウェア３０が有する各装置３１〜３３の認識処理のリクエストを発行した場合には、リクエストを認識処理部２４に発行する。また、Ｉ／Ｏ処理振分部２１は、ユーザプログラム１１がハードウェア３０が有する装置の一覧取得処理のリクエストを発行した場合には、リクエストを一覧取得部処理部２６に振り分ける。
【００３２】
次に、ロック情報記憶部２７について説明する。共有カウンタ２７ａは、装置単位排他ロック制御部２３が獲得中の共有ロックの数をカウントするカウンタである。例えば、共有カウンタ２７ａは、２つの装置単位排他ロック制御部２３が２つの共有ロックを獲得した場合には、獲得数「２」を記憶する。一括排他フラグ２７ｂは、一括排他ロック制御部２５が一括排他ロックを獲得しているか否かを示すフラグである。例えば、一括排他フラグ２７ｂは、一括排他ロック制御部２５が一括排他ロックを獲得している場合には「ｏｎ」を保持し、一括排他ロック制御部２５が一括排他ロックを獲得していない場合には「ｏｆｆ」を保持する。
【００３３】
一括排他待ちフラグ２７ｃは、一括排他ロックの獲得を待機する処理部が存在するか否かを示すフラグである。例えば、一括排他待ちフラグ２７ｃは、いずれかの処理部が一括排他ロックを獲得中に、他の処理部が一括排他ロックを獲得しようとした場合には、「ｏｎ」となる。また、一括排他待ちフラグ２７ｃは、一括排他ロックを獲得しようとした処理部が一括排他ロックを獲得した場合には、「ｏｆｆ」となる。
【００３４】
ロック状態記憶部２７ｄは、各処理部２２、２４、２６が獲得した装置単位排他ロックおよび一括排他ロックのロック獲得状態を記憶する。例えば、ロック状態記憶部２７ｄは、装置３１に対する装置単位排他ロックと共有ロックとが併せて獲得されている場合には、ロック獲得状態として「共有ロック＋装置３１に対する装置単位獲得済み状態」を記憶する。また、ロック状態記憶部２７ｄは、装置３１および装置３２に対する装置単位排他ロックと共有ロックとが併せて獲得されている場合には、ロック獲得状態として「共有ロック＋装置３１に対する装置単位排他ロック獲得＋装置３２に対する装置単位排他ロック獲得状態」を記憶する。
【００３５】
なお、ロック状態記憶部２７ｄがロック獲得状態を記憶する具体的な方法としては、例えば、各装置３１〜３３ごとに装置単位排他ロックが獲得されているか否かを示すフラグを記憶することとしてもよい。
【００３６】
次に、Ｉ／Ｏ発行処理部２２が有する装置単位排他ロック制御部２３および実行部２２ａが実行する処理について説明する。ロック獲得可否判別部２３ａは、Ｉ／Ｏ処理振分部２１からＩ／Ｏ発行処理部２２にリクエストが振り分けられた場合には、装置単位排他ロックを獲得できるか否かを判別する。
【００３７】
具体的には、ロック獲得可否判別部２３ａは、ロック情報記憶部２７が有する一括排他待ちフラグ２７ｃを参照し、一括排他待ちフラグ２７ｃが「ｏｆｆ」であるか否かを判別する。そして、ロック獲得可否判別部２３ａは、一括排他待ちフラグ２７ｃが「ｏｎ」である場合には、一定時間待機し、その後、一括排他待ちフラグ２７ｃが「ｏｆｆ」であるか否かを再度判別する。
【００３８】
一方、ロック獲得可否判別部２３ａは、一括排他待ちフラグ２７ｃが「ｏｆｆ」である場合には、一括排他フラグ２７ｂを参照する。そして、ロック獲得可否判別部２３ａは、一括排他フラグが「ｏｎ」である場合には、一定時間待機し、その後、一括排他フラグ２７ｂが「ｏｆｆ」であるか否かを再度判別する。また、ロック獲得可否判別部２３ａは、一括排他フラグ２７ｂが「ｏｆｆ」である場合には、ロック状態記憶部２７ｄを参照する。そして、ロック獲得可否判別部２３ａは、Ｉ／Ｏ発行処理部２２に振り分けられたリクエストがＩ／Ｏ処理の対象となる装置の装置単位排他ロックが獲得されているか否かを判別する。
【００３９】
また、ロック獲得可否判別部２３ａは、Ｉ／Ｏ発行処理部２２に振り分けられたリクエストがＩ／Ｏ処理の対象となる装置の装置単位排他ロックが獲得されていると判別した場合には、一定時間待機する。その後、ロック獲得可否判別部２３ａは、ロック状態記憶部２７ｄを参照し、Ｉ／Ｏ発行処理部２２に振り分けられたリクエストがＩ／Ｏ処理の対象となる装置の装置単位排他ロックが獲得されているか否かを再度判別する。
【００４０】
また、ロック獲得可否判別部２３ａは、Ｉ／Ｏ発行処理部２２に振り分けられたリクエストがＩ／Ｏ処理の対象となる装置の装置単位排他ロックが獲得されていないと判別した場合には、装置単位排他ロックが獲得できる旨をロック獲得部２３ｃに通知する。
【００４１】
なお、ロック獲得可否判別部２３ａは、一括排他フラグ２７ｂおよび一括排他待ちフラグ２７ｃが「ｏｎ」である際や、Ｉ／Ｏ処理の対象となる装置の装置単位排他ロックが獲得されている際に、一定時間待機する場合には、以下の処理を併せて実行する。すなわち、ロック獲得可否判別部２３ａは、ロック状態遷移部２３ｂに対して、一定時間待機する旨を通知する。また、ロック獲得可否判別部２３ａは、Ｉ／Ｏ発行処理部２２に振り分けられたリクエストがＩ／Ｏ処理の対象となる装置の装置単位排他ロックが獲得されていないと判別した場合には、装置単位排他ロックが獲得できる旨をロック状態遷移部２３ｂに通知する。
【００４２】
ロック状態遷移部２３ｂは、ロック獲得可否判別部２３ａから一定時間待機する旨の通知を受付けた場合には、Ｉ／Ｏ発行処理部２２に対して振り分けられたＩ／Ｏ処理のリクエストを発行したユーザプログラムの状態を待ち状態に遷移させる。なお、待ち状態に遷移したユーザプログラムは、ビジーループ状態となる。また、ロック状態遷移部２３ｂは、ロック獲得可否判別部２３ａから装置単位排他ロックが獲得できる旨の通知を受付けた場合には、上述したユーザプログラムの待ち状態を解除し、ユーザプログラムが発行したＩ／Ｏ処理のリクエストを情報処理装置に実行させる。
【００４３】
ロック獲得部２３ｃは、ロック獲得可否判別部２３ａから装置単位排他ロックが獲得できる旨の通知を受付けた場合には、以下の処理を実行する。すなわち、ロック獲得部２３ｃは、ロック情報記憶部２７が有する共有カウンタ２７ａの値を１インクリメントする。
【００４４】
また、ロック獲得部２３ｃは、ロック状態記憶部２７ｄに記憶されたロック獲得状態を書換え、ロックの獲得状態を遷移させる。詳細には、ロック獲得部２３ｃは、ロック状態記憶部２７ｄが記憶するロック状態に、Ｉ／Ｏ処理の対象となる装置について装置単位排他ロックを獲得した旨を追加する。その後、ロック獲得部２３ｃは、装置単位排他ロックを獲得した旨を実行部２２ａに通知する。
【００４５】
また、ロック獲得部２３ｃは、実行部２２ａがＩ／Ｏ処理を終了した場合には、ロック状態記憶部２７ｄから、Ｉ／Ｏ処理の対象となる装置について装置単位排他ロックを獲得した旨を削除し、共有カウンタ２７ａの値を１デクリメントする。すなわち、ロック獲得部２３ｃは、実行部２２ａがＩ／Ｏ処理を終了した場合には、Ｉ／Ｏ処理の対象となる装置について装置単位排他ロックと共有ロックとを解放する。
【００４６】
実行部２２ａは、ロック獲得部２３ｃからロックを獲得した旨の通知を受付けた場合には、Ｉ／Ｏ発行処理部２２に振り分けられたリクエストが示すＩ／Ｏ処理、すなわち、Ｉ／Ｏ発行処理を実行する。換言すると、実行部２２ａは、ロック獲得部２３ｃが装置単位排他ロックを獲得した装置に対してＩ／Ｏ発行処理を実行する。
【００４７】
次に、認識処理部２４が有する一括排他ロック制御部２５および実行部２４ａが実行する処理について説明する。ロック獲得可否判別部２５ａは、Ｉ／Ｏ処理振分部２１から認識処理部２４にリクエストが振り分けられた場合には、一括排他ロックを獲得できるか否かを判別する。
【００４８】
具体的には、ロック獲得可否判別部２５ａは、ロック情報記憶部２７が有する共有カウンタ２７ａ、一括排他フラグ２７ｂ、一括排他待ちフラグ２７ｃ、ロック状態記憶部２７ｄを参照し、一括排他ロックまたは共有ロックが獲得されているか否かを判別する。そして、ロック獲得可否判別部２５ａは、一括排他ロックおよび共有ロックが獲得されていないと判別した場合には、一括排他ロックが獲得できる旨をロック状態遷移部２５ｂおよびロック獲得部２５ｃに通知する。
【００４９】
一方、ロック獲得可否判別部２５ａは、共有ロックが獲得されており、かつ、一括排他ロック待ちフラグが「ｏｆｆ」である場合、すなわち、一括排他ロックが獲得されておらず、かつ、装置単位排他ロックが獲得されている場合には、以下の処理を実行する。すなわち、ロック獲得可否判別部２５ａは、一括排他待ちフラグ２７ｃを「ｏｎ」に遷移させ、一定時間待機する。その後、ロック獲得可否判別部２５ａは、再度、一括排他ロックおよび共有ロックが獲得されていないか判別する。
【００５０】
また、ロック獲得可否判別部２５ａは、共有ロックが獲得されており、かつ、一括排他ロック待ちフラグが「ｏｎ」である場合には、共有ロックが全て解放されるのを待ち合わせる。すなわち、ロック獲得可否判別部２５ａは、共有ロックが全て解放された後に、一括排他ロックの獲得を待っている処理部が一括排他ロックを獲得し、その後、一括排他ロックが解放されれるまで待機する。そして、ロック獲得可否判別部２５ａは、一定時間待機し、その後、一括排他ロックおよび共有ロックが獲得されていないか再度判別する。
【００５１】
また、ロック獲得可否判別部２５ａは、一括排他ロックが獲得されており、かつ、一括排他ロック待ちフラグが「ｏｆｆ」である場合には、一括排他ロックの解放を待ち合わせする。その後、ロック獲得可否判別部２５ａは、共有ロックおよび一括排他ロックが獲得されていないか再度判別する。
【００５２】
なお、ロック獲得可否判別部２５ａは、一定時間待機する場合には、ロック状態遷移部２５ｂに対して、一定時間待機する旨を通知する。このような場合には、ロック状態遷移部２５ｂは、ロック状態遷移部２３ｂと同様に、認識処理部２４にＩ／Ｏ処理のリクエストを発行したユーザプログラムの状態を待ち状態に遷移させる。また、ロック状態遷移部２５ｂは、ロック獲得可否判別部２５ａから一括排他ロックが獲得できる旨の通知を受付けた場合には、ユーザプログラムの待ち状態を解除し、ユーザプログラムが発行したＩ／Ｏ処理のリクエストを情報処理装置に実行させる。
【００５３】
ロック獲得部２５ｃは、ロック獲得可否判別部２５ａから一括排他ロックが獲得できる旨の通知を受付けた場合には、以下の処理を実行する。すなわち、ロック獲得部２５ｃは、一括排他フラグ２７ｂを「ｏｎ」にし、ロック状態記憶部２７ｄに記憶されたロック獲得状態を書換え、ロックの獲得状態を遷移させる。
【００５４】
詳細には、ロック獲得部２５ｃは、ロック状態記憶部２７ｄが記憶するロック状態に、一括排他ロックを獲得した旨を追加する。その後、ロック獲得部２５ｃは、一括排他ロックを獲得した旨を実行部２４ａに通知する。また、ロック獲得部２５ｃは、実行部２４ａがＩ／Ｏ処理を終了した場合には、ロック状態記憶部２７ｄから、一括排他ロックを獲得した旨を削除し、一括排他フラグ２７ｂを「ｏｆｆ」にする。すなわち、ロック獲得部２５ｃは、一括排他ロックを解放する。
【００５５】
実行部２４ａは、ロック獲得部２５ｃから一括排他ロックを獲得した旨の通知を受付けた場合には、認識処理部２４に振り分けられたリクエストが示すＩ／Ｏ処理、すなわち、各装置３１〜３３の認識処理を実行する。
【００５６】
なお、一覧取得処理部２６が有する一括排他ロック制御部２５は、認識処理部２４が有する一括排他ロック制御部２５と同様の機能を発揮する。また、実行部２６ａは、一括排他ロック制御部２５が一括排他ロックを獲得した場合には、ハードウェア３０に含まれる共用リソースである各装置３１〜３３の一覧を取得する。すなわち、一覧取得処理部２６は、Ｉ／Ｏ処理振分部２１からＩ／Ｏ処理のリクエストを受信した場合には、一括排他ロックを獲得し、その後、ハードウェア３０に含まれる共用リソースである各装置３１〜３３の一覧を取得する処理を実行する処理部である。
【００５７】
ここで、図２を用いて、装置単位排他ロック制御部２３および一括排他ロック制御部２５が、装置単位排他ロックおよび一括排他ロックの獲得状況と、新たに獲得するロックの種別とに応じて、ロックの獲得可否を判別する処理について説明する。図２は、ロックの獲得可否を判別する処理の一例を説明するための図である。なお、以下の説明では、装置単位排他ロック制御部２３および一括排他ロック制御部２５を各ロック制御部２３、２５と適宜記載する。
【００５８】
例えば、図２に示す例では、装置単位排他ロック制御部２３および一括排他ロック制御部２５は、一括排他ロックおよび装置単位排他ロックが獲得されていない場合には、新たな装置単位排他ロックおよび一括排他ロックの獲得を許可する。また、ある装置に対して装置単位排他ロックが獲得されている場合には、装置単位排他ロック制御部２３は、他の装置に対する装置単位排他ロックの獲得を許可する。
【００５９】
一方、一括排他ロック制御部２５は、全ての共有ロックが解放されるまで、一括排他ロックの獲得を許可せず、Ｉ／Ｏ処理のリクエストを発行したユーザプログラムを待ち状態に遷移させる。また、一括排他ロックが獲得されている場合には、各ロック制御部２３、２５は、装置単位排他ロックおよび一括排他ロックの獲得を許可せず、Ｉ／Ｏ処理のリクエストを発行したユーザプログラムを待ち状態に遷移させる。
【００６０】
次に、各処理部２２、２４、２６が取得するロックの種別と、各処理部２２、２４、２６が実行するＩ／Ｏ処理との関係について説明する。例えば、実行するＩ／Ｏ処理の内容が、全ての装置３１〜３３における一意性を要する処理である場合には、各処理部２２、２４、２６は、全ての装置３１〜３３に対する一括排他ロックを取得する必要がある。一方、実行するＩ／Ｏ処理の内容が、１つの装置における一意性を要する処理であり、他の装置に対する処理と並行して実行することで、Ｉ／Ｏ処理に要する時間を短縮できる処理である場合には、各処理部２２、２４、２６は、装置単位排他ロックを獲得すればよい。
【００６１】
ここで、全ての装置３１〜３３における一意性を要するＩ／Ｏ処理とは、処理を実行するたびに状態が変動することが許されないような処理であり、例えば、識別処理、一覧取得処理、エラー処理等である。また、１つの装置における一意性を要する処理とは、Ｉ／Ｏ割り込み処理やＩ／Ｏ発行処理等である。
【００６２】
このため、全ての装置３１〜３３における一意性を要する処理を実行する認識処理部２４や一覧取得処理部２６は、一括排他ロックを獲得する一括排他ロック制御部２５を有する。また、１つの装置における一意性を要する処理を実行するＩ／Ｏ発行処理部２２は、装置単位排他ロックを獲得する装置単位排他ロック制御部２３を有する。
【００６３】
すなわち、図１に示すＯＳ２０は、Ｉ／Ｏ処理振分部２１を用いて、Ｉ／Ｏ処理の内容を判別することで、Ｉ／Ｏ処理の内容が全ての装置３１〜３３における一意性を要するか否かを判別する。そして、ＯＳ２０は、Ｉ／Ｏ処理の内容が全ての装置３１〜３３における一意性を要する場合には、このＩ／Ｏ処理を実行する処理部に一括排他ロックを獲得させる。また、ＯＳ２０は、Ｉ／Ｏ処理の内容が１つの装置における一意性を要する場合には、このＩ／Ｏ処理を実行する処理部に装置単位排他ロックを獲得させる。そして、ＯＳ２０は、一括排他ロック、または、装置単位排他ロックを獲得させた各処理部に、Ｉ／Ｏ処理を実行させる。
【００６４】
ここで、ＯＳ２０は、装置単位排他ロックを獲得した複数のＩ／Ｏ処理については、並行して実行することとなる。例えば、ＯＳ２０は、ユーザプログラム１１が装置３１に対するＩ／Ｏ発行処理のリクエストを発行し、ユーザプログラム１２が装置３２に対するＩ／Ｏ割り込み処理のリクエストを発行した場合には、各処理に装置単位排他ロックを獲得させる。
【００６５】
この結果、ＯＳ２０は、装置３１に対するＩ／Ｏ発行処理と、装置３２に対するＩ／Ｏ割り込み処理とを並行して実行することができる。この結果、ＯＳ２０は、並行に実行可能な複数のＩ／Ｏ処理のリクエストが発行された場合には、いずれかのＩ／Ｏ処理を待たせることなく、並行して実行するので、マルチプロセッサ動作におけるシステムの性能を向上させることができる。
【００６６】
次に、ＯＳ２０が各種Ｉ／Ｏ処理の内容に応じた種別のロックを獲得させる処理について図３を用いて説明する。図３は、Ｉ／Ｏ処理の振分の一例を説明するための図である。
なお、図３に示す例では、ユーザプログラムの一例として、装置一覧参照コマンド１１ａ、装置認識コマンド１１ｂ、アプリケーションＩ／Ｏ１１ｃが各種Ｉ／Ｏ処理のリクエストを発行したものとする。
【００６７】
例えば、また、図３中（Ａ）に示すように、装置認識コマンド１１ｂが装置認識処理のリクエストを発行した場合には、Ｉ／Ｏ処理振分部２１は、認識処理部２４に装置認識処理のリクエストを振り分け、図３中（Ｂ）に示すように一括排他ロックを獲得させる。また、図３中（Ｃ）に示すように、装置一覧参照コマンド１１ａが装置一覧通知処理のリクエストを発行した場合には、Ｉ／Ｏ処理振分部２１は、以下の処理を実行する。すなわち、Ｉ／Ｏ処理振分部２１は、一覧取得処理部２６に装置一覧通知処理のリクエストを振り分け、図３中（Ｄ）に示すように、一括排他ロックを獲得させる。
【００６８】
また、図３中（Ｅ）に示すように、アプリケーションＩ／Ｏ１１ｃが装置３３に対するＩ／Ｏ発行処理のリクエストを発行した場合は、図３中（Ｆ）に示すように、Ｉ／Ｏ処理振分部２１は、Ｉ／Ｏ発行処理部２２にリクエストを振り分ける。すなわち、Ｉ／Ｏ処理振分部２１は、Ｉ／Ｏ発行処理のリクエストに、装置単位排他ロックを獲得させる。
【００６９】
また、認識処理部２４は、一括排他ロックを獲得した場合には、図３中（Ｇ）〜（Ｈ）に示すように、各処理３１〜３３の認識処理を実行する。ここで、装置一覧処理部２６は、認識処理部２４が一括排他ロックを獲得しているため、処理を実行せずに待機する。そして、一覧取得処理部２６は、認識処理部２４が処理を終了し、一括排他ロックを解放した場合には、一括排他ロックを獲得し、装置一覧通知処理を実行する。
【００７０】
また、Ｉ／Ｏ発行処理部２２は、一覧取得処理部２６が処理を終了し、一括排他ロックを解放した場合には、図３中（Ｉ）に示すように、装置３３に対する装置単位排他ロックを獲得する。そして、Ｉ／Ｏ発行処理部２２は、図３中（Ｊ）に示すように、装置３３に対するＩ／Ｏ処理を実行する。その後、Ｉ／Ｏ発行処理部２２は、装置３３に対するＩ／Ｏ処理が完了した場合には、図３中（Ｋ）に示すように、割り込みでＩ／Ｏ完了処理を実行し、図３中（Ｌ）に示すように完了通知をアプリケーションＩ／Ｏ１１ｃに通知する。
【００７１】
このように、ＯＳ２０は、Ｉ／Ｏ処理のリクエストが発行された場合には、Ｉ／Ｏ処理の内容に応じて、一括排他ロック、または、装置単位排他ロックを獲得する。そして、ＯＳ２０は、異なる装置について装置単位排他ロックを獲得したＩ／Ｏ処理を並行して実行する。このため、ＯＳ２０は、異なる装置に対して実行するＩ／Ｏ処理を並行して実行することができる。
【００７２】
また、ＯＳ２０は、排他対象の装置単位排他ロックの獲得、解放処理を実行するための複雑な機能をユーザプログラムに追加せずとも、適切にロックを取得することができる。すなわち、ジャイアントロックである一括排他ロックの他に、デッドロックを発生させること無く、排他対象の装置単位排他ロックを獲得、解放するための機能をユーザプログラムに追加するためには、ロックの獲得順番等について細部の検討を必要とする。しかし、ＯＳ２０は、ユーザプログラムが発行したＩ／Ｏ処理の内容に応じた種別のロックを獲得するので、ユーザプログラムの改変を不要とすることができる。
【００７３】
ここで、実行するＩ／Ｏ処理の対象となる共用リソースを記憶し、対象となる共用リソースが競合しないＩ／Ｏ処理を並行して実行する手法も考えられる。しかし、このような手法では、各Ｉ／Ｏ処理の対象となる共用リソースを記憶したり、競合の有無を判別するので、処理コストが増大してしまう。一方、ＯＳ２０は、単にＩ／Ｏ処理の内容に応じて、ジャイアントロックである一括排他ロック、または、装置単位のロックである装置単位排他ロックを獲得するので、複雑な処理を行わずとも、並行して実行可能な複数のＩ／Ｏ処理を並行して実行できる。
【００７４】
また、ＯＳ２０は、一括排他ロックのロック資源については、従来のジャイアントロックの資源を用いることができるため、容易に実装が可能である。このため、ＯＳ２０の実装には、一括排他ロックと共用ロック及び装置単位排他ロック間の競合とロック獲得状態の遷移を考慮すればよい。以下、図４を用いて、一括排他ロックと共用ロック及び装置単位排他ロック間の競合とロック獲得状態の遷移の一例について説明する。
【００７５】
図４は、ロック獲得状態の遷移の一例を説明するための図である。なお、図中の実線による矢印は、先発プロセスによるロック獲得状態の遷移を示し、点線で示される矢印は、後発プロセスによるロック獲得状態の遷移を示す。例えば、初期状態においては、一括排他ロック、共用ロック、装置単位排他ロックが獲得されていないため、ロック獲得状態は、図４中（１）に示すように「空き」である。
【００７６】
ここで、図４中（２）に示すように、共有ロックが獲得されると、図４中（３）に示すように、「共有ロック獲得」状態となる。また、図４中（４）に示すように、装置単位排他ロックの獲得が要求されると、すなわち、装置単位排他ロックを獲得させるＩ／Ｏ処理のリクエストが発行されると、図４中（５）に示すように、「装置単位排他ロック獲得」状態となる。ここで、装置単位排他ロックおよび共有ロックが解放されると、ロック獲得状態は、図４中（６）および（７）に示すように、再度「空き」となる。
【００７７】
一方、図４中（８）に示すように、装置単位排他ロックが獲得されている際に、装置単位排他ロックの獲得が要求されると、ロック獲得状態は、図４中（９）に示すように、「装置単位排他ロック獲得待ち」状態となる。その後、図４中（１０）に示すように、先行して獲得された装置単位排他ロックが解放されると、ロック獲得状態は、後発の要求に関わる「装置単位排他ロックを獲得」状態となる。
【００７８】
一方、図４中（１１）に示すように、ロック獲得状態が「空き」である際に、一括排他ロックの獲得が要求されると、図４中（１２）に示すように、ロック獲得状態は、「一括排他ロック獲得」状態となる。また、図４中（１３）に示すように、一括排他ロックが解放されると、図４中（１）に示すように、ロック獲得状態は、「空き」となる。
【００７９】
また、図４中（１４）に示すように、ロック獲得状態が「一括排他ロック獲得」状態である際に、一括排他ロックの獲得が要求されると、図４中（１５）に示すように、ロック獲得状態は、「一括排他ロック獲得待ち」状態となる。その後、図４中（１６）に示すように、一括排他ロックが解放されると、図４中（１２）に示すように、ロック獲得状態は「一括排他ロック獲得」状態となる。
【００８０】
また、図４中（１７）に示すように、ロック獲得状態が「共有ロック獲得」状態である際に、一括排他ロック獲得が要求されると、図４中（１８）に示すように、ロック獲得状態は、「一括排他ロック獲得待ち」状態となる。その後、図４中（１９）に示すように、全ての共有ロックが解放されると、図４中（１２）に示すように、ロック獲得状態は、「一括排他ロック獲得」状態となる。
【００８１】
また、図４中（２０）に示すように、ロック獲得状態が「一括排他ロック獲得」状態である際に、共有ロックの獲得が要求されると、図４中（２１）に示すように、ロック獲得状態は、「共有ロック獲得待ち」状態となる。また、図４中（２２）に示すように、一括排他ロックが解放されると、図４中（３）に示すように、ロック獲得状態は、「共有ロック獲得」状態となる。
【００８２】
次に、図５を用いて、ロック獲得状態の遷移の一例を説明する。図５は、ロック獲得状態の遷移の一例を説明するための図である。なお、図５に示す例では、現在のロック獲得状態（横軸）と、新たに獲得を要求されたロックの種別（縦軸）とに応じて、新たなロック獲得状態の一例を示した。
【００８３】
例えば、ＯＳ２０は、一括排他ロックおよび装置単位排他ロックが獲得されていないロック未獲得状態で、一括排他待ちフラグ２７ｃが「ｏｆｆ」である際に、一括排他ロックの獲得が要求された場合には、一括排他フラグ２７ｂを「ｏｎ」にするとともに、ロック獲得状態を「一括排他ロック獲得状態」とする。
【００８４】
一方、ＯＳ２０は、一括排他ロックおよび装置単位排他ロックが獲得されておらず、一括排他待ちフラグ２７ｃが「ｏｆｆ」である際に、共有ロックと装置３１に対する装置単位排他ロックの獲得が要求された場合には、以下の処理を行う。すなわち、ＯＳ２０は、共有カウンタ２７ａの値を「０」から「１」にインクリメントする。また、ＯＳ２０は、「共有ロック＋装置３１に対する装置単位排他ロック獲得済み」状態を新たなロック状態とする。
【００８５】
また、ＯＳ２０は、一括排他ロックおよび装置単位排他ロックが獲得されておらず、一括排他待ちフラグ２７ｃが「ｏｆｆ」である際に、共有ロックと装置３２に対する装置単位排他ロックの獲得が要求された場合には、以下の処理を行う。すなわち、ＯＳ２０は、共有カウンタ２７ａの値を「０」から「１」にインクリメントする。また、ＯＳ２０は、「共有ロック＋装置３２に対する装置単位排他ロック獲得済み」状態を新たなロック状態とする。
【００８６】
また、ＯＳ２０は、共有ロックと装置３２に対する装置単位排他ロックが獲得されており、かつ、一括排他待ちフラグ２７ｃが「ｏｆｆ」である際に、一括排他ロックの獲得が要求された場合は、以下の処理を行う。すなわち、ＯＳ２０は、一括排他待ちフラグ２７ｃを「ｏｎ」にする。そして、ＯＳ２０は、共有ロックの解除を待ち合わせた後に、一括排他ロックの獲得をリトライする。
【００８７】
また、ＯＳ２０は、共有ロックと装置３２に対する装置単位排他ロックが獲得されており、かつ、一括排他待ちフラグ２７ｃが「ｏｆｆ」である際に、共有ロックと装置３１に対する装置単位排他ロックの獲得が要求された場合は、以下の処理を行う。すなわち、ＯＳ２０は、共有カウンタ２７ａの値を「１」から「２」にインクリメントする。また、ＯＳ２０は、「共有ロック＋装置３１に対する装置単位排他ロック獲得＋装置３２に対する装置単位排他ロック獲得状態」を新たなロック獲得状態とする。
【００８８】
また、ＯＳ２０は、共有ロックと装置３２に対する装置単位排他ロックが獲得されており、かつ、一括排他待ちフラグ２７ｃが「ｏｆｆ」である際に、共有ロックと装置３２に対する装置単位排他ロックの獲得が要求された場合は、以下の処理を行う。すなわち、ＯＳ２０は、装置３２に対する装置単位排他ロックが解放されるまで待ち合わせた後に、装置３２に対する装置単位排他ロックの獲得をリトライする。
【００８９】
また、ＯＳ２０は、共有ロックと装置３２に対する装置単位排他ロックが獲得されており、かつ、一括排他待ちフラグ２７ｃが「ｏｎ」である際に、一括排他ロックの獲得が要求された場合には、以下の処理を行う。すなわち、ＯＳ２０は、共有ロックが解放されるのを待ち合わせた後に、一括排他ロックの獲得をリトライする。
【００９０】
また、ＯＳ２０は、共有ロックと装置３２に対する装置単位排他ロックが獲得されており、かつ、一括排他待ちフラグ２７ｃが「ｏｎ」である際に、共有ロックと装置３１に対する装置単位排他ロックの獲得が要求された場合は、以下の処理を行う。すなわち、ＯＳ２０は、一括排他待ちフラグ２７ｃが「ｏｆｆ」になるのを待ち合わせした後に、共有ロックと装置３１に対する装置単位排他ロックの獲得をリトライする。
【００９１】
また、ＯＳ２０は、共有ロックと装置３２に対する装置単位排他ロックが獲得されており、かつ、一括排他待ちフラグ２７ｃが「ｏｎ」である際に、共有ロックと装置３２に対する装置単位排他ロックの獲得が要求された場合は、以下の処理を行う。すなわち、ＯＳ２０は、一括排他待ちフラグ２７ｃが「ｏｆｆ」になるのを待ち合わせした後に、共有ロックと装置３２に対する装置単位排他ロックの獲得をリトライする。
【００９２】
また、ＯＳ２０は、一括排他ロック獲得状態、すなわち一括排他フラグ２７ｂが「ｏｎ」であり、一括排他待ちフラグ２７ｃが「ｏｆｆ」である際に、一括排他ロックの獲得が要求された場合には、以下の処理を行う。すなわち、ＯＳ２０は、一括排他ロックの解放を待ち合わせし、その後リトライする。
【００９３】
また、ＯＳ２０は、一括排他ロック獲得状態、すなわち一括排他フラグ２７ｂが「ｏｎ」であり、一括排他待ちフラグ２７ｃが「ｏｆｆ」である際に、共有ロックと装置３１に対する装置単位排他ロックの獲得が要求された場合は、一括排他ロックの解放を待ち合わせし、その後リトライする。また、ＯＳ２０は、一括排他ロック獲得状態、すなわち一括排他フラグ２７ｂが「ｏｎ」であり、一括排他待ちフラグ２７ｃが「ｏｆｆ」である際に、共有ロックと装置３２に対する装置単位排他ロックの獲得が要求された場合は、一括排他ロックの解放を待ち合わせし、その後リトライする。
【００９４】
次に、図６〜８を用いて、ＯＳ２０が有するＩ／Ｏ処理振分部２１、装置単位排他ロック制御部２３、一括排他ロック制御部２５が実行する処理の一例について説明する。なお、図６は、実施例１に関わるＯＳが実行するリクエストの振分処理の一例を説明するための図である。また、図７は、実施例１に関わる装置単位排他ロック制御部が装置単位排他ロックを獲得する処理の一例を説明するための図である。また、図８は、実施例１に関わる一括排他ロック制御部が一括排他処理を獲得する処理の一例を説明するための図である。
【００９５】
まず、図６を用いて、ＯＳ２０がＩ／Ｏ処理の内容に応じて、リクエストを振り分ける処理の流れの一例について説明する。例えば、ＯＳ２０は、ユーザプログラム１１、１２等が発行したＩ／Ｏ処理のリクエストを受領した場合には（ステップＳ１０１）、実行するＩ／Ｏ処理の内容を判別する（ステップＳ１０２）。そして、ＯＳ２０は、判別した処理内容を実行する処理部に、Ｉ／Ｏ処理のリクエストを振り分け（ステップＳ１０３）、振分処理を終了する。
【００９６】
次に、図７を用いて、装置単位排他ロック制御部２３が装置単位排他ロックを獲得する処理の流れの一例について説明する。まず、装置単位排他ロック制御部２３は、Ｉ／Ｏ処理のリクエストがＩ／Ｏ発行処理部２２等の処理部に振り分けられた場合には、一括排他ロックが獲得されているか否かを判別する（ステップＳ２０１）。そして、装置単位排他ロック制御部２３は、一括排他ロックが獲得されている場合には（ステップＳ２０１肯定）、一定時間待機し（ステップＳ２０２）、その後、一括排他ロックが獲得されているか否かを再度判別する（ステップＳ２０１）。
【００９７】
また、装置単位排他ロック制御部２３は、一括排他ロックが獲得されていない場合には（ステップＳ２０１否定）、共有ロックを獲得する（ステップＳ２０３）。そして、装置単位排他ロック制御部２３は、Ｉ／Ｏ処理の対象となる装置について装置単位排他ロックが獲得されているか否かを判別する（ステップＳ２０４）。また、装置単位排他ロック制御部２３は、装置単位排他ロックが獲得されている場合には（ステップＳ２０４肯定）、一定時間待機し（ステップＳ２０５）、その後、装置単位排他ロックが獲得されているか否かを再度判別する（ステップＳ２０４）。
【００９８】
また、装置単位排他ロック制御部２３は、Ｉ／Ｏ処理の対象となる装置について装置単位排他ロックが獲得されていないと判別した場合には（ステップＳ２０４否定）、Ｉ／Ｏ処理の対象となる装置について装置単位排他ロックを獲得する（ステップＳ２０６）。また、装置単位排他ロック制御部２３は、Ｉ／Ｏ処理が実施されると（ステップＳ２０７）、獲得した装置単位排他ロックを解放し（ステップＳ２０８）、その後、共有ロックを解放し（ステップＳ２０９）、処理を終了する。
【００９９】
次に、図８を用いて、一括排他ロック制御部２５が一括排他ロックを獲得する処理の流れの一例について説明する。まず一括排他ロック制御部２５は、認識処理部２４等のＩ／Ｏ処理を実行する処理部にＩ／Ｏ処理のリクエストが振り分けられた場合には、共有ロックまたは一括排他ロックが獲得されているか否かを判別する（ステップＳ３０１）。そして、一括排他ロック制御部２５は、共有ロックまたは一括排他ロックが獲得されていると判別した場合には（ステップＳ３０１肯定）、一定時間待機する（ステップＳ３０２）。
【０１００】
その後、一括排他ロック制御部２５は、共有ロックまたは一括排他ロックが獲得されているか否かを再度判別する（ステップＳ３０１）。また、一括排他ロック制御部２５は、共有ロックまたは一括排他ロックが獲得されていると判別した場合には（ステップＳ３０１否定）、一括排他ロックを獲得する（ステップＳ３０３）。また、一括排他ロック制御部２５は、Ｉ／Ｏ処理が実施されると（ステップＳ３０４）、一括排他ロックを解放し（ステップＳ３０５）、処理を終了する。
【０１０１】
[実施例１の効果]
上述したように、ＯＳ２０は、実行するＩ／Ｏ処理の内容に応じて、一括排他ロック、または、共有排他ロックを獲得する複数の処理部２２〜２６を有する。そして、ＯＳ２０は、Ｉ／Ｏ処理のリクエストが発行された場合には、実行するＩ／Ｏ処理の内容を判別し、判別した内容を実行する処理部２２〜２６に振り分ける。すなわち、ＯＳ２０は、Ｉ／Ｏ処理のリクエストが発行された場合には、実行するＩ／Ｏ処理の内容に応じて、一括排他ロック、または、装置単位排他ロックを獲得させる。
【０１０２】
このため、ＯＳ２０は、並列に実行可能なＩ／Ｏ処理のリクエストが複数発行された場合には、各Ｉ／Ｏ処理を同時に実行させることができる。この結果、ＯＳ２０は、マルチプロセッサ動作におけるシステムの性能を向上させることができる。
【０１０３】
例えば、従来のＯＳや各処理部２２、２４、２６が仮想化された場合には、ハードウェア３０が有する各装置３１〜３３に対する命令をエミュレーションするので、オーバーヘッドが発生する。このため、従来のＯＳや各処理部２２、２４、２６を仮想化した場合には、ジャイアントロックの獲得時間が増大する。
【０１０４】
この結果、プロセッサ数が増え、同時に実行されるユーザプログラムの数が増大するたびに、Ｉ／Ｏ処理に関わる性能の劣化が著しくなってしまう。しかし、ＯＳ２０は、並列に実行可能な複数のＩ／Ｏ処理を同時に実行することができるので、プロセッサ数を増やした際にも、Ｉ／Ｏ処理に関わる性能の劣化を防ぐ結果、システムの性能を向上させることができる。
【０１０５】
また、ＯＳ２０が有する各処理部２２、２４、２６は、実行するＩ／Ｏ処理が全ての装置３１〜３３における一意性を要する場合には、一括排他ロックを獲得し、一意性が不要、すなわち、並行に実行可能なＩ／Ｏ処理である場合には、装置単位排他ロックを獲得する。すなわち、ＯＳ２０は、実行するＩ／Ｏ処理の内容が全ての装置３１〜３３における一意性を要する場合には、Ｉ／Ｏ処理のリクエストに一括排他ロックを獲得させ、一意性を要しない場合には、Ｉ／Ｏ処理の対象となる装置の装置単位排他ロックを獲得させる。
【０１０６】
このため、ＯＳ２０は、Ｉ／Ｏ処理のリクエストを発行するユーザプログラム１１、１２の改変を行わずとも、各Ｉ／Ｏ処理の内容に即した種別のロックを獲得させることができる。この結果、ＯＳ２０は、ユーザプログラム１１、１２の改変を行わずとも、並列に実行可能な複数のＩ／Ｏ処理を同時に実行させることができる。
【０１０７】
また、ＯＳ２０は、認識処理、一覧取得処理、エラー処理のリクエストが発行された場合には、全ての装置３１〜３３に対して一意性を要する処理であるため、一括排他ロックを獲得させる。この結果、例えば、ＯＳ２０は、エラー処理を実行中に他のＩ／Ｏ処理によるアクセスを許可するようなことを防ぐので、適切にＩ／Ｏ処理を実行させることができる。
【０１０８】
また、ＯＳ２０は、一括排他ロックを獲得させるＩ／Ｏ処理のリクエストが新たに発行された際に、一括排他ロックまたは装置単位排他ロックが獲得されている場合には、一定時間待機する。その後、ＯＳ２０は、一括排他ロックまたは装置単位排他ロックが解放された場合には、新たに発行されたＩ／Ｏ処理のリクエストに一括排他ロックを獲得させる。このため、ＯＳ２０は、一括排他ロックを獲得させるＩ／Ｏ処理のリクエストが発行された際に、他のリクエストとの競合を適切に防ぐことができる。
【０１０９】
また、ＯＳ２０は、装置単位排他ロックを獲得させるＩ／Ｏ処理のリクエストが新たに発行された際に、同一の装置に対する装置単位排他ロック、または、一括排他ロックが獲得されている場合には、一定時間待機する。そして、ＯＳ２０は、同一の装置に対する装置単位排他ロック、または、一括排他ロックが解放された場合には、新たに発行されたＩ／Ｏ処理のリクエストに装置単位排他ロックを獲得させる。このため、ＯＳ２０は、装置単位排他ロックを獲得させるＩ／Ｏ処理のリクエストが発行された際に、他のリクエストとの競合を適切に防ぐことができる。
【実施例２】
【０１１０】
これまで本発明の実施例について説明したが実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例２として本発明に含まれる他の実施例を説明する。
【０１１１】
（１）ＯＳ２０の態様について
上述したＯＳ２０は、実行するＩ／Ｏ処理が定められた複数の処理部２２〜２６を有し、各処理部２２、２４、２６は、それぞれ実行するＩ／Ｏ処理の内容に応じて、装置単位排他ロック制御部２３、または、一括排他ロック制御部２５を有していた。しかし、実施例はこれに限定されるものではない。例えば、ＯＳ２０は、装置単位排他ロック制御部２３および一括排他ロック制御部２５を１つづつ有する。
【０１１２】
そして、ＯＳ２０は、Ｉ／Ｏ処理のリクエストが発行された場合は、Ｉ／Ｏ処理の内容に応じて、装置単位排他ロック制御部２３または一括排他ロック制御部２５の機能を呼び出し、発行されたリクエストに装置単位排他ロックまたは一括排他ロックを獲得させる。その後、ＯＳ２０は、装置単位排他ロックまたは一括排他ロックを獲得させたリクエストから順にＩ／Ｏ処理を実行させることとしてもよい。
【０１１３】
すなわち、ＯＳ２０は、Ｉ／Ｏ処理のリクエストが発行された場合には、Ｉ／Ｏ処理の内容に応じて、一括排他ロック、または、装置単位排他ロックを獲得させ、いずれかのロックを獲得したＩ／Ｏ処理のリクエストから実行させればよい。
【０１１４】
なお、Ｉ／Ｏ発行処理部２２、認識処理部２４、一覧取得処理部２６は、サブルーチンとして動作させてもよい。すなわち、ＯＳ２０は、Ｉ／Ｏ処理のリクエストが発行された場合には、Ｉ／Ｏ処理の内容に応じて、リクエストを実行するサブルーチンを呼び出す。例えば、ＯＳ２０は、Ｉ／Ｏ発行処理のリクエストが発行された場合には、Ｉ／Ｏ発行処理部２２をサブルーチンとして呼び出す。そして、Ｉ／Ｏ発行処理部２２は、装置単位排他ロック制御部２３をサブルーチンとして呼び出し、装置単位排他ロックを獲得した後に、Ｉ／Ｏ発行処理を実行することとしてもよい。
【０１１５】
なお、本発明は、実施例１として説明したＯＳ２０の他に、Ｉ／Ｏ処理振分部２１、装置単位排他ロック制御部２３、一括排他ロック制御部２５を有する排他制御プログラムとしても実施可能である。このようなＯＳ２０や排他制御プログラムは、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ（Compact  Disc  Read  Only  Memory）、ＭＯ（Magneto  Optical  Disc）、ＤＶＤ（Digital  Versatile  Disc）などのコンピュータで読取可能な記録媒体に記録される。また、このプログラムは、コンピュータによって記録媒体から読み出されることによって実行することもできる。
【符号の説明】
【０１１６】
１  情報処理装置
１０  ユーザ空間
１１、１２  ユーザプログラム
１１ａ  装置一覧参照コマンド
１１ｂ  装置認識コマンド
１１ｃ  アプリケーションＩ／Ｏ
２０  ＯＳ（カーネル）
２１  Ｉ／Ｏ処理振分部
２２  Ｉ／Ｏ発行処理部
２３  装置単位排他ロック制御部
２５  一括排他ロック制御部
２３ａ、２５ａ  ロック獲得可否判別部
２３ｂ、２５ｂ  ロック状態遷移部
２３ｃ、２５ｃ  ロック獲得部
２２ａ、２４ａ、２６ａ  実行部
２７  ロック情報記憶部
２７ａ  共有カウンタ
２７ｂ  一括排他フラグ
２７ｃ  一括排他待ちフラグ
２７ｄ  ロック状態記憶部
３０  ハードウェア
３１、３２、３３  装置
４１  Ｉ／Ｏ処理受領部
４２  Ｉ／Ｏ処理部
４２ａ  Ｉ／Ｏ発行処理部
４２ｂ  装置認識処理部
４２ｃ  エラー処理部
４３  ジャイアントロック制御部
４３ａ  確認部
４３ｂ  判別部
４３ｃ  獲得部
【図１】
2013097623.tif 000003
【図２】
2013097623.tif 000004
【図３】
2013097623.tif 000005
【図４】
2013097623.tif 000006
【図５】
2013097623.tif 000007
【図６】
2013097623.tif 000008
【図７】
2013097623.tif 000009
【図８】
2013097623.tif 000010
【図９】
2013097623.tif 000011