(57)【特許請求の範囲】
【請求項１】
メモリ、少なくとも１つのプロセッサ及びオペレーティング・システムを含むコンピュータ・システムであって、
（ａ）前記少なくとも１つのプロセッサ及び前記オペレーティング・システムがアドレス指定できる前記メモリの可視的な部分と、
（ｂ）前記少なくとも１つのプロセッサ及び前記オペレーティング・システムによるアドレス指定可能性が除外され、更に前記少なくとも１つのプロセッサまたは前記オペレーティング・システムの少なくともいずれか一方から伝送されたデータを保管するために用いられる、前記メモリの隠された部分と、
（ｃ）前記メモリの前記可視的な部分に配置され、前記少なくとも１つのプロセッサまたは前記オペレーティング・システムの少なくともいずれか一方からのデータ・アクセスの要求を受け取るための通信領域と、
（ｄ）前記メモリの前記可視的な部分、及び前記メモリの前記隠された部分の双方をアドレス指定し、前記通信領域から前記データ・アクセスの要求を受け取り、前記メモリの前記隠された部分への前記データ・アクセスを開始する、前記メモリの前記隠された部分に配置されたプログラムである隠されたサーバと、
を含むコンピュータ・システム。
【請求項２】
前記隠されたサーバが、前記少なくとも１つのプロセッサの第１のプロセッサによって実行され、前記オペレーティング・システムが、前記少なくとも１つのプロセッサの第２のプロセッサによって実行される、請求項１に記載のコンピュータ・システム。
【請求項３】
前記プロセッサが、メモリの隠された部分が前記プロセッサに対して可視的でない第１の状態、及びメモリの隠された部分が前記プロセッサに対して可視的である第２の状態のいずれかにあり、前記コンピュータ・システムが、
前記プロセッサを前記第１の状態と前記第２の状態との間を変更する手段と、
前記プロセッサが前記第２の状態にある間に、前記隠されたサーバが前記データ・アクセスを開始する手段と、
を含む、請求項１に記載のコンピュータ・システム。
【請求項４】
前記隠されたサーバが再ロード可能、再起動可能である、請求項１に記載のコンピュータ・システム。
【請求項５】
前記メモリの前記隠された部分に、前記隠されたサーバがアクセスできるプログラムであるＶＤＩＳＫサービス手段を更に含む、請求項１に記載のコンピュータ・システム。
【請求項６】
前記メモリの前記隠された部分に、前記隠されたサーバがアクセスできるプログラムであるＰＣＡＣＨＥサービス手段を更に含む、請求項１に記載のコンピュータ・システム。
【請求項７】
少なくとも１つのプロセッサ及びオペレーティング・システムを含むコンピュータ・システム内に配置されたメモリ中に保管されるデータを保護する方法であって、
（ａ）前記少なくとも１つのプロセッサ及び前記オペレーティング・システムがアドレス指定できる前記メモリの可視的な部分を割り当てるステップと、
（ｂ）前記少なくとも１つのプロセッサ及び前記オペレーティング・システムによるアドレス指定可能性が除外され、更に前記少なくとも１つのプロセッサ及び前記オペレーティング・システムから伝送されたデータを保管するために用いられる、前記メモリの隠された部分を割り当てるステップと、
（ｃ）前記メモリの前記可視的な部分に配置された通信領域において、前記少なくとも１つのプロセッサまたは前記オペレーティング・システムの少なくともいずれか一方からの要求を受け取るステップと、
（ｄ）前記メモリの前記可視的な部分、及び前記メモリの前記隠された部分の双方をアドレス指定する、前記メモリの前記隠された部分に配置されたプログラムである隠されたサーバが前記要求のそれぞれを受け取るステップと、
（ｅ）前記メモリの前記隠された部分に対して前記要求のそれぞれを開始するステップと、
を含む方法。
【請求項８】
（ｆ）前記メモリの前記隠された部分が前記プロセッサに対して可視的でない第１の状態から、前記メモリの前記隠された部分が前記プロセッサに対して可視的である第２の状態に前記プロセッサを変更するステップと、
（ｇ）前記プロセッサの制御を前記隠されたサーバに転送するステップと、
（ｈ）前記メモリの前記隠された部分へのデータ・アクセスを実行する要求を前記隠されたサーバが受け取るステップと、
（ｉ）前記隠されたサーバが前記データ・アクセスを開始するステップと、
（ｊ）前記隠されたサーバが前記プロセッサの制御を終了させるステップと、
（ｋ）前記プロセッサを前記第２の状態から前記第１の状態に変更するステップと、
を更に含む、請求項７に記載の方法。
【請求項９】
（ｌ）前記隠されたサーバを再ロードするステップと、
（ｍ）前記隠されたサーバを再起動するステップと、
を更に含む、請求項８に記載の方法。
【請求項１０】
前記メモリの前記隠された部分に、前記隠されたサーバがアクセスできるプログラムであるＶＤＩＳＫサービスを提供するステップを更に含む、請求項７に記載の方法。
【請求項１１】
前記メモリの前記隠された部分に、前記隠されたサーバがアクセスできるプログラムであるＰＣＡＣＨＥサービスを提供するステップを更に含む、請求項７に記載の方法。
【請求項１２】
前記隠されたサーバが、前記少なくとも１つのプロセッサの第１のプロセッサによって実行され、前記オペレーティング・システムが、前記少なくとも１つのプロセッサの第２のプロセッサによって実行される、請求項７に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、概してコンピュータ・システムに関し、より詳細には、コンピュータ・システム内に配置されたメモリの一部に保管されたデータの保護に関し、特にコンピュータ・システムと、オペレーティング・システムが直接のアクセス権をもたないメモリの一部との間にデータを転送するメカニズムを開示する。
【０００２】
【従来の技術】
コンピュータ・システム上でプロセスが実行されるとき、このプロセスはデータを保管し、そこからデータを取り出すために指定されたメモリ部分を使用する。その他のプロセスも、これらの指定されたメモリ部分にアクセスすることもある。
【０００３】
コンピュータ・システム上で実行されている第１のプロセスが停止し、後に再開される場合に、第１のプロセスが停止している間にこのコンピュータ・システム上で実行される第２のプロセスが、第１のプロセスによって以前に使用されたメモリ部分にアクセスすることがある。第１のプロセスが停止している間に、第２のプロセスが、第１のプロセスによってメモリに保管されたデータ値を上書きする場合、第１のプロセスが再開したとき、自身が停止する前にメモリに保管したデータ値は、もはや使用できない。これによりエラーが発生するかもしれない。
【０００４】
更にいくつかのプロセスが、同時にあるコンピュータ・システム内で実行されている場合は、あるプロセスが、他のプロセスが使用しているメモリ部分にデータを保管するかもしれない。そうすると、あるプロセスが自身が保管したデータを取り出す前に、そのデータが壊されるかもしれない。
【０００５】
【発明が解決しようとする課題】
コンピュータ・システムに対してシステム再起動が行われることは、一般的なことである。このようなコンピュータ・システムが、システム再起動が行われる際にも内容が消去されないデータ・バッファを提供する、ソフトウェア・アプリケーション実行させることもできる。これは例えば、ＩＢＭ  Ｃｏｒｐｏｒａｔｉｏｎ、Ａｒｍｏｎｋ、Ｎｅｗ  Ｙｏｒｋの製品である、トランザクション処理機能（ＴＰＦ）として知られるソフトウェア・パッケージに見いだされる。ＴＰＦにおいては、システム再起動が行われる際に、ある種のデータ・バッファの内容は消去されない。再起動が完了した後、ＴＰＦがシステム再起動の前に自身が存在した位置から実行を継続するとき、消去されなかったデータ・バッファの内容は、同じ状態であることが望ましい。しかしこれらのデータ・バッファは、システムで実行中のいずれのアプリケーション・プログラムによってもアクセス可能である。したがってこれらのデータ・バッファは、オペレーティング・システムの誤動作、あるいはオペレーティング・システム上で実行されるアプリケーションのいずれかによって壊されることがある。
【０００６】
【課題を解決するための手段】
コンピュータ・システム内のメモリが、可視的な部分と隠された部分とをもつ。メモリの可視的な部分には、プロセッサ及びコンピュータ・システム内で作動するオペレーティング・システム（ＯＳ）がアドレスできる。プロセッサまたはＯＳのいずれかによるアドレス可能性は、メモリの隠された部分に対しては除外される。メモリの隠された部分は、プロセッサまたはＯＳによって伝送されるデータを保管するために用いられる。メモリの可視的な部分に配置された通信領域が、プロセッサまたはＯＳのいずれかからのデータ・アクセス要求を受け取る。メモリの可視的部分とメモリの隠された部分の双方にアドレスする隠されたサーバが、通信領域からのデータ・アクセス要求を受け取り、隠されたメモリ部分へのデータ・アクセスを開始する。
【０００７】
【発明の実施の形態】
図１は本発明の代表的な１実施例に従ったコンピュータ・システムを示す。図示したように、コンピュータ・システムのハードウェアは、ある種のバス、または他の相互接続メカニズム１０を介してメモリ２０に接続される、１つまたは複数のプロセッサ１５ａ〜１５ｎを含む。
【０００８】
本発明の代表的な１実施例に従って、いかなるコンピュータ・システムも使用できるが、Ｄｕｒａｂｌｅ  Ｍｅｍｏｒｙ  ＲＳ／６０００（ＤＭ／６０００）が使用できる。このシステムは、１９９４年６月発行の「Ｔｈｅ  ２４ｔｈ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｆａｕｌｔ  Ｔｏｌｅｒａｎｔ  Ｃｏｍｐｕｔｉｎｇ」のダイジェスト版、ページ４１４〜４２３に記載の、Ａｂｏｔｔ  Ｍ．、Ｈａｒ  Ｄ．、Ｈｅｒｇｅｒ  Ｌ．、Ｋａｕｆｆｍａｎ  Ｍ．、Ｍａｋ  Ｋ．、Ｍｕｒｄｏｃｋ  Ｊ．、Ｓｃｈｕｌｚ  Ｃ．、Ｓｍｉｔｈ  Ｔ．Ｂ．、Ｔｒｅｍａｉｎｅ  Ｂ．、Ｙｅｈ  Ｄ．、Ｗｏｎｇ  Ｌ．による「Ｄｕｒａｂｌｅ  Ｍｅｍｏｒｙ  ＲＳ／６０００  Ｓｙｓｔｅｍ  Ｄｅｓｉｇｎ」等に説明されている。このシステムは、ハードウェア冗長性を備え、ハードウェア構成部品または電源のいずれかが故障しても、コンピュータは停止しない。
【０００９】
メモリ２０の一部は可視的（ｖｉｓｉｂｌｅ）なメモリ３０である。各プロセッサ１５ａ〜１５ｎ上で実行されるプログラムは、可視的なメモリ３０にアクセス権をもつ。
【００１０】
図２に示すように可視的なメモリ３０は、ＡＩＸ（ＩＢＭ  Ｃｏｒｐｏｒａｔｉｏｎ、Ａｒｍｏｎｋ、Ｎｅｗ  Ｙｏｒｋから提供されている）のような汎用のオペレーティング・システム４０、およびアプリケーション・プログラム５ａ〜５ｎを含む。メモリ２０のこれ以外の部分は、隠された（ｈｉｄｄｅｎ）メモリ６０である。オペレーティング・システム（ＯＳ）４０、及びアプリケーション・プログラム５ａ〜５ｎが、この隠されたメモリにアクセスするのを防ぐために、いくつかの方法がある。１つの好ましい方法は、メモリ２０の一部分に欠陥があることをＡＩＸに伝える機能を利用する。ＡＩＸがブートされるとき、ＡＩＸは、欠陥があるメモリ領域の記述を含むＩＰＬ制御ブロックを見つけることを予期している。ＡＩＸは、欠陥があると確認されたいかなるメモリの内容にもアクセスしたり、これを変更することはなく、自身の仮想アドレス・テーブルにこのようなメモリに関する記述はしない。このようにして、ＡＩＸが、自身が使用しているプロセッサ１５ａ〜１５ｎのいずれに対しても、仮想アドレス変換をオンにすると同時に、このメモリ部分は効果的に隠される。この方法によりメモリ６０は、自身がアクセス可能になっている初期化中の短い期間においてさえも、変更される恐れはない。他のＯＳはブートされたとき、使用可能なメモリを指定できるようにする。全体の実メモリより少ない使用可能メモリを指定してブートすると、使用可能メモリが指定した領域外のメモリ部分は、ＯＳに対して隠されている。
【００１１】
隠されたサーバ７０は、隠されたメモリ６０に対するアクセスを制御する。隠されたサーバ７０は、隠されたメモリ６０にロードされたプログラムである。隠されたサーバ７０内のアドレス変換は、オフにすることができる。隠されたサーバ７０、ならびにＯＳ４０及びアプリケーション・プログラム５ａ〜５ｎの双方は、可視的なメモリ３０に配置された通信領域８０を共同で使用する。これが隠されたサーバ７０、ならびにＯＳ４０及びアプリケーション・プログラム５ａ〜５ｎの双方が通信するメカニズムである。すべての通信メカニズムを可視的なメモリ３０に配置することにより、ＯＳ４０及びアプリケーション・プログラム５ａ〜５ｎが、隠されたメモリに損傷を加える可能性が除かれる。
【００１２】
好ましい実施例では、通信領域８０は待ち行列９０、及び要求ブロック１００ａ〜１００ｎを含む。待ち行列９０は、好ましくは記憶装置の１ページを占め、待ち行列の連鎖要素を形成するために使用されるすべてのポインタは、好ましくはアドレスではなく、それに代わるそのページ内のオフセットである。このようにして待ち行列９０は、仮想アドレス変換をオンにして作動するＯＳ４０の下で実行されるプログラムにより、更に仮想アドレス変換をオフにして作動する隠されたサーバ７０により取り扱われる。待ち行列９０中のエントリは、待ち行列中のエントリと要求ブロック１００ａ〜１００ｎの実アドレスとをリンクする、連鎖オフセットをもつ。待ち行列の先頭ポインタの実アドレスを使用することにより、隠されたサーバ７０は、例えば仮想アドレス変換用のＡＩＸメカニズムを使用することなく、先頭ポインタを使用できる。
【００１３】
図３に示すように、隠されたメモリ６０の一部分は固定メモリ（ｓｔａｂｌｅｍｅｍｏｒｙ）１１０である。この固定メモリは固定メモリ記述子１２０を含み、隠されたサーバ７０は、事前に準備されたアドレスを用いて、この固定メモリ記述子の位置指定ができ、隠されたサーバ７０は、この固定メモリ記述子を用いて固定メモリ１１０のどの部分が使用中であるかを確認する。固定メモリ１１０の少量の一部は、隠されたサーバ７０が自身の記録保持のために使用するが、固定メモリ１１０の大部分は、隠されたサーバ７０がアクセスできるプログラムである、特定のサービス１３０ａ〜１３０ｎが使用する。好ましい実施例は、例えばＶＤＩＳＫサービス１３０ａ、ＰＣＡＣＨＥサービス１３０ｂ、及びその他のサービスを含む。
【００１４】
ＶＤＩＳＫサービス１３０ａは、固定メモリ１１０中のスペースを使用するコマンドを処理し、このスペースが１つまたは複数のディスク上にあるかのようにデータを保管する。メモリ中でこの方法で使用されている各スペースは、ＶＤＩＳＫと呼ばれる。ＶＤＩＳＫサービス１３０ａは、少なくとも次の要求、つまりデータ保管に使用するために固定メモリ１１０のスペースを割り当てる要求、可視的メモリ３０から固定メモリ１１０にデータをコピーする要求、及び固定メモリ１１０から可視的メモリ３０にデータをコピーする要求を処理する能力を提供できることが望ましい。ＰＣＡＣＨＥサービス１３０ｂは、ある時間後にディスクに書き込まれることになっているデータをキャッシングする。データのディスク・アドレスは、データ自体と一緒にＰＣＡＣＨＥサービス１３０ｂによって保管され、ＯＳ４０の故障後にキャッシュ情報を復元できるようにする。
【００１５】
隠されたサーバ７０がロードされ、起動されたとき、固定メモリ記述子１２０の有効性が検査され、それが有効でない場合は、固定メモリはいずれも使用されていないことを示すように初期化される。この有効性検査の可能性ある方法には、例えばチェックサム値を、固定メモリ記述子１２０の内容に対して新たに計算されたチェックサム値と比較すること、メモリ使用数を合計して、この値が固定メモリ１１０の合計と一致することを確かめること、更に隠されたサーバ７０がメモリ初期化を終了したときに、固定メモリ記述子１２０中に存在する特殊キー値を比較することがある。新たに起動されたバージョンの隠されたサーバ７０が、事前に存在する固定メモリ記述子１２０をこのようにして使用することにより、情報の明らかな消失なしに、隠されたサーバ７０用のコードの置換が可能になる。新バージョンの隠されたサーバ７０が、古いバージョンの固定メモリ記述子１２０を解釈できることが、当然望ましいことである。
【００１６】
隠されたサーバ７０は、固定メモリ記述子１２０の一部を使用して、それぞれ別個のサービス１３０ａ〜１３０ｎに割り振られている、サービス・データ・ハンドル１１５ａ〜１１５ｎを記録する。各サービス・データ・ハンドルは、それぞれデータ記述子を指す。データ記述子は、それぞれのサービスが使用できる隠されたメモリ６０の部分を示す。
【００１７】
例えばＶＤＩＳＫサービス１３０ａは、ＶＤＩＳＫデータ記述子１４０ａを使用する。隠されたサーバ７０が起動されたときはいつでも、ＶＤＩＳＫサービス１３０ａが（他のすべてのサービス１３０ｂ〜１３０ｎと同様に）起動され、自身のサービス・データ・ハンドル１１５ａのコピーが渡され、このハンドルは、ゼロであるか、またはＶＤＩＳＫデータ記述子１４０ａを指すポインタである。ＶＤＩＳＫサービス１３０ａは、自身のサービス・データ・ハンドル１１５ａがＶＤＩＳＫデータ記述子１４０ａを指すこと、及びこの記述子１４０ａの有効性を確認する。これは隠されたサーバ７０が、固定メモリ記述子１２０の存在及びその有効性を確認するのと同じように行われる。ＶＤＩＳＫサービス１３０ａが、有効なＶＤＩＳＫデータ記述子１４０ａを見つけられない場合は、ＶＤＩＳＫサービスは、隠れたサーバ７０がこれを割り当てるように要求し、割り当てられた記述子を初期化して、現時点ではＶＤＩＳＫが何も存在しないことを示す。ＶＤＩＳＫデータ記述子１４０ａは、ＯＳ４０及びアプリケーション５ａ〜５ｎ中に存在する固定メモリのユーザのために、固定メモリ１１０のどの部分がデータの保管用として使用されているかを記録するために用いられる。
【００１８】
サービス・データ・ハンドル１１５ａ〜１１５ｎ、及びデータ記述子１４０ａ〜１４０ｎをこのように用いることにより、各サービス１３０ａ〜１３０ｎは、情報の消失あるいは作動中の明らかな割り込みがなく、一時停止及び再開始ができ、これは隠されたサーバ７０が一時停止、置換、再開始できることとかなり似た方法である。隠されたサーバ７０の場合と同様に、旧バージョンのサービス１３０ａ〜１３０ｎによって生成されたデータ記述子１４０ａ〜１４０ｎを、新バージョンのサービス１３０ａ〜１３０ｎが理解できることが望ましい。
【００１９】
好ましい実施例では、隠されたサーバ７０への要求には、その要求を処理するサービス１３０ａ〜１３０ｎの名前が含まれ、これにより隠されたサーバ７０は、この要求をこれらのサービス１３０ａ〜１３０ｎに渡すことができる。いずれかのサービスが必要とする追加の要求情報は、要求ブロック１００ａ〜１００ｎに存在するすることもある。ＶＤＩＳＫサービス１３０ａの場合には、この要求情報は、ＶＤＩＳＫを作成するか否かを示すコマンド・コード、どのＶＤＩＳＫに操作が行われるかを示すＶＤＩＳＫ識別子のようなオペランド用のスペース、ならびに要求の成功または失敗を示すリターン・コード、及びＶＤＩＳＫサービス１３０ａが要求の処理をし終ったことを示す完了ビットのような、何らかの応答情報用のスペースを含む。
【００２０】
好ましい実施例では、ＯＳ４０中にインストールされているＶＤＩＳＫデバイス・ドライバ１６０ａが、ＶＤＩＳＫサービス１３０ａを使用する。ＶＤＩＳＫデバイス・ドライバ１６０ａは、ＯＳ４０上にインストールされているいずれのディスク・デバイス・ドライバとも同じインタフェースを備え、データの保管及び取り出し用に、実際の記憶装置の代りにＶＤＩＳＫサービス１３０ａを用いる。このことにより、ＯＳ４０のその他の部分及びアプリケーション・プログラム５ａ〜５ｎは、実際の何らかのディスクのようにＶＤＩＳＫを使用できる。隠されたメモリ６０は、可視的なメモリ３０中で実行されるいかなるプログラムのいかなる故障によっても壊されず、固定メモリ１１０は、隠されたサーバ７０、及びこのサーバに関連するサービス１３０ａ〜１３０ｎの再起動の時点で保存されており、更にＤＭ／６０００ハードウェアに、耐故障性及び電源保護機能が存在するので、固定メモリ１１０中のＶＤＩＳＫサービス１３０ａによって保管されるデータは、実際の磁気ディスク上に安全に保管されているように見なせる。
【００２１】
隠されたサーバ７０に渡されるすべてのアドレスは、可視的なメモリ３０中の実アドレスであり、ＡＩＸの下で作動するＶＤＩＳＫデバイス・ドライバ１６０ａが、ＡＩＸのカーネル・サービスを用いてこのアドレスを確定し、要求ブロック１００ａ〜１００ｎは、アドレス変換に関する問題を避けるために、メモリの単一ページに制限されることが望ましい。
【００２２】
隠されたサーバ７０が、プロセッサ１５ａ〜１５ｎの１サブセットで、ＯＳ４０が実行されているプロセッサから切り離されたプロセッサ上で作動しているときは、隠されたサーバ７０が行う要求処理は、ＯＳ４０及びアプリケーション・プログラム５ａ〜５ｎの処理と同時に行われる。隠されたサーバ７０、ならびにＯＳ４０及びアプリケーション・プログラム５ａ〜５ｎが、同じプロセッサ１５ａ〜１５ｎを共用するとき、制御は、転送プログラム１７０を用いてこの両者の間を往復して転送されることが望ましく、この転送プログラムは、プロセッサ１５ａ〜１５ｎの状態を、ある時はＯＳ４０の使用によりセットアップ中であると記録し、次に隠されたサーバ７０が適切に作動できるように、このプロセッサ１５ａ〜１５ｎの状態を変更する。記録されるべき状態はいろいろあるが、その中にはレジスタの内容、及び仮想アドレス変換ユニットの設定がある。
【００２３】
好ましい実施例では、転送プログラム１７０はメモリの最初の６４ＫＢに配置される。ＡＩＸは、メモリのこの部分が自身の実アドレスと同じ仮想アドレスをもつように、自身の仮想記憶テーブルを常に設定する。メモリのこの区域にあるプログラムは、したがってアドレス変換をオンにもオフにもでき、いずれにしても命令の実行を同じプログラム内の次の命令に進める。
【００２４】
ＯＳ４０の下で作動するＶＤＩＳＫデバイス・ドライバ１６０ａと、ＶＤＩＳＫサービス１３０ａとの間に他の信号伝送手段、例えば割り込みなども可能であるが、好ましい実施例は、要求ブロック１００ａ〜１００ｎの応答区域に完了フラグを使用する。隠されたサーバ７０がＯＳ４０と同じプロセッサを共用している場合は、ＶＤＩＳＫデバイス・ドライバ１６０ａは、完了フラグのチェックと、この隠されたサーバ７０への制御の引き渡しとの間を、同期を取りながらループする。
【００２５】
アプリケーション５ａ〜５ｎによるＶＤＩＳＫ中のデータの要求から、この同じアプリケーションへのそのデータの配送までの全体の流れを示す経路は、次のようになる。要求はまずＯＳ４０に行き、ＯＳは要求対象の装置がＶＤＩＳＫであると判断する。そこでこの要求は、ＶＤＩＳＫデバイス・ドライバ１６０ａに渡され、ＶＤＩＳＫデバイス・ドライバは、どのＶＤＩＳＫがデータをもつかを判断し、要求ブロック１００ａ〜１００ｎ中に、この要求がＶＤＩＳＫサービスに対するものであることを示す要求を生成し、更にどのＶＤＩＳＫからデータを取り出すか、ＶＤＩＳＫのどこから読み取りを開始するか、どのくらいの量のデータを転送するか、可視的なメモリ３０内のどこに読み出したデータを配置するかを判断する。この時点では、要求ブロック１００ａ〜１００ｎ中の完了フラグは、要求が未完了であることを示すように設定されていることに留意されたい。次にＶＤＩＳＫデバイス・ドライバ１６０ａは、待ち行列９０中にこの要求ブロック１００ａ〜１００ｎを指す待ち行列エントリを置き、要求が完了したことを示す完了フラグを待ち始める。プロセッサ１５ａ〜１５ｎが、ＯＳ４０と隠されたサーバ７０との間で共用されている場合には、ＶＤＩＳＫデバイス・ドライバ１６０ａは、待っている間に転送プログラム１７０を呼び出し、隠されたサーバ７０にプロセッサ１５ａ〜１５ｎの制御を渡す。隠されたサーバは、いずれの場合でも自身に制御が渡されたときに、この待ち行列エントリを待ち行列から取り出し、ＶＤＩＳＫサービス１３０ａがどの要求ブロック１００ａ〜１００ｎから処理するべきかを判断する。ＶＤＩＳＫサービス１３０ａは、自身のサービス・データ・ハンドル１１５ａを用いて、自身のＶＤＩＳＫデータ記述子１４０ａの位置決めをし、更にそれによってＶＤＩＳＫデータの位置を決め、その後ＶＤＩＳＫサービスは、ＶＤＩＳＫデータを要求ブロック１００ａ〜１００ｎに記述された可視的なメモリの一部にコピーし、その後で完了フラグをセットして操作が終了したことを表示する。プロセッサ１５ａ〜１５ｎが、隠されたサーバ７０とＯＳ４０との間で共用されている場合は、プロセッサ１５ａ〜１５ｎの制御は隠されたサーバ７０に戻され、このサーバは順に制御を転送プログラム１７０に戻し、そこから更に制御は、ＶＤＩＳＫデバイス・ドライバ１３０ａに渡される。ＶＤＩＳＫデバイス・ドライバ１６０ａはいずれの場合でも、結局プロセッサ１５ａ〜１５ｎの制御を再びもち、完了フラグがセットされていることを確認し、ＯＳ４０に制御を戻し、ＯＳは、当初の要求元であるアプリケーション・プログラム５ａ〜５ｎに制御を戻す。
【００２６】
ＰＣＡＣＨＥデバイス・ドライバ１６０ｂは、ＶＤＩＳＫデバイス・ドライバ１６０ａに非常に似ており、それは、ＯＳ４０及びアプリケーション・プログラム５ａ〜５ｎにとっては、ＰＣＡＣＨＥデバイス・ドライバは、実際のディスク装置のように見え、更にこのデバイス・ドライバが、隠されたサーバ７０及びＰＣＡＣＨＥサービス１３０ｂを用いて固定メモリにデータを保管し、そこからデータを取り出すからである。両者の違いは、ＰＣＡＣＨＥデバイス・ドライバ１６０ｂが、ＰＣＡＣＨＥサービス１３０ｂのみを用いて、実際のディスク装置１８ａ〜１８ｎに最近読み書きされたデータのキャッシュを保持することであり、ＰＣＡＣＨＥデバイス・ドライバ１６０ｂは、それらの特定のディスク装置１８ａ〜１８ｎに対するデバイス・ドライバ１６０ａ〜１６０ｎを用いて、キャッシュにアクセスする。この方法は、１９９４年１１月２２日にＩＢＭ  Ｔ．Ｊ．Ｗａｔｓｏｎ  Ｒｅｓｅａｒｃｈ  Ｃｅｎｔｅｒが発行した、ＲＣ−１９８４３に記載のＣ．Ｒ．Ａｔｔａｎａｓｉｏ、Ｍ．Ｂｕｔｒｉｃｏ、Ｃ．Ａ．Ｐｏｌｙｚｏｉｓ、Ｓ．Ｅ．Ｓｍｉｔｈによる「Ｄｅｓｉｇｎ  ａｎｄ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  ｏｆ  ａ  Ｒｅｃｏｖｅｒａｂｌｅ  Ｖｉｒｔｕａｌ  Ｓｈａｒｅｄ  Ｄｉｓｋ」に記述されている、ＶＳＤデバイス・ドライバが作動する方法と非常に似た方法である。
【００２７】
ＯＳ４０の機能停止の場合には、可視的なメモリ３０の内容は完全に失われる。ＯＳ４０が再起動されたとき、ＰＣＡＣＨＥデバイス・ドライバ１６０ｂは、固定メモリ１１０に現在存在するブロックのホーム・アドレスのリストを、ＰＣＡＣＨＥサービス１３０ｂに要求することにより、キャッシュの位置情報のディレクトリを再構築する。ＰＣＡＣＨＥデバイス・ドライバ１６０ｂは、キャッシュの状態を監視するために自身が使用するどのような内部データ構造も再構築でき、この内部データ構造の例にはハッシュ・テーブルがあり、したがって正常の作動時には、ＰＣＡＣＨＥサービス１３０ｂが保管したディレクトリ情報を使用する必要はない。
【００２８】
図４は、ＯＳ４０が行うステップの論理的な流れ図であり、更に詳細には、ＯＳ中にインストールされたデバイス・ドライバ１６０ａ〜１６０ｎ、及び制御の転送を行う転送プログラム１７０が行うステップの流れ図である。最初に、隠されたサーバ７０、及び特定のサービス１３０ａ〜１３０ｎによって処理されることになるいかなる要求も、いずれかの要求ブロック１００ａ〜１００ｎ中の通信領域８０に置かれる（ステップ４１０）。次に１５ａ〜１５ｎの中のどのプロセッサがこれらのステップを実行しているかを示す状態が、可視的なメモリ３０のいずれかに記録される（ステップ４２０）。隠されたメモリ６０をこのプロセッサに可視的にするために（ステップ４３０）、好ましい実施例では、プロセッサの仮想アドレス変換がオフにされるが、これ以外の手段を取ることも十分可能である。その結果、隠されたメモリ６０にはこのプロセッサがアクセスでき、このプロセッサは、隠されたサーバ７０のプログラム中に含まれる命令の実行を開始できる（ステップ４４０）。隠されたサーバ７０がプロセッサの制御を手放せる状況になったときはいつでも、このプログラムの次のステップにおいて、転送プログラム１７０中で実行が再開され、隠されたメモリ６０を再び隠す操作に進む（ステップ４５０）。この操作は好ましい実施例では、仮想アドレス変換をオンに戻すことにより行われる。その他のプロセッサの状態は復元でき（ステップ４６０）、制御は転送を開始したデバイス・ドライバ１６０ａ〜１６０ｎに戻される。通信領域８０に置かれた応答データ、あるいは可視的なメモリ３０中の応答データが置かれていた場所の応答データを検査できる（ステップ４７０）。
【００２９】
図５は要求を処理するために、隠されたサーバ７０が実行するステップの論理的な流れ図である。最初のステップ５１０は、要求が通信領域８０に現れるのを待つことである。要求が現れると、なされた要求の性質に対して適切な何らかの処理が、ステップ５２０で行われる。要求データは、例えば要求が渡される何らかの特定のサービス、及びそのサービスによって実行されるコマンドを示す。この結果、応答情報が通信領域８０、または可視的なメモリ３０中の任意の場所に配置される（ステップ５３０）。当初の要求の内容は、例えば可視的なメモリ３０中の１つの場所であって、特定の要求に対する応答情報が置かれる通信領域の外にある場所を指定できる。次にステップ５４０において、隠されたサーバ７０のプログラムを現在実行しているプロセッサが、ＯＳ４０を実行するためにも使用されているか否かが検査される。この検査は、いかなる数の手段を用いても行うことができ、例えば、通信領域内に存在する構成情報を検査することによっても行える。この時点５４０でプロセッサが共用されている場合には、隠されたサーバは、ＯＳ４０に制御を転送して戻す（ステップ５５０）。
【００３０】
図６は、通信領域８０中の待ち行列９０が、その中に一連の要求が置かれた後に、どのように見えるかを示す例である。この待ち行列９０中でＡエントリが最も古く、Ｅエントリ６１０が、最も新しく追加されたエントリである。エントリを待ち行列に入れる操作と、待ち行列から取り除く操作との間の干渉を避けるために、同期化の手順が必要になる。例えば好ましい実施例では、確実に同期化するために、「ＴＥＳＴ  ａｎｄ  ＳＥＴ」の（ＩＢＭ３７０の）命令シーケンスが用いられる一方、ＰｏｗｅｒＰＣアーキテクチャの「ｌｏａｄ−ａｎｄ−ｒｅｓｅｒｖｅ」及び「ｓｔｏｒｅ−ｃｏｎｄｉｔｉｏｎａｌｌｙ」命令も用いられる。当分野で周知のように、「ｌｏａｄ−ａｎｄ−ｒｅｓｅｒｖｅ」命令は、「ｓｔｏｒｅ−ｃｏｎｄｉｔｉｏｎａｌｌｙ」命令が使用するためのメモリ位置を予約する。「ｓｔｏｒｅ−ｃｏｎｄｉｔｉｏｎａｌｌｙ」命令は、保管が行われるためのメモリ位置に予約がされているか否かをまず判定する。予約がされている場合は、保管が行われ、予約は解除される。予約が行われてない場合は、メモリが変更されずに命令が終了する。
【００３１】
待ち行列にエントリを入れるためには、待ち行列中の第１のエントリのオフセットを含む待ち行列ヘッダ中のワードに、「ｌｏａｄ−ａｎｄ−ｒｅｓｅｒｖｅ」命令が実行される。新しいエントリの「次の」オフセットが、このときにその値にセットされる。最後に、新しいエントリの予約がそのワード上にまだ存在するならば、新しいエントリのオフセットが待ち行列のヘッダに保管される。予約が存在しない場合は、待ち行列に入れる手順が繰り返される。
【００３２】
例えばＥエントリ６１０は、予約と一緒に先頭ポインタ６００をロードすることにより追加された。この先頭ポインタは、Ｅエントリ６１０の追加の前には、Ｄエントリ６２０を指していた。このポインタは、Ｅエントリ６１０の次のエントリを示すフィールド６１３に置かれる。最後にＥエントリ６１０のアドレスが、先頭ポインタ６００中に条件付きで保管される。この保管が成功したときは、待ち行列入れが行われる。成功しないときは、このプロセスが繰り返される。
【００３３】
この方法は、当然ながら後入れ先出し（ＬＩＦＯ）方式で構成された待ち行列を形成する。待ち行列に先入れ先出し（ＦＩＦＯ）の特徴を持たせることは、待ち行列から取り出すプロセスで行われる。エントリを待ち行列から取り出すために、待ち行列ヘッダ中で、先頭オフセットの「ｌｏａｄｉｎｇ−ａｎｄ−ｒｅｓｅｒｖｉｎｇ」が行われる。その次に、全体の待ち行列が待ち行列ヘッダから除去され、この操作は、全体の待ち行列値の代わりにゼロを条件付きで保管することにより行われる。全体の待ち行列が存在するとき、サーバは、待ち行列から最も古い要求を自由に取り出せる。上とは違って待ち行列が空である場合は、待ち行列解除が行われる。空でない場合は、待ち行列に残っているエントリが、待ち行列ヘッダに戻される。
【００３４】
残っているエントリを待ち行列ヘッダに戻すときに、その間に待ち行列に他のエントリが入れられた場合は、これらのエントリは、待ち行列から取り出すプロセスによって除去されたエントリのセットに結合されることが望ましい。この結合を行うために、先頭オフセット（待ち行列中の最初のエントリを指す待ち行列ヘッダ中のワード）に、「ｌｏａｄ−ａｎｄ−ｒｅｓｅｒｖｅ」命令が実行される。先頭オフセット値がゼロの場合は、新しいエントリは存在しない。このように、待ち行列に戻されつつあるエントリの先頭に現在存在するエントリのオフセットは、条件付きで保管される。それ以外の場合は、ゼロが条件付きで保管され、ロードされた値は、古い待ち行列に結合される新しい待ち行列の開始点として用いられる。その後このプロセスは繰り返される。いずれの場合でも保管に失敗した場合は、全体のプロセスが繰り返される。
【００３５】
エントリ６１０〜６５０を待ち行列から取り出すに当たっては、最も古いエントリから行うことが望ましい。この例では最も古いものはＡエントリ６３０である。これを行うには、予約を伴った先頭ポインタ６００のロード、及び各エントリの場所へのゼロの条件付きストアを繰り返すことにより、連鎖全体を除去する。これはストアが成功するまで繰り返し行われる。その後、最後尾のポインタがゼロでないエントリに到達するまで、待ち行列は横に動かされる。この例ではそのポインタは、Ａエントリ６３０の最後尾ポインタ６３２である。Ａエントリ６３０の前の各エントリは、待ち行列入れのアルゴリズムによって決まる、後入れ先出し（ＬＩＦＯ）順になっている。Ａエントリ６３０の後の各エントリは、先入れ先出し（ＦＩＦＯ）順になっており、これは、隠されたサーバ７０がこれらのエントリをＢ、Ｃ、Ｄ、Ｅの順に再配置することにより、維持される（Ａエントリ６３０は、待ち行列９０から除去されているので、そこには存在しない）。Ｂエントリ６４０は、Ｅエントリ６１０を指すようにセットされた最後尾ポインタ６４２をもつ。これは２つのことを示し、その１つは、Ｂエントリ６４０は、先入れ先出しエントリの最初のものであることであり、もう１つは、後入れ先出し順に存在する新しいエントリは、最後尾ポインタ６４２が指すエントリの後に配置されるべきであることである。このことにより、待ち行列９０が再配置される必要がある度に、全体の待ち行列９０を順に後方に動かす必要性がなくなる。
【００３６】
残ったエントリを待ち行列９０に戻すことは、エントリを待ち行列に入れる操作と非常に似ている。その差が見られるのは、隠されたサーバ７０が、待ち行列から取り出すプロセスの一部としてエントリを取り扱っている間に、いくつかの他のエントリが待ち行列９０上に置かれたときである。その場合には、先頭ポインタ６００からロードされる値はゼロではなく、新しく待ち行列に入れられたエントリを指す。隠されたサーバ７０に対する正しい応答は、通常の待ち行列からの取り出しとしてこれらのエントリを除去し、これらを以前に除去されたエントリと結合して単一のリストを作成し、このリストを待ち行列９０上に戻すプロセスを繰り返す、操作に戻ることである。
【００３７】
連鎖上の最も古いエントリが必要になる度に、ＬＩＦＯ連鎖の最後尾まで操作することを避けるために、最適化が行われる。これには、待ち行列にリストを戻す前にエントリの順序を変えることが含まれる。順序を変えられたエントリは、ここでＦＩＦＯ順になり、すべてのエントリは、リストの最後尾のオフセット値を含む。これにより、ＦＩＦＯ順になっているエントリを、最後尾のオフセット値の代りに０をもつＬＩＦＯ順になっているエントリから区別でき、更にこれにより、最後尾に挿入するために最後尾を迅速に位置決めできる。新しいエントリが待ち行列に入れられている間に、いくつかのＬＩＦＯエントリの後にいくつかのＦＩＦＯエントリが来るときがあるが、これらのＬＩＦＯエントリは、次に隠されたサーバが待ち行列から取り出す操作をするときに、隠されたサーバが順序を変えることができる。
【００３８】
本発明の好ましい実施例を説明したが、当分野に知識をもつ当業者が、文頭の「特許請求の範囲」から逸脱することなく、現在及び将来において各種の変更や拡張をなし得ることは、理解できるであろう。この特許請求の範囲は、最初に開示された当発明を適切に保護し、維持するためのものと解釈されるべきである。
【００３９】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００４０】
（１）
メモリ、少なくとも１つのプロセッサ及びオペレーティング・システムを含むコンピュータ・システムであって、
（ａ）前記少なくとも１つのプロセッサ及び前記オペレーティング・システムがアドレス指定できる前記メモリの可視的な部分と、
（ｂ）前記少なくとも１つのプロセッサ及び前記オペレーティング・システムによるアドレス指定可能性が除外され、更に前記少なくとも１つのプロセッサまたは前記オペレーティング・システムの少なくともいずれか一方から伝送されたデータを保管するために用いられる、前記メモリの隠された部分と、
（ｃ）前記メモリの前記可視的な部分に配置され、前記少なくとも１つのプロセッサまたは前記オペレーティング・システムの少なくともいずれか一方からのデータ・アクセスの要求を受け取るための通信領域と、
（ｄ）前記メモリの前記可視的な部分、及び前記メモリの前記隠された部分の双方をアドレス指定し、前記通信領域から前記データ・アクセスの要求を受け取り、前記隠されたメモリへの前記データ・アクセスを開始する、隠されたサーバと、
を含むコンピュータ・システム。
（２）
前記隠されたサーバが、前記少なくとも１つのプロセッサの第１のプロセッサによって実行され、前記オペレーティング・システムが、前記少なくとも１つのプロセッサの第２のプロセッサによって実行される、（１）に記載のコンピュータ・システム。
（３）
前記プロセッサが、隠されたメモリが前記プロセッサに対して可視的でない第１の状態、及び隠されたメモリが前記プロセッサに対して可視的である第２の状態のいずれかにあり、前記コンピュータ・システムが、
前記プロセッサを前記第１の状態と前記第２の状態との間を変更する手段と、
前記隠されたサーバが前記第２の状態にある間に、前記隠されたサーバが所要の操作を開始する手段と、
を含む、（１）に記載のコンピュータ・システム。
（４）
前記隠されたサーバが再ロード可能、再起動可能であり、前記メモリの前記可視的な部分が、前記隠されたサーバの再起動の直前と直後との双方で同一である、（１）に記載のコンピュータ・システム。
（５）
前記メモリの前記隠された部分にデータを保管するため、及び前記オペレーティング・システムの故障を切り抜けてこれを再起動し、前記隠されたサーバを再ロードして再起動するためのＲＡＭディスク・サービス手段を更に含む、（１）に記載のコンピュータ・システム。
（６）
前記メモリの前記隠された部分にデータを保管するため、及び前記オペレーティング・システムの故障を切り抜けてこれを再起動し、前記隠されたサーバを再ロードして再起動するためのディスク・キャッシュ・サービス手段を更に含む、（１）に記載のコンピュータ・システム。
（７）
少なくとも１つのプロセッサ及びオペレーティング・システムを含むコンピュータ・システム内に配置されたメモリ中に保管されるデータを保護する方法であって、
（ａ）前記少なくとも１つのプロセッサ及び前記オペレーティング・システムがアドレス指定できる前記メモリの可視的な部分を割り当てるステップと、
（ｂ）前記少なくとも１つのプロセッサ及び前記オペレーティング・システムによるアドレス指定可能性が除外され、更に前記少なくとも１つのプロセッサ及び前記オペレーティング・システムから伝送されたデータを保管するために用いられる、前記メモリの隠された部分を割り当てるステップと、
（ｃ）前記メモリの前記可視的な部分に配置された通信領域において、前記少なくとも１つのプロセッサまたは前記オペレーティング・システムの少なくともいずれか一方からの要求を受け取るステップと、
（ｄ）前記メモリの前記可視的な部分、及び前記メモリの前記隠された部分の双方をアドレス指定する隠されたサーバが前記要求のそれぞれを受け取るステップと、
（ｅ）前記隠されたメモリに対して前記要求のそれぞれを開始するステップと、を含む方法。
（８）
（ｆ）前記メモリの前記隠された部分が前記プロセッサに対して可視的でない第１の状態から、前記メモリの前記隠された部分が前記プロセッサに対して可視的である第２の状態に前記プロセッサを変更するステップと、
（ｇ）前記プロセッサの制御を前記隠されたサーバに転送するステップと、
（ｈ）所要の操作を実行する要求を前記隠されたサーバが受け取るステップと、
（ｉ）前記隠されたサーバが前記所要の操作を開始するステップと、
（ｊ）前記隠されたサーバが前記プロセッサの制御を終了させるステップと、
（ｋ）前記プロセッサを前記第２の状態から前記第１の状態に変更するステップと、
を更に含む、（７）に記載の方法。
（９）
（ｌ）前記隠されたサーバを再ロードするステップと、
（ｍ）前記隠されたサーバを再起動するステップと、
（ｎ）前記メモリの前記可視的な部分を、前記隠されたサーバの再起動の直前と直後との双方で同一に維持するステップと、
を更に含む、（８）に記載の方法。
（１０）
前記メモリの前記隠された部分にデータを保管し、前記オペレーティング・システムの故障を切り抜けてこれを再起動し、前記隠されたサーバを再ロードして再起動する、ＲＡＭディスク・サービスを提供するステップを更に含む、（７）に記載の方法。
（１１）
前記メモリの前記隠された部分にデータを保管し、前記オペレーティング・システムの故障を切り抜けてこれを再起動し、前記隠されたサーバを再ロードして再起動する、ディスク・キャッシュ・サービスを提供するステップを更に含む、（７）に記載の方法。
（１２）
前記隠されたサーバが、前記少なくとも１つのプロセッサの第１のプロセッサによって実行され、前記オペレーティング・システムが、前記少なくとも１つのプロセッサの第２のプロセッサによって実行される、（７）に記載の方法。
【図面の簡単な説明】
【図１】本発明の１実施例に従った、メモリ及びメモリと複数のプロセッサ及び複数の入出力装置との関係の構成を示すブロック図である。
【図２】図１に示された可視的なメモリ、及び図１に示された可視的なメモリと隠されたメモリとの間の通信経路の構成を示すブロック図である。
【図３】図１に示された隠されたメモリの内部構成を示すブロック図である。
【図４】オペレーティング・システムが隠されたサーバにプロセッサの制御を手渡すための、本発明の１実施例に従った処理ステップを示す流れ図である。
【図５】本発明の１実施例に従って、図３の隠されたサーバが実行するステップを示す流れ図である。
【図６】本発明の１実施例に従って、隠されたサーバに要求を手渡すために用いられる待ち行列の構成を示すブロック図である。
【符号の説明】
１０                相互接続メカニズム
１５ａ〜１５ｎ      プロセッサ
１８ａ〜１８ｎ      ディスク装置
１１５ａ〜１１５ｎ  サービス・データ・ハンドル
【図１】
0003552502.tif 000002
【図２】
0003552502.tif 000003
【図３】
0003552502.tif 000004
【図４】
0003552502.tif 000005
【図５】
0003552502.tif 000006
【図６】
0003552502.tif 000007