(57)【特許請求の範囲】
【請求項１】
カウントキーデータ形式に従う第1のインタフェースと固定長ブロック形式に従う第２のインタフェースとを有する記憶装置を含む計算機システムであって、
前記第１のインタフェースを介して、前記記憶装置にカウントキーデータ形式に従う第１のデータを書き込む第１の計算機と、
前記第２のインタフェースを介して前記記憶装置に接続される第２の計算機と、
前記第１のデータが格納される前記記憶装置内の位置を示す位置情報であるカウントキーデータ形式に従うアドレスを記憶する記憶部と、
前記記憶部に格納された前記第１のデータの位置情報を前記第２の計算機に取得させうる取得部と、
前記カウントキーデータ形式に従うアドレスとブロックアドレスで指定される固定長ブロック形式のアドレスとを互いに変換する変換部と、
を有し、ここで、
前記第２の計算機は、前記取得部から取得した前記第１のデータの位置情報に基づいて、前記第２のインタフェースを介して、前記第１のデータに対してアクセスすることを特徴とする計算機システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、計算機システムに関し、さらに詳しくは、カウントキーデータ形式に従うインタフェースと、固定長ブロック形式に従うインタフェースの両方を有する記憶装置の使用法に関する。
【０００２】
【従来の技術】
異なるオペレーティングシステムの間のファイル共用あるいはファイル変換については、従来の技術で公知のものがある。例えば、日本サンマイクロシステムズ株式会社発行の、JLEリファレンスマニュアル３の、装置とネットワークインタフェースのPCFS(4S)には、UNIXオペレーティングシステムから、ＭＳ−ＤＯＳオペレーティングシステムのファイルをアクセスする機能が記載されている。 （JLEは、日本サン・マイクロシステムズ株式会社の商標です。UNIXは、米国X/Open Company Ltd. の米国及びその他の国における登録商標です。MS-DOSは、米国Microsoft corporation の米国及びその他の国における登録商標です。）
【０００３】
【発明が解決しようとする課題】
近年、パソコンやワークステーションなどのいわゆるオープンシステムを使用して、従来メインフレームで行なわれてきた業務を行なう、いわゆるダウンサイジングが盛んに行なわれている。
【０００４】
メインフレームは伝統的にディスクアクセスをカウントキーデータ形式に従って行なってきたのに比べて、オープンシステムはディスクアクセスを固定長ブロック形式に従って行なう。このために、一般的にはメインフレームで使用しているディスクは、オープンシステムでは使用できないという問題がある。メインフレームで使用しているディスクには、すでに大量の業務上の情報が蓄積されているために、ダウンサイジングを行なっても、オープンシステムからこのディスクをアクセスしたいという顧客の要求は大きい。この要求に答えるための技術として、分散データベースや、ファイル転送があるが、ネットワーク負荷が高くなるとか、既存の業務プログラムの変更が必要になるなどの欠点がある。
【０００５】
本発明は、ディスクにカウントキーデータ形式に従うインタフェースと、固定長ブロック形式に従うインタフェースの両方を持たせて、オープンシステムからこのディスクをアクセスし、メインフレームから格納した業務上の情報を利用することを可能とするものである。
【０００６】
カウントキーデータ形式に従うインタフェースと、固定長ブロック形式に従うインタフェースの両方を有する記憶装置の使用法、特に２つのインタフェースの間でデータを共用する機能については、従来の技術で公知のものはない。
【０００７】
【課題を解決するための手段】
本発明は、カウントキーデータ形式に従うインタフェースと、固定長ブロック形式に従うインタフェースの両方を有する記憶装置を含む計算機システムにおいて、シリンダー番号、ヘッド番号そしてレコード番号で指定されるカウントキーデータ形式のレコードアドレスと、ＬＢＡ（Logical Block Address）で指定される固定長ブロック形式のアドレスとを互いに変換する手段と、カウントキーデータ形式で記憶装置に格納されているレコードを固定長ブロック形式に従うインタフェースでアクセスさせる手段と、前記レコードから、ユーザデータだけを取り出す手段と、前記レコードのユーザデータを、あらかじめ定められた形式にしたがって解釈し、利用する手段とを有する計算機システムを提供する。
【０００８】
さらに、本発明は、カウントキーデータ形式に従うインタフェースでデータをアクセスし、当該データを管理する手段と、固定長ブロック形式に従うインタフェースでデータをアクセスし、当該データを管理する手段と、前記どちらかの手段があるデータを使用している場合、もう片方の手段にとっても当該データが使用中であるともう片方の手段をして知らしめる手段を有する計算機システムを提供する。
【０００９】
【発明の実施の形態】
以下、図に示す発明の実施の形態によりこの発明をさらに詳しく説明する。
【００１０】
ー第１の発明の実施の形態ー
図１は、本発明の第１の発明の実施の形態の計算機システムの要部構成図である。
【００１１】
ＣＰＵ１０は、ＳＣＳＩ（Small Computer System Interface）インタフェース６０を有する。ＣＰＵ１１は、チャネルインタフェース７０を有する。ディスク制御装置８０は、ＳＣＳＩインタフェース６１でＣＰＵ１０と接続し、チャネルインタフェース７１でＣＰＵ１１と接続する。SCSIバス６５は、ＳＣＳＩインタフェース６０と６１をむすぶ。チャネルケーブル７５は、チャネルインタフェース７０と７１をむすぶ。
【００１２】
ＳＣＳＩインタフェース６０ないし６１を、任意の固定長ブロック形式に従うインタフェースとする構成も可能である。チャネルインタフェース７０ないし７１を、任意のカウントキーデータ形式に従うインタフェースとする構成も可能である。
【００１３】
以下、カウントキーデータ形式をCKD形式と呼び、固定長ブロック形式をFBA(Fixed Block Architecture)形式と呼ぶ。CKD形式のレコードを、CKDレコードと呼ぶ。
【００１４】
ＣＰＵ１０は、ＵＮＩＸオペレーティングシステム４０によって制御される。ＣＰＵ１１は、日立製作所のＶＯＳ３(Virtual-storage Operating System 3)オペレーティングシステム５０によって制御される。ＵＮＩＸオペレーティングシステム４０を、ＳＣＳＩインタフェースをサポートする任意のオペレーティングシステムとした構成も可能である。ＶＯＳ３オペレーティングシステム５０を、チャネルインタフェースをサポートする任意のオペレーティングシステムとした構成も可能である。
【００１５】
ＣＰＵ１０とＣＰＵ１１では、アプリケーションプログラム２０と２１がそれぞれ動作する。アプリケーションプログラム２０と２１は、プログラミング言語ＣＯＢＯＬで記述され、ディスク制御装置８０にある、ＶＳＡＭ  ＥＳＤＳ（Virtual Storage Access Method Entry-Sequenced Data Set）をアクセスする。ＶＳＡＭ  ＥＳＤＳを、CKD形式で格納されたデータをアクセスする、任意のアクセス法の任意のデータセットあるいは任意のファイルとする構成も可能である。
【００１６】
ＶＯＳ３オペレーティングシステム５０は、VSAM５５を含む。VSAM５５は、ディスク制御装置８０に格納されたデータを、ＶＳＡＭデータセットのレコードとして、アプリケーションプログラム２１からアクセス可能とする。
【００１７】
図２は、ＵＮＩＸオペレーティングシステム４０の要部構成図である。
ＵＮＩＸオペレーティングシステム４０は、ファイル管理機能１５０およびSCSIデバイスドライバ１５５を含む。メモリ管理機能やプロセス管理機能など、本発明の実施の形態に関連のうすいものは省略してある。SCSIデバイスドライバ１５５は、SCSIインタフェース６０を制御し、ディスク制御装置８０および１８０をアクセスする。ディスク制御装置８０および１８０は、SCSIバス６５によりSCSIインタフェース６０に接続する。ディスク制御装置８０は、VSAMデータセットを、ディスク制御装置１８０はFFS(Berkeley Fast File System)のファイルを格納する。FFSは、ＵＮＩＸオペレーティングシステム４０のファイル管理機能１５０によって標準的にサポートされるファイルシステムの形式である。一方、ＵＮＩＸオペレーティングシステム４０のファイル管理機能１５０は、ＶＳＡＭデータセットのアクセスをサポートしていないものとする。
【００１８】
ls コマンド１６０は、指定したディレクトリに存在するファイルの一覧を表示するコマンドである。ディスク制御装置１８０に含まれるFFSのあるディレクトリを指定して発行された、ls コマンド１６０のディスクアクセス要求は、ファイル管理機能１５０およびSCSIデバイスドライバ１５５によって処理されて、ディスク制御装置１８０をアクセスする。
【００１９】
一方、CKDレコードアクセスライブラリ３５のディスクアクセス要求は、ファイル管理機能１５０を経由せずに、SCSIデバイスドライバ１５５だけによって処理され、ディスク制御装置８０をアクセスする。この場合、ディスク制御装置８０に格納される各VSAMデータセットの属性情報や、物理的な格納位置情報等は、ＵＮＩＸオペレーティングシステム４０からCKDレコードアクセスライブラリ３５へは提供されない。CKDレコードアクセスライブラリ３５には、ディスク制御装置８０全体が１つのファイルに見えるだけである。このようなアクセス方法を、ローIOと呼ぶ。
【００２０】
ＵＮＩＸオペレーティングシステム４０は、ファイル名により、前記２つのディスクアクセス要求を区別する。アクセスするファイル名として、キャラクタ特殊ファイル名を指定すると、ローIOによるアクセスがされ、それ以外の通常ファイル名を指定すると、ファイル管理機能１５０を経由するアクセスとなる。キャラクタ特殊ファイル名の例として、/dev/rsd1c がある。
【００２１】
図１に戻って、ＣＰＵ１０には、ＶＳＡＭアクセスライブラリ３０と、CKDレコードアクセスライブラリ３５がある。CKDレコードアクセスライブラリ３５は、ＶＳＡＭアクセスライブラリ３０が発行する、CKDレコードアクセス要求を、FBA形式のアクセス要求に変換して、ＵＮＩＸオペレーティングシステム４０に与え、その結果をCKD形式に変換してＶＳＡＭアクセスライブラリ３０に返す。ＶＳＡＭアクセスライブラリ３０は、ディスク制御装置８０に格納された、ＶＳＡＭを制御するためのデータ構造を参照して、ディスク制御装置８０に格納されたデータを、ＶＳＡＭデータセットのレコードとして、アプリケーションプログラム２０からアクセス可能とする。
【００２２】
なお、ＵＮＩＸオペレーティングシステム４０のファイル管理機能１５０が、ＶＳＡＭデータセットのアクセスをサポートする構成も可能である。この場合、ＶＳＡＭアクセスライブラリ３０およびCKDレコードアクセスライブラリ３５はＵＮＩＸオペレーティングシステムの一部分として実装される。
【００２３】
ディスク制御装置８０は、バッファ９０とディスク装置１００を有する。ディスク装置１００には、CKDレコード１１０が格納されている。ディスク制御装置８０は、チャネルインタフェース７１を経由して、CKD形式にしたがった、シリンダー番号、ヘッド番号、そしてレコード番号を指定したレコードのアクセスを提供する。以下、シリンダー番号、ヘッド番号、そしてレコード番号で表されるレコードアドレスを、CCHHRと呼ぶ。シリンダー番号、ヘッド番号で表されるトラックアドレスを、CCHHと呼ぶ。
【００２４】
さらに、ディスク制御装置８０は、SCSIインタフェース６１を経由して、FBA形式に従ったアクセスも提供する。この場合、ブロック長を５１２バイトとし、シリンダー０、ヘッド０、そしてレコード１を第０のＬＢＡ（Logical Block Address）をもつものとする。ディスク制御装置８０に格納されるCKDレコードの、FBA形式に従ったアドレス付けや、アクセスの仕方については後述する。
【００２５】
ディスク装置１００に格納されたデータは、当該データが格納されているシリンダー番号、ヘッド番号、そしてトラック先頭からのバイト位置によって識別される。データのディスク装置１００でのシリンダー番号、ヘッド番号は、当該データが、CPU１１からチャネルインタフェース７１を経由してアクセスされるときに指定されるシリンダー番号、ヘッド番号と同じであるとする。これが異なる構成も可能である。ディスク装置１００に格納されたデータが、LBAで識別される構成も可能である。その場合、CPU１１からチャネルインタフェース７１を経由してアクセスされるときに指定されるシリンダー番号、ヘッド番号そしてレコード番号と、LBAを互いに変換する手段が必要になる。この構成は、第２の発明の実施の形態として後述する。
【００２６】
ディスク装置１００が複数ある構成も可能である。
ディスク装置１００は、１つのトラックあたり最大６４キロバイトのデータを格納することができるものとし、以下これをトラック容量と呼ぶ。バッファ９０は、トラック容量だけの大きさを持つ。トラック容量に、ヘッド数をかけたものを、シリンダー容量と呼ぶ。
【００２７】
図３は、アプリケーションプログラム２０の処理のフローチャートである。
アプリケーションプログラム２０は、COBOLで記述され、ディスク制御装置８０に格納される、VSAM ESDSを１つオープンして、データセットの最初のレコードを１つ読み、それをコンソールに表示し、データセットをクローズして終わるというものである。
【００２８】
ステップ１１００で、データセットのオープンを行う。COBOLでの記述形式は、OPEN INPUT データセット名であり、指定したデータセットを読み込み専用でオープンすることを示す。これによりＶＳＡＭアクセスライブラリ３０が呼ばれる。そこで行なわれる処理を、図４に示す。これについては後述する。
【００２９】
ステップ１１１０で、VSAMレコードの読み込みを行う。COBOLでの記述形式は、READ データセット名 RECORD INTO 一意名であり、指定したデータセットからVSAMレコードを１つ読んで、一意名で示されるアプリケーションプログラム２０の変数にいれることを示す。これによりＶＳＡＭアクセスライブラリ３０が呼ばれる。そこで行なわれる処理を、図５に示す。これについては後述する。
【００３０】
ステップ１１２０で、前記ステップ１１１０で読み込んだVSAMレコードを、コンソールに表示する。
【００３１】
ステップ１１３０で、データセットのクローズを行なう。これによりＶＳＡＭアクセスライブラリ３０が呼ばれる。そこで行なわれる処理を、図６に示す。これについては後述する。
以上でアプリケーションプログラム２０の処理を終わる。
【００３２】
図４は、ＶＳＡＭアクセスライブラリ３０が行う、VSAM ESDSのオープン処理１１００のフローチャートである。
ステップ５００で、UNIXオペレーティングシステム４０の、ローIO機能をオープンする。正確に言うと、ディスク制御装置８０に対応したキャラクタ特殊ファイルをオープンする。本発明の実施の形態では、すべてのVSAM ESDSは、ディスク制御装置８０に存在するものとする。CPU１０に複数のディスク装置が接続される構成も可能である。その場合は、指定されたデータセット名から、それがどのディスク装置に存在するかを判断する手段が必要である。
【００３３】
ステップ５１０で、ＶＳＡＭアクセスライブラリ３０は、CKDレコードアクセスライブラリ３５の機能を使用して、ディスク制御装置８０から、標準ボリュームラベルを読み込む。
【００３４】
標準ボリュームラベルは、ディスク装置の特定の場所に書かれており、VTOC(Volume Table of Content)のアドレスを有する。標準ボリュームラベルの読み込みは、前記特定のCCHHRを指定して、図７に示すCKDレコード読み込み処理を呼ぶことで行う。CKDレコード読み込み処理については後述する。ＶＯＳ３オペレーティングシステム５０は、ディスク装置ごとに１つVTOCを作成する。VTOCは、そのディスク装置に含まれるすべてのデータセットの管理情報を有する。
【００３５】
ステップ５１０で、標準ボリュームラベルのデータ部から、VTOCのCCHHRを得る。
VTOCは、キー部４４バイト、データ部９６バイトのレコードの集まりである。各レコードを、DSCB(Dataset Control Block)と呼ぶ。DSCBには、いろいろな形式がある。 形式１DSCBは、キー部がデータセット名で、データ部はそのデータセットの属性や、割り当てられている物理的な格納位置の情報を有する。データセットが割り当てられている物理的な格納領域を、エクステントと呼ぶ。エクステントは、それが占めるシリンダー番号、トラック番号で識別される。
【００３６】
ステップ５２０で、VTOCの最初のレコードをCKDレコードアクセスライブラリ３５の機能を使用して、１つ読む。
【００３７】
ステップ５３０で、これが形式１DSCBであり、かつキー部は指定されたデータセット名に等しいか調べる。条件が成り立てば、ステップ５５０に進む。そうでなければ、ステップ５４０に進む。
【００３８】
ステップ５５０では、これが目的とするデータセットの形式１DSCBであるので、これをＶＳＡＭアクセスライブラリ３０のローカルな変数にコピーして、コール元に戻る。これで、VSAM ESDSのオープン処理が終わる。
【００３９】
ステップ５４０では、レコードアドレスを進め、次のDSCBを読む準備をして、ステップ５２０に戻る。
【００４０】
図６は、ＶＳＡＭアクセスライブラリ３０が行う、VSAM ESDSのリード処理１１１０のフローチャートである。
【００４１】
VSAM ESDS に含まれるすべてのVSAMレコードは、それらが作成された順で順序づけされている。ＶＳＡＭアクセスライブラリ３０は現在処理対象となるVSAMレコード位置を常に記憶しており、以下、それをカレントレコードと呼ぶ。カレントレコードは、データセットがオープンされたときに、最初のVSAMレコードとされる。リードされると、カレントレコードは次のVSAMレコードとなる。
【００４２】
VSAMでは、ディスク装置との転送の単位を、CI(Control Interval)と呼んでいる。CIは、VSAMレコードを含むほか、CI内の未使用スペースの管理情報などを有する。ＶＳＡＭアクセスライブラリ３０は、VSAMレコードを、それが含まれるCIのRBA(Relative Byte Address)と、CIの中でのVSAMレコードの通番で識別する。
【００４３】
ステップ６００で、目的RBAを、カレントレコードを含むCIのRBAとする。
ステップ６１０で、目的RBAを含むエクステントを探す。これはつまり、データセット内のオフセットから、そのオフセットを持つデータが実際に格納されているCCHHRを求めることである。
【００４４】
VSAM ESDSのオープンの直後のリード処理を例に、以下説明する。このときカレントレコードはVSAM ESDSの最初のCIに含まれ、そのCIのRBAは０であるとする。形式１DSCBは、エクステント情報の配列を持ち、各エクステントごとに、そのエクステントの開始CCHHと、終了CCHHを記録する。前記エクステント情報の配列は、対応するRBAの昇順に並んでいる。今の例では、目的RBAは０であるので、明らかに最初のエクステントの最初のレコードに含まれる。この結果、目的とするCCHHは形式１DSCBに記録された最初のエクステント情報の示す開始CCHHであることがわかる。また、レコード０にはユーザデータは格納できないため、Rは１であることがわかる。
【００４５】
ステップ６２０では、前記ステップ６１０で求めたCCHHRを指定して、図７に示すCKDレコード読み込み処理を呼ぶ。CIが、複数のCKDレコードからなる場合には、その数だけCKDレコード読み込み処理を呼ぶ。
【００４６】
ステップ６３０では、CI内の制御情報を参照して、CIの中で目的とするVSAMレコードを探す。それは、カレントレコードの通番を持つものである。
ステップ６４０で、アプリケーションプログラム２０の変数である一意名に、VSAMレコードをコピーする。
【００４７】
ステップ６５０で、カレントレコードを、次のVSAMレコードとする。
以上で、VSAM ESDSのリード処理が終わる。
【００４８】
図６は、ＶＳＡＭアクセスライブラリ３０が行う、VSAM ESDSのクローズ処理１１３０のフローチャートである。
【００４９】
ステップ１０００で、UNIXオペレーティングシステム４０の、ローIO機能をクローズする。正確に言うと、ディスク制御装置８０に対応したキャラクタ特殊ファイルをクローズする。
【００５０】
ステップ１０１０で、作業領域を解放する。
以上で、VSAM ESDSのクローズ処理が終わる。
【００５１】
図７は、CKDレコードアクセスライブラリ３５が行なう、CKDレコード読み込み処理のフローチャートである。CKDレコード読み込み処理は、ＶＳＡＭアクセスライブラリ３０から呼ばれ、指定されたCCHHRを持つレコードをディスク制御装置８０から読み、そのキー部とデータ部を返す。
【００５２】
ステップ４００では、指定されたCCHHRを持つレコードを含むトラックの先頭に対応するLBAを計算する。ただし、以下では、割算を示す／では、整数部分のみを商とする。
【００５３】
LBA ＝（CC ＊シリンダー容量  ＋  HH＊トラック容量）  ／  ブロック長
ステップ４１０では、UNIXオペレーティングシステム４０のローIO機能をつかって、前記LBAから、1トラック長だけ、SCSIインタフェース６０を経由してディスク制御装置８０からデータを読む。ローIO機能を使う理由は、UNIXオペレーティングシステム４０はＶＳＡＭデータセットのアクセスをサポートしていないために、UNIXオペレーティングシステム４０のファイル管理機能を使用することができないためである。
【００５４】
ステップ４２０では、ステップ４３０で処理するレコードアドレスを、トラックの先頭とする。
【００５５】
ステップ４３０では、当該レコードのカウント部に含まれる、レコードIDを調べて、当該レコードが、指定されたCCHHRを持つものであるか調べる。指定されたCCHHRを持てばステップ４４０へ進む。そうでなければ、ステップ４５０へ進む。
【００５６】
ステップ４４０では、目的とするレコードが見つかったので、そのキー部と、データ部をコール元に返して処理を終了する。
【００５７】
ステップ４５０では、レコードアドレスに、現在のレコードのキー部とデータ部の長さを加えて、つぎに処理するレコードアドレスとして、ステップ４３０に戻る。レコードのキー部とデータ部の長さは、そのレコードのカウント部に書いてある。
【００５８】
以上、図７に示した処理では、CKDレコード読み込み処理が１度呼ばれると必ず1トラックがディスク制御装置８０から読まれる。最近アクセスしたトラックのデータをキャッシュしておいて、同じトラックが要求されたらディスク制御装置８０をアクセスしないですます構成も可能である。
【００５９】
図８は、ディスク制御装置８０が行なう、SCSI READ処理のフローチャートである。この処理は、前記図７のCKDレコード読み込み処理のステップ４１０でUNIXオペレーティングシステム４０のローIO機能が使用された結果、ディスク制御装置８０の側で行なわれるものである。
【００６０】
ステップ２００では、ディスク制御装置８０は、CPU１０からＳＣＳＩインタフェース６１を経由してＳＣＳＩのREADコマンドを受ける。
【００６１】
ステップ２１０では、受領したCDB(Command Descriptor Block)から、対象データのＬＢＡを得、それをディスク装置１００のシリンダー番号とヘッド番号に変換する。
【００６２】
シリンダー番号＝(LBA ＊ブロック長) ／シリンダー容量
ヘッド番号＝（(LBA ＊ブロック長) ％シリンダー容量）／トラック容量
トラック先頭からのバイト位置＝（LBA ＊ブロック長) ％トラック容量
％は、剰余を表す。即ち、整数ｍ、ｎに対して、ｎ％ｍはｎをｍで割った余りを示す。
【００６３】
ステップ２２０では、指定されたシリンダー番号とヘッド番号をもつトラックを、バッファ９０に読む。このときにバッファ９０に読み込まれるトラックの形式を、図９に示す。
【００６４】
図９は、ディスク装置１００に格納されるデータの、トラック上の配置を示したものである。３００から、３４５は、トラック上の実際の物理的なデータの配置を示す。これに対して、３８０は、前記図８のステップ２２０でバッファ９０に読み込まれるトラックの形式を示したものである。３９０、３９２そして３９４は、３８０に示すデータが、SCSIインタフェース６１を経由して、CPU１０に転送されるときの形式を示したものである。
【００６５】
３００は、インデクスマーカーであり、トラックの始まりを示す。３０５は、ホームアドレスであり、トラックの状態や、IDを示す。３１０はレコード０のカウント部であり、３１５はレコード０のデータ部である。カウント部は、各レコードの最初のフィールドであり、そのレコードの状態、位置、及び長さを示す。レコード０は、トラックの最初のレコードであり、ユーザデータを格納することはできない。３２０、３２５、そして３３０はそれぞれ、レコード１のカウント部、キー部、データ部である。３３５、３４０そして３４５はそれぞれ、レコード２のカウント部、キー部、データ部である。以下に続くレコードは、省略した。３０５から３４５の各フィールドの間は、ギャップと呼ばれる領域で、定められた長さを持ち、データが格納されない。
【００６６】
３８０のトラック形式は、前記３０５から３４５までのフィールドのうち、レコード１以下の、カウント部とキー部、そしてデータ部を連続して配置したものである。
【００６７】
実際には、３０５から３４５までのフィールドにそれぞれ存在するECC(Error Correcting Code)などは３８０には含まれないが、図３では簡単のため、その違いは表されていない。
【００６８】
３９０、３９２そして３９４は、ディスク制御装置８０のブロック長である、５１２バイトの長さを持つブロックである。３９０、３９２そして３９４には、３８０に示すデータが、カウント部、キー部、データ部すべてが連続して、順に格納される。CKDレコードの境界とブロックの境界とは、必ずしも一致しない。
【００６９】
図９に示すように、ＳＣＳＩインタフェース６１からは、ホームアドレス３０５や、レコード０は見えない。ECCや、ギャップはもちろん見えない。
【００７０】
バッファ９０の長さである、トラック容量は、トラックに格納されるユーザデータの最大値ではなく、各レコードのカウント部や、ホームアドレス、それにレコード０の長さをも加えた最大値であるとする。
【００７１】
図８に戻って、ステップ２３０では、バッファ９０の、ステップ２１０で求めたトラック先頭からのバイト位置で指定されるブロックから、ＳＣＳＩインタフェース６１を経由してCPU１０にデータを転送する。
【００７２】
ステップ２４０では、トラックの終わりまで転送したかを判断する。トラックの終わりまで転送したならば、ステップ２５０に進む。そうでなければ、ステップ２７０に進む。トラックの終わりまでを転送したとは、当該トラックの最終レコードの最終バイトを転送し終わったことをいう。
【００７３】
ステップ２５０では、現在転送中のブロックの終端まで、０を転送する。これを以下、パディングと呼ぶ。この処理が必要な理由を以下に示す。
【００７４】
CKD形式では、トラックに格納できるデータの容量は、レコード長によって変わる。このため、一般的にはトラックに実際に格納されているデータの容量は、ブロック長、現在の場合５１２バイトの倍数にならない。ステップ２５０のパディングを行なわないならば、このディスクをFBA形式で読んだときに、１つのブロック内に異なるトラックのデータが混在することになる。これは、CPU１０のCKDレコードアクセスライブラリ３５の処理を複雑にする。本発明の実施の形態では、ステップ２５０のパディングを行ない、トラックは必ずブロック境界から始まることを保証するものとする。ステップ２５０のパディングを行なわない構成も可能である。パディングのために転送するデータとして、０以外を使うことも可能である。
【００７５】
ステップ２６０では、次のトラックのシリンダー番号、ヘッド番号を計算する。  ステップ２７０では、CDBで指定されたブロックを、すべて転送したか調べる。すべて転送したなら、リード処理を終了する。すべて転送していないなら、トラック先頭からのバイト位置を０に設定して、ステップ２２０へ戻る。
【００７６】
ただし、本発明の実施の形態では、CKDレコードアクセスライブラリ３５は図７のステップ４１０に示すように、必ず1トラックだけをアクセスする。このため、詳細はUNIXオペレーティングシステム４０の処理に依存するものの、ステップ２６０で計算した次のトラックアドレスを有するトラックがステップ２２０で読み込まれることは、一般的には起こらないと考えられる。
【００７７】
以上、図８の処理においても、図７について述べたように、トラックのキャッシュを行なう構成が可能である。
【００７８】
ー第２の発明の実施の形態ー
図１０は、本発明の第２の発明の実施の形態の計算機システムの要部構成図である。
【００７９】
本発明の第２の発明の実施の形態の計算機システムの構成は、第１の発明の実施の形態のディスク制御装置８０のディスク装置１００を、FBA形式でアクセスされるディスク装置１００’に変更した構成である。ディスク装置１００’が複数ある構成も可能であり、これを図１８に示す。図１８については、後述する。
【００８０】
このディスク装置１００’は、ブロック長を５１２バイトとし、LBAによるアクセスを提供する。ディスク装置にCKDレコード１１０が格納されることや、チャネルインタフェース７１を経由して、CKD形式にしたがったアクセスをCPU１１に提供することは第１の発明の実施の形態と同じである。
【００８１】
図１１は、ディスク装置１００’に格納されるデータの配置を示したものである。２０００、２００２そして２００４は、ディスク装置１００’に格納されたトラックのデータを有するブロックであり、それぞれ５１２バイトの長さを持つ。３８０’はバッファ９０に読み込まれるトラックの形式である。３９０、３９２そして３９４は、３８０’に示すデータが、SCSIインタフェース６１を経由して、CPU１０に転送されるときの形式を示したものである。３９０、３９２そして３９４は図９と同じである。
【００８２】
２０００は、ホームアドレスや、レコード０を含む。これは、ディスク制御装置８０が、チャネルインタフェース７１を経由してCKD形式にしたがったアクセスを受けるために、CKD形式特有の、いわゆるフォーマットライトコマンドを処理し、書き込まれたデータを保持する必要があるためである。フォーマットライトコマンドの例としては、WRITE HOME ADDRESS や、WRITE COUNT, KEY, AND DATAがある。
【００８３】
３８０’に示すデータは、２０００、２００２そして２００４のデータを連続して並べたものであり、ここにもホームアドレスとレコード０が存在する。
【００８４】
図１２は、ディスク制御装置８０が行なう、SCSI READ 処理のフローチャートである。図１２のフローチャートは、第１の発明の実施の形態の図８のフローチャートに、ステップ２１００と、ステップ２１１０を加えたものである。
【００８５】
ステップ２１００では、先のステップ２１０で、CDBに指定されたLBAから計算したCCHHを、さらにLBAに再計算する。
【００８６】
LBA ＝（CC ＊シリンダー容量  ＋  HH＊トラック容量）  ／  ブロック長
上記シリンダー容量とトラック容量は、ディスク制御装置８０がチャネルインタフェース７１を経由してCPU１１に見せているものである。ブロック長は、ディスク装置１００’の属性で、５１２バイトである。ディスク装置１００’が複数ある構成をとった場合、目的CCHHを持つトラックがどのディスク装置に存在するかを決める手段が必要になり、LBAの計算も複雑になる。
【００８７】
ステップ２２０’では、ディスク装置１００’からバッファ９０に、２０００、２００２、２００４そしてそれに続くブロックを、１トラック分だけ読み込む。バッファ９０には３８０’に示すデータが格納される。
【００８８】
ステップ２１１０では、バッファ９０のデータ上で、レコード１のカウント部の開始位置を決める。このためには、レコード０のカウント部を見て、レコード０の長さを求め、それとホームアドレスの長さだけをバッファ９０の先頭位置に足し込めばよい。ホームアドレスとレコード０は、SCSIインタフェース６１を経由して、CPU１０に転送されることがないため、この処理が必要である。
【００８９】
ステップ２３０では、前記ステップ２１１０で位置付けたレコード１から転送がされる。
以下の処理は、第１の発明の実施の形態の図８と同じであるので、説明は省略する。
【００９０】
図１８は、本発明の第２の発明の実施の形態の計算機システムのディスク装置１００’を、その約半分の容量を持つディスク装置１００”およびディスク装置２５００で置き換えた計算機システムの要部構成図である。各ディスク装置へのデータの分配は、トラック単位で行なわれ、偶数トラック番号のものはディスク装置２５００に、奇数トラック番号のものはディスク装置１００”に格納されるものとする。
【００９１】
ー第３の発明の実施の形態ー
図１３は、本発明の第３の発明の実施の形態の計算機システムの要部構成図である。
【００９２】
本発明の第３の発明の実施の形態の計算機システムの構成は、第１の発明の実施の形態のCKDレコードアクセスライブラリ３５を、少し異なる機能を持つCKDレコードアクセスライブラリ３５”に置き換えた構成である。
【００９３】
本発明の実施の形態と第１の発明の実施の形態の主な違いを以下に簡単に述べる。
【００９４】
第１の発明の実施の形態では、CKDレコードからカウント部を取り除くのはCPU１０のCKDレコードアクセスライブラリ３５であったが、本発明の実施の形態ではディスク制御装置８０がこれを行なう。
【００９５】
これにともない、第１の発明の実施の形態では、CKDレコードアクセスライブラリ３５はディスク制御装置８０からトラック単位でデータを読み込んだが、本発明の実施の形態ではブロック単位でデータを読み込む。そして、本発明の実施の形態ではSCSIインタフェース６０を経由してCKDレコードアクセスライブラリ３５が受け取るデータにはカウント部がついていないので、これだけではレコード境界が決まらない。しかしこれはVSAM をアクセスするうえでは問題にならない。この理由を、以下に説明する。
【００９６】
VSAMでは、ディスク装置に格納される物理的なレコードは、VSAMのユーザであるアプリケーションプログラムが扱うVSAMレコードとは対応しない。ディスク装置への格納すなわちCKDレコードの割当は、CIごとに行なわれる。CIを格納する各CKDレコードは、キー部を持たず、データ部の長さは同じVSAMデータセットに属するCKDレコードであればすべて等しく、VSAMにより１０２４バイトなど、適当な長さに決められる。ディスク制御装置８０は、図８のステップ２５０のパディング処理をおこなうことで、CKD形式で格納されたデータをFBA形式でアクセスするときに、CKD形式でのトラック境界がFBA形式でのブロック境界をまたがらないことを保証する。このため、トラック先頭のLBAが与えられれば、目的とするレコードの位置は、レコード番号とレコード長から容易に求めることができる。
【００９７】
さらに、CKDレコードアクセスライブラリ３５が受け取るデータにカウント部がついていないことは、VTOCをアクセスするうえでも問題にならない。VTOCは、キー部４４バイト、データ部９６バイトのレコードの集まりである。このため、上記VSAMの場合と同様に、レコード位置を求めるのは容易である。
【００９８】
即ち、CKDレコードアクセスライブラリ３５は、その上位プログラム、今の場合ＶＳＡＭアクセスライブラリ３０から、現在処理対象としているトラックに、どんな形式のレコードが格納されているかを教わることで、レコード境界を見つけることが可能である。このためカウント部は必要ない。
【００９９】
ただし、VSAM以外のアクセス法には、任意長のCKDレコードを扱うものもあるため、本発明の実施の形態の方式は適用できないものがある。
【０１００】
図１４は、ディスク装置１００に格納されるデータの、トラック上の配置を示したものである。３００から３４５は、図９と同じであり、トラック上の実際の物理的なデータの配置を示す。３８０”は、バッファ９０に読み込まれるトラックの形式を示したものである。３９０”と３９２”は、３８０”に示すデータが、SCSIインタフェース６１を経由して、CPU１０に転送されるときの形式を示したものである。
【０１０１】
３８０”のトラック形式は、前記３０５から３４５までのフィールドのうち、レコード１以下の、キー部とデータ部だけを集めたものである。
【０１０２】
図１５は、CKDレコードアクセスライブラリ３５”が行なう、CKDレコード読み込み処理のフローチャートである。
【０１０３】
ステップ２２００では、指定されたCCHHRを持つレコードを含むブロックのLBAを計算する。Ｒは、目的レコ−ドのレコ−ド番号である。
【０１０４】
LBA ＝（CC ＊シリンダー容量  ＋  HH＊トラック容量）  ／  ブロック長  ＋（（Rー１）＊  レコード長）  ／  ブロック長
最初の項が、目的レコードを含むトラックの先頭アドレスであり、２番目の項がトラック上のオフセットである。
【０１０５】
さらに、ブロック内での、目的レコードの開始オフセットは、
ブロック内オフセット  ＝  （（Rー１）＊  レコード長）  ％  ブロック長
である。
【０１０６】
ステップ２２１０では、UNIXオペレーティングシステム４０のローIO機能をつかって、前記LBAから、（（レコード長  ＋  （ブロック長ー１））／  ブロック長）ブロックだけ、あるいは、レコードがブロックをまたがる場合にはさらに１ブロック余分に、SCSIインタフェース６０を経由してディスク制御装置８０からデータを読む。
【０１０７】
ステップ２２２０では、読み込んだデータのアドレス＋ブロック内オフセットをキー部として、そしてキー部の終了アドレスをデータ部としてコール元に返して処理を終了する。
【０１０８】
図１４で、CKDレコード読み込み処理を例を使って説明する。
CKDレコードアクセスライブラリ３５”は、ＶＳＡＭアクセスライブラリ３０から、VTOCのレコード４を読む要求を受けたとする。VTOCは、トラック先頭のレコード１から開始するとする。ブロック長は５１２バイト、レコード長はキー部が４４バイト、データ部が９６バイト、合計１４０バイトである。
【０１０９】
LBA ＝（CC ＊シリンダー容量  ＋  HH＊トラック容量）／５１２  ＋（（４ー１）＊  １４０）  ／  ５１２
であり、
ブロック内オフセット  ＝  （（４ー１）＊１４０）  ％  ５１２  ＝  ４２０
である。
【０１１０】
ステップ２２１０では、（１４０＋（５１２ー１））／５１２  ＋  １  ＝２
ブロックが読み込まれる。
【０１１１】
ステップ２２２０では、読んだデータの先頭から４２０バイト目のアドレスがキー部として、４６４バイト目のアドレスがデータ部として、ＶＳＡＭアクセスライブラリ３０に返る。
【０１１２】
ー第４の発明の実施の形態ー
図１６は、本発明の第４の発明の実施の形態の計算機システムの要部構成図である。
【０１１３】
本発明の第４の発明の実施の形態の計算機システムの構成は、第１の発明の実施の形態のＶＳＡＭアクセスライブラリ３０を、少し異なる機能を持つＶＳＡＭアクセスライブラリ３０’’’に置き換え、さらにCPU１１にVTOCユティリティ２３００を加えた構成である。
【０１１４】
本発明の実施の形態と第１の発明の実施の形態の主な違いを以下に簡単に述べる。
【０１１５】
第１の発明の実施の形態のＶＳＡＭアクセスライブラリ３０は、図４に示したVSAM OPEN処理において、指定されたデータセット名称の形式１DSCBを探すために、標準ボリュームラベルとVTOCを読んだ。本発明の実施の形態のＶＳＡＭアクセスライブラリ３０’’’は、そのためにVTOCユティリティ２３００が求めたデータを使い、ディスク制御装置８０のアクセスはしない。
【０１１６】
VTOCユティリティ２３００は、VOS3オペレーティングシステム５０上で動作し、ディスク制御装置８０をアクセスして目的データセットの形式１DSCBを求める。VOS3オペレーティングシステム５０にはこれを行なうマクロが提供されており、それをOBTAIN(SEARCH)マクロと言う。 VTOCユティリティ２３００は、OBTAIN(SEARCH)マクロを、目的とするデータセット名称を指定して発行する。VOS3オペレーティングシステム５０はVTOCをアクセスして、結果である形式１DSCBをVTOCユティリティ２３００に返す。
【０１１７】
VOS3オペレーティングシステム５０はVTOCをアクセスするときに、VTOC索引を使用したり、指定したキー部を持つレコードをサーチするCCW(Channel Command Word)を使用したりするために、一般的にその処理は第１の発明の実施の形態のＶＳＡＭアクセスライブラリ３０の行なう、図４に示したVSAM OPEN処理のステップ５０５からステップ５４０に比べると高速である。
【０１１８】
図１７は、ＶＳＡＭアクセスライブラリ３０’’’が行う、VSAM ESDSのオープン処理のフローチャートである。
【０１１９】
ステップ５００で、UNIXオペレーティングシステム４０の、ローIO機能をオープンする。
【０１２０】
ステップ２４００では、ＶＳＡＭアクセスライブラリ３０’’’はVTOCユティリティ２３００より形式１DSCBを得る。具体的には、プログラム間通信を用いてVTOCユティリティ２３００を呼び出して結果を返送させてもいいし、あらかじめVTOCユティリティ２３００を実行させておき、その結果を人間がコンソールから入力してもよい。
【０１２１】
ステップ５５０では、形式１DSCBをＶＳＡＭアクセスライブラリ３０のローカルな変数にコピーして、コール元に戻る。これで、VSAM ESDSのオープン処理が終わる。
【０１２２】
ー第５の発明の実施の形態ー
図１９は、本発明の第５の発明の実施の形態の計算機システムの要部構成図である。
【０１２３】
本発明の第５の発明の実施の形態の計算機システムの構成は、第１の発明の実施の形態のＶＳＡＭアクセスライブラリ３０を、少し異なる機能を持つＶＳＡＭアクセスライブラリ３０””に置き換え、さらにCPU１１にロックユティリティ２６００を加えた構成である。
【０１２４】
本発明の実施の形態は、第１の発明の実施の形態が有する、以下の課題を解決するための機構を有する。
【０１２５】
VOS3オペレーティングシステム５０はカウントキーデータ形式に従うインタフェースでデータをアクセスし、当該データを管理し、UNIXオペレーティングシステム４０は固定長ブロック形式に従うインタフェースでデータをアクセスし、当該データを管理する。両オペレーティングシステムは、ディスク装置１００にある各データセットが使用中かどうかという情報を、それぞれのオペレーティングシステムの管理するメモリに持つ。このため、お互いがどのデータセットを使用しているかはわからない。このため、UNIXオペレーティングシステム４０上で動作するアプリケーションプログラム２０が現在参照しているデータセットを、VOS3オペレーティングシステム５０上で動作するアプリケーションプログラム２１が削除してしまうといった不具合を防ぐことができない。このような不具合は
、アプリケーションプログラムあるいはオペレーティングシステムの動作不良あるいはデータセットの破壊をひきおこすおそれがあるために、避けなければいけない。このために、本発明の実施の形態はロックユティリティ２６００を有する
。
【０１２６】
ロックユティリティ２６００は、VOS3オペレーティングシステム５０上で動作するプログラムである。ロックユティリティ２６００は、ＶＳＡＭアクセスライブラリ３０””の要求に従って、ＶＳＡＭアクセスライブラリ３０””がアクセスしようとするデータセットの使用を、 VOS3オペレーティングシステム５０に要求する。しかしロックユティリティ２６００は自分では使用を要求したデータセットへのアクセスは行わない。データセットへのアクセスはＳＣＳＩインタフェースを経由してUNIXオペレーティングシステム４０が行う。VOS3オペレーティングシステム５０には必要に応じてデータセットの使用の要求を行なうマクロが提供されており、それをDYNALLOCマクロと言う。ＶＳＡＭアクセスライブラリ３０””は、データセットをアクセスしようとするときには、そのデータセット名称を指定してロックユティリティ２６００を呼ぶ。ロックユティリティ２６００は、DYNALLOCマクロを、目的とするデータセット名称を指定して発行する。これにより、UNIXオペレーティングシステム４０がアクセスしようとするデータセットは、VOS3オペレーティングシステム５０にとっても使用中とみなされるため、前述のアクセスの競合による不具合を防ぐことができる。
【０１２７】
図２０は、ＶＳＡＭアクセスライブラリ３０””が行う、VSAM ESDSのオープン処理のフローチャートである。
【０１２８】
ステップ２７００で、ＶＳＡＭアクセスライブラリ３０””はオープンしようとするデータセット名称を指定して、ロックユティリティ２６００を呼ぶ。具体的には、プログラム間通信を用いてロックユティリティ２６００を呼び出すなどの方法がある。ロックユティリティ２６００はVOS3オペレーティングシステム５０にDYNALLOCマクロを発行し、データセットの使用を要求する。これにより、当該データセットは、VOS3オペレーティングシステム５０で動作するアプリケーションプログラムからアクセスができなくなる。
【０１２９】
以下の処理は図４と同じなので、説明は省略する。
【０１３０】
図２１は、ＶＳＡＭアクセスライブラリ３０””が行う、VSAM ESDSのクローズ処理のフローチャートである。
【０１３１】
ステップ２８００で、ＶＳＡＭアクセスライブラリ３０””はクローズしようとするデータセット名称を指定して、ロックユティリティ２６００を呼ぶ。ロックユティリティ２６００はVOS3オペレーティングシステム５０にDYNALLOCマクロを発行し、データセットの使用の終了を伝える。これにより、当該データセットは、VOS3オペレーティングシステム５０で動作するアプリケーションプログラムからアクセスできるようになる。
【０１３２】
以下の処理は図６と同じなので、説明は省略する。
【０１３３】
本発明の実施の形態では、ＶＳＡＭアクセスライブラリ３０””がオープンしたデータセットは、VOS3オペレーティングシステム５０で動作するアプリケーションプログラムからはいっさいアクセスできなくなる。これを、例えばデータセットの読みだしは許可し、更新は許可しないようにすることもできる。そのためには、ＶＳＡＭアクセスライブラリ３０””からロックユティリティ２６００に、データセット名称の他に当該データセットの共用モードを与え、ロックユティリティ２６００がその共用モードに従ってDYNALLOCマクロを発行するようにすればよい。
【０１３４】
また、ＶＳＡＭアクセスライブラリ３０””はロックユティリティ２６００を使用して、UNIXオペレーティングシステム４０上で動作するアプリケーションプログラム２０の要求にしたがって、ディスク装置１００にVOS3オペレーティングシステム５０の管理するデータセットを新規に作成することができる。同様に、データセットを削除したり、既存のデータセットの大きさを拡張、縮小することもできる。
【０１３５】
【発明の効果】
本発明の計算機システムによれば、メインフレームと、オープンシステムとの間で、データが共用できる。これにより、より柔軟で、安価かつ高性能な計算機システムを構成することができる。
【図面の簡単な説明】
【図１】本発明の第１の発明の実施の形態の計算機システムの要部構成図である。
【図２】本発明の第１の発明の実施の形態のUNIXオペレーティングシステムの要部構成図である。
【図３】本発明の第１の発明の実施の形態のアプリケーションプログラムの処理の手順を示すフローチャートである。
【図４】本発明の第１の発明の実施の形態のVSAM OPEN処理の手順を示すフローチャートである。
【図５】本発明の第１の発明の実施の形態のVSAM READ処理の手順を示すフローチャートである。
【図６】本発明の第１の発明の実施の形態のVSAM CLOSE処理の手順を示すフローチャートである。
【図７】本発明の第１の発明の実施の形態のCKDレコード読み込み処理の手順を示すフローチャートである。
【図８】本発明の第１の発明の実施の形態のSCSI READ処理の手順を示すフローチャートである。
【図９】本発明の第１の発明の実施の形態のトラック形式のデータ構造図である。
【図１０】本発明の第２の発明の実施の形態の計算機システムの要部構成図である。
【図１１】本発明の第２の発明の実施の形態のトラック形式のデータ構造図である。
【図１２】本発明の第２の発明の実施の形態のSCSI READ処理の手順を示すフローチャートである。
【図１３】本発明の第３の発明の実施の形態の計算機システムの要部構成図である。
【図１４】本発明の第３の発明の実施の形態のトラック形式のデータ構造図である。
【図１５】本発明の第３の発明の実施の形態のCKDレコード読み込み処理の手順を示すフローチャートである。
【図１６】本発明の第４の発明の実施の形態の計算機システムの要部構成図である。
【図１７】本発明の第４の発明の実施の形態のVSAM OPEN処理の手順を示すフローチャートである。
【図１８】本発明の第２の発明の実施の形態の計算機システムの要部構成図である。
【図１９】本発明の第５の発明の実施の形態の計算機システムの要部構成図である。
【図２０】本発明の第５の発明の実施の形態のVSAM OPEN処理の手順を示すフローチャートである。
【図２１】本発明の第５の発明の実施の形態のVSAM CLOSE処理の手順を示すフローチャートである。
【符号の説明】
１０、１１              CPU
２０、２１              アプリケーションプログラム
３０、３０’’’、３０””        VSAMアクセスライブラリ
３５、３５”            CKDレコードアクセスライブラリ
４０                    UNIXオペレーティングシステム
５０                    VOS３オペレーティングシステム
６０、６１              SCSIインタフェース
７０、７１              チャネルインタフェース
８０                    ディスク制御装置
９０                    バッファ
１００、１００’、１００””      ディスク装置
【図１】
0003925461.tif 000002
【図２】
0003925461.tif 000003
【図３】
0003925461.tif 000004
【図４】
0003925461.tif 000005
【図５】
0003925461.tif 000006
【図６】
0003925461.tif 000007
【図７】
0003925461.tif 000008
【図８】
0003925461.tif 000009
【図９】
0003925461.tif 000010
【図１０】
0003925461.tif 000011
【図１１】
0003925461.tif 000012
【図１２】
0003925461.tif 000013
【図１３】
0003925461.tif 000014
【図１４】
0003925461.tif 000015
【図１５】
0003925461.tif 000016
【図１６】
0003925461.tif 000017
【図１７】
0003925461.tif 000018
【図１８】
0003925461.tif 000019
【図１９】
0003925461.tif 000020
【図２０】
0003925461.tif 000021
【図２１】
0003925461.tif 000022