(57)【要約】【課題】コンピュータと周辺デバイスの間の接続を維持したまま、デバイスドライバを更新することのできる技術を提供する。【解決手段】本発明に係るデバイスドライバプログラムは、周辺デバイスとコンピュータを接続するドライバモジュールを２以上備え、いずれのドライバモジュールを稼動させるかを切り替えることができる。【選択図】図２
2011197868.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータと周辺デバイスを接続する処理を当該コンピュータに実行させるデバイスドライバプログラムであって、
前記周辺デバイスと前記コンピュータを接続する処理を前記コンピュータに実行させるドライバモジュールを２以上備えるとともに、
前記２以上のドライバモジュールのうちいずれを稼動させるかを切り替える処理を前記コンピュータに実行させる切替モジュールを備える
ことを特徴とするデバイスドライバプログラム。
【請求項２】
前記周辺デバイスと前記ドライバモジュールを接続する処理を前記コンピュータに実行させるハードウェアインタフェースモジュールと、
前記ドライバモジュールと前記コンピュータのＯＳを接続する処理を前記コンピュータに実行させるＯＳインタフェースモジュールと、
を備え、
前記ＯＳインタフェースモジュールは前記切替モジュールを備える
ことを特徴とする請求項１記載のデバイスドライバプログラム。
【請求項３】
前記ＯＳインタフェースモジュールは、前記コンピュータに、
前記コンピュータのＯＳと前記ＯＳモジュールの間の接続を維持したまま、接続先の前記ドライバモジュールを切り替えさせる
ことを特徴とする請求項２記載のデバイスドライバプログラム。
【請求項４】
前記ＯＳインタフェースモジュールは、前記コンピュータに、
前記周辺デバイスにアクセスする処理を前記ドライバモジュールが前記コンピュータに実行させているか否かを判断するステップと、
前記周辺デバイスにアクセスする処理を前記コンピュータに実行させていない前記ドライバモジュールを非稼動状態に切り替えるステップと、
前記周辺デバイスにアクセスする処理を前記コンピュータに実行させている前記ドライバモジュールについてはその処理が完了するまで待機するステップと、
を実行させることを特徴とする請求項３記載のデバイスドライバプログラム。
【請求項５】
前記ＯＳインタフェースモジュールは、前記コンピュータに、
稼動していない前記デバイスドライバを更新する処理を実行させる
ことを特徴とする請求項２から請求項４のいずれか１項に記載のデバイスドライバプログラム。
【請求項６】
周辺デバイスと接続する計算機であって、
前記周辺デバイスと前記計算機を接続する処理を前記計算機に実行させるドライバモジュールを２以上備えるとともに、
前記２以上のドライバモジュールのうちいずれを稼動させるかを切り替える処理を前記計算機に実行させる切替モジュールを備える
ことを特徴とする計算機。
【請求項７】
前記周辺デバイスと前記ドライバモジュールを接続する処理を前記計算機に実行させるハードウェアインタフェースモジュールと、
前記ドライバモジュールと前記計算機のＯＳを接続する処理を前記計算機に実行させるＯＳインタフェースモジュールと、
を備え、
前記ＯＳインタフェースモジュールは前記切替モジュールを備える
ことを特徴とする請求項６記載の計算機。
【請求項８】
前記ＯＳインタフェースモジュールは、前記計算機に、
前記計算機のＯＳと前記ＯＳモジュールの間の接続を維持したまま、接続先の前記ドライバモジュールを切り替えさせる
ことを特徴とする請求項７記載の計算機。
【請求項９】
前記ＯＳインタフェースモジュールは、前記計算機に、
前記周辺デバイスにアクセスする処理を前記ドライバモジュールが前記計算機に実行させているか否かを判断するステップと、
前記周辺デバイスにアクセスする処理を前記計算機に実行させていない前記ドライバモジュールを非稼動状態に切り替えるステップと、
前記周辺デバイスにアクセスする処理を前記コンピュータに実行させている前記ドライバモジュールについてはその処理が完了するまで待機するステップと、
を実行させることを特徴とする請求項８記載の計算機。
【請求項１０】
前記ＯＳインタフェースモジュールは、前記計算機に、
稼動していない前記デバイスドライバを更新する処理を実行させる
ことを特徴とする請求項７から請求項９のいずれか１項に記載の計算機。
【請求項１１】
コンピュータと周辺デバイスを接続する方法であって、
前記周辺デバイスと前記コンピュータを接続する２以上のドライバモジュールのうちいずれを稼動させるかを切り替える切替ステップを有する
ことを特徴とするデバイス接続方法。
【請求項１２】
前記周辺デバイスと前記ドライバモジュールを接続するハードウェア接続ステップと、
前記ドライバモジュールと前記コンピュータのＯＳを接続するＯＳ接続ステップと、
を有し、
前記ＯＳ接続ステップは前記切替ステップを有する
ことを特徴とする請求項１１記載のデバイス接続方法。
【請求項１３】
前記ＯＳ接続ステップでは、
前記コンピュータのＯＳと前記ＯＳモジュールの間の接続を維持したまま、接続先の前記ドライバモジュールを切り替える
ことを特徴とする請求項１２記載のデバイス接続方法。
【請求項１４】
前記ＯＳ接続ステップは、
前記周辺デバイスにアクセスする処理を前記ドライバモジュールが前記コンピュータに実行させているか否かを判断するステップと、
前記周辺デバイスにアクセスする処理を前記コンピュータに実行させていない前記ドライバモジュールを非稼動状態に切り替えるステップと、
前記周辺デバイスにアクセスする処理を前記コンピュータに実行させている前記ドライバモジュールについてはその処理が完了するまで待機するステップと、
を有することを特徴とする請求項１３記載のデバイス接続方法。
【請求項１５】
前記ＯＳ接続ステップでは、稼動していない前記デバイスドライバを更新する
ことを特徴とする請求項１２から請求項１４のいずれか１項に記載のデバイス接続方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータと周辺デバイスを接続するデバイスドライバに関するものである。
【背景技術】
【０００２】
近年、オープンプラットフォームシステムが基幹業務に適用されるケースが増加している。そのため、システムに搭載された多種多様な周辺デバイスに接続することができるデバイスドライバの開発が求められている。また、オープンプラットフォームシステムがミッションクリティカルな業務に用いられ、デバイスドライバに対する高信頼性への要求も高まっている。この要求に対応するため、デバイスドライバを更新して機能を向上させることが継続的に行われている。
【０００３】
コンピュータシステムに組み込まれたデバイスドライバを更新するよう要求があった場合、デバイスドライバが周辺デバイスにアクセスすることを中断する必要がある。そのため、一般にデバイスドライバを更新した後にはコンピュータを再起動する必要がある。しかし、ミッションクリティカルなシステムでは、システムを再起動したり周辺デバイスに対するアクセスを停止したりすることは許容されない場合がある。そのため、システムを稼動させたままの状態で、周辺デバイスに対するアクセスを停止させることなく、デバイスドライバを更新することができる仕組みが求められている。
【０００４】
下記特許文献１には、アプリケーションプログラムを動的に置換する技術が記載されている。
【０００５】
下記特許文献２には、不揮発性メモリに搭載されている制御用のソフトウェアの書き換え処理を短時間で行うことを目的とした技術が記載されている。
【０００６】
下記特許文献３には、ＯＳとドライバとの間にインタフェース部を設けて多種類のＯＳや装置に対する差分に対応する技術が記載されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００５−１５７５３６号公報
【特許文献２】特開２００６−３０１９６０号公報
【特許文献３】特開２００３−３０３１６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上記特許文献１〜３に記載されている技術ではいずれも、コンピュータを再起動したり周辺デバイスに対するアクセスを停止したりすることなくデバイスドライバを更新することについては、特段の考慮はなされていない。
【０００９】
本発明は、上記のような課題を解決するためになされたものであり、コンピュータと周辺デバイスの間の接続を維持したまま、デバイスドライバを更新することのできる技術を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明に係るデバイスドライバプログラムは、周辺デバイスとコンピュータを接続するドライバモジュールを２以上備え、いずれのドライバモジュールを稼動させるかを切り替えることができる。
【発明の効果】
【００１１】
本発明に係るデバイスドライバプログラムによれば、いずれかのドライバモジュールが稼動していれば、周辺デバイスとコンピュータの間の接続を維持することができる。これにより、いずれかのドライバモジュールを稼動させて周辺デバイスとコンピュータの間の接続を維持しつつ、稼動していないドライバモジュールを更新することができる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１に係るデバイスドライバプログラムを実行するコンピュータ１００の機能ブロック図である。
【図２】ＨＢＡドライバ１５０の構成を示す機能ブロック図である。
【図３】ドライバ管理テーブル１５１１の構成とデータ例を示す図である。
【図４】ＨＢＡドライバ１５０を初期化する手順を示すシーケンス図である。
【図５】コンピュータ１００の稼働中にドライバモジュールＢ１５３を更新する手順を示すシーケンス図である。
【図６】稼動させるドライバモジュールを切り替える手順を示すシーケンス図である。
【図７】ＨＢＡドライバ１５０がＩ／Ｏ要求を受け付けた場合の処理手順を示すシーケンス図である。
【図８】ＨＢＡドライバ１５０が割込処理要求を受け付けた場合の処理手順を示すシーケンス図である。
【発明を実施するための形態】
【００１３】
＜実施の形態１＞
図１は、本発明の実施の形態１に係るデバイスドライバプログラムを実行するコンピュータ１００の機能ブロック図である。コンピュータ１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１０、メモリ１２０、ホストバスアダプタ（ＨＢＡ）Ｈ／Ｗ１６０を備える。メモリ１２０には、オペレーティングシステム（ＯＳ）１３０、ディスクドライバ１４０、ＨＢＡドライバ１５０が読み込まれる。
【００１４】
ＣＰＵ１１０は、オペレーティングシステム１３０、ディスクドライバ１４０、ＨＢＡドライバ１５０を実行する演算装置である。ホストバスアダプタＨ／Ｗ１６０は、コンピュータ１００とディスクアレイシステム２００を接続するインタフェース装置である。
【００１５】
オペレーティングシステム１３０は、コンピュータ１００のＯＳである。ディスクドライバ１４０は、ＯＳ１３０にディスクアレイシステム２００を認識させてコンピュータ１００とディスクアレイシステム２００を接続するためのソフトウェアモジュールである。ＨＢＡドライバ１５０は、ＯＳ１３０にホストバスアダプタＨ／Ｗ１６０を認識させてコンピュータ１００とホストバスアダプタＨ／Ｗ１６０を接続するためのデバイスドライバである。
【００１６】
本発明に係る「デバイスドライバプログラム」は、ＨＢＡドライバ１５０が相当する。以下の説明では、記載の便宜上、各ドライバ等のプログラムを動作主体として説明する場合があるが、実際にこれらのプログラムを実行するのはＣＰＵ１１０であることを付言しておく。
【００１７】
ディスクアレイシステム２００は、ホストバスアダプタＨ／Ｗ１６０を介してコンピュータ１００に接続される。ディスクアレイシステム２００は、ディスク装置２１０を備える。ディスク装置２１０には、コンピュータ１００が使用するデータが格納されている。
【００１８】
図２は、ＨＢＡドライバ１５０の構成を示す機能ブロック図である。ドライバ間の接続関係を示すため、ディスクドライバ１４０を併記した。ＨＢＡドライバ１５０は、ＯＳインタフェースモジュール１５１、ドライバモジュールＡ１５２、ドライバモジュールＢ１５３、ハードウェア（Ｈ／Ｗ）インタフェースモジュール１５４を備える。
【００１９】
ＯＳインタフェースモジュール１５１は、ディスクドライバ１４０を介してＯＳ１３０とＨＢＡドライバ１５０を接続する機能を有する。ＯＳインタフェースモジュール１５１は、ディスクドライバ１４０のエントリポイント１４１に接続関数を登録することによりディスクドライバ１４０と接続する。
【００２０】
ＯＳインタフェースモジュール１５１は、ドライバモジュールＡ１５２とドライバモジュールＢ１５３のうちいずれを稼動させるかを切り替える切替モジュールとしての役割も有する。ＯＳインタフェースモジュール１５１は、ドライバモジュールＡ１５２とドライバモジュールＢ１５３がそれぞれ接続するエントリポイントＡ１５１３とエントリポイントＢ１５１４を備える。
【００２１】
ＯＳインタフェースモジュール１５１は、上記の他、後述の図３で説明するドライバ管理テーブル１５１１と、各ドライバモジュールに共通する設定情報を格納するドライバモジュール共通情報１５１２を備える。また、ドライバモジュールを更新する要求、稼動させるドライバモジュールを切り替える要求などをＯＳ１３０から受け付けるインタフェースを備える（図示せず）。
【００２２】
ドライバモジュールＡ１５２とドライバモジュールＢ１５３は、ＨＢＡドライバ１５０が備える機能のうち、ホストバスアダプタＨ／Ｗ１６０とコンピュータ１００を接続するデバイスドライバ本体部分の機能を備える。ＯＳ１３０とＨＢＡドライバ１５０の間のインタフェースはＯＳインタフェースモジュール１５１が受け持ち、ホストバスアダプタＨ／Ｗ１６０とＨＢＡドライバ１５０の間のインタフェースはＨ／Ｗインタフェースモジュール１５４が受け持つ。ドライバモジュールＡ１５２とドライバモジュールＢ１５３は、これらインタフェースから独立して構成されている。そのため、ＨＢＡドライバ１５０とＯＳ１３０の間の接続、およびＨＢＡドライバ１５０とホストバスアダプタＨ／Ｗ１６０の間の接続を遮断することなく、ドライバモジュールの稼動／非稼動を切り替えることができる。
【００２３】
ドライバモジュールＡ１５２は、ドライバモジュールＢ１５３と共有していない個別のパラメータやドライバの管理情報を保持するドライバモジュール設定情報Ａ１５２１を備える。ドライバモジュールＡ１５２を更新した際に新規追加されたパラメータ等は、ドライバモジュール設定情報Ａ１５２１に格納される。同様にドライバモジュールＢ１５３は、ドライバモジュールＡ１５２１と共有していない個別のパラメータやドライバの管理情報を保持するドライバモジュール設定情報Ｂ１５３１を備える。ドライバモジュールＡ１５２、ドライバモジュールＢ１５３が共通する情報は、前述のドライバモジュール共通情報１５１２が保持する。
【００２４】
ハードウェア（Ｈ／Ｗ）インタフェースモジュール１５４は、ＨＢＡドライバ１５０ホストバスアダプタＨ／Ｗ１６０の間のインタフェース処理を担当するドライバモジュールである。Ｈ／Ｗインタフェースモジュール１５４は、Ｆ／Ｗインタフェーステーブル１５４１を備える。Ｆ／Ｗインタフェーステーブル１５４１は、ホストバスアダプタＨ／Ｗ１６０に対するＩ／Ｏ要求を登録するためのテーブルである。Ｆ／Ｗインタフェーステーブル１５４１は、ＨＢＡドライバ１５０がホストバスアダプタＨ／Ｗ１６０へアクセスする際に用いられる。
【００２５】
図３は、ドライバ管理テーブル１５１１の構成とデータ例を示す図である。ドライバ管理テーブル１５１１は、各ドライバモジュールの稼動状態を管理するテーブルであり、ＨＢＡ番号列１５１１１、稼働中ドライバモジュール列１５１１２、切替要求フラグ列１５１１３を有する。
【００２６】
ＨＢＡ番号列１５１１１は、コンピュータ１００に接続されているホストバスアダプタＨ／Ｗ１６０の識別番号を保持する。コンピュータ１００に複数のホストバスアダプタＨ／Ｗ１６０が接続されている場合、本列の値によって個々のホストバスアダプタＨ／Ｗ１６０を識別する。
【００２７】
稼働中ドライバモジュール列１５１１２は、ＨＢＡ番号列１５１１１の値で識別されるホストバスアダプタＨ／Ｗ１６０とＨＢＡドライバ１５０の間のインタフェースをどのドライバモジュールが受け持っているかを示す値を保持する。
【００２８】
切替要求フラグ列１５１１３は、稼動させるドライバモジュールを切り替えるようＯＳ１３０から要求されているか否かを示す値を保持する。
【００２９】
図３（ａ）は、ＨＢＡドライバ１５０を初期化する処理が完了した時点のドライバ管理テーブル１５１１の状態を示す。ここでは、ドライバモジュールＡ１５２が稼働中、ドライバモジュールＢ１５３が非稼働中であるものとする。
【００３０】
図３（ｂ）は、ＯＳインタフェースモジュール１５１が、稼動させるドライバモジュールを切り替えるようＯＳ１３０から要求されたときにおける、ドライバ管理テーブル１５１１の状態を示す。ＯＳインタフェースモジュール１５１は、切替要求を受けたドライバモジュールに対応する切替要求フラグ列１５１１３の値を「１」にセットする。
【００３１】
図３（ｃ）は、稼動させるドライバモジュールを切り替える処理が完了した時点のドライバ管理テーブル１５１１の状態を示す。ＯＳインタフェースモジュール１５１は、切替要求フラグ列１５１１３が「１」にセットされているドライバモジュールを非稼動状態に切り替えるとともに、他のドライバモジュールを稼動状態に切り替える。ＯＳインタフェースモジュール１５１は、ドライバモジュールの切替が完了すると、切替要求フラグ列１５１１３の値を「０」に戻す。以上の処理を、全ての切替要求フラグ列１５１１３の値が「０」になるまで繰り返す。
【００３２】
図４は、ＨＢＡドライバ１５０を初期化する手順を示すシーケンス図である。以下、図４の各ステップについて説明する。
（図４：ステップＳ４０１）
ＯＳ１３０は、ＯＳインタフェースモジュール１５１をロードする。ＯＳインタフェースモジュール１５１は、ロードされると初期化処理を開始する。説明の便宜上、ここではＯＳインタフェースモジュール１５１とＨ／Ｗインタフェースモジュール１５４を一体的に構成したものと仮定し、ＯＳインタフェースモジュール１５１がロードされると同時にＨ／Ｗインタフェースモジュール１５４もロードされるものとする。ＯＳインタフェースモジュール１５１は、ディスクドライバ１４０のエントリポイント１４１にＯＳインタフェースモジュール１５１の呼び出し元の関数を登録する。続いて、ＯＳインタフェースモジュール１５１は、ドライバ管理テーブル１５１１とドライバモジュール共通情報１５１２を保持するための記憶領域を確保する。
【００３３】
（図４：ステップＳ４０２）
ＯＳインタフェースモジュール１５１は、Ｈ／Ｗインタフェースモジュール１５４に対して、ホストバスアダプタＨ／Ｗ１６０を初期化するよう要求する。
（図４：ステップＳ４０３）
Ｈ／Ｗインタフェースモジュール１５４は、Ｆ／Ｗインタフェーステーブル１５４１を保持するための記憶領域を確保する。続いてＨ／Ｗインタフェースモジュール１５４は、ホストバスアダプタＨ／Ｗ１６０を初期化し、ＯＳインタフェースモジュール１５１に応答を返す。ＯＳインタフェースモジュール１５１がその応答を受け取ると、ＯＳインタフェースモジュール１５１とＨ／Ｗインタフェースモジュール１５４の初期化処理が完了する。
【００３４】
（図４：ステップＳ４０４）
ＯＳ１３０は、ドライバモジュールＡ１５２をロードする。ドライバモジュールＡ１５２は、ロードされると初期化処理を開始する。次にドライバモジュールＡ１５２は、ドライバモジュール設定情報Ａ１５１１を設定し、ＯＳインタフェースモジュール１５１のエントリポイントＡ１５１３に、ドライバモジュールＡ１５２の呼び出し元の関数を登録する。
（図４：ステップＳ４０５）
ドライバモジュールＡ１５２は、ＯＳインタフェースモジュール１５１に対して、ドライバ管理テーブル１５１１を更新するよう要求する。
【００３５】
（図４：ステップＳ４０６）
ＯＳインタフェースモジュール１５１は、ドライバ管理テーブル１５１１の稼働中ドライバモジュール列１５１１２に、稼働中のドライバモジュールが設定されていないことを確認した上で、ドライバモジュールＡ１５２を示す値「Ａ」を同列に設定する。ＯＳインタフェースモジュール１５１はドライバモジュールＡ１５２に処理完了を応答する。ドライバモジュールＡ１５２がその応答を受け取ると、ドライバモジュールＡ１５２の初期化処理が完了する。
【００３６】
（図４：ステップＳ４０７〜Ｓ４０８）
これらのステップは、ステップＳ４０４〜Ｓ４０５と同様である。
（図４：ステップＳ４０９）
ＯＳインタフェースモジュール１５１は、ドライバ管理テーブル１５１１の稼働中ドライバモジュール列１５１１２の値が既に設定されていることを確認し、同列の値を更新せずにドライバモジュールＢ１５３に応答を返す。ドライバモジュールＢ１５３がその応答を受け取ると、ドライバモジュールＢ１５３の初期化処理が完了する。
【００３７】
図５は、コンピュータ１００の稼働中にドライバモジュールＢ１５３を更新する手順を示すシーケンス図である。以下、図５の各ステップについて説明する。
（図５：ステップＳ５０１）
ＯＳ１３０は、ドライバ更新ツールなどのユーティリティを介して、ＯＳインタフェースモジュール１５１に対して、ドライバモジュールＢ１５３を更新するよう要求するシステムコールを発行する。
【００３８】
（図５：ステップＳ５０２）
ＯＳインタフェースモジュール１５１は、ドライバモジュールＢ１５３を更新する要求を受け付けると、ドライバ管理テーブル１５１１の稼働中ドライバモジュール列１５１１２の値を確認する。稼働中ドライバモジュール列１５１１２の値が「Ｂ」である場合はステップＳ５０３へ進み、それ以外であればステップＳ５０５へ進む。
（図５：ステップＳ５０３）
ＯＳインタフェースモジュール１５１は、ドライバモジュールＢ１５３が稼働中であるためドライバモジュールＢ１５３を更新することができない旨を、ＯＳ１３０に対して報告する。
【００３９】
（図５：ステップＳ５０４）
ＯＳ１３０は、ドライバモジュールＢ１５３の更新要求を終了する。
（図５：ステップＳ５０５）
ＯＳインタフェースモジュール１５１は、ドライバモジュールＢ１５３の呼び出し元の関数が登録されているエントリポイントＢ１５１４をリセットし、ＯＳ１３０に応答を送信する。
【００４０】
（図５：ステップＳ５０６）
ＯＳ１３０は、ドライバモジュールＢ１５３をアンロードする。
（図５：ステップＳ５０７）
ドライバモジュールＢ１５３は、ドライバモジュール設定情報Ｂ１５３１をリセットする。
【００４１】
（図５：ステップＳ５０８）
ＯＳ１３０は、更新されたドライバモジュールＢ１５３をロードする。
（図５：ステップＳ５０９〜Ｓ５１１）
これらのステップは、図４のステップＳ４０７〜Ｓ４０９と同様である。
（図５：ステップＳ５１２）
ドライバモジュールＢ１５３は、初期化処理を完了する。ＯＳ１３０は、ドライバモジュールＢ１５３を更新する処理を正常終了する。
【００４２】
図６は、稼動させるドライバモジュールを切り替える手順を示すシーケンス図である。以下、図６の各ステップについて説明する。
（図６：ステップＳ６０１）
ＯＳ１３０は、ドライバ更新ツールなどのユーティリティを介して、ＯＳインタフェースモジュール１５１に対して、稼動させるドライバモジュール切り替えるよう要求するシステムコールを発行する。
【００４３】
（図６：ステップＳ６０２）
ＯＳインタフェースモジュール１５１は、稼動させるドライバモジュール切り替える要求を受け付けると、ドライバ管理テーブル１５１１の稼働中ドライバモジュール列１５１１２の値を確認する。稼働中ドライバモジュール列１５１１２の値が「Ｂ」である場合はステップＳ６０３へ進み、それ以外であればステップＳ６０５へ進む。
（図６：ステップＳ６０３）
ＯＳインタフェースモジュール１５１は、ドライバモジュールＢ１５３が既に稼働中である旨を、ＯＳ１３０に対して報告する。
【００４４】
（図６：ステップＳ６０４）
ＯＳ１３０は、ドライバモジュールの切替要求を終了する。
（図６：ステップＳ６０５）
ＯＳインタフェースモジュール１５１は、ドライバ管理テーブル１５１１の切替要求フラグ列１５１１３を、全てのＨＢＡについて「１：切替要求有」に変更する。
【００４５】
（図６：ステップＳ６０６）
ＯＳインタフェースモジュール１５１は、ホストバスアダプタＨ／Ｗ１６０がＩ／Ｏ要求を発行中であるか否かをチェックするよう、Ｈ／Ｗインタフェースモジュール１５４に要求する。
（図６：ステップＳ６０７）
Ｈ／Ｗインタフェースモジュール１５４は、Ｆ／Ｗインタフェーステーブル１５４１の内容に基づき、ホストバスアダプタＨ／Ｗ１６０がＩ／Ｏ要求を発行中であるか否かをチェックし、結果をＯＳインタフェースモジュール１５１に応答する。
【００４６】
（図６：ステップＳ６０８）
ホストバスアダプタＨ／Ｗ１６０がＩ／Ｏ要求を発行中である場合はステップＳ６１０へ進み、発行中でない場合はステップＳ６０９へ進む。
（図６：ステップＳ６０９）
ＯＳインタフェースモジュール１５１は、稼動させるドライバモジュールをドライバモジュールＢ１５３に切り替える。また、ドライバ管理テーブル１５１１の稼働中ドライバモジュール列１５１１２の値を「Ｂ」に変更し、切替要求フラグ列１５１１３の値を「０：切替要求無」にセットする。
【００４７】
（図６：ステップＳ６１０）
ＯＳインタフェースモジュール１５１は、所定時間スリープし、Ｉ／Ｏ要求が完了するのを待機する。
（図６：ステップＳ６１１）
ＯＳインタフェースモジュール１５１は、全てのホストバスアダプタＨ／Ｗ１６０について、切替要求フラグ列１５１１３の値が「０：切替要求無」になっているどうかを確認し、ドライバモジュールの切り替えが全て完了したか否かをチェックする。全てのドライバモジュールについて切り替えが完了していない場合は、ステップＳ６０６に戻って同様の処理を繰り返す。全てのドライバモジュールについて切り替えが完了した場合は、ステップＳ６１２へ進む。
【００４８】
（図６：ステップＳ６１２）
ＯＳインタフェースモジュール１５１は、ＯＳ１３０にドライバモジュールの切り替えが完了した旨を報告する。報告を受け付けたＯＳ１３０は、ドライバモジュール切り替え処理を正常終了する。
【００４９】
図７は、ＨＢＡドライバ１５０がＩ／Ｏ要求を受け付けた場合の処理手順を示すシーケンス図である。以下、図７の各ステップについて説明する。
（図７：ステップＳ７０１）
ディスクドライバ１４０は、上位のアプリケーションから、ディスクアレイシステム２００に対するＩ／Ｏ要求を受け取る。ディスクドライバ１４０は、エントリポイント１４１に登録されている、ＯＳインタフェース１５１の関数を呼び出す。
【００５０】
（図７：ステップＳ７０２）
ＯＳインタフェースモジュール１５１は、ドライバ管理テーブル１５１１の稼働中ドライバモジュール列１５１１２の値を確認する。ＯＳインタフェースモジュール１５１は、稼働中ドライバモジュール列１５１１２の値に応じて、エントリポイントＡ１５１３に登録されているドライバモジュールＡ１５２の関数、またはエントリポイントＢ１５１４に登録されているドライバモジュールＢ１５３の関数を呼び出す。
（図７：ステップＳ７０３）
ドライバモジュールＡ１５２またはドライバモジュールＢ１５３は、Ｈ／Ｗインタフェースモジュール１５４に対して、Ｉ／Ｏ要求を発行する。
【００５１】
（図７：ステップＳ７０４）
Ｈ／Ｗインタフェースモジュール１５４は、ドライバモジュールが発行したＩ／Ｏ要求を受け取り、Ｆ／Ｗインタフェーステーブル１５４１にその内容を登録する。
（図７：ステップＳ７０５）
Ｈ／Ｗインタフェースモジュール１５４は、ステップＳ７０４で受け取ったＩ／Ｏ要求をホストバスアダプタＨ／Ｗ１６０に発行し、Ｉ／Ｏ要求発行元のドライバモジュールにその旨を報告する。
（図７：ステップＳ７０６〜Ｓ７０７）
ドライバモジュールは、ＯＳインタフェースモジュール１５１にＩ／Ｏ要求発行処理完了を報告する（Ｓ７０６）。ＯＳインタフェースモジュール１５１は、ディスクドライバ１４０にＩ／Ｏ要求発行処理完了を報告する（Ｓ７０７）。
【００５２】
図８は、ＨＢＡドライバ１５０が割込処理要求を受け付けた場合の処理手順を示すシーケンス図である。以下、図８の各ステップについて説明する。
（図８：ステップＳ８０１）
ディスクドライバ１４０は、上位のアプリケーションから、割込処理要求を受け取る。ディスクドライバ１４０は、エントリポイント１４１に登録されている、ＯＳインタフェースモジュール１５１の関数を呼び出す。
【００５３】
（図８：ステップＳ８０２）
ＯＳインタフェースモジュール１５１は、ドライバ管理テーブル１５１１の稼働中ドライバモジュール列１５１１２の値を確認する。ＯＳインタフェースモジュール１５１は、稼働中ドライバモジュール列１５１１２の値に応じて、エントリポイントＡ１５１３に登録されているドライバモジュールＡ１５２の割込処理関数、またはエントリポイントＢ１５１４に登録されているドライバモジュールＢ１５３の割込処理関数を呼び出す。
（図８：ステップＳ８０３〜Ｓ８０５）
ドライバモジュールＡ１５２またはドライバモジュールＢ１５３は、割込処理関数を実行し（Ｓ８０３）、割込処理完了をＯＳインタフェースモジュール１５１に報告する（Ｓ８０４）。ＯＳインタフェースモジュール１５１は、ディスクドライバ１４０に割込処理完了を報告する（Ｓ８０５）。
【００５４】
以上、本実施の形態１に係るＨＢＡドライバ１５０の動作を説明した。本実施の形態１において、ＨＢＡドライバ１５０はドライバモジュールを２つ備える例を説明したが、３以上のドライバモジュールを備えるようにしてもよい。
【００５５】
以上のように、本実施の形態１に係るＨＢＡドライバ１５０は、２以上のドライバモジュールを備え、ＯＳインタフェースモジュール１５１は、いずれのドライバモジュールを稼動させるかを切り替える。これにより、いずれかのドライバモジュールが稼動している間は、コンピュータ１００とディスクアレイシステム２００の間の接続を維持しつつ、稼動していないドライバモジュールを更新することができる。したがって、コンピュータ１００を再起動したり、ディスクアレイシステム２００に対するアクセスを中断したりすることなく、ドライバモジュールを更新することができる。
【００５６】
また、本実施の形態１に係るＨＢＡドライバ１５０は、ホストバスアダプタＨ／Ｗ１６０とドライバモジュールを接続するＨ／Ｗインタフェースモジュール１５４、および、ドライバモジュールとＯＳ１３０を接続するＯＳインタフェースモジュール１５１を備え、ＯＳインタフェースモジュール１５１は、稼動させるドライバモジュールを切り替える。すなわち、ドライバモジュール本体は、ＯＳ１３０との間のインタフェース、およびホストバスアダプタＨ／Ｗ１６０との間のインタフェースから独立して構成されているので、ＨＢＡドライバ１５０とＯＳ１３０の間の接続、およびＨＢＡドライバ１５０とホストバスアダプタＨ／Ｗ１６０の間の接続を維持したまま、ドライバモジュールのみを切り替えることができる。したがって、ドライバモジュールを切り替える際に、ＯＳ１３０を再起動したりＩ／Ｏ要求を中断したりする必要はない。
【００５７】
また、本実施の形態１に係るＨＢＡドライバ１５０は、ホストバスアダプタＨ／Ｗ１６０がＩ／Ｏ要求を実行中である場合はドライバモジュールを切り替えず、Ｉ／Ｏ処理が完了してから切り替えを実行する。これにより、Ｉ／Ｏ処理を中断させることなくドライバモジュールを切り替えることができる。
【００５８】
＜実施の形態２＞
実施の形態１において、ＨＢＡドライバ１５０は、ドライバモジュールを更新する前にドライバモジュールのバージョンを確認し、古いバージョンのドライバモジュールのみを更新するようにしてもよい。ドライバモジュールのバージョンは、例えば各ドライバモジュールのプロパティとして各ドライバモジュール設定情報などに保持しておくとよい。
【００５９】
＜実施の形態３＞
実施の形態１〜２では、コンピュータ１００に接続する周辺デバイスの例として、ホストバスアダプタ１６０およびディスクアレイシステム２００を挙げたが、その他の周辺デバイスをコンピュータに接続するためのデバイスドライバについても、実施の形態１〜２と同様の手法を採用することができる。
【符号の説明】
【００６０】
１００：コンピュータ、１１０：ＣＰＵ、１２０：メモリ、１３０：オペレーティングシステム、１４０：ディスクドライバ、１４１：エントリポイント、１５０：ＨＢＡドライバ、１５１：ＯＳインタフェースモジュール、１５１１：ドライバ管理テーブル、１５１１１：ＨＢＡ番号列、１５１１２：稼働中ドライバモジュール列、１５１１３：切替要求フラグ列、１５１２：ドライバモジュール共通情報、１５１３：エントリポイントＡ、１５１４：エントリポイントＢ、１５２：ドライバモジュールＡ、１５２１：ドライバモジュール設定情報Ａ、１５３：ドライバモジュールＢ、１５３１：ドライバモジュール設定情報Ｂ、１５４：ハードウェアインタフェースモジュール、１５４１：Ｆ／Ｗインタフェーステーブル、１６０：ホストバスアダプタＨ／Ｗ、２００：ディスクアレイシステム、２１０：ディスク装置。
【図１】
2011197868.tif 000003
【図２】
2011197868.tif 000004
【図３】
2011197868.tif 000005
【図４】
2011197868.tif 000006
【図５】
2011197868.tif 000007
【図６】
2011197868.tif 000008
【図７】
2011197868.tif 000009
【図８】
2011197868.tif 000010