(57)【要約】【課題】ＦＢＡ方式の記憶装置でＣＫＤ方式のセクタ番号による位置付けを効率的に行うこと。【解決手段】ストレージ制御装置１０１は、上位装置１０２からのトラック・フォーマットの変更を伴う書き込み要求に応じて、変換情報１１０を参照し、書き込み要求で指定されるセクタ番号に対応するブロック番号を特定する。ストレージ制御装置１０１は、特定したブロック番号から読み出されるレコードＲのフォーマット情報に基づいて、次のレコードＲの先頭ブロック番号と先頭セクタ番号を算出する。ストレージ制御装置１０１は、次のレコードＲの先頭セクタ番号への位置付けを行う際に指定されるセクタ番号を、次のレコードＲの先頭ブロック番号と対応付けて変換情報１１０に記憶する。ストレージ制御装置１０１は、次のレコードＲの先頭ブロック番号から書き込み要求に応じたデータの書き込みを行って、次のレコードＲの先頭セクタ番号を上位装置１０２に通知する。【選択図】図１
2019036193.tif 000002
【特許請求の範囲】
【請求項１】
ＦＢＡ（Ｆｉｘｅｄ  Ｂｌｏｃｋ  Ａｒｃｈｉｔｅｃｔｕｒｅ）方式の記憶装置に対するアクセスを制御するストレージ制御装置であって、
ＣＫＤ（Ｃｏｕｎｔ  Ｋｅｙ  Ｄａｔａ）方式によって前記記憶装置にアクセスする上位装置からのトラック・フォーマットの変更を伴う書き込み要求に応じて、前記記憶装置のトラックのセクタ番号とブロック番号との対応関係を示す変換情報を参照して、前記書き込み要求で指定されるセクタ番号に対応するブロック番号を特定し、
特定した前記ブロック番号から読み出されるレコードのフォーマット情報に基づいて、前記レコードの次のレコードの先頭ブロック番号と先頭セクタ番号とを算出し、
算出した前記先頭セクタ番号への位置付けを行う際に指定されるセクタ番号を、算出した前記先頭ブロック番号と対応付けて前記変換情報に記憶し、
算出した前記先頭ブロック番号から前記書き込み要求に応じたデータの書き込みを行って、算出した前記先頭セクタ番号を前記上位装置に通知する、
制御部を有することを特徴とするストレージ制御装置。
【請求項２】
前記制御部は、
前記上位装置からの読み出し要求に応じて、前記変換情報を参照して、前記読み出し要求で指定されるセクタ番号に対応するブロック番号を特定し、
特定した前記ブロック番号から、前記読み出し要求で指定されるレコードの読み出しを行って、読み出した前記レコードのデータを前記上位装置に送信する、ことを特徴とする請求項１に記載のストレージ制御装置。
【請求項３】
前記制御部は、
前記上位装置からのトラック・フォーマットの変更を伴わない書き込み要求に応じて、前記変換情報を参照して、前記書き込み要求で指定されるセクタ番号に対応するブロック番号を特定し、
特定した前記ブロック番号から、前記書き込み要求に応じたデータの書き込みを行う、ことを特徴とする請求項１または２に記載のストレージ制御装置。
【請求項４】
前記上位装置からのトラック・フォーマットの変更を伴う書き込み要求に応じて、前記トラックのトラック・フォーマット情報に基づいて、前記トラックが等長レコードのフォーマットであるか否かを判定し、
前記トラックが等長レコードのフォーマットの場合、前記トラック・フォーマット情報に含まれるデータ長とレコード数とに基づいて、前記書き込み要求で指定されるセクタ番号に対応するブロック番号を特定する、ことを特徴とする請求項１〜３のいずれか一つに記載のストレージ制御装置。
【請求項５】
前記変換情報は、前記記憶装置からキャッシュメモリ上に読み出される前記トラックのデータの先頭ブロックまたは最終ブロックに格納される、ことを特徴とする請求項１〜４のいずれか一つに記載のストレージ制御装置。
【請求項６】
ＦＢＡ方式の記憶装置に対するアクセスを制御するコンピュータに、
ＣＫＤ方式によって前記記憶装置にアクセスする上位装置からのトラック・フォーマットの変更を伴う書き込み要求に応じて、前記記憶装置のトラックのセクタ番号とブロック番号との対応関係を示す変換情報を参照して、前記書き込み要求で指定されるセクタ番号に対応するブロック番号を特定し、
特定した前記ブロック番号から読み出されるレコードのフォーマット情報に基づいて、前記レコードの次のレコードの先頭ブロック番号と先頭セクタ番号とを算出し、
算出した前記先頭セクタ番号への位置付けを行う際に指定されるセクタ番号を、算出した前記先頭ブロック番号と対応付けて前記変換情報に記憶し、
算出した前記先頭ブロック番号から前記書き込み要求に応じたデータの書き込みを行って、算出した前記先頭セクタ番号を前記上位装置に通知する、
処理を実行させることを特徴とする制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、および制御プログラムに関する。
【背景技術】
【０００２】
従来、メインフレームなどの上位装置に接続されたストレージ装置では、上位装置からデータの書き込みを要求された場合、ＣＫＤ（Ｃｏｕｎｔ  Ｋｅｙ  Ｄａｔａ）方式でデータを受け取り、ＦＢＡ（Ｆｉｘｅｄ−Ｂｌｏｃｋ  Ａｒｃｈｉｔｅｃｔｕｒｅ）方式のデータに変換してディスクに書き込む。また、上位装置からデータの読み出しを要求された場合には、ストレージ装置は、ディスクからＦＢＡ方式のデータを読み出し、ＣＫＤ方式のデータに変換して、上位装置に送り出す。
【０００３】
関連する先行技術としては、例えば、ＦＢＡブロックの先頭に、該ＦＢＡブロックに含まれるレコードの番号と該レコード位置との対応関係を示すＩＤ部を持たせ、キャッシュメモリ上で指令されたレコードをＩＤ部情報を参照して検索するものがある。また、フォーマット情報部およびデータ部から構成されるレコードの処理単位を固定長データとするディスク制御システムにおいて、可変長フォーマットのディスク制御を実行する制御装置がある。また、読み出し要求を受け取ると、記憶装置から読み出されたデータの識別情報とトラックフォーマットテーブルに記録された読み出し元トラックのフォーマット情報の識別情報を比較し、両者が一致しなければ要求元にデータ異常を通知する技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平７−１４１１１７号公報
【特許文献２】特開平５−１７３７２０号公報
【特許文献３】特開２００６−２５２２３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術によれば、ＦＢＡ方式のトラック・フォーマットでは、上位装置から指定されるＣＫＤ方式のセクタ番号によるレコードの位置付けを行うことが難しい。
【０００６】
一つの側面では、本発明は、ＦＢＡ方式の記憶装置でＣＫＤ方式のセクタ番号による位置付けを効率的に行うことを目的とする。
【課題を解決するための手段】
【０００７】
１つの実施態様では、ＦＢＡ方式の記憶装置に対するアクセスを制御するストレージ制御装置であって、ＣＫＤ方式によって前記記憶装置にアクセスする上位装置からのトラック・フォーマットの変更を伴う書き込み要求に応じて、前記記憶装置のトラックのセクタ番号とブロック番号との対応関係を示す変換情報を参照して、前記書き込み要求で指定されるセクタ番号に対応するブロック番号を特定し、特定した前記ブロック番号から読み出されるレコードのフォーマット情報に基づいて、前記レコードの次のレコードの先頭ブロック番号と先頭セクタ番号とを算出し、算出した前記先頭セクタ番号への位置付けを行う際に指定されるセクタ番号を、算出した前記先頭ブロック番号と対応付けて前記変換情報に記憶し、算出した前記先頭ブロック番号から前記書き込み要求に応じたデータの書き込みを行って、算出した前記先頭セクタ番号を前記上位装置に通知する、ストレージ制御装置が提供される。
【発明の効果】
【０００８】
本発明の一側面によれば、ＦＢＡ方式の記憶装置でＣＫＤ方式のセクタ番号による位置付けを効率的に行うことができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施の形態にかかるストレージ制御装置１０１の一実施例を示す説明図である。
【図２Ａ】図２Ａは、ＣＫＤ方式のトラック・フォーマットの一例を示す説明図である。
【図２Ｂ】図２Ｂは、ＦＢＡ方式のトラック・フォーマットの一例を示す説明図である。
【図３】図３は、ストレージシステム３００のシステム構成例を示す説明図である。
【図４】図４は、ストレージ制御装置１０１のハードウェア構成例を示すブロック図である。
【図５】図５は、変換テーブル５００の記憶内容の一例を示す説明図である。
【図６】図６は、ＴＦＴ６００の記憶内容の一例を示す説明図である。
【図７】図７は、ストレージ制御装置１０１の機能的構成例を示すブロック図である。
【図８】図８は、変換テーブル５００の作成例を示す説明図である。
【図９】図９は、変換テーブル５００の更新例を示す説明図である。
【図１０】図１０は、変換テーブル５００の参照例を示す説明図である。
【図１１】図１１は、ストレージ制御装置１０１の制御処理手順の一例を示すフローチャートである。
【図１２】図１２は、位置付け処理の具体的処理手順の一例を示すフローチャートである。
【図１３】図１３は、キャッシュアロケーション処理の具体的処理手順の一例を示すフローチャートである。
【図１４】図１４は、検索処理の具体的処理手順の一例を示すフローチャートである。
【図１５】図１５は、書き込み処理の具体的処理手順の一例を示すフローチャートである。
【図１６】図１６は、読み出し処理の具体的処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に図面を参照して、本発明にかかるストレージ制御装置、および制御プログラムの実施の形態を詳細に説明する。
【００１１】
（実施の形態）
図１は、実施の形態にかかるストレージ制御装置１０１の一実施例を示す説明図である。図１において、ストレージ制御装置１０１は、上位装置１０２からのストレージ１０３に対するＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）要求を処理するコンピュータである。
【００１２】
上位装置１０２は、ＣＫＤ方式によってストレージ１０３にアクセスするコンピュータである。ＣＫＤ方式は、カウント、キー、データの順序でデータを書き込む方式であり、ブロックサイズは可変長である。上位装置１０２は、例えば、メインフレームコンピュータである。
【００１３】
ストレージ１０３は、ＦＢＡ方式でアクセスを行う記憶装置であり、データを記憶する１以上の記憶装置Ｄを含む。ＦＢＡ方式は、ブロックサイズが固定長の方式である。記憶装置Ｄは、例えば、ハードディスク、光ディスク、フラッシュメモリなどである。以下の説明では、記憶装置Ｄとして「ハードディスク」を例に挙げて説明する。
【００１４】
上位装置１０２からのデータの書き込み・読み出しの要求は、ＣＫＤコマンドとＣＫＤ−ＥＸ（ｅｘｔｅｎｄｅｄ）コマンドとの２体系の要求方法があり、例えば、表１，表２のようなコマンド列（ＣＣＷ：Ｃｈａｎｎｅｌ  Ｃｏｍｍａｎｄ  Ｗｏｒｄ）により実施される。
【００１５】
【表１】
2019036193.tif 000003
【００１６】
【表２】
2019036193.tif 000004
【００１７】
ＣＫＤコマンド体系においては、コマンド「Ｓｅｔ  Ｓｅｃｔｏｒ」で「トラック上のセクタ指定位置付け」を行う。また、ＣＫＤ−ＥＸコマンド体系においては、コマンド「Ｌｏｃａｔｅ  Ｒｅｃｏｒｄ」で「トラック上のセクタ指定位置付け」を行う。この「トラック上のセクタ指定位置付け」は、次に続く「レコードのカウント部検索実施」を短縮するために行われる。なお、ＣＫＤ−ＥＸコマンド体系のＬＲコマンドは、ＣＫＤコマンド体系のＳＫとＳＳとＳＣＨＩＤＥの機能をまとめたコマンドである。
【００１８】
ここで、図２Ａを用いて、ＣＫＤ方式のトラック・フォーマットについて説明する。なお、トラックとは、プラッタ上の論理的な同心環、すなわち、スピンドルを軸とするプラッタ上の同心円のことである。ここでは、３２バイトを１セルとして扱い、レコードはセル単位で格納される。
【００１９】
図２Ａは、ＣＫＤ方式のトラック・フォーマットの一例を示す説明図である。図２Ａにおいて、トラック・フォーマット２１０は、同心円状のトラックを直線状に展開して表したものである。ここで、ＩＮＤＥＸ（インデックス・マーク）は、トラックの論理的な起点を示す。Ｇ１（Ｇａｐ  １）は、ＩＮＤＥＸとＨＡを区切るものである。Ｇ１の長さは、５０４バイトである。
【００２０】
ＨＡ（ホーム・アドレス）は、各トラックの一番初めのデータ・ブロックであり、そのトラックの状態（正常、不良、交代の区別等）およびトラックの物理位置を示す。Ｇ２０（Ｇａｐ  ２０）は、ＨＡとＲ０のＣＯＵＮＴを区切る。Ｇ２０の長さは、２４８バイトである。
【００２１】
Ｒ０（レコード０）は、ＨＡに続く、最初のレコードであり、データを記録することもできるが、一般に、Ｒ１〜Ｒｎとは異なる性質を持つ。例えば、Ｒ０は、通常ＫＥＹ長はゼロ、すなわち、ＫＥＹを持っていない。また、Ｒ０のＤＡＴＡ長は、８バイトを標準とする。Ｒ０のＣＯＵＮＴ（カウント部）は、セル番号、物理アドレス、シリンダ番号、ヘッド番号、レコード番号、ＫＥＹ長、ＤＡＴＡ長などを含む。Ｒ０のＣＯＵＮＴの長さは、４０バイトである。Ｒ０のＧ２（Ｇａｐ  ２）は、Ｒ０のＣＯＵＮＴとＤＡＴＡとを区切る。Ｒ０のＧ２の長さは、２２４バイトである。Ｒ０のＤＡＴＡ（データ部）は、ＣＯＵＮＴに含まれるＤＡＴＡ長の長さのデータと、３２バイト単位に調整するフィルデータとからなる。Ｇ３（Ｇａｐ  ３）は、直前のレコードのＤＡＴＡとＲｎのＣＯＵＮＴとを区切る。Ｇ３の長さは、２１６バイトである。
【００２２】
Ｒｎ（レコードｎ）は、ユーザが実際に使用できるデータ・ブロックであり、レコードＲ０の後に記録される（ｎ＝１，２，…）。ＲｎのＣＯＵＮＴの内容は、Ｒ０のＣＯＵＮＴと同様である。Ｇ２（Ｇａｐ  ２）は、ＲｎのＣＯＵＮＴとＫＥＹとを区切る。ＲｎのＧ２の長さは、２２４バイトである。ＲｎのＫＥＹ（キー部）は、ＲｎのＣＯＵＮＴに含まれるＫＥＹ長で、１〜２５５バイトが指定されている場合のみ存在する。ＫＥＹ長が０の場合、ＲｎのＫＥＹは、ＫＥＹの前のＧ２とともに存在しない。ＲｎのＫＥＹは、後に続くＤＡＴＡの論理的な識別情報を示すＫＥＹ長の長さのデータと、３２バイト単位に調整するフィルデータとからなる。Ｇ２（Ｇａｐ  ２）は、ＲｎのＫＥＹとＤＡＴＡを区切る。ＲｎのＧ２の長さは、２２４バイトである。ＲｎのＤＡＴＡ（データ部）は、ＣＯＵＮＴに含まれるＤＡＴＡ長の長さのデータと、３２バイト単位に調整するフィルデータとからなる。
【００２３】
つぎに、図２Ｂを用いて、ＦＢＡ方式のトラック・フォーマットについて説明する。ここでは、２５６バイトを１ブロックとして扱い、レコードはブロック単位で格納される。
【００２４】
図２Ｂは、ＦＢＡ方式のトラック・フォーマットの一例を示す説明図である。図２Ｂにおいて、トラック・フォーマット２２０は、同心円状のトラックを直線状に展開して表したものである。Ｒ０のＣ，Ｄおよび各ＲｎのＣ，Ｋ，Ｄは、図２Ａに示したＲ０のＣＯＵＮＴ，ＤＡＴＡおよび各ＲｎのＣＯＵＮＴ，ＫＥＹ，ＤＡＴＥに対応する。
【００２５】
ここで、Ｒ０（レコード０）のＤＡＴＡ長が８バイト、Ｒ１（レコード１）以降のＫＥＹ長が１００バイト、ＤＡＴＡ長が２００バイトの等長レコードのトラック・フォーマットを想定する。
【００２６】
この場合、ＣＫＤ方式での各レコードの所要長は、例えば、下記式（１）および（２）を用いて表すことができる。ただし、Ｒ０所要長は、Ｒ０（レコードＲ０）の先頭から次のレコードまでの長さである。Ｒ１以降の所要長は、Ｒｎ（レコードＲｎ）の先頭から次のレコードまでの長さである。（）内の小数点は切り上げる。（）内の分子の１２は、ＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）コードに相当する。
【００２７】
【数１】
2019036193.tif 000005
【００２８】
【数２】
2019036193.tif 000006
【００２９】
また、ＦＢＡ方式での各レコードの所要長は、例えば、下記式（３）および（４）を用いて表すことができる。ただし、キャッシュメモリにおけるアクセス単位を６４バイトとする。（）内の小数点は切り上げる。（）内の分子の８は、ＣＲＣコードに相当する。
【００３０】
【数３】
2019036193.tif 000007
【００３１】
【数４】
2019036193.tif 000008
【００３２】
ＣＫＤ方式では、７セル（２２４バイト）を１セクタとして扱い、セクタ番号（セクタ値）によって各レコードに位置付けすることができる。したがって、図２Ａに示したトラック・フォーマット２１０の場合、例えば、Ｒ０のセクタ番号は３、Ｒ１のセクタ番号は５、Ｒ２のセクタ番号は１０となる。このため、例えば、トラック・フォーマット２１０で書き込み／読み込みしたいレコードがＲ２の場合、セクタ番号５〜９で位置付けると、Ｒ２の手前に位置付けることができ、レコードの検索が効率的に行える。
【００３３】
一方、ＦＢＡ方式のブロック番号（ブロック値）で考えると、例えば、Ｒ０のブロック番号は１、Ｒ１のブロック番号は２、Ｒ２のブロック番号は４となる。すなわち、Ｒ０のセクタ番号「３」に対応するブロック番号は「１」であり、Ｒ１のセクタ番号「５」に対応するブロック番号は「２」であり、Ｒ２のセクタ番号「１０」に対応するブロック番号は「４」である。
【００３４】
このため、Ｒ０のＤＡＴＡ長を８、ＲｎのＫＥＹ長を１００、ＲｎのＤＡＴＡ長を２００とすると、セクタ番号とブロック番号との相関を近似式で表すと、「ｙ＝０．１０２７ｘ＋１．１４４６」となる。しかし、ＲｎのＫＥＹ長を０にすると、相関の近似式は、「ｙ＝０．６３３９ｘ＋１．１７３６」となり、先程の近似式とは一致しない。すなわち、等長レコードでなければ、セクタ番号とブロック番号との変換には法則がなく、ＦＢＡ方式のトラック・フォーマットでは、近似式を用いたセクタ番号によるレコードの位置付けはできない。
【００３５】
ところが、ストレージ装置において、セクタ番号をブロック番号に変換できなければ、セクタ番号による位置付けを行うことができず、トラックの先頭から、書き込み／読み込みしたいレコードの検索を行って位置付けるため非効率である。例えば、Ｒ２（レコード２）を検索する場合、セクタ番号をブロック番号に変換できなければ、ストレージ装置は、処理開始レコード位置をＲ０に設定して、Ｒ０のカウント部を読み出し、カウント部に含まれるレコード番号「Ｒ０」がＲ２であるか否かを判定する。
【００３６】
ここで、Ｒ２ではない場合、ストレージ装置は、Ｒ０のカウント部に含まれるＫＥＹ長（ＫＬ）、ＤＡＴＡ長（ＤＬ）から、ＦＢＡ形式のＲ０のレコード長（所要長）を算出する。上記式（３）によれば、Ｒ０の所要長は、１２８（＝６４（Ｃ）＋０（Ｋ）＋（（（８＋８）÷６４※）×６４）（Ｄ）＝６４＋０＋６４）となる。このため、Ｒ０のブロック長は、２５６（＝（１２８÷２５６※）×２５６）となる。
【００３７】
なお、※は、小数点を切り上げることを表す。また、ＦＢＡ方式のトラック・フォーマットでは、２５６バイトでブロックを丸め込むこととする。
【００３８】
つぎに、ストレージ装置は、算出したＲ０の所要長から、次のレコードであるＲ１の先頭ブロック番号を算出する。Ｒ１の先頭ブロック番号は、２（＝Ｒ０の先頭ブロック番号＋（Ｒ０のブロック長÷２５６）＝１＋（２５６÷２５６）＝１＋１）となる。そして、ストレージ装置は、算出したＲ１の先頭ブロック番号「２」から、Ｒ１のカウント部を読み出し、カウント部に含まれるレコード番号「Ｒ１」がＲ２であるか否かを判定する。
【００３９】
ここで、Ｒ２ではない場合、ストレージ装置は、レコード番号「Ｒ２」が読み出せるまで、Ｒ０のときと同様の処理を繰り返すことになり、セクタ番号による位置付けを行う場合に比べて検索効率が悪い。書き込み／読み込みしたいレコードの検索に時間がかかると、Ｉ／Ｏ要求の処理時間が増加し、Ｉ／Ｏレスポンスが悪化するおそれがある。
【００４０】
そこで、本実施の形態では、ＦＢＡ方式のストレージＳＴにアクセスするストレージ制御装置１０１において、ＣＫＤ方式のセクタ番号による効率的な位置付けを可能にする制御方法について説明する。以下、ストレージ制御装置１０１の処理例について説明する。
【００４１】
（１）ストレージ制御装置１０１は、上位装置１０２からのトラック・フォーマットの変更を伴う書き込み要求に応じて、変換情報１１０を参照して、書き込み要求で指定されるセクタ番号に対応するブロック番号を特定する。ここで、変換情報１１０は、ストレージＳＴ内の記憶装置Ｄのトラックのセクタ番号とブロック番号との対応関係を示す情報である。
【００４２】
変換情報１１０は、指定されたセクタ番号でレコードの位置付けを行った場合に、位置付けされたレコードのブロック番号を取り出せるものとなっている。ただし、初期状態では、変換情報１１０には、Ｒ０（例えば、図２Ｂ参照）への位置付けを行うための情報のみが示され、セクタ番号「３」以降は対象レコードなしを意味する「−」が格納される。
【００４３】
トラック・フォーマットの変更を伴う書き込み要求とは、レコードの追加・削除といったトラック上のフォーマットが変更される書き込み要求である。トラック・フォーマットの変更を伴う書き込み要求では、例えば、最後に追加されたレコードに位置付けするためのセクタ番号が指定される。ただし、初期状態では、Ｒ０のみが保持された状態のため、Ｒ０に位置付けするためのセクタ番号が指定される。
【００４４】
図１の例では、上位装置１０２から、あるトラック＃のセクタ番号「２」を指定した書き込み要求１２０（ＣＣＷ）を受け付けた場合を想定する。この場合、ストレージ制御装置１０１は、変換情報１１０を参照して、書き込み要求１２０で指定されるセクタ番号「２」に対応するブロック番号「１」を特定する。
【００４５】
（２）ストレージ制御装置１０１は、特定したブロック番号から読み出されるレコードＲのフォーマット情報に基づいて、レコードＲの次のレコードＲの先頭ブロック番号と先頭セクタ番号とを算出する。ここで、フォーマット情報とは、例えば、レコードＲのＫＥＹ長、ＤＡＴＡ長などを含むカウント部の情報である。
【００４６】
図１の例では、ストレージ制御装置１０１は、メモリ（例えば、後述の図４に示すキャッシュメモリ４０５）上に展開したトラック＃の、特定したブロック番号「１」の位置からカウント部情報１３０を読み出す。カウント部情報１３０には、レコードＲ０のＫＥＹ長、ＤＡＴＡ長が含まれる。この場合、ストレージ制御装置１０１は、例えば、カウント部情報１３０に含まれるレコードＲ０のＫＥＹ長、ＤＡＴＡ長に基づいて、ＦＢＡ方式によるレコードＲ０の第１のレコード長を算出する。そして、ストレージ制御装置１０１は、算出した第１のレコード長とレコードＲの先頭ブロック番号とに基づいて、レコードＲ０の次のレコードＲ１の先頭ブロック番号を算出する。ここでは、次のレコードＲ１の先頭ブロック番号「２」が算出された場合を想定する。
【００４７】
また、ストレージ制御装置１０１は、例えば、カウント部情報１３０に含まれるレコードＲ０のＫＥＹ長、ＤＡＴＡ長に基づいて、ＣＫＤ方式によるレコードＲ０の第２のレコード長を算出する。そして、ストレージ制御装置１０１は、算出した第２のレコード長とレコードＲの先頭セクタ番号とに基づいて、次のレコードＲ１の先頭セクタ番号を算出する。ここでは、次のレコードＲ１の先頭セクタ番号「５」が算出された場合を想定する。
【００４８】
（３）ストレージ制御装置１０１は、算出した次のレコードＲの先頭セクタ番号への位置付けを行う際に指定されるセクタ番号を、算出した次のレコードＲの先頭ブロック番号と対応付けて変換情報１１０に記憶する。ここで、あるレコードＲに位置付けする場合、コマンド「Ｓｅｔ  Ｓｅｃｔｏｒ」の仕様上、そのレコードＲよりも前のセクタ番号を指定することになる。
【００４９】
このため、ストレージ制御装置１０１は、書き込み要求で指定されるセクタ番号の次のセクタ番号から、次のレコードＲの先頭セクタ番号の一つ前のセクタ番号までの少なくともいずれかのセクタ番号を、算出された次のレコードＲの先頭ブロック番号と対応付けて変換情報１１０に記憶する。図１の例では、次のレコードＲ１の先頭セクタ番号「５」への位置付けを行う際に指定されるセクタ番号「３，４」が、次のレコードＲの先頭ブロック番号「２」と対応付けられている。
【００５０】
（４）ストレージ制御装置１０１は、算出した次のレコードＲの先頭ブロック番号から書き込み要求に応じたデータの書き込みを行って、算出した次のレコードＲの先頭セクタ番号を上位装置１０２に通知する。図１の例では、ストレージ制御装置１０１は、次のレコードＲ１の先頭ブロック番号「２」から書き込み要求１２０に応じたデータの書き込みを行って、次のレコードＲ１の先頭セクタ番号「５」を上位装置１０２に通知する。
【００５１】
このように、ストレージ制御装置１０１によれば、上位装置１０２からのトラック・フォーマットの変更を伴う書き込み要求に応じて、新たに追加されるレコードＲに位置付けする際に指定されるセクタ番号を、当該レコードＲの先頭ブロックと対応付けて変換情報１１０に記憶することができる。また、ストレージ制御装置１０１によれば、算出した次のレコードＲの先頭ブロック番号から、書き込み要求で指定されるデータの書き込みを行って、次のレコードＲの先頭セクタ番号を上位装置１０２に通知することができる。これにより、以降において、上位装置１０２は、ストレージ制御装置１０１から通知されたセクタ番号をもとに、新たに追加したレコードＲに一発位置付けすることが可能となる。
【００５２】
（ストレージシステム３００のシステム構成例）
つぎに、図１に示したストレージ制御装置１０１をストレージシステム３００に適用した場合について説明する。
【００５３】
図３は、ストレージシステム３００のシステム構成例を示す説明図である。図３において、ストレージシステム３００は、ストレージ装置３０１と、メインフレーム３０２と、を含む。ストレージシステム３００において、ストレージ装置３０１およびメインフレーム３０２は、ＦＣ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）やｉＳＣＳＩ（Ｉｎｔｅｒｎｅｔ  Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）で相互に通信可能に接続される。具体的には、例えば、ストレージ装置３０１の不図示のＣＡ（Ｃｈａｎｎｅｌ  Ａｄａｐｔｅｒ）と、メインフレーム３０２の不図示のＣＨ（Ｃｈａｎｎｅｌ）とがそれぞれ接続される。
【００５４】
ここで、ストレージ装置３０１は、ストレージ制御装置１０１とストレージＳＴとを含む。ストレージＳＴは、複数のＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）を含む。図１に示したストレージ１０３は、例えば、ストレージＳＴに対応する。ストレージ制御装置１０１は、メインフレーム３０２からのストレージＳＴに対するＩ／Ｏ要求を処理する。ストレージ制御装置１０１は、例えば、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）コントローラやディスクコントローラなどである。
【００５５】
Ｉ／Ｏ要求は、ボリュームに対する書き込み要求または読み出し要求である。ボリュームは、メインフレーム３０２に提供される論理ボリューム（仮想ボリューム）である。ストレージＳＴは、ボリュームに割り当てる物理記憶領域を有する。ストレージ制御装置１０１は、ＦＢＡ方式によってストレージＳＴに対するアクセスを行う。
【００５６】
なお、図示は省略するが、ストレージ制御装置１０１は、構成情報や割当情報を有する。構成情報は、例えば、装置内に作成されたボリュームや、ＲＡＩＤを構成するディスクについての種々の管理情報を含む。割当情報は、例えば、シン・プロビジョニング構成における割り当て単位（チャンク）ごとの情報や、割り当て済みのチャンクに対する論理アドレスと物理アドレスの対応情報を含む。
【００５７】
メインフレーム３０２は、ストレージシステム３００により提供される論理ボリュームに対するデータの書き込みまたは読み出しを要求するコンピュータである。メインフレーム３０２は、ＣＫＤ方式によってストレージＳＴに対するアクセスを行う。例えば、メインフレーム３０２は、銀行や官公庁の基幹業務を行う大型コンピュータである。図１に示した上位装置１０２は、例えば、メインフレーム３０２に相当する。
【００５８】
なお、図３の例では、ストレージ制御装置１０１およびメインフレーム３０２をそれぞれ１台のみ表記したが、ストレージシステム３００に複数のストレージ制御装置１０１やメインフレーム３０２が含まれることにしてもよい。
【００５９】
（ストレージ制御装置１０１のハードウェア構成例）
図４は、ストレージ制御装置１０１のハードウェア構成例を示すブロック図である。図４において、ストレージ制御装置１０１は、プロセッサの一例であるＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）４０１と、メモリ４０２と、通信Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）４０３と、Ｉ／Ｏコントローラ４０４と、を有する。また、各構成部は、バス４００によってそれぞれ接続される。
【００６０】
ここで、ＣＰＵ４０１は、ストレージ制御装置１０１の全体の制御を司る。メモリ４０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびフラッシュＲＯＭなどを有する。具体的には、例えば、フラッシュＲＯＭやＲＯＭが各種プログラムを記憶し、ＲＡＭがＣＰＵ４０１のワークエリアとして使用される。メモリ４０２に記憶されるプログラムは、ＣＰＵ４０１にロードされることで、コーディングされている処理をＣＰＵ４０１に実行させる。また、ＲＡＭには、キャッシュメモリ４０５が含まれる。キャッシュメモリ４０５には、例えば、メインフレーム３０２から要求されるＩ／Ｏのデータや、後述の図５に示すような変換テーブル５００が一時的に格納される。
【００６１】
通信Ｉ／Ｆ４０３は、通信回線を通じてネットワークに接続され、ネットワークを介して外部装置（例えば、図３に示したメインフレーム３０２）に接続される。そして、通信Ｉ／Ｆ４０３は、ネットワークと装置内部とのインターフェースを司り、外部装置からのデータの入出力を制御する。通信Ｉ／Ｆ４０３は、例えば、ＣＡを含む。Ｉ／Ｏコントローラ４０４は、ＣＰＵ４０１の制御にしたがって、ストレージＳＴ（図３参照）に対するアクセスを行う。
【００６２】
なお、メインフレーム３０２についても、ストレージ制御装置１０１と同様のハードウェア構成により実現することができる。
【００６３】
（変換テーブル５００の記憶内容）
つぎに、ストレージ制御装置１０１が用いる変換テーブル５００の記憶内容について説明する。変換テーブル５００は、例えば、ストレージＳＴ内のＨＤＤのトラックＴＲごとに設けられ、トラックＴＲのシリンダ番号およびヘッド番号と対応付けて管理される。変換テーブル５００は、例えば、図４に示したストレージ制御装置１０１のメモリ４０２のキャッシュメモリ４０５に記憶される。
【００６４】
図５は、変換テーブル５００の記憶内容の一例を示す説明図である。図５において、変換テーブル５００は、トラック・フォーマットに応じて、セクタ番号とブロック番号とを対応付けて記憶する。セクタ番号は、トラックＴＲ上のセクタを指定する値である。ブロック番号は、トラックＴＲ上のブロックを指定する値である。
【００６５】
変換テーブル５００は、セクタ番号「０〜２２１」をオフセットとして使用し、指定されたセクタ番号でレコードの位置付けを行った場合、位置付けされたレコードのブロック番号を取り出せるものとなっている。ただし、Ｓｅｔ  Ｓｅｃｔｏｒのコマンドの仕様上、位置付けを実施するレコードよりも前のセクタを指定することで、目的のレコードに位置付けする。
【００６６】
例えば、Ｒ２に位置付けたい場合、セクタ番号は５〜９のいずれかを指定する。なお、Ｒ＃は、レコード番号「Ｒ＃」のレコードを表す。セクタ番号「１０」を指定しないのは、セクタ１０にはＲ２のカウント部の先頭が載っており、先頭位置を行き過ぎたと判断されて、Ｒ３に位置付けられるためである。セクタ番号の最大２２１は、トラック長（４９７２８）とセクタ長（２２４）から導き出された値であり、２２２セクタ（４９７２８÷２２４＝２２２セクタ）以上のテーブルの保持が不要のためである。
【００６７】
指定されたセクタ番号に対応するブロック番号が、トラックＴＲ上のレコードの先頭位置を示しており、カウント部のデータの読み出しが可能になる。トラックＴＲ上のレコードは、運用するソフトウェアごとにフォーマット（データ長）やレコード数が可変である。このため、変換テーブル５００は、トラックＴＲごとに保持・管理される。
【００６８】
なお、図５中、レコード番号は、説明の都合上表記したものであり、実際のテーブルには格納されない情報である。レコード番号は、ブロック番号をもとに、実際のレコードのカウント部を読み出したときにカウント情報から取得される。
【００６９】
（ＴＦＴ６００の記憶内容）
つぎに、ストレージ制御装置１０１が用いるＴＦＴ（Ｔｒａｃｋ  Ｆｏｒｍａｔ  Ｔａｂｌｅ）６００の記憶内容について説明する。ＴＦＴ６００は、例えば、図４に示したストレージ制御装置１０１のメモリ４０２に記憶される。
【００７０】
図６は、ＴＦＴ６００の記憶内容の一例を示す説明図である。図６において、ＴＦＴ６００は、ＣＣＨ、フォーマットフラグ、データ長、先頭レコード番号およびレコード数のフィールドを有する。各フィールドに情報を設定することで、トラックＴＲごとのＴＦ情報（例えば、ＴＦ情報６００−１，６００−２）がレコードとして記憶される。
【００７１】
ここで、ＣＣＨは、トラックＴＲのシリンダ番号およびヘッド番号である。フォーマットフラグは、トラックＴＲがスタンダード・トラック（ＳＴＤ）であるか、ノン・スタンダード・トラック（Ｎｏｎ−ＳＴＤ）であるかを示す。スタンダード・トラック（ＳＴＤ）は、以下の条件（ｉ）、（ｉｉ）を満たすトラックＴＲの呼称である。ノン・スタンダード・トラック（Ｎｏｎ−ＳＴＤ）は、以下の条件（ｉ）、（ｉｉ）を満たさないトラックＴＲの呼称である。
【００７２】
（ｉ）Ｒ０のＫＥＹ長＝０、ＤＡＴＡ長＝８
（ｉｉ）Ｒ１以降の全レコードのＫＥＹ長＝０、ＤＡＴＡ長＝等長
【００７３】
データ長は、トラックＴＲ上に書き込まれている全データの長さである。先頭レコード番号は、トラックＴＲ上に書き込まれている先頭のレコードＲのレコード番号である。レコード数は、トラックＴＲ上に書き込まれているレコードＲの数である。ＦＦ、ＦＦＦＦは、無効な場合の値である。ノン・スタンダード・トラック（Ｎｏｎ−ＳＴＤ）の場合、データ長、先頭レコード番号およびレコード数は無効となる。
【００７４】
（ストレージ制御装置１０１の機能的構成例）
図７は、ストレージ制御装置１０１の機能的構成例を示すブロック図である。図７において、ストレージ制御装置１０１は、作成部７０１と、受付部７０２と、特定部７０３と、算出部７０４と、アクセス制御部７０５と、を含む。作成部７０１〜アクセス制御部７０５は制御部となる機能であり、具体的には、例えば、図４に示したメモリ４０２に記憶されたプログラムをＣＰＵ４０１に実行させることにより、または、通信Ｉ／Ｆ４０３、Ｉ／Ｏコントローラ４０４により、その機能を実現する。各機能部の処理結果は、例えば、メモリ４０２に記憶される。
【００７５】
作成部７０１は、トラックＴＲのセクタ番号とブロック番号との対応関係を示す変換情報を作成する。変換情報は、例えば、図５に示したような変換テーブル５００である。変換テーブル５００は、例えば、ストレージ装置３０１からメインフレーム３０２に提供される論理ボリュームの初期化フォーマット処理を実施する際にトラックＴＲごとに作成（初期化）される。
【００７６】
ただし、初期状態（初期化時）では、変換テーブル５００には、Ｒ０への位置付けを行うための情報のみが格納される。変換テーブル５００は、例えば、トラックＴＲの先頭ブロック（先頭２５６バイト）または最終ブロックに格納される。なお、変換テーブル５００の作成例（初期化）については、図８を用いて後述する。
【００７７】
受付部７０２は、メインフレーム３０２からのトラック・フォーマットの変更を伴う書き込み要求を受け付ける。ここで、メインフレーム３０２からの書き込み要求は、アクセス対象のトラックＴＲ、トラックＴＲ上の位置付けするセクタ、および検索対象のレコードＲを指定するＣＫＤ方式の書き込み要求である。また、トラック・フォーマットの変更を伴う書き込み要求とは、トラックＴＲ上のフォーマットが変更されるライトコマンドを含む書き込み要求であり、レコードＲの追加・削除を伴う書き込み要求である。
【００７８】
ライトコマンドには、フォーマットライトコマンドとアップデートライトコマンドとがある。フォーマットライトコマンドは、トラックＴＲ上のレコードＲのＫＥＹ長とＤＡＴＡ長とを指定してデータの書き込みを行うコマンドであり、トラックＴＲ上のフォーマットが変更されるコマンドである。
【００７９】
アップデートライトコマンドは、既存のレコードＲのキー部（ＫＥＹ）とデータ部（ＤＡＴＡ）の中身の変更を行うコマンドであり、トラックＴＲ上のフォーマットが変更されないコマンドである。すなわち、トラック・フォーマットの変更を伴う書き込み要求は、フォーマットライトコマンドを含む書き込み要求である。一方、トラック・フォーマットの変更を伴わない書き込み要求は、アップデートライトコマンドを含む書き込み要求である。
【００８０】
フォーマットライトコマンドのコマンドコードは、例えば、Ｗｒｉｔｅ  ＣＫＤやＷｒｉｔｅ  ＣＫＤ  Ｎｅｘｔ  Ｔｒａｃｋである。アップデートライトコマンドのコマンドコードは、例えば、Ｗｒｉｔｅ  Ｄａｔａ、Ｗｒｉｔｅ  ＫＤ、Ｗｒｉｔｅ  Ｕｐｄａｔｅ  Ｄａｔａ、Ｗｒｉｔｅ  Ｕｐｄａｔｅ  ＫＤである。
【００８１】
以下の説明では、トラック・フォーマットの変更を伴う書き込み要求、すなわち、フォーマットライトコマンドを含む書き込み要求を、「書き込み要求（ＦＣ）」と表記する場合がある。また、トラック・フォーマットの変更を伴わない書き込み要求、すなわち、アップデートライトコマンドを含む書き込み要求を、「書き込み要求（ＵＣ）」と表記する場合がある。
【００８２】
メインフレーム３０２からの書き込み要求は、例えば、図１で説明した表１，表２のようなコマンド列（ＣＣＷ）により実施される。具体的には、例えば、受付部７０２は、メインフレーム３０２から、書き込み要求（ＦＣ）として、表３のようなコマンド列（ＣＣＷ）を順次受け付ける。
【００８３】
【表３】
2019036193.tif 000009
【００８４】
ＳＦＭコマンドは、動作モードを指定するコマンドである。ＳＫコマンドは、アクセス対象のトラックＴＲのシリンダ番号、ヘッド番号を指定するコマンドである。ＳＳコマンドは、トラックＴＲ上の位置付けするセクタのセクタ番号を指定するコマンドである。ＳＣＨＩＤＥコマンドは、検索対象のレコードＲのレコード番号を指定するコマンドである。ＷＣＫＤコマンドは、書込データを指定するコマンドである。ＲＳコマンドは、直前に処理したレコードＲの先頭セクタ番号を取得するコマンドである。
【００８５】
特定部７０３は、メインフレーム３０２からの書き込み要求（ＦＣ）に応じて、作成された変換情報を参照して、書き込み要求（ＦＣ）で指定されるセクタ番号に対応するブロック番号を特定する。具体的には、例えば、特定部７０３は、変換テーブル５００を参照して、メインフレーム３０２からのＳＳコマンドにより指定されるセクタ番号に対応するブロック番号を特定する。
【００８６】
算出部７０４は、特定されたブロック番号から読み出されるレコードＲのフォーマット情報に基づいて、当該レコードＲの次のレコードＲの先頭ブロック番号と先頭セクタ番号とを算出する。ここで、レコードＲのフォーマット情報は、レコードＲのＫＥＹ長、ＤＡＴＡ長を含む情報であり、例えば、レコードＲのカウント部の情報である。次のレコードＲは、新たに追加する書込対象のレコードＲである。
【００８７】
具体的には、例えば、算出部７０４は、特定されたブロック番号をもとに、キャッシュメモリ４０５上のトラックＴＲのトラックデータから、レコードＲのカウント部の情報を読み出す。つぎに、算出部７０４は、読み出したレコードＲのカウント部の情報に基づいて、レコードＲの所要長（ＦＢＡ）と所要長（ＣＫＤ）とを算出する。
【００８８】
ここで、所要長（ＦＢＡ）は、ＦＢＡ方式によるレコードＲのレコード長である。所要長（ＣＫＤ）は、ＣＫＤ方式によるレコードＲのレコード長である。そして、算出部７０４は、算出した所要長（ＦＢＡ）とレコードＲの先頭ブロック番号とに基づいて、次のレコードＲの先頭ブロック番号を算出する。また、算出部７０４は、算出した所要長（ＣＫＤ）とレコードＲの先頭セクタ番号とに基づいて、次のレコードＲの先頭セクタ番号を算出する。
【００８９】
なお、次のレコードＲ（書込対象のレコードＲ）の先頭ブロック番号と先頭セクタ番号とを算出する具体的な処理内容については、図９を用いて後述する。
【００９０】
作成部７０１は、算出された次のレコードＲの先頭セクタ番号への位置付けを行う際に指定されるセクタ番号を、算出された次のレコードＲの先頭ブロック番号と対応付けて変換情報に記憶する。ここで、あるレコードＲに位置付けする場合、ＳＳコマンドの仕様上、そのレコードＲよりも前のセクタを指定することになる。
【００９１】
このため、作成部７０１は、例えば、書き込み要求（ＦＣ）で指定されるセクタ番号の次のセクタ番号から先頭セクタ番号の一つ前のセクタ番号までのセクタ番号を、算出された次のレコードＲの先頭ブロック番号と対応付けて変換テーブル５００に記憶する。これにより、メインフレーム３０２からの書き込み要求（ＦＣ）に応じて変換テーブル５００を更新することができる。
【００９２】
なお、変換テーブル５００の更新例については、図９を用いて後述する。
【００９３】
アクセス制御部７０５は、算出された次のレコードＲの先頭ブロック番号から、書き込み要求（ＦＣ）に応じたデータの書き込みを行う。具体的には、例えば、アクセス制御部７０５は、キャッシュメモリ４０５上のトラックＴＲのトラックデータの該当ブロック（次のレコードＲの先頭ブロック番号の位置）から、次のレコードＲを書き込む。次のレコードＲは、カウント部（ＣＯＵＮＴ）とキー部（ＫＥＹ）とデータ部（ＤＡＴＡ）とを含む。キー部（ＫＥＹ）とデータ部（ＤＡＴＡ）は、ＷＣＫＤコマンドによって指定される。
【００９４】
なお、ストレージＳＴ内のＨＤＤのトラックＴＲへの次のレコードＲの書き込みは、例えば、キャッシュメモリ４０５上から次のレコードＲが追い出される際に実施される。
【００９５】
また、アクセス制御部７０５は、算出された次のレコードＲの先頭セクタ番号をメインフレーム３０２に通知する。具体的には、例えば、アクセス制御部７０５は、メインフレーム３０２からのＲＳコマンドに対する応答として、直前に処理したレコードＲの先頭セクタ番号を通知する。
【００９６】
これにより、以降において、メインフレーム３０２は、書き込み要求（ＦＣ）によって新たに追加したレコードＲの先頭セクタ番号をもとに、トラックＴＲ上の当該レコードＲへの位置付けを行うことができる。
【００９７】
また、受付部７０２は、メインフレーム３０２からの読み出し要求を受け付ける。ここで、読み出し要求は、レコードＲの読み出し要求である。メインフレーム３０２からの読み出し要求は、アクセス対象のトラックＴＲ、トラックＴＲ上の位置付けするセクタ、および検索対象のレコードＲを指定するＣＫＤ方式の読み出し要求である。メインフレーム３０２からの読み出し要求は、例えば、図１で説明した表１，表２のようなコマンド列（ＣＣＷ）により実施される。
【００９８】
特定部７０３は、メインフレーム３０２からの読み出し要求に応じて、変換情報を参照して、読み出し要求で指定されるセクタ番号に対応するブロック番号を特定する。具体的には、例えば、特定部７０３は、変換テーブル５００を参照して、メインフレーム３０２からのＳＳコマンドにより指定されるセクタ番号に対応するブロック番号を特定する。
【００９９】
アクセス制御部７０５は、特定されたブロック番号から、読み出し要求で指定されるレコードＲの読み出しを行う。具体的には、例えば、アクセス制御部７０５は、キャッシュメモリ４０５上のトラックＴＲのトラックデータの該当ブロック（レコードＲの先頭ブロック番号の位置）から、レコードＲの読み出しを行う。そして、アクセス制御部７０５は、読み出したレコードＲのレコードデータをメインフレーム３０２に送信する。
【０１００】
また、受付部７０２は、メインフレーム３０２からのトラック・フォーマットの変更を伴わない書き込み要求、すなわち、書き込み要求（ＵＣ）を受け付ける。上述したように、書き込み要求（ＵＣ）は、トラックＴＲ上のフォーマットが変更されない書き込み要求であり、既存のレコードＲを更新する書き込み要求である。
【０１０１】
なお、フォーマットライトコマンドとアップデートライトコマンドは、コマンドコードから判別可能である。
【０１０２】
特定部７０３は、メインフレーム３０２からの書き込み要求（ＵＣ）に応じて、変換情報を参照して、書き込み要求（ＵＣ）で指定されるセクタ番号に対応するブロック番号を特定する。具体的には、例えば、特定部７０３は、変換テーブル５００を参照して、メインフレーム３０２からのＳＳコマンドにより指定されるセクタ番号に対応するブロック番号を特定する。
【０１０３】
アクセス制御部７０５は、特定されたブロック番号から、書き込み要求（ＵＣ）に応じたデータの書き込みを行う。具体的には、例えば、アクセス制御部７０５は、キャッシュメモリ４０５上のトラックＴＲのトラックデータの該当ブロック（既存のレコードＲの先頭ブロック番号の位置）から、レコードＲの書き込みを行う。
【０１０４】
レコードＲは、カウント部（ＣＯＵＮＴ）とキー部（ＫＥＹ）とデータ部（ＤＡＴＡ）とを含む。キー部（ＫＥＹ）とデータ部（ＤＡＴＡ）は、アップデートライトコマンド（例えば、ＷＤコマンド）によって指定される。なお、ストレージＳＴ内のＨＤＤのトラックＴＲへのレコードＲの書き込みは、例えば、キャッシュメモリ４０５上からレコードＲが追い出される際に実施される。
【０１０５】
これにより、メインフレーム３０２からのセクタ番号を指定した書き込み要求（ＵＣ）に応じて、既存のレコードＲを更新することができる。なお、既存のレコードＲを更新する際の処理例については、図１０を用いて後述する。
【０１０６】
また、作成部７０１は、トラックＴＲのＴＦ（トラック・フォーマット）情報を作成する。ここで、ＴＦ情報は、トラックＴＲのフォーマットフラグ、データ長、先頭レコード番号およびレコード数を含む（例えば、図６参照）。
【０１０７】
具体的には、例えば、作成部７０１は、トラックＴＲに対する書き込み要求（ＦＣ）が実行されたことに応じて、トラックＴＲのＴＦ情報が未作成であれば、トラックＴＲのＴＦ情報を作成し、図６に示したようなＴＦＴ６００に記憶する。また、作成部７０１は、トラックＴＲに対する書き込み要求（ＦＣ）が実行されたことに応じて、ＴＦＴ６００内のトラックＴＲのＴＦ情報を更新する。
【０１０８】
より詳細に説明すると、ＴＦ情報のフォーマットフラグは、トラックＴＲが、上述した条件（ｉ）、（ｉｉ）を満たしている間は「ＳＴＤ」となり、条件（ｉ）、（ｉｉ）を満たさなくなった時点で「Ｎｏｎ−ＳＴＤ」となる。また、ＴＦ情報のデータ長、先頭レコード番号およびレコード数は、トラックＴＲが、上述した条件（ｉ）、（ｉｉ）を満たしている間は逐次更新され、条件（ｉ）、（ｉｉ）を満たさなくなった時点で無効（ＦＦ、ＦＦＦＦ）となる。
【０１０９】
また、特定部７０３は、メインフレーム３０２からの書き込み要求（ＦＣまたはＵＣ）に応じて、トラックＴＲのＴＦ情報に基づいて、トラックＴＲが等長レコードのフォーマットであるか否かを判定することにしてもよい。具体的には、例えば、特定部７０３は、ＴＦＴ６００内のトラックＴＲのフォーマットフラグを参照して、トラックＴＲが等長レコードのフォーマットであるか否かを判定する。
【０１１０】
より詳細に説明すると、特定部７０３は、トラックＴＲのフォーマットフラグが「ＳＴＤ」の場合、トラックＴＲが等長レコードのフォーマットであると判定する。一方、特定部７０３は、トラックＴＲのフォーマットフラグが「Ｎｏｎ−ＳＴＤ」の場合、トラックＴＲが等長レコードのフォーマットではないと判定する。
【０１１１】
ここで、データの書き込み・読み出しの処理方法としては、通常トラックアクセスと、高速化トラックアクセスとがある。ストレージ制御装置１０１は、通常トラックアクセスおよび高速化トラックアクセスのいずれの処理方法も採用することができる。
【０１１２】
通常トラックアクセスでは、ストレージ制御装置１０１は、例えば、メインフレーム３０２からのトラックＴＲへの書き込み要求に応じて、要求のあったトラックデータを、ストレージＳＴからキャッシュメモリ４０５上に読み込む。そして、ストレージ制御装置１０１は、キャッシュメモリ４０５上に読み込んだトラックデータに、メインフレーム３０２から受け付けたデータを書き込む。
【０１１３】
一方、高速化トラックアクセスでは、ストレージ制御装置１０１は、例えば、メインフレーム３０２からのトラックＴＲへの書き込み要求に応じて、ＴＦＴ６００を参照して、トラックＴＲが等長レコードのフォーマットであるか否かを判定する。そして、ストレージ制御装置１０１は、トラックＴＲが等長レコードのフォーマットである場合、ストレージＳＴからのデータの読み出しを行わず、キャッシュメモリ４０５上に書き込み領域を確保し、メインフレーム３０２から受け付けたデータを書き込む。
【０１１４】
このように、高速化トラックアクセスでは、ストレージＳＴ（ＨＤＤ）からのデータの読み出しを削減することで、メインフレーム３０２の待ち時間を短縮して、アクセス速度を向上させることができる。高速化トラックアクセスは、トラックＴＲがスタンダード・トラック（ＳＴＤ）である場合に実施可能である。
【０１１５】
トラックＴＲがスタンダード・トラック（ＳＴＤ）の場合、ＴＦＴ６００内のトラックＴＲのデータ長とレコード数から、各レコードＲのブロック番号を算出することができる。すなわち、実データ（トラックデータ）をストレージＳＴから読み出さなくともレコードＲの位置付けを行うことができる。
【０１１６】
そこで、特定部７０３は、トラックＴＲが等長レコードのフォーマットの場合、ＴＦ情報に含まれる等長レコードのデータ長とレコード数とに基づいて、書き込み要求（ＦＣまたはＵＣ）で指定されるセクタ番号に対応するブロック番号を特定することにしてもよい。
【０１１７】
具体的には、例えば、特定部７０３は、上記式（１）〜（４）を用いて、ＴＦ情報に含まれる等長レコードのデータ長とレコード数とに基づいて、変換テーブル５００を作成する。ただし、上記式（１）〜（４）は、Ｒ０のＤＡＴＡ長が８バイト、Ｒ１以降のＫＥＹ長が１００バイト、ＤＡＴＡ長が２００バイトの場合の計算式である。また、レコード番号「Ｒ＃」の「＃」は、インクリメントされていくものとする。そして、特定部７０３は、作成した変換テーブル５００を参照して、書き込み要求（ＦＣまたはＵＣ）で指定されるセクタ番号に対応するブロック番号を特定する。
【０１１８】
なお、書き込み要求（ＦＣ）の場合、算出部７０４は、例えば、特定されたブロック番号とＴＦ情報とに基づいて、次のレコードＲの先頭ブロック番号と先頭セクタ番号とを算出する。そして、アクセス制御部７０５は、算出された次のレコードＲの先頭ブロック番号から、書き込み要求（ＦＣ）に応じたデータの書き込みを行って、算出された次のレコードＲの先頭セクタ番号をメインフレーム３０２に通知する。また、書き込み要求（ＵＣ）の場合には、アクセス制御部７０５は、特定されたブロック番号から、書き込み要求（ＵＣ）に応じたデータの書き込みを行う。
【０１１９】
このように、トラックＴＲがスタンダード・トラック（ＳＴＤ）の場合には、実データ（トラックデータ）をストレージＳＴから読み出すことなく、ＴＦＴ６００をもとにレコードＲの位置付けを行うことで、高速化トラックアクセスを実現することができる。
【０１２０】
（変換テーブル５００の作成例）
つぎに、図８を用いて、変換テーブル５００の作成例（初期化）について説明する。
【０１２１】
図８は、変換テーブル５００の作成例を示す説明図である。図８において、トラック・フォーマット８００は、論理ボリュームの初期化フォーマット処理時のトラックＴＲのＦＢＡフォーマット（データ構造）を示す。変換テーブル５００は、例えば、トラックＴＲの先頭２５６バイトの領域に格納される。初期化フォーマット処理時は、Ｒ０のレコードＲのみが書かれた状態となる。
【０１２２】
作成部７０１は、トラック・フォーマット８００に従って、変換テーブル５００を作成する。具体的には、図８に示すように、変換テーブル５００には、Ｒ０への位置付けを行うための情報（図８中、点線枠８１０）のみが格納され、セクタ番号「３」以降は対象レコードなしを意味する「ＦＦ」が格納される。
【０１２３】
Ｒ０のセクタ番号「３」は固定である。このため、ＳＳ（Ｓｅｔ  Ｓｅｃｔｏｒ）コマンドで、セクタ番号「０〜２」を指定した場合、読み出し・書き込み可能なレコードＲはＲ０となる。ＳＳコマンドでセクタ番号「３」が指定された場合、Ｒ０のカウント部を通過したとみなされ、読み出し・書き込み可能なレコードは、Ｒ０の次と判断される。ところが、初期化状態では、セクタ番号「３」以降が対象レコードなしを意味する「ＦＦ」のため、検索対象なしとなる。
【０１２４】
（変換テーブル５００の更新例）
つぎに、図９を用いて、変換テーブル５００の更新例について説明する。
【０１２５】
図９は、変換テーブル５００の更新例を示す説明図である。ここでは、トラック・フォーマット９００に示すように、初期化状態のトラックＴＲ（図８参照）に、表３に示したコマンド列（ＣＣＷ）でＲ１，Ｒ２を追加する場合の変換テーブル５００の更新例について説明する。なお、以下の（１）〜（５）は、表３の（１）〜（５）のコマンドに対応する。一部のコマンドについて説明を省略する場合がある。
【０１２６】
（１）特定部７０３は、ＳＫコマンドで指定されたシリンダ番号／ヘッド番号から、トラックＴＲの位置付けを行う。そして、特定部７０３は、位置付けしたトラックＴＲの変換テーブル５００を参照して、ＳＳコマンドで指定されたセクタ番号「２」に対応するブロック番号「１」を特定する（図９中、（９−１））。
【０１２７】
（２）算出部７０４は、ＳＣＨＩＤＥコマンドに応じて、レコードＲの検索を行う。なお、初期状態では、Ｒ０のみのため、検索対象はＲ０となる。具体的には、例えば、算出部７０４は、特定されたブロック番号から、Ｒ０のカウント部を読み出し、検索カウントデータ「Ｒ０」との比較を行う。ここでは、Ｒ０のカウント部に含まれるレコード番号「Ｒ０」が検索カウントデータ「Ｒ０」と一致するため、フォーマットライトコマンドに進む。
【０１２８】
（３）算出部７０４は、ＷＣＫＤコマンドに応じて、ＦＢＡ方式により、Ｒ１の書き込みのために、Ｒ０の所要長（ＦＢＡ）を算出し、Ｒ１の先頭ブロック番号を算出する。具体的には、例えば、算出部７０４は、上記式（３）を用いて、Ｒ０のカウント部の情報に基づいて、Ｒ０の所要長（ＦＢＡ）を算出する（単位：バイト）。
【０１２９】
Ｒ０の所要長（ＦＢＡ）＝６４（Ｃ）＋０（Ｋ）＋６４（Ｄ）＝１２８
【０１３０】
つぎに、算出部７０４は、算出したＲ０の所要長（ＦＢＡ）から、Ｒ０の所要ブロック長を算出する（単位：バイト）。なお、※は、小数点を切り上げることを表す。
【０１３１】
Ｒ０の所要ブロック長＝（１２８÷２５６※）×２５６＝２５６
【０１３２】
つぎに、算出部７０４は、算出したＲ０の所要ブロック長から、Ｒ０の所要ブロック数を算出する（単位：ブロック）。
【０１３３】
Ｒ０の所要ブロック数＝２５６÷２５６＝１
【０１３４】
そして、算出部７０４は、Ｒ０の先頭セクタ番号とＲ０の所要ブロック数から、Ｒ１の先頭ブロック番号を算出する。
【０１３５】
Ｒ１の先頭ブロック番号＝Ｒ０の先頭ブロック番号＋Ｒ０の所要ブロック数
＝１＋１＝２
【０１３６】
以上の計算から、アクセス制御部７０５は、算出されたブロック番号「２」から、ＷＣＫＤコマンドで指定されるＲ１の書き込みを行う。
【０１３７】
また、算出部７０４は、Ｒ１の先頭セクタ番号を求めるために、ＣＫＤ方式により、ＨＡ部の所要長（ＣＫＤ）とＲ０の所要長（ＣＫＤ）を取得する（単位：バイト）。
【０１３８】
ＨＡ部の所要長（ＣＫＤ）＝５０４＋４０＋２４８＝７９２
Ｒ０の所要長（ＣＫＤ）＝４０（Ｃ）＋２２４（Ｇ２）＋２１６（Ｇ３）＋（（（８＋１２）÷３２※）×３２）＝５１２
【０１３９】
そして、算出部７０４は、ＨＡ部の所要長（ＣＫＤ）とＲ０の所要長（ＣＫＤ）から、Ｒ１の先頭セクタ番号を算出する。
【０１４０】
Ｒ１の先頭セクタ番号＝（７９２＋５１２）÷２２４
＝５．８２（小数点切捨て）＝５
【０１４１】
以上の計算から、セクタ番号「３（Ｒ０の先頭セクタ番号）」〜セクタ番号「４（Ｒ１の先頭セクタ番号−１）」が指定された場合、Ｒ１が位置付けられる。このため、作成部７０１は、Ｒ１の先頭セクタ番号への位置付けを行う際に指定されるセクタ番号「３，４」を、算出されたＲ１の先頭ブロック番号「２」と対応付けて、変換テーブル５００に記憶する（図９中、（９−２））。
【０１４２】
（４）算出部７０４は、ＷＣＫＤコマンドに応じて、ＦＢＡ方式により、Ｒ２の書き込みのために、Ｒ１の所要長（ＦＢＡ）を算出し、Ｒ２の先頭ブロック番号を算出する。具体的には、例えば、算出部７０４は、上記式（４）を用いて、Ｒ１のカウント部の情報に基づいて、Ｒ１の所要長（ＦＢＡ）を算出する（単位：バイト）。
【０１４３】
Ｒ１の所要長（ＦＢＡ）＝６４（Ｃ）＋（（１００＋８）÷６４※）×６４（Ｋ）＋（（２００＋８）÷６４※）×６４（Ｄ）＝６４＋１２８＋２５６＝４４８
【０１４４】
なお、Ｒ１のＫＥＹ長が１００バイト以外、ＤＡＴＡ長が２００バイト以外の場合には、上記式（４）のＫＥＹ長、ＤＡＴＡ長に相当する値を、Ｒ１のＫＥＹ長、ＤＡＴＡ長に置き換えることで、Ｒ１の所要長（ＦＢＡ）を算出することができる。
【０１４５】
つぎに、算出部７０４は、算出したＲ１の所要長（ＦＢＡ）から、Ｒ１の所要ブロック長を算出する（単位：バイト）。なお、※は、小数点を切り上げることを表す。
【０１４６】
Ｒ１の所要ブロック長＝（４４８÷２５６※）×２５６＝５１２
【０１４７】
つぎに、算出部７０４は、算出したＲ１の所要ブロック長から、Ｒ１の所要ブロック数を算出する（単位：ブロック）。
【０１４８】
Ｒ１の所要ブロック数＝５１２÷２５６＝２
【０１４９】
そして、算出部７０４は、Ｒ１の先頭ブロック番号とＲ１の所要ブロック数から、Ｒ２の先頭ブロック番号を算出する。
【０１５０】
Ｒ２の先頭ブロック番号＝Ｒ１の先頭ブロック番号＋Ｒ１の所要ブロック数
＝２＋２＝４
【０１５１】
以上の計算から、アクセス制御部７０５は、算出されたブロック番号「４」から、ＷＣＫＤコマンドで指定されるＲ２の書き込みを行う。
【０１５２】
また、算出部７０４は、Ｒ２の先頭セクタ番号を求めるために、ＣＫＤ方式により、ＨＡ部の所要長（ＣＫＤ）とＲ０の所要長（ＣＫＤ）とＲ１の所要長（ＣＫＤ）を取得する（単位：バイト）。
【０１５３】
ＨＡ部の所要長（ＣＫＤ）＝５０４＋４０＋２４８＝７９２
Ｒ０の所要長（ＣＫＤ）＝４０（Ｃ）＋２２４（Ｇ２）＋２１６（Ｇ３）＋（（（８＋１２）÷３２※）×３２）＝５１２
Ｒ１の所要長（ＣＫＤ）＝４０（Ｃ）＋２２４（Ｇ２：Ｋ）＋２２４（Ｇ２：Ｄ）＋２１６（Ｇ３）＋（（１００＋１２）÷３２※）×３２）＋（（２００＋１２）÷３２※）×３２＝４０＋２２４＋２２４＋２１６＋１２８（Ｋ）＋２２４（Ｄ）＝１０５６
【０１５４】
そして、算出部７０４は、ＨＡ部の所要長（ＣＫＤ）とＲ０の所要長（ＣＫＤ）とＲ１の所要長（ＣＫＤ）から、Ｒ２の先頭セクタ番号を算出する。
【０１５５】
Ｒ２の先頭セクタ番号＝（７９２＋５１２＋１０５６）÷２２４
＝１０．５３（小数点切捨て）＝１０
【０１５６】
以上の計算から、セクタ番号「５（Ｒ１の先頭セクタ番号）」〜セクタ番号「９（Ｒ２の先頭セクタ番号−１）」が指定された場合、Ｒ２が位置付けられる。このため、作成部７０１は、Ｒ２の先頭セクタ番号への位置付けを行う際に指定されるセクタ番号「５〜９」を、算出されたＲ２の先頭ブロック番号「４」と対応付けて、変換テーブル５００に記憶する（図９中、（９−３））。
【０１５７】
（５）アクセス制御部７０５は、ＲＳコマンドに応じて、直前に処理したレコードＲのセクタ番号の読み出しを実施する。ここでは、上記（４）において、Ｒ２の書き込みが行われたため、Ｒ２の先頭セクタ番号である「１０」が読み出される。そして、アクセス制御部７０５は、読み出したＲ２の先頭セクタ番号「１０」をメインフレーム３０２に通知する。
【０１５８】
この先頭セクタ番号「１０」は、次に当該トラックＴＲにアクセスする際のＳＳコマンドで指定されるセクタ番号の情報として利用される。ただし、先頭セクタ番号「１０」を指定すると、Ｒ２に位置付けできないため、ＳＳコマンドでは、例えば、−１した「９」の値が指定される。
【０１５９】
なお、トラック・フォーマット９００のトラックＴＲに対して、表３に示したコマンド列（ＣＣＷ）でＲ３を追加する場合には、ストレージ制御装置１０１は、例えば、以下のように処理する。ただし、ここでは一部の処理を抜粋して説明する。
【０１６０】
表３に示したコマンド列（ＣＣＷ）でＲ３を追加する場合、Ｒ２の先頭セクタ番号に位置付けするためのセクタ番号「９（＝１０−１）」が指定される。この場合、変換テーブル５００から、セクタ番号「９」に対応するブロック番号「４」が特定され、ブロック番号「４」からＲ２のカウント部が読み出される。
【０１６１】
算出部７０４は、例えば、上記式（４）を用いて、Ｒ２のカウント部の情報に基づいて、Ｒ２の所要長（ＦＢＡ）を算出する。なお、Ｒ２のＫＥＹ長が１００バイト以外、ＤＡＴＡ長が２００バイト以外の場合には、上記式（４）のＫＥＹ長、ＤＡＴＡ長に相当する値を、Ｒ２のＫＥＹ長、ＤＡＴＡ長に置き換えることで、Ｒ２の所要長（ＦＢＡ）を算出することができる。
【０１６２】
つぎに、算出部７０４は、算出したＲ２の所要長（ＦＢＡ）から、Ｒ２の所要ブロック長を算出する。また、算出部７０４は、算出したＲ２の所要ブロック長から、Ｒ２の所要ブロック数を算出する。そして、算出部７０４は、Ｒ２の先頭ブロック番号とＲ２の所要ブロック数とを加算することで、Ｒ３の先頭ブロック番号を算出する。
【０１６３】
また、算出部７０４は、例えば、上記式（２）を用いて、Ｒ２のカウント部の情報に基づいて、Ｒ２の所要長（ＣＫＤ）を算出する。なお、Ｒ２のＫＥＹ長が１００バイト以外、ＤＡＴＡ長が２００バイト以外の場合には、上記式（２）のＫＥＹ長、ＤＡＴＡ長に相当する値を、Ｒ２のＫＥＹ長、ＤＡＴＡ長に置き換えることで、Ｒ２の所要長（ＣＫＤ）を算出することができる。
【０１６４】
つぎに、算出部７０４は、算出したＲ２の所要長（ＣＫＤ）から、Ｒ２の所要セクタ数を算出する。そして、算出部７０４は、Ｒ２の先頭セクタ番号とＲ２の所要セクタ数とを加算することで、Ｒ３の先頭セクタ番号を算出する。
【０１６５】
（変換テーブル５００の更新例）
つぎに、図１０を用いて、変換テーブル５００の参照例について説明する。
【０１６６】
図１０は、変換テーブル５００の参照例を示す説明図である。ここでは、符号１０００に示すように、Ｒ１〜Ｒ７が書き込まれたトラックＴＲに対して、表１に示したようなコマンド列（ＣＣＷ）で既存のＲ６を更新する場合について説明する。変換テーブル５００は、トラックＴＲに、Ｒ１〜Ｒ７が書き込まれた後のものである。
【０１６７】
既存のＲ６を更新する場合、ＳＳコマンドにより、Ｒ６の先頭セクタ番号に位置付けするためのセクタ番号として、２３〜２７のいずれかの値が指定される。例えば、セクタ番号「２７」が指定されると、変換テーブル５００から、セクタ番号「２７」に対応するブロック番号「１２」が特定される。
【０１６８】
ブロック番号「１２」は、Ｒ６の先頭ブロック番号である。このように、変換テーブル５００によれば、既存のＲ６を更新する際に、ＳＳコマンドによって、２３〜２７のいずれかのセクタ番号を指定することで、Ｒ６に一発位置付けすることができる。
【０１６９】
（ストレージ制御装置１０１の制御処理手順）
つぎに、ストレージ制御装置１０１の制御処理手順について説明する。ストレージ制御装置１０１の制御処理は、メインフレーム３０２からの書き込み要求（ＦＣ，ＵＣ）または読み出し要求に応じて実行される。
【０１７０】
図１１は、ストレージ制御装置１０１の制御処理手順の一例を示すフローチャートである。図１１のフローチャートにおいて、まず、ストレージ制御装置１０１は、トラックＴＲの位置付け処理を実行する（ステップＳ１１０１）。位置付け処理の具体的な処理手順については、図１２を用いて後述する。
【０１７１】
つぎに、ストレージ制御装置１０１は、レコードＲの検索処理を実行する（ステップＳ１１０２）。検索処理の具体的な処理手順については、図１４を用いて後述する。そして、ストレージ制御装置１０１は、検索結果が一致するか否かを判断する（ステップＳ１１０３）。
【０１７２】
なお、図１４を用いて詳細は後述するが、検索結果が一致するとは、レコードＲのカウント部の情報に含まれるレコード番号が、メインフレーム３０２から指定される検索カウントデータと一致することに相当する。
【０１７３】
ここで、検索結果が一致する場合（ステップＳ１１０３：Ｙｅｓ）、ストレージ制御装置１０１は、書き込み処理または読み出し処理を実行して（ステップＳ１１０４）、本フローチャートによる一連の処理を終了する。書き込み処理の具体的な処理手順については、図１５を用いて後述する。読み出し処理の具体的な処理手順については、図１６を用いて後述する。
【０１７４】
また、ステップＳ１１０３において、検索結果が一致しない場合（ステップＳ１１０３：Ｎｏ）、ストレージ制御装置１０１は、メインフレーム３０２にエラー情報を送信して（ステップＳ１１０５）、本フローチャートによる一連の処理を終了する。エラー情報は、後述の図１４に示すステップＳ１４０４において作成される。
【０１７５】
これにより、メインフレーム３０２からの書き込み要求または読み出し要求に応じて、書き込み処理または読み出し処理を実行することができる。
【０１７６】
つぎに、図１２を用いて、図１１に示したステップＳ１１０１の位置付け処理の具体的な処理手順について説明する。
【０１７７】
図１２は、位置付け処理の具体的処理手順の一例を示すフローチャートである。図１２のフローチャートにおいて、まず、ストレージ制御装置１０１は、ＳＦＭコマンドで指定されるＦｉｌｅ  Ｍａｓｋ情報を取得する（ステップＳ１２０１）。つぎに、ストレージ制御装置１０１は、ＳＫコマンドで指定されるＳｅｅｋ情報を取得する（ステップＳ１２０２）。
【０１７８】
つぎに、ストレージ制御装置１０１は、ＳＳコマンドで指定されるＳｅｃｔｏｒ情報を取得する（ステップＳ１２０３）。そして、ストレージ制御装置１０１は、キャッシュアロケーション処理を実行する（ステップＳ１２０４）。キャッシュアロケーション処理の具体的な処理手順については、図１３を用いて後述する。
【０１７９】
つぎに、ストレージ制御装置１０１は、キャッシュメモリ４０５上にトラックＴＲのトラックデータがあるか否かを判断する（ステップＳ１２０５）。ここで、トラックデータがある場合（ステップＳ１２０５：Ｙｅｓ）、ストレージ制御装置１０１は、キャッシュメモリ４０５上のトラックＴＲの先頭ブロックから変換テーブル５００を読み込む（ステップＳ１２０６）。
【０１８０】
そして、ストレージ制御装置１０１は、変換テーブル５００を参照して、取得したＳｅｃｔｏｒ情報から特定されるセクタ番号に対応するブロック番号を特定し（ステップＳ１２０７）、位置付け処理を呼び出したステップに戻る。
【０１８１】
また、ステップＳ１２０５において、トラックデータがない場合（ステップＳ１２０５：Ｎｏ）、ストレージ制御装置１０１は、トラックＴＲのＴＦ情報に含まれるデータ長とレコード数とに基づいて、変換テーブル５００を作成し（ステップＳ１２０８）、ステップＳ１２０７に移行する。
【０１８２】
これにより、メインフレーム３０２から指定されるセクタ番号によるレコードＲの位置付けを行うことができる。また、トラックＴＲがスタンダード・トラック（ＳＴＤ）の場合には、実データ（トラックデータ）をストレージＳＴから読み出すことなく、トラックＴＲのＴＦ情報をもとにレコードＲの位置付けを行うことができる。
【０１８３】
つぎに、図１３を用いて、図１２に示したステップＳ１２０４のキャッシュアロケーション処理の具体的な処理手順について説明する。
【０１８４】
図１３は、キャッシュアロケーション処理の具体的処理手順の一例を示すフローチャートである。図１３のフローチャートにおいて、まず、ストレージ制御装置１０１は、図１２のステップＳ１２０２において取得したＳｅｅｋ情報（シリンダ番号、ヘッド番号）からアクセス対象のトラックＴＲを特定する（ステップＳ１３０１）。
【０１８５】
つぎに、ストレージ制御装置１０１は、ＴＦＴ６００から、特定したトラックＴＲのＴＦ情報を取得する（ステップＳ１３０２）。つぎに、ストレージ制御装置１０１は、図１２のステップＳ１２０１において取得したＦｉｌｅ  Ｍａｓｋ情報を参照して、ライト許可フラグを判定する（ステップＳ１３０３）。
【０１８６】
つぎに、ストレージ制御装置１０１は、取得したＴＦ情報を参照して、トラックＴＲのフォーマットフラグを判定する（ステップＳ１３０４）。そして、ストレージ制御装置１０１は、ライト許可フラグ「ライト許可」、かつ、フォーマットフラグ「ＳＴＤ」であるか否かを判断する（ステップＳ１３０５）。
【０１８７】
ここで、ライト許可フラグ「ライト許可」、かつ、フォーマットフラグ「ＳＴＤ」ではない場合（ステップＳ１３０５：Ｎｏ）、ストレージ制御装置１０１は、ストレージＳＴからキャッシュメモリ４０５に、トラックＴＲのトラックデータを読み出して（ステップＳ１３０６）、キャッシュアロケーション処理を呼び出したステップに戻る。
【０１８８】
一方、ライト許可フラグ「ライト許可」、かつ、フォーマットフラグ「ＳＴＤ」の場合（ステップＳ１３０５：Ｙｅｓ）、ストレージ制御装置１０１は、キャッシュアロケーション処理を呼び出したステップに戻る。
【０１８９】
これにより、読み出し要求時や、トラックＴＲがノン・スタンダード・トラック（Ｎｏｎ−ＳＴＤ）の場合に、ストレージＳＴ内のＨＤＤに格納されたトラックＴＲのトラックデータを、キャッシュメモリ４０５上にステージングすることができる。
【０１９０】
つぎに、図１４を用いて、図１１に示したステップＳ１１０２の検索処理の具体的な処理手順について説明する。
【０１９１】
図１４は、検索処理の具体的処理手順の一例を示すフローチャートである。図１４のフローチャートにおいて、まず、ストレージ制御装置１０１は、ＳＣＨＩＤＥコマンドで指定される検索カウントデータを取得する（ステップＳ１４０１）。
【０１９２】
つぎに、ストレージ制御装置１０１は、図１２のステップＳ１２０７において特定されたブロック番号をもとに、キャッシュメモリ４０５上のトラックＴＲのトラックデータから、レコードＲのカウント部の情報を読み出す（ステップＳ１４０２）。ただし、キャッシュメモリ４０５上にトラックＴＲのトラックデータがない場合には、ストレージ制御装置１０１は、トラックＴＲのＴＦ情報（レコード長、レコード数）に基づいて、レコードＲのカウント部の情報を作成する。レコードＲは、特定されたブロック番号を先頭ブロック番号とするレコードである。
【０１９３】
そして、ストレージ制御装置１０１は、レコードＲのカウント部の情報（レコード番号）が、取得した検索カウントデータ（レコード番号）と一致するか否かを判断する（ステップＳ１４０３）。ここで、検索カウントデータと一致する場合（ステップＳ１４０３：Ｙｅｓ）、ストレージ制御装置１０１は、検索処理を呼び出したステップに戻る。
【０１９４】
これにより、検索カウントデータで指定されるレコードＲを検索することができる。一方、検索カウントデータと一致しない場合（ステップＳ１４０３：Ｎｏ）、ストレージ制御装置１０１は、検索データが見つからなかった旨のエラー情報を作成して（ステップＳ１４０４）、検索処理を呼び出したステップに戻る。
【０１９５】
つぎに、図１５を用いて、図１１に示したステップＳ１１０４の書き込み処理の具体的な処理手順について説明する。
【０１９６】
図１５は、書き込み処理の具体的処理手順の一例を示すフローチャートである。図１５のフローチャートにおいて、まず、ストレージ制御装置１０１は、ライトコマンドで指定される書込データを取得する（ステップＳ１５０１）。つぎに、ストレージ制御装置１０１は、ライトコマンドが、フォーマットライトコマンドであるか否かを判断する（ステップＳ１５０２）。
【０１９７】
ここで、アップデートライトコマンドの場合（ステップＳ１５０２：Ｎｏ）、ストレージ制御装置１０１は、ステップＳ１５０７に移行する。
【０１９８】
一方、フォーマットライトコマンドの場合（ステップＳ１５０２：Ｙｅｓ）、ストレージ制御装置１０１は、図１４のステップＳ１４０２において読み出し／作成されたレコードＲのカウント部の情報に基づいて、当該レコードＲの次のレコードＲの先頭ブロック番号を算出する（ステップＳ１５０３）。また、ストレージ制御装置１０１は、レコードＲのカウント部の情報に基づいて、当該レコードＲの次のレコードＲの先頭セクタ番号を算出する（ステップＳ１５０４）。
【０１９９】
なお、表３で示したように、２以上のレコードＲ（例えば、Ｒ１，Ｒ２）を一括して書き込む場合がある。この場合、ストレージ制御装置１０１は、ステップＳ１５０１において取得された書込データに含まれる書込対象レコードＲのカウント部の情報も用いて、順次レコードＲの先頭ブロック番号、先頭セクタ番号を算出する。
【０２００】
そして、ストレージ制御装置１０１は、算出した次のレコードＲの先頭ブロック番号および先頭セクタ番号に基づいて、変換テーブル５００を更新する（ステップＳ１５０５）。具体的には、ストレージ制御装置１０１は、次のレコードＲの先頭セクタ番号への位置付けを行う際に指定されるセクタ番号を、次のレコードＲの先頭ブロック番号と対応付けて変換テーブル５００に記憶する。
【０２０１】
つぎに、ストレージ制御装置１０１は、キャッシュメモリ４０５上のトラックＴＲの先頭ブロックに、更新した変換テーブル５００を書き込む（ステップＳ１５０６）。そして、ストレージ制御装置１０１は、キャッシュメモリ４０５上に、取得した書込データを書き込んで（ステップＳ１５０７）、書き込み処理を呼び出したステップに戻る。
【０２０２】
具体的には、フォーマットライトコマンドの場合、ストレージ制御装置１０１は、ステップＳ１５０３において算出した次のレコードＲの先頭ブロック番号から、取得した書込データの書き込みを行う。一方、アップデートライトコマンドの場合、ストレージ制御装置１０１は、図１２のステップＳ１２０７において特定したブロック番号から、取得した書込データの書き込みを行う。
【０２０３】
これにより、メインフレーム３０２からの書き込み要求（ＦＣ，ＵＣ）に応じて、レコードＲを追加・更新することができる。また、メインフレーム３０２からの書き込み要求（ＦＣ）に応じて、変換テーブル５００を更新することができる。
【０２０４】
なお、ストレージ制御装置１０１は、ステップＳ１５０４において算出した次のレコードＲの先頭セクタ番号をメインフレーム３０２に通知する。具体的には、ストレージ制御装置１０１は、メインフレーム３０２からのＲＳコマンドに対する応答として、直前に処理したレコードＲの先頭セクタ番号を通知する。これにより、以降において、メインフレーム３０２は、書き込み要求（ＦＣ）によって新たに追加したレコードＲの先頭セクタ番号をもとに、トラックＴＲ上の位置付けを行うことができる。
【０２０５】
つぎに、図１６を用いて、図１１に示したステップＳ１１０４の読み出し処理の具体的な処理手順について説明する。
【０２０６】
図１６は、読み出し処理の具体的処理手順の一例を示すフローチャートである。図１６のフローチャートにおいて、まず、ストレージ制御装置１０１は、図１２のステップＳ１２０７において特定したブロック番号をもとに、キャッシュメモリ４０５上のトラックＴＲからレコードＲを読み出す（ステップＳ１６０１）。
【０２０７】
そして、ストレージ制御装置１０１は、読み出したレコードＲのレコードデータをメインフレーム３０２に送信して（ステップＳ１６０２）、読み出し処理を呼び出したステップに戻る。これにより、メインフレーム３０２からの読み出し要求に応じて、レコードＲを読み出すことができる。
【０２０８】
以上説明したように、実施の形態にかかるストレージ制御装置１０１によれば、メインフレーム３０２からの書き込み要求（ＦＣ）に応じて、変換テーブル５００を参照して、書き込み要求（ＦＣ）で指定されるセクタ番号に対応するブロック番号を特定することができる。また、ストレージ制御装置１０１によれば、特定したブロック番号から読み出されるレコードＲのフォーマット情報に基づいて、次のレコードＲの先頭ブロック番号と先頭セクタ番号とを算出することができる。そして、ストレージ制御装置１０１によれば、算出した次のレコードＲの先頭セクタ番号への位置付けを行う際に指定されるセクタ番号を、算出した次のレコードＲの先頭ブロック番号と対応付けて変換テーブル５００に記憶することができる。また、ストレージ制御装置１０１によれば、算出した次のレコードＲの先頭ブロック番号から、書き込み要求（ＦＣ）で指定される書込データの書き込みを行って、算出した次のレコードＲの先頭セクタ番号をメインフレーム３０２に通知することができる。
【０２０９】
これにより、新たに追加されるレコードＲに位置付けする際に指定されるセクタ番号を、当該レコードＲの先頭ブロックと対応付けて変換テーブル５００に登録することができる。また、以降において、メインフレーム３０２は、書き込み要求（ＦＣ）によって新たに追加したレコードＲの先頭セクタ番号をもとに、トラックＴＲ上の当該レコードＲへの位置付けを行うことができる。
【０２１０】
また、ストレージ制御装置１０１によれば、メインフレーム３０２からの読み出し要求に応じて、変換テーブル５００を参照して、読み出し要求で指定されるセクタ番号に対応するブロック番号を特定することができる。そして、ストレージ制御装置１０１によれば、特定したブロック番号から、読み出し要求で指定されるレコードＲの読み出しを行って、読み出したレコードＲのレコードデータをメインフレーム３０２に送信することができる。
【０２１１】
これにより、メインフレーム３０２からの読み出し要求に応じて、当該読み出し要求で指定されたセクタ番号に対応するレコードＲへの位置付けを行って、レコードＲを読み出すことができる。
【０２１２】
また、ストレージ制御装置１０１によれば、メインフレーム３０２からの書き込み要求（ＵＣ）に応じて、変換テーブル５００を参照して、書き込み要求（ＵＣ）で指定されるセクタ番号に対応するブロック番号を特定することができる。そして、ストレージ制御装置１０１によれば、特定したブロック番号から、書き込み要求（ＵＣ）で指定される書込データの書き込みを行うことができる。
【０２１３】
これにより、メインフレーム３０２からの書き込み要求（ＵＣ）に応じて、当該書き込み要求（ＵＣ）で指定されたセクタ番号に対応するレコードＲへの位置付けを行って、レコードＲを更新することができる。
【０２１４】
また、ストレージ制御装置１０１によれば、メインフレーム３０２からの書き込み要求（ＦＣ）に応じて、ＴＦＴ６００内のトラックＴＲのＴＦ情報に基づいて、トラックＴＲが等長レコードのフォーマットであるか否かを判定することができる。そして、ストレージ制御装置１０１によれば、トラックＴＲが等長レコードのフォーマットの場合、ＴＦ情報に含まれるデータ長とレコード数とに基づいて、書き込み要求（ＦＣ）で指定されるセクタ番号に対応するブロック番号を特定することができる。
【０２１５】
これにより、トラックＴＲがスタンダード・トラック（ＳＴＤ）の場合には、実データ（トラックデータ）をストレージＳＴから読み出すことなく、ＴＦＴ６００をもとにレコードＲの位置付けを行うことで、高速化トラックアクセスを実現することができる。
【０２１６】
また、ストレージ制御装置１０１によれば、キャッシュメモリ４０５上のトラックＴＲのトラックデータの先頭ブロックまたは最終ブロックに変換テーブル５００を格納することができる。これにより、トラックＴＲにアクセスする際に、トラックＴＲのトラックデータから変換テーブル５００を読み込んで使用することができる。
【０２１７】
これらのことから、実施の形態にかかるストレージシステム３００およびストレージ制御装置１０１によれば、メインフレーム３０２に接続されたＦＢＡ方式のストレージ装置３０１において、ＣＫＤ方式のセクタ番号による位置付けを効率的に行うことができる。
【０２１８】
なお、本実施の形態で説明した制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）−ＲＯＭ、ＭＯ（Ｍａｇｎｅｔｏ−Ｏｐｔｉｃａｌ  ｄｉｓｋ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）メモリ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【０２１９】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０２２０】
（付記１）ＦＢＡ（Ｆｉｘｅｄ  Ｂｌｏｃｋ  Ａｒｃｈｉｔｅｃｔｕｒｅ）方式の記憶装置に対するアクセスを制御するストレージ制御装置であって、
ＣＫＤ（Ｃｏｕｎｔ  Ｋｅｙ  Ｄａｔａ）方式によって前記記憶装置にアクセスする上位装置からのトラック・フォーマットの変更を伴う書き込み要求に応じて、前記記憶装置のトラックのセクタ番号とブロック番号との対応関係を示す変換情報を参照して、前記書き込み要求で指定されるセクタ番号に対応するブロック番号を特定し、
特定した前記ブロック番号から読み出されるレコードのフォーマット情報に基づいて、前記レコードの次のレコードの先頭ブロック番号と先頭セクタ番号とを算出し、
算出した前記先頭セクタ番号への位置付けを行う際に指定されるセクタ番号を、算出した前記先頭ブロック番号と対応付けて前記変換情報に記憶し、
算出した前記先頭ブロック番号から前記書き込み要求に応じたデータの書き込みを行って、算出した前記先頭セクタ番号を前記上位装置に通知する、
制御部を有することを特徴とするストレージ制御装置。
【０２２１】
（付記２）前記制御部は、
前記上位装置からの読み出し要求に応じて、前記変換情報を参照して、前記読み出し要求で指定されるセクタ番号に対応するブロック番号を特定し、
特定した前記ブロック番号から、前記読み出し要求で指定されるレコードの読み出しを行って、読み出した前記レコードのデータを前記上位装置に送信する、ことを特徴とする付記１に記載のストレージ制御装置。
【０２２２】
（付記３）前記制御部は、
前記上位装置からのトラック・フォーマットの変更を伴わない書き込み要求に応じて、前記変換情報を参照して、前記書き込み要求で指定されるセクタ番号に対応するブロック番号を特定し、
特定した前記ブロック番号から、前記書き込み要求に応じたデータの書き込みを行う、ことを特徴とする付記１または２に記載のストレージ制御装置。
【０２２３】
（付記４）前記上位装置からのトラック・フォーマットの変更を伴う書き込み要求に応じて、前記トラックのトラック・フォーマット情報に基づいて、前記トラックが等長レコードのフォーマットであるか否かを判定し、
前記トラックが等長レコードのフォーマットの場合、前記トラック・フォーマット情報に含まれるデータ長とレコード数とに基づいて、前記書き込み要求で指定されるセクタ番号に対応するブロック番号を特定する、ことを特徴とする付記１〜３のいずれか一つに記載のストレージ制御装置。
【０２２４】
（付記５）前記変換情報は、前記記憶装置からキャッシュメモリ上に読み出される前記トラックのデータの先頭ブロックまたは最終ブロックに格納される、ことを特徴とする付記１〜４のいずれか一つに記載のストレージ制御装置。
【０２２５】
（付記６）前記制御部は、
前記レコードのフォーマット情報に基づいて、ＦＢＡ方式による前記レコードの第１のレコード長と、ＣＫＤ方式による前記レコードの第２のレコード長とを算出し、
算出した前記第１のレコード長と前記レコードの先頭ブロック番号とに基づいて、前記次のレコードの先頭ブロック番号を算出し、
算出した前記第２のレコード長と前記レコードの先頭セクタ番号とに基づいて、前記次のレコードの先頭セクタ番号を算出する、ことを特徴とする付記１〜５のいずれか一つに記載のストレージ制御装置。
【０２２６】
（付記７）前記上位装置は、メインフレームコンピュータである、ことを特徴とする付記１〜６のいずれか一つに記載のストレージ制御装置。
【０２２７】
（付記８）前記先頭セクタ番号への位置付けを行う際に指定されるセクタ番号は、前記書き込み要求で指定されるセクタ番号の次のセクタ番号から前記先頭セクタ番号の一つ前のセクタ番号までの少なくともいずれかのセクタ番号である、ことを特徴とする付記１〜７のいずれか一つに記載のストレージ制御装置。
【０２２８】
（付記９）ＦＢＡ方式の記憶装置に対するアクセスを制御するコンピュータに、
ＣＫＤ方式によって前記記憶装置にアクセスする上位装置からのトラック・フォーマットの変更を伴う書き込み要求に応じて、前記記憶装置のトラックのセクタ番号とブロック番号との対応関係を示す変換情報を参照して、前記書き込み要求で指定されるセクタ番号に対応するブロック番号を特定し、
特定した前記ブロック番号から読み出されるレコードのフォーマット情報に基づいて、前記レコードの次のレコードの先頭ブロック番号と先頭セクタ番号とを算出し、
算出した前記先頭セクタ番号への位置付けを行う際に指定されるセクタ番号を、算出した前記先頭ブロック番号と対応付けて前記変換情報に記憶し、
算出した前記先頭ブロック番号から前記書き込み要求に応じたデータの書き込みを行って、算出した前記先頭セクタ番号を前記上位装置に通知する、
処理を実行させることを特徴とする制御プログラム。
【符号の説明】
【０２２９】
１０１  ストレージ制御装置
１０２  上位装置
１０３，ＳＴ  ストレージ
１１０  変換情報
１２０  書き込み要求
１３０  カウント部情報
３００  ストレージシステム
３０１  ストレージ装置
３０２  メインフレーム
４００  バス
４０１  ＣＰＵ
４０２  メモリ
４０３  通信Ｉ／Ｆ
４０４  Ｉ／Ｏコントローラ
４０５  キャッシュメモリ
５００  変換テーブル
６００  ＴＦＴ
７０１  作成部
７０２  受付部
７０３  特定部
７０４  算出部
７０５  アクセス制御部
【図１】
2019036193.tif 000010
【図２Ａ】
2019036193.tif 000011
【図２Ｂ】
2019036193.tif 000012
【図３】
2019036193.tif 000013
【図４】
2019036193.tif 000014
【図５】
2019036193.tif 000015
【図６】
2019036193.tif 000016
【図７】
2019036193.tif 000017
【図８】
2019036193.tif 000018
【図９】
2019036193.tif 000019
【図１０】
2019036193.tif 000020
【図１１】
2019036193.tif 000021
【図１２】
2019036193.tif 000022
【図１３】
2019036193.tif 000023
【図１４】
2019036193.tif 000024
【図１５】
2019036193.tif 000025
【図１６】
2019036193.tif 000026