(57)【特許請求の範囲】
【請求項１】
ヘッドによる記録再生が行われるディスク媒体とホストとの間で転送されるデータを一時的に記憶するバッファメモリを備えたディスク記憶装置において、
前記バッファメモリ内に確保される、複数のセグメントに分割可能なセグメントキャッシュバッファと、
前記セグメントキャッシュバッファ内の各セグメント毎に生成されるセグメント管理ブロックであって、当該セグメントに記憶されているデータの前記ディスク媒体上の書き込み先を示すアドレス情報が設定されるアドレスフィールド、当該セグメントのサイズを示すセグメント長が設定されるセグメント長フィールド、並びにヘッドの移動動作が所定の時間内に行える位置関係にあるアドレス情報同士を同一グループとして分類する情報が設定される近傍アドレス別分類フィールドを持つセグメント管理ブロックを備え、前記セグメントキャッシュバッファを管理するためのセグメント管理テーブル記憶手段と、
前記ホストからディスク書き込みを指定するライトコマンドが発行されると共にディスク書き込みの対象となるデータが転送され、そのデータサイズが所定サイズ以下である場合に、当該データを前記セグメントキャッシュバッファ内に割り当てた当該データに対応するサイズのセグメントに記憶させると共に、当該セグメントを管理するための前記セグメント管理ブロックを前記セグメント管理テーブル内に生成するセグメントキャッシュ制御手段と、
前記セグメント管理テーブル内に生成された、前記近傍アドレス別分類フィールドで同一グループに分類されたセグメント管理ブロックのうち、予め定められた書き込み条件を満たしたグループのセグメント管理ブロックに基づいて、グループ単位でディスク書き込みを行うディスク書き込み制御手段とを具備することを特徴とするディスク記憶装置。
【請求項２】
前記ディスク書き込み制御手段は、前記近傍アドレス別分類フィールドで同一グループに分類されたセグメント管理ブロックの数が所定数を越えたことをもって前記書き込み条件を満たしたと判定することを特徴とする請求項１記載のディスク記憶装置。
【請求項３】
前記ディスク書き込み制御手段は、前記近傍アドレス別分類フィールドで分類されるグループを単位に、そのグループ内で最も最近に生成された前記セグメント管理ブロックの生成時からの経過時間を調べ、所定時間を越えたことをもって、該当するグループについて前記書き込み条件を満たしたと判定することを特徴とする請求項１記載のディスク記憶装置。
【請求項４】
前記ディスク書き込み制御手段は、現在の前記ヘッドのディスク媒体上の位置からヘッド移動動作が所定の時間内に行える位置関係にあるアドレス情報を持つセグメント管理ブロックを含むグループが存在する場合に、当該グループについて前記書き込み条件を満たしたと判定することを特徴とする請求項１記載のディスク記憶装置。
【請求項５】
前記セグメントキャッシュ制御手段は、前記セグメント管理ブロックを生成する際に、対応するアドレス情報と連続するアドレス情報を持つ既生成のセグメント管理ブロックが存在しても、ヘッドの移動動作が所定の時間内に行える位置関係にない場合には、当該既生成のセグメント管理ブロックが属するグループの対象外として処理することを特徴とする請求項１記載のディスク記憶装置。
【請求項６】
ヘッドによる記録再生が行われるディスク媒体とホストとの間で転送されるデータを一時的に記憶するためのバッファメモリ内に、複数のセグメントに分割可能なセグメントキャッシュバッファが確保されたディスク記憶装置におけるセグメントキャッシュ制御方法であって、
前記ホストからディスク書き込みを指定するライトコマンドが発行される毎に、当該コマンドと共に前記ホストから転送されるデータのサイズが所定サイズ以下であるか否かを調べ、所定サイズ以下の場合には当該データを前記セグメントキャッシュバッファ内に割り当てた当該データに対応するサイズのセグメントに記憶し、
前記セグメントにホストからのデータを記憶する毎に、当該セグメントを管理するためのセグメント管理ブロックであって、当該セグメントに記憶されているデータの前記ディスク媒体上の書き込み先を示すアドレス情報、当該セグメントのサイズを示すセグメント長、並びにヘッドの移動動作が所定の時間内に行える位置関係にあるアドレス情報同士を同一グループとして分類する近傍アドレス別分類情報が設定されたセグメント管理ブロックをセグメント管理テーブル内に生成し、
前記セグメント管理テーブル内に生成された、前記近傍アドレス別分類情報で同一グループに分類されたセグメント管理ブロックのうち、予め定められた書き込み条件を満たしたグループのセグメント管理ブロックを検出し、そのグループを単位に、そのグループのセグメント管理ブロックに基づいてディスク書き込みを行うことを特徴とするセグメントキャッシュ制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ホストとディスク媒体間で転送されるデータを一時的に記憶するバッファメモリを備えたディスク記憶装置に係り、特に当該バッファメモリのバッファ領域を複数のセグメントに分割し、これをアドレスに応じて順位付け管理を行うことでディスク媒体への書き込みを効率よく行うのに好適なディスク記憶装置及び同装置におけるセグメントキャッシュ制御方法に関する。
【０００２】
【従来の技術】
近年のディスク記憶装置は、ホスト（ホストコンピュータ等のホストシステム）とディスク媒体間で転送されるデータを一時的に記憶するバッファメモリを備えているのが一般的である。
【０００３】
特開平８−３２８７４７号公報には、バッファメモリを効率よく管理するための技術（以下、先行技術と称する）が記載されている。上記公報に記載された先行技術では、例えば図７に示すように、バッファメモリ７１（のキャッシュバッファ領域）には、バースト転送用のセグメントＢと、リードとライト兼用のセグメントＡとが確保され、それぞれがデータ転送時のタイミングに応じてサイズや開始アドレスが変更されるようになっている。
【０００４】
このようなバッファメモリ７１を備えた上記公報記載のディスク記憶装置では、ホスト７２から例えば１６ブロックのディスク書き込みを指示するライトコマンドを受け取ると、バッファメモリ７１にそのデータが遅延なく連続して転送される。転送されたデータはバッファメモリ７１上のバースト転送用セグメントＢに格納される。ここでは、セグメントＢのサイズは１６ブロック（１６セクタサイズ）、セグメントＡのサイズは２０ブロック（２０セクタサイズ）、１セクタサイズは５１２バイトであるとする。
【０００５】
図７の例では、ホスト７２から転送されたデータはＨＰ（ホストポインタ）が指すセグメントＢの開始アドレスａ１、例えば１００００Ｈ（末尾のＨは１６進表現であることを示す）から順次格納されていく。転送データのサイズは１６ブロックであるため、１００００ＨからセグメントＢの終端である１１ＦＦＦＨまでデータが貯えられることになる、
ここで、先のライトコマンドに続いて次のライトコマンドが発行されたものとする。このとき、ＨＰはセグメントＢの開始アドレスａを示しているが、これを次のアドレスであるセグメントＡの開始アドレスａ２、つまり１２０００Ｈを指すように変更することで、次のライトコマンドに応じてホストから遅延なく送られてくるデータを空いているセグメントＡに格納することができる。ホスト７２はセグメントＢにデータを転送しているつもりで、実際はセグメントＡにデータを転送していることになる。
【０００６】
そして、またデータが１６ブロック分転送されると、ホスト７２側からみたときセグメントＢは満杯になり、アドレスａ２に到達したことになるため、今度はＨＰにセットするアドレスをセグメントＢの開始アドレスａ１にする。このようにＨＰにセグメントＢ→セグメントＡ→セグメントＢ→…の如く開始アドレスを交互に切り替え設定しながらデータ転送を連続して行う。
【０００７】
ホストからデータがセグメントＡ，Ｂに転送されている間、まずセグメントＢに格納されたデータは、ＤＰ（ディスクポインタ）が指すセグメントＢの開始アドレスａ３から順に取り出されてディスク７３に書き込まれる。そしてセグメントＢのデータが空になると、ＤＰにセグメントＡのアドレスａ４がセットされて、今度はセグメントＡに格納されているデータがディスク７３に書き込まれる。以下、ＤＰについてもＨＰと同様にセグメントＢ→セグメントＡ→セグメントＢ→…のように切り替え設定を繰り返していくことで、データ転送を遅延させることなくディスク７３に格納していくことができる。
【０００８】
このように上記先行技術は、ホストからシーケンシャルにライトコマンドが発行される場合、つまりライトマルチプルコマンドのように複数の書き込みブロックが連続して送られてくる場合に、データを遅延なく連続的にディスクに書き込むことを目的としたシーケンシャルライトに適した技術である。
【０００９】
【発明が解決しようとする課題】
上記先行技術は、ライトマルチプルコマンドのように複数の書き込みブロックが連続して送られてくる場合、つまりシーケンシャルライトの場合に、バッファメモリ上のバースト転送用セグメントとリード／ライト兼用セグメントを用いて、遅延なく効率的にディスク媒体ヘのデータ書き込みを行うことには確かに適している。
【００１０】
しかし、送られてくるデータが１ブロックや２ブロック等の小サイズの場合で書き込み先アドレスが連続していない場合、つまりランダムライトの場合には、ホストからライトコマンドが発行される度にディスクヘの書き込みを行うため、ヘッドのシーク動作やディスクの回転待ち時間などのディスクアクセスヘのオーバーヘッドが大量に発生する。これは、不連続なアドレスヘのアクセスを要求するランダムライトコマンドが頻繁に発生したときに起きる問題である。
【００１１】
本発明は上記事情を考慮してなされたものでその目的は、ホストから転送されたデータが小ブロックサイズの場合は、分割したセグメントに保持していき、物理的にある程度連続したセクタヘのアクセスが可能な状態のときにディスクアクセスを行うことにより、ヘッドの移動量とディスクアクセス回数を軽減してオーバーヘッドを小さくし、ランダムライトの速度向上が図れるディスク記憶装置及び同装置におけるセグメントキャッシュ制御方法を提供することにある。
【００１２】
【課題を解決するための手段】
本発明は、ヘッドによる記録再生が行われるディスク媒体とホストとの間で転送されるデータを一時的に記憶するバッファメモリを備えたディスク記憶装置において、上記バッファメモリ内に確保される、複数のセグメントに分割可能なセグメントキャッシュバッファと、このセグメントキャッシュバッファ内の各セグメント毎に生成されるセグメント管理ブロックであって、当該セグメントに記憶されているデータのディスク媒体上の書き込み先を示すアドレス情報が設定されるアドレスフィールド、当該セグメントのサイズを示すセグメント長が設定されるセグメント長フィールド、並びにヘッドの移動動作が所定の時間内に行える位置関係にあるアドレス情報同士を同一グループとして分類する情報が設定される近傍アドレス別分類フィールドを持つセグメント管理ブロックを備え、上記セグメントキャッシュバッファを管理するためのセグメント管理テーブル記憶手段と、ホストからディスク書き込みを指定するライトコマンドが発行されると共にディスク書き込みの対象となるデータが転送され、そのデータサイズが所定サイズ以下である場合に、当該データを上記セグメントキャッシュバッファ内に割り当てた同サイズのセグメントに記憶させると共に、当該セグメントを管理するためのセグメント管理ブロックを上記セグメント管理テーブル内に生成するセグメントキャッシュ制御手段と、上記セグメント管理テーブル内に生成された、近傍アドレス別分類フィールドで同一グループに分類されたセグメント管理ブロックのうち、予め定められた書き込み条件を満たしたグループのセグメント管理ブロックに基づいて、グループ単位でディスク書き込みを行うディスク書き込み制御手段とを備えたことを特徴とする。
【００１３】
即ち本発明においては、小ブロックサイズの不連続なアドレスのライトコマンドが連続して発行された場合、つまりランダムライトのときは、転送データを複数のセグメントに分割可能なセグメントキャッシュバッファに一時的に格納しておくと共に、ディスク書き込み先を示すアドレス情報が、連続してディスク書き込みが行えるようなディスク媒体上の位置関係にあるもの同士を同一グループとして分類して管理するためのセグメント管理ブロックを各セグメント毎にセグメント管理テーブル内に生成登録しておき、書き込み条件が成立した場合に、該当するグループに属するセグメント管理ブロックに従って、まとめてディスク書き込みが行われる構成を適用している。
【００１４】
このように本発明によれば、小ブロックサイズの不連続なアドレスのライトコマンドが連続して発行された場合に、セグメント管理テーブルを使用してデータの書き込みタイミングを調整し、連続してデータを書き込める状態となったときにグループ単位でディスク書き込みが行われることから、ディスクアクセス回数を減らしてオーバーヘッドを低減することが可能となる。
【００１５】
また本発明においては、アドレス順にグループ分けするのではなく、ヘッドの移動動作が所定の時間内に行えるような物理的な位置関係、つまりディスクアクセス（ヘッド移動動作）が最適に行える位置関係にあるアドレス同士を同一グループとして分類し、グループ単位でディスク書き込みを行う構成としていることから、シークやスキューによるオーバーヘッドを減らすことができる。
【００１６】
ここで同一グループとして分類するためのヘッド移動動作が所定時間内で行える条件として、書き込み先アドレスが同一トラック上、或いは（同一サブゾーン内の）隣接トラック上、或いはサブゾーンをまたいで隣接トラック上にあるといった物理的な位置関係を適用するとよい。この他、グループ分けに、ディスクの回転待ち時間が所定時間内に抑えられる物理的な位置関係を適用することも可能である。このようなグループ分けにより、ヘッド渡りやシリンダ渡り等のオーバーヘッドを軽減できる。
【００１７】
なお、同一グループとして分類する条件として、ヘッドの移動動作が所定の時間内に行えるような物理的な位置関係を用いていることから、連続するアドレスであっても、この条件に合致しないものは同一グループとしての分類の対象外とすることで、グループ単位でまとめてディスク書き込みを行う際に、オーバーヘッドか発生するのを防ぐことが可能となる。
【００１８】
また、上記の書き込み条件の成立を、近傍アドレス別分類フィールドで同一グループに分類されたセグメント管理ブロックの数が所定数を越えたことをもって判定することにより、グループ単位でまとめて行うディスク書き込みを効率的に行うことが可能となる。
【００１９】
この他に、上記の書き込み条件の成立を、セグメントキャッシュバッファにおけるセグメント分割数が所定数に達したことをもって判定することにより、セグメント分割数が大きくなって、セグメント管理テーブルやキャッシュセグメントバッファのオーバーフローが発生するのを防ぐことができる。
【００２０】
この他に、近傍アドレス別分類フィールドで分類されるグループを単位に、そのグループ内で最も最近に生成されたセグメント管理ブロックの生成時からの経過時間を調べ、所定時間を越えたたことをもって、該当するグループの書き込み条件が成立したと判定することにより、グループ分けによっては全くアクセスされない領域が発生するのを、ＬＲＵ法（Least Recently Used Rule）的な手法の適用で防ぐことが可能となる。
【００２１】
この他に、現在のヘッド位置からヘッド移動動作が所定の時間内に行える位置関係にあるアドレス情報を持つセグメント管理ブロックを含むグループが存在するのを検出した場合に、当該グループについて書き込み条件が成立したと判定することにより、ヘッドのシーク動作を最小に抑えることが可能となる。
なお、小ブロックサイズでない連続アドレスのライトコマンドに対しては、従来から知られているシーケンシャルライトを適用するとよい。
【００２２】
【発明の実施の形態】
以下、本発明の実施の形態につき、磁気ディスク装置に適用した場合を例に図面を参照して説明する。
図１は本発明の一実施形態に係る磁気ディスク装置の全体構成を示すブロック図である。
【００２３】
図１の構成では、２枚のディスク（磁気記録媒体）１１-0，１１-1が積層配置された磁気ディスク装置を想定している。ディスク１１-i（ｉ＝０，１）の両面（両記録面）には、同心円状の多数のトラックが形成される。ディスク１１-iでは、トラック（シリンダ）の物理的な周の長さが長くなるディスク上の外周側の領域を有効に使用して当該ディスク１１-iのフォーマット効率を上げるために、図２に示すように当該ディスク１１-iの記録面を半径方向に（複数のトラックからなる）複数のゾーンＺに分割し、各ゾーンＺ毎に、シリンダ（トラック）当たりのデータセクタ数が異なる（外周側のゾーンほど多くなる）構成、即ちデータ転送速度（転送レート）が異なる（外周側のゾーンのシリンダほど速くなる）ＣＤＲ（Constant Density Recording）方式のフォーマットを適用している。ゾーンＺ内では、データは一定の記録密度でディスク１１-iの回転方向に沿って記録される。
【００２４】
ディスク１１-iの各トラックには、ヘッドのシーク・位置決め等に用いられるサーボ情報が記録されたサーボ領域ＳＶが等間隔で配置されている。このサーボ領域ＳＶ間はユーザ領域となっており、当該ユーザ領域には複数（一般には２〜５個）の記録単位としてのセクタ（データセクタ）が配置されている。各サーボ領域ＳＶは、ディスク１１-i上では中心から各トラックを渡って放射状に等間隔で配置されている。
【００２５】
ゾーンＺは、更に複数のサブゾーンＳＺに分割される。ここでは、ゾーンＺは３つのサブゾーンＳＺに分割される。各サブゾーンＳＺは例えば図３に示すように３つのトラックを有している。トラック上のデータセクタにはディスク１１-iの回転方向に当該トラックに沿って情報が書き込まれる。
【００２６】
同一サブゾーンＳＺでは、論理アドレスは連続している。図３に示すディスク１１-0，１１-1の外周側のサブゾーンＳＺを例にとると、論理アドレスは、ディスク１１-0のヘッド０の外周側からのトラックａ，ｂ，ｃ、同じディスク１１-0のヘッド１の内周側からのトラックｄ，ｅ，ｆディスク１１-1のヘッド０の外周側からのトラックｇ，ｈ，ｉ、そしてディスク１１-1のヘッド１の内周側からのトラックｊ，ｋ，ｌの順（アルファベット順）となっている。物理的にはトラックｃに（内周方向に）隣接するトラックであって、当該トラックｃと同じディスク１１-0の記録面（ヘッド０）に配置されている別のサブゾーンＳＺ上のトラックｍは、論理アドレス的には、トラックｃに連続しておらず、ディスク１１-1のヘッド３上のトラックｌに連続している。
【００２７】
このようなゾーンＺの細分化（つまりサブゾーンＳＺ）と論理アドレスの割り付けの技術は、ディスク（ここではディスク１１-0，１１-1）上の限られたアドレス範囲（同一サブゾーンＳＺ）内でのランダムアクセスにおけるヘッド移動動作等を最適化するために提案されている従来技術である。
【００２８】
この従来技術においては、例えば図３のディスク１１-0，１１-1で全面シーケンシャルライトをする場合には、まず最外周のサブゾーンＳＺを対象として、ヘッド０のトラックａ上のデータセクタにデータが書き込まれる。次に隣接トラックつまりトラックｂ上のデータセクタにデータが書き込まれる。以下、同じサブゾーンＳＺを対象として、ｃ，ｄ，ｅ，ｆ，ｇ，ｈ，ｉ，ｊ，ｋ，ｌのように、アルファベット順にデータが書き込まれる。そして、トラックｌ上のデータセクタへのデータ書き込みが完了すると、内周側に隣接する別のサブゾーンＳＺを対象に、ｍ，ｎ，ｏ，ｐ…のようにアルファベット順にデータが書き込まれる。つまり、１つのディスク１１-iのサブゾーンＳＺに配置されたトラック上のデータセクタに対してデータの書き込みを終えると、同じディスク１１-iの記録面上で半径方向（内周方向）に隣接する別のサブゾーンＳＺにヘッドを移動させず、ヘッド方向（ディスク面に対して垂直方向）に移動して次のヘッドに移り、その位置から外周方向に向かって同じサブゾーンＳＺに配置されたトラック上のデータセクタに対してデータの書き込みが行われる。
【００２９】
同様のディスク書き込み動作は、ホストから連続してライトコマンドが発行され、且つそのアドレス（ライト先のディスクアドレス）が連続している場合にも行われる。即ち、ホストからライトコマンドが発行されると、対応するデータはバッファメモリ２４に一時的に記憶される。その後複数のライトコマンドが連続して発行され、且つそのアドレスがａ，ｂ，ｃ，ｄ，ｅ…のように連続している（シーケンシャルな）場合には、各コマンド毎にホストから転送されるデータがバッファメモリ２４に溜まった後に、ディスク書き込みが連続して行われる。このように、ホストから連続してライトコマンドが発行され、且つそのアドレスが連続している場合には、バッファメモリ２４にデータが溜まった後にディスク書き込みが連続して行われるため、ディスクアクセスによって発生するオーバーヘッドは問題とはならない。
【００３０】
ところが、ホストから連続してライトコマンドが発行されても、そのアドレス（ライト先のディスクアドレス）が連続していない場合には、（アドレスが連続している場合と異なって）バッファメモリ２４にデータを溜めておかずに、その都度、つまりホストからライトコマンドが発行される度にディスク書き込みが行われるために、オーバーヘッドが発生する。以下、このディスクアクセス時のオーバーヘッドについて説明する。
【００３１】
ディスク１１-iにアクセスする場合、同一トラック上の離れたデータセクタにアクセスするには、ディスク１１-iの回転待ちが発生する。また離れたトラックにアクセスするにはトラックシークやトラックスキュー（位置ずれ）が発生し、ヘッド切り替えを行った場合でもヘッドスキューが発生する。このようにシーケンシャルでないアドレスにアクセスする場合、つまりランダムなアドレスにアクセスする場合は、上記したシークやスキューによる膨大なオーバーヘッドが生じる。
【００３２】
サブゾーンＳＺを適用した従来技術は、このようなランダムアクセス時のパフォーマンスを改善するためのもので、シーク時間の短縮を図るため、先に述べたようにサブゾーンＳＺの範囲内でアクセス方向をヘッド方向（ヘッド０→ヘッド１→ヘッド２→ヘッド３）とすることで、シリンダ方向（外周から内周への半径方向）の平均シーク距離を短くしている。しかし、この従来技術でも、アドレスが例えばｍ，ｋ，ｃ，ｑの場合のように、サブゾーンＳＺ間のヘッド移動とヘッド切り替えとを同時に必要とする場合（ｍ→ｋ，ｃ→ｑ）には、ヘッド１２及びトラックのシーク動作やスキューが頻繁に発生して、ヘッドの移動量とディスクの回転待ち時間が増加し、オーバーヘッドが大きくなる。
【００３３】
このように、サブゾーンＳＺを適用した従来技術は、限られたアドレス範囲（同一サブゾーン）内でのランダムアクセスにおけるヘッド移動動作等に関する論理アドレスによる最適化技術であり、当該アドレス範囲から外れているランダムアクセス、つまりディスク媒体全体のランダムアクセスに対しては何ら考慮されておらず、オーバーヘッドを少なくすることはできなかった。また、同一サブゾーンＳＶであっても、ランダムなアクセス、例えばトラックａ上のデータセクタ、次にトラックｄ上のデータセクタ、次にまたトラックａ上のデータセクタ、というようなディスク書き込みを指定するライトコマンドが連続して発生すると、ライトコマンドが発生する度にディスク書き込みが行われることから、オーバーヘッドは少なくない。また、ヘッド移動量やディスクの回転待ち時間も必ずしも少なくない。
【００３４】
そこで本実施形態では、後述するように、セグメントキャッシュバッファ２４０へのライトコマンド単位の一時的なデータ保持動作と、セグメント管理テーブル２２０を利用して物理的にある程度連続したセクタヘのアクセスが可能な状態のときに行われるディスク書き込み動作により、バッファメモリ２４ディスク１１-0，１１-1の全領域のランダムアクセスに対し、ヘッドの移動量及びディスクアクセスの回数の低減を可能とする物理アドレスによる最適化を図るようにしている。
【００３５】
再び図１を参照すると、各ディスク１１-iの各記録面側には、それぞれヘッド（磁気ヘッド）１２が当該ディスク１１-iの記録面に対向して設けられている。各ヘッド１２はロータリ型アクチュエータとしてのキャリッジ（ヘッド移動機構）１３に取り付けられており、当該キャリッジ１３の回動に従ってディスク１１-iの半径方向に移動する。これにより、ヘッド１２は、目標トラック上にシーク・位置決めされるようになっている。ディスク１１-iはスピンドルモータ（ＳＰＭ）１４により高速に回転する。キャリッジ１３は、ボイスコイルモータ（ＶＣＭ）１５により駆動される。
【００３６】
スピンドルモータ１４及びボイスコイルモータ１５は、モータドライバ回路（モータドライバＩＣ）１６に接続されている。モータドライバ回路１６は、スピンドルモータ１４に制御電流を流して当該モータ１４を駆動する他、ボイスコイルモータ１５に制御電流を流して当該モータ１５を駆動する。この制御電流の値（制御量）は、ＣＰＵ２０の計算処理で決定される。
【００３７】
ヘッド１２は、目標トラック上にシーク・位置決めされた後、ディスク１１-iの回転動作により、そのトラック上を走査する。またヘッド１２は、走査によりそのトラック上に等間隔を保って配置されたサーボ領域ＳＶのサーボ情報を順に読み込む。またヘッド１２は、走査により目標データセクタに対するデータの読み書きを行う。
【００３８】
各ヘッド１２はフレキシブルプリント配線板（ＦＰＣ）に実装されたヘッドアンプ回路（ヘッドＩＣ）１７と接続されている。ヘッドアンプ回路１７は、（ＣＰＵ２０からの制御に従う）ヘッド１２の切り替え、ヘッド１２との間のリード／ライト信号の入出力等を司る。ヘッドアンプ回路１７は、ヘッド１２で読み取られたアナログ出力（ヘッド１２のリード信号）を増幅すると共に、Ｒ／Ｗ（リード／ライト）回路（リード／ライトＩＣ）１８から送られるライトデータに所定の信号処理を施してこれをヘッド１２に送る。
【００３９】
Ｒ／Ｗ回路１８は、ヘッド１２によりディスク１１-iから読み出されてヘッドアンプ回路１７で増幅されたアナログ出力（ヘッド１２のリード信号）を一定の電圧に増幅するＡＧＣ（自動利得制御）機能と、このＡＧＣ機能により増幅されたリード信号から例えばＮＲＺコードのデータに再生するのに必要な信号処理を行うデコード機能（リードチャネル）と、ディスク１１へのデータ記録に必要な信号処理を行うエンコード機能（ライトチャネル）と、上記リード信号からのサーボ情報抽出を可能とするために当該リード信号をパルス化してパルス化リードデータとして出力するパルス化機能とを有している。
【００４０】
サーボ回路１９は、Ｒ／Ｗ回路１８から出力されるリードパルスから（ヘッド１２のシークに必要な）サーボ情報中のシリンダコード等を抽出すると共に、同じくＲ／Ｗ回路１８から出力される（ＡＧＣ機能により増幅された）リード信号から（ヘッド１２の位置決め制御に必要な）サーボ情報中のバーストデータ（位置誤差データ）を抽出し、ＣＰＵ２０に出力する。
【００４１】
ＣＰＵ（Central Processing Unit ）２０は、ＲＯＭ（Read Only Memory）２１に格納されている制御プログラムに従って磁気ディスク装置の各部の制御、例えばサーボ回路１９により抽出されたシリンダコード、バーストデータに基づくヘッド１２のシーク・位置決め制御、ホストからのリード／ライトコマンドに従うＨＤＣ２３によるリード／ライト制御等を行う。
【００４２】
ＣＰＵ２０には、ＲＯＭ２１の他に、ＣＰＵ２０にの作業領域等を提供するＲＡＭ（Random Access Memory）２２、及びＨＤＣ（ディスクコントローラ）２３が接続されている。ＲＡＭ２２には、後述するバッファメモリ２４（に確保されるセグメントキャッシュバッファ２４０）の管理テーブル（セグメント管理テーブル）２２０が保持される。
【００４３】
ＨＤＣ（ディスクコントローラ）２３は、ホストＩ／Ｆ（インタフェース）２５を介して接続されるホストとの間でコマンド、データの通信を行うためのプロトコル処理、バッファメモリ２４に対するアクセス制御、Ｒ／Ｗ回路１８を通じてのディスク１１-iに対する読み出し／書き込み制御等を司る。ＨＤＣ２３には、例えばＲＡＭにより構成されるバッファメモリ２４が接続されている。
【００４４】
バッファメモリ２４の一部には、ホストから転送されたライトデータを一時記憶するための（ライトデータ用の）セグメントキャッシュバッファ２４０（の領域）が確保される。セグメントキャッシュバッファ２４０は、複数の可変長のセグメントに分割して使用される。各セグメントはホスト装置からのコマンド単位で生成されるもので、ＲＡＭ２２内に置かれるセグメント管理テーブル２２０により管理される。なお、図１では、ディスク１１-iから読み出されたリードデータを一時記憶するための（リードデータ用の）セグメントキャッシュは省略されている。また、バッファメモリ２４がＨＤＣ２３に内蔵されるものであっても構わない。
【００４５】
ホストＩ／Ｆ２５は、ホスト（ホストシステム）とＨＤＣ２３に接続され、ホストからの（リードコマンド、ライトコマンド等の）コマンド、ライトデータの受信と、ホストへのリードデータの送信等を行う。
【００４６】
図４は、セグメントキャッシュバッファ２４０におけるセグメント分割の様子と、当該キャッシュバッファ２４０内の各セグメントを管理するセグメント管理テーブル２２０のデータ構造例を示す。
【００４７】
図では、セグメントキャッシュバッファ２４０において、（ホストからの転送ブロック長が閾値以下、つまり小ブロック長のディスク書き込みを指示する６つのライトコマンドに応じて）６つのセグメントが確保されている様子が示されている。
【００４８】
セグメント管理テーブル２２０は、当該テーブル２２０のヘッダ部をなすセグメント数（セグメント分割数）の設定フィールド（セグメント分割数フィールド）２２１と、各セグメント毎に生成されるセグメント管理ブロック２２２とから構成される。セグメント分割数フィールド２２１の内容は、セグメント管理ブロック２２２が生成される毎に更新（１インクリメント）される。
【００４９】
セグメント管理ブロック２２２は、ホストからの（小ブロック長のディスク書き込みを指示する）ライトコマンドに応じてＣＰＵ２０により生成されるもので、対応するセグメントに格納されているライトデータのディスク１１上の書き込み開始アドレスの設定フィールド（開始アドレスフィールド）２２２ａ、当該セグメントのサイズ（セグメント長）の設定フィールド（セグメント長フィールド）２２２ｂ、及び近傍アドレス別分類フィールド２２２ｃを含む。上記開始アドレスには、物理的なアドレス、或いは論理的なＣＨＳ（Cylinder Head Sector）方式のアドレスまたはＬＢＡ（Linear Block Address）方式のアドレスを用いることができる。
【００５０】
近傍アドレス別分類フィールド２２２ｃは、対応するセグメントの（ディスク１１-i上の）開始アドレスが近傍であるもの（ここでは、同一トラックまたは隣接トラックにあるもの）同士、つまりヘッド１２の移動動作（ディスクアクセス）が最適に行える（最小のシーク量、スキュー量で所定の時間内に行える）位置関係にあるもの同士をグループ化し、その情報、即ち分類（グループ化）されているデータの種類とその個数、及び同一分類のリンク情報を保持するためのものである。
【００５１】
ここで、「データの種類」は、
（１）同一トラック上にある関係（値０）
（２）同一サブゾーンＳＺ内の隣接トラック上にある関係（値１）
（３）サブゾーンＳＺをまたいだ隣接トラック上にある関係（値２）
の３種類である。
【００５２】
次に「個数」は、カレントのセグメント管理ブロック２２２が生成された時点での同一分類（グループ）と判定されたセグメント管理ブロック２２２の個数を表す。
【００５３】
次に「リンク情報」には、カレントのセグメント管理ブロック２２２と同一分類の中で最も最近に生成された（つまり最新の）セグメント管理ブロック２２２の番号（ブロック番号）が用いられる。該当するものが存在しない場合、つまり他に同一分類に属するものがない場合には、ブロック番号＃０が用いられる。
【００５４】
図５に、セグメント管理テーブル２２０の具体的な内容例を示す。ここでは、図５（ａ）のように１ブロック長（１セクタサイズ長）のアドレスｕ，ｖ，ｗ，ｘ，ｙ，ｚ（のデータセクタ）にデータをライトする各コマンド、つまり不連続なアドレスに対する６つのライトコマンドが順に発行された場合を例に、セグメント管理テーブル２２０の内容を図５（ｂ）に示してある。
【００５５】
図５の例では、アドレスｕ，ｖ，ｙ（のデータセクタ）は同一トラック上にあるため、同一グループに分類される。したがってアドレスｕ，ｖ，ｙに対応するライトコマンドに応じて生成された３つのセグメント管理ブロック＃１，＃２，＃５（２２２）内の近傍アドレス別分類フィールド２２２ｃには、「データの種類」を示す値として全て０が、「個数」を示す値としてそれぞれ１，２，３が、そして「リンク情報」としてリそれぞれ＃０，＃１，＃２が設定される。
【００５６】
同様に、アドレスｗ，ｚ（のデータセクタ）は同一トラック上にあり、このアドレスｗ，ｚ（のデータセクタ）とアドレスｘ（のデータセクタ）とはサブゾーンＳＺをまたいだ隣接トラック上にあるため、アドレスｗ，ｘ，ｚは同一グループに分類される。したがってアドレスｗ，ｘ，ｚに対応するライトコマンドに応じて生成される３つのセグメント管理ブロック＃３，＃４，＃６（２２２）内の近傍アドレス別分類フィールド２２２ｃには、「データの種類」を示す値としてそれぞれ０，２，０が、「個数」を示す値としてそれぞれ１，２，３が、そして「リンク情報」としてそれぞれ＃０，＃３，＃４が設定される。
【００５７】
次に本実施形態の動作を図６のフローチャートを参照して説明する。
ホストから図１の磁気ディスク装置に対してコマンド、例えばライトコマンドが発行されたものとする。このライトコマンドは、ホストＩ／Ｆ２５を介してＨＤＣ２３で受信される。ＨＤＣ２３は、ホストからのコマンドを受信すると、その旨の割り込みをＣＰＵ２０に発する。ＣＰＵ２０は、この割り込みによりＨＤＣ２３から受信コマンド（ここではライトコマンド）を受け取って解釈する。
【００５８】
ＣＰＵ２０は、ＨＤＣ２３から受け取ったコマンドがライトコマンドの場合、当該コマンドの指定する書き込みセクタ数をチェックし、当該コマンドと共にホストから転送されるデータのブロック長（セクタ数）が閾値以下（例えば８セクタ以下）であるか否か、つまり小ブロック長のディスク書き込みを指定すライトコマンドであるか否かを判断する（ステップＳ１）。
【００５９】
もし否であれば、つまり８セクタを越えるブロック長であれば、ＣＰＵ２０はＨＤＣ２３を制御して、ホストからの転送データをバッファメモリ２４内のセグメントキャッシュバッファ２４０とは異なるバッファ領域（図７のバースト転送用セグメントＢまたはリード／ライト兼用セグメントＡに相当するバッファ領域）格納させ、即時に、またはバッファ領域が満杯となったとき、或いは別アドレスのシーケンシャルデータが転送されたときにディスク書き込みを行う、通常のライト処理を実行させる（ステップＳ２）。
【００６０】
これに対して８セクタ以下のブロック長であれば、ＣＰＵ２０はＨＤＣ２３を制御して、バッファメモリ２４のセグメントキャッシュバッファ２４０内に対応するサイズのセグメント＃ｉを確保させ、そのセグメント＃ｉにホストからの転送データを格納させる（ステップＳ３）。
【００６１】
次にＣＰＵ２０は、セグメントキャッシュバッファ２４０を管理するための、ＲＡＭ２２内に置かれるセグメント管理テーブル２２０のセグメント分割数フィールド２２１の内容（セグメント分割数）を更新、即ち１インクリメントする（ステップＳ４）。
【００６２】
次にＣＰＵ２０は、セグメント管理テーブル２２０内に、ステップＳ３で転送データが格納されたセグメント＃ｉに対応する新たなセグメント管理ブロック２２２（＃ｉ）を作成し、フィールド２２２ａにライトコマンドで指定されたディスク１１上の書き込み開始アドレス＃ｉを、フィールド２２２ｂにセグメント長＃ｉを、それぞれ登録する（ステップＳ５）。
【００６３】
次にＣＰＵ２０は、既に登録済みの（つまり以前に作成した）セグメント管理ブロック２２２の（フィールド２２２ａに設定されている）開始アドレスを検索し（ステップＳ６）、検索した開始アドレスのいずれかとステップＳ５で新たに作成したセグメント管理ブロック２２２（つまりカレントなセグメント管理ブロック２２２）の開始アドレスが近傍アドレスの関係にあるか否か判断する（ステップＳ７）。ここでの近傍アドレスの関係にあるか否かの判断は、同一トラック上、または隣接トラック上に存在するか否かにより行われる。
【００６４】
ＣＰＵ２０は、ステップＳ７での判断の結果、近傍アドレスであれば同一グループとして、カレントなセグメント管理ブロック２２２の近傍アドレス別分類フィールド２２２ｃへの情報登録を行う（ステップＳ８）。ここでは「データの種類」として、カレントなセグメント管理ブロック２２２の開始アドレスが、登録済みのセグメント管理ブロック２２２の開始アドレスに対して、同一トラック上にある場合には値０が、同一サブゾーンＳＺ内の隣接トラック上にある場合には値１が、サブゾーンＳＺをまたいだ隣接トラック上にある場合には値２が登録される。また、「個数」として、カレントなセグメント管理ブロック２２２を含む、同一グループのセグメント管理ブロック２２２の個数（同一グループのセグメント管理ブロック２２２の中で最大の個数に１を加算した値）が登録される。更に「リンク情報」として、同一グループのセグメント管理ブロック２２２のうち最新のセグメント管理ブロック２２２の番号、つまり同一グループのセグメント管理ブロック２２２のうち最も大きいブロック番号が登録される。
【００６５】
これに対してステップＳ７での判断の結果、近傍アドレスでないならば、ＣＰＵ２０は別グループとしてカレントなセグメント管理ブロック２２２の近傍アドレス別分類フィールド２２２ｃへの情報登録を行う（ステップＳ９）。ここでは、図５中のセグメント管理ブロック＃１の例のように、「データの種類として」値０が、「個数」として１が、「リンク情報」として「＃０」が登録される。
【００６６】
ＣＰＵ２０はステップＳ８またはＳ９を実行すると、セグメント管理テーブル２２０内のセグメント管理ブロック２２２の中に書き込み条件を満たしたものがあるか否かを判断する（ステップＳ１０）。ここで書き込み条件を満たしたとは、同一グループとして分類されたセグメント管理ブロック２２２が予め定められた一定個数を越えたこととする。
【００６７】
もし、書き込み条件を満たしたものがないならば、ＣＰＵ２０はホストからの次のコマンドを待つ。これに対し、書き込み条件を満たしたもの（グループ）が存在するならば、ＣＰＵ２０はＨＤＣ２３を制御して、セグメント管理テーブル２２０内のセグメント管理ブロック数が一定個数を越えた同一グループ（つまり近傍アドレス別分類フィールド２２２ｃにより分類された同一グループ）を対象に、そのブロックに属する各セグメント管理ブロック２２２２に対応するセグメントキャッシュバッファ２４０内のセグメントのデータをディスク１１-iに連続的に書き込ませる（ステップＳ１１）。つまり、近傍アドレス別分類が同一グループとなっているもののうち、セグメント管理ブロック数が一定個数を越えたグループのセグメントのデータについては、対応するコマンドの発行順に無関係に、一緒に連続してディスク書き込みを行わせる。
【００６８】
ＣＰＵ２０は、ステップＳ１１を実行すると、セグメント管理テーブル２２０からディスク書き込みを完了したセグメント管理ブロック２２２を削除し、当該テーブル２２０内のセグメント分割数フィールド２２１の値（セグメント分割数）を、削除したセグメント管理ブロック数分減算する（ステップＳ１２）。そしてＣＰＵ２０はホストからの次のコマンドを待つ。
【００６９】
以上に述べたように本実施形態では、不連続なアドレスに対する小ブロックサイズのディスク書き込みを指示するライトコマンドが連続して発行された場合に、ホストから転送されたデータを、バッファメモリ２４内のキャッシュバッファ２４０にコマンド単位で確保されたセグメントに保持するようにしている。これに対し、それ以外のシーケンシャルなディスク書き込み要求があった場合は、ホストからのデータをバッファメモリ２４内にキャッシュバッファ２４０とは別に確保されたシーケンシャルアクセス用のバッファ領域に保持して、通常の（従来から知られている）ディスク書き込みとして処理する。
【００７０】
本実施形態では更に、キャッシュバッファ２４０にコマンド単位で確保されたセグメントに保持したデータを、当該セグメントに対応してセグメント管理テーブル２２０に生成したセグメント管理ブロック２２０（内の近傍アドレス別分類フィールド２２２）を用いて連続的なディスク書き込みが可能なグループ別に分類しておく。そして、予め定められた書き込み条件を満たしたグループのデータについて、該当するセグメント管理テーブル２２０（内のセグメント管理ブロック２２２）に従って、連続してディスク書き込みを行う。これにより、ヘッドの移動量とディスクアクセス回数を減らすことができ、つまりオーバーヘッドを少なくでき、ランダムライトの速度の向上が図れる。
【００７１】
以下、この理由について、図３を参照して説明する。
先に述べたように、ディスクにアクセスする場合、同一トラック上の離れたデータセクタにアクセスするには、ディスクの回転待ちが発生する。また離れたトラックにアクセスするにはトラックシークやトラックスキューが発生し、ヘッド切り替えを行った場合でもヘッドスキューが発生する。つまりランダムなアドレスにアクセスする場合は、シークやスキューによる膨大なオーバーヘッドが生じる。
【００７２】
サブゾーンＳＺは、こういったランダムアクセス時のパフォーマンスを改善するための手段であり、同一のサブゾーンＳＺの範囲内でアクセス方向をヘッド方向とすることで、シリンダ方向（半径方向）の平均シーク距離を短くしている。しかし、こういった改善がなされても、ランダムなアクセス要求が発生すると、従来技術ではその度にディスク書き込みが行われるため、オーバーヘッドは少なくなかった。
【００７３】
そこで本実施形態では、不連続なアドレスに対する小ブロックサイズのディスク書き込みを指示するライトコマンドが連続して発行された場合に、従来のように直ちにディスク書き込みを行わずに、つまりライトコマンドが発行される度にディスク書き込みを行わずに、指示されたデータ（ライトデータ）をバッファメモリ２４内のキャッシュバッファ２４０に保持しておくと共に、ディスク書き込み時のタイミングを考慮し、オーバーヘッドの少ないもの同士を同一グループにまとめるようにしている、
例えばトラックａ上のデータセクタが同一トラックａ上の次のデータセクタにアクセスするのに発生するオーバーヘッドは、回転待ちのみであり、これが最も小さい。そこで本実施形態では、同一トラック上のアドレスのものを１つのグループとして分類し、セグメント管理ブロック２２２内の近傍アドレス別分類フィールド２２２ｃに設定しておく。これにより、当該グループが書き込み条件を満たしたときに、当該グループに属する各アドレスへのディスク書き込みを連続的に行うことで、オーバーヘッドを減らすことができる。
【００７４】
同様に、同一サブゾーンＳＺ内の隣接トラック上のアドレスのものも１つのグループとして分類しておき、当該グループが書き込み条件を満たしたときに、当該グループに属する各アドレスへのディスク書き込みを連続的に行うことで、やはりオーバーヘッドを減らすことができる。
【００７５】
この他、例えば図４のセグメント＃１のデータの開始アドレスがトラックｍ上で、次のセグメント＃２の開始アドレスがトラックｋ上、次のセグメント＃３の開始アドレスがトラックｃ上であるとすると、ｃとｍは隣接トラックであるが、サブゾーンＳＺ化によって論理アドレス上では全く離れた距離に位置することになる。このため本実施形態では、サブゾーンＳＺをまたいだ隣接トラック上にあるｃとｍも同一グループとして管理しておき、当該グループが書き込み条件を満たしたときに、トラックｃ上のデータセクタとトラックｍ上のデータセクタへのディスク書き込みを連続的に行うことで、やはりオーバーヘッドを減らすことができる。逆に、図３においてトラックｌとトラックｍとは論理アドレス上では連続しているが、物理的（物理アドレス上）では全く離れており、トラックｌからトラックｍに移動するのにオーバーヘッドが大きくなるため、別グループとして管理する。
【００７６】
なお、以上に述べた実施形態では、書き込み条件として、同一グループとして分類されたセグメント管理ブロック２２２が予め定められた一定個数を越えたこととしたが、つまり書き込み条件を満たしたか否かをグループ単位で（且つ、そのグループのセグメント管理ブロック数で）判定するものとしたが、これに限るものではない。
【００７７】
例えば、セグメント分割数が閾値、例えばセグメント管理テーブル２２０に生成可能なセグメント管理ブロック２２２の数の最大値に達したことをもって、書き込み条件を満たしたと判定するようにしてもよい。この場合には、セグメント管理テーブル２２０内の全てのセグメント管理ブロック２２２について、グループ毎にディスク書き込みが連続して行われる。ここで、現在のヘッド１２のディスク１１-i上の位置に対して最小のシーク量、スキュー量となる位置関係にある、つまりディスクアクセス（ヘッド移動動作）が最適に行える位置関係にある開始アドレス（が設定されている開始アドレスフィールド２２２ａ）のセグメント管理ブロック２２２を含むグループを対象とするディスク書き込みが最初に行われるようにすると、オーバーヘッドを一層少なくできる。以下のディスク書き込みの順番も、先行するグループのディスク１１-i上の位置を基準に決定するとよい。このようにセグメント分割数が所定個数に達したことをもってディスク書き込みを行うことで、セグメント分割数が大きくなって、セグメント管理テーブル２２０やセグメントキャッシュバッファ２４０がオーバーフローするのを防ぐことができる。
【００７８】
この他に、セグメントキャッシュバッファ２４０に保持したデータの経過時間（保持時間）が所定時間を越えたことをもって、書き込み条件を満たしたとすることも可能である。具体的には、各セグメント管理ブロック２２２に、登録時の時刻情報を持たせ、近傍アドレス別分類によって最後にグループ入りしたセグメント管理ブロック２２２の時刻の中で最も古い時刻を調べ、現在時刻との差が所定時間を越える場合に、書き込み条件を満たしたと判定する。このような、いわゆるＬＲＵ法（Least Recently Used Rule）的な管理手法を適用することで、ディスクアクセスの機会のないグループについても、ディスク書き込みの対象とすることが可能となる。
【００７９】
更に、現在のヘッド１２のディスク１１-i上の位置からディスクアクセス（ヘッド移動動作）が最適に行える位置関係にあるアドレス（が設定されている開始アドレスフィールド２２２ａ）のセグメント管理ブロック２２２を含むグループが存在することをもって、書き込み情報を満たしたとすることも可能である。
【００８０】
また以上に述べた実施形態では、磁気ディスク装置に適用した場合について説明したが、本発明は、光磁気ディスク装置などのディスク記憶装置にも適用可能である。
【００８１】
【発明の効果】
以上詳述したように本発明によれば、不連続なアドレスに対する小ブロックサイズのデータのディスク書き込みを指示するライトコマンドが連続して発行された場合に、ホストからの転送データを該当する分割したセグメントに保持していき、物理的にある程度連続したセクタヘのアクセスが可能な状態のときにディスクアクセスを行うようにしたので、ヘッドの移動量とディスクアクセス回数を軽減してオーバーヘッドを小さくすることができ、ランダムライトの速度向上が図れる。
【図面の簡単な説明】
【図１】本発明の一実施形態に係る磁気ディスク装置の構成を示すブロック図。
【図２】図１中のディスク１１-i（ｉ＝１，２）のフォーマットの概念図。
【図３】図１中のディスク１１-0，１１-1の各記録面上の、ゾーンＺ、サブゾーンＳＺ、トラックの関係を示す概念図。
【図４】図１中のセグメントキャッシュバッファ２４０におけるセグメント分割の様子と、当該キャッシュバッファ２４０内の各セグメントを管理するセグメント管理テーブル２２０のデータ構造例を示す図。
【図５】セグメント管理テーブル２２０の具体的な内容例を、不連続なアドレスに対する６つのライトコマンドが順に発行された場合について示す図。
【図６】同実施形態におけるライトコマンド受信時の動作を説明するためのフローチャート。
【図７】複数の書き込みブロックが連続して送られてくる場合に、データを遅延なく連続的にディスクに書き込むことを目的としたシーケンシャルライトに適した従来技術を説明するための図。
【符号の説明】
１１-0，１１-1，１１-i…ディスク（ディスク媒体）
１２…ヘッド
１８…Ｒ／Ｗ回路
２０…ＣＰＵ（セグメントキャッシュ制御手段、ディスク書き込み制御手段）
２１…ＲＯＭ
２２…ＲＡＭ
２３…ＨＤＣ（ディスクコントローラ、ディスク書き込み制御手段）
２４…バッファメモリ
２２０…セグメント管理テーブル
２２１…セグメント分割数フィールド
２２２…セグメント管理ブロック
２２２ａ…開始アドレスフィールド
２２２ｂ…セグメント長フィールド
２２２ｃ…近傍アドレス別分類フィールド
２４０…キャッシュバッファ
【図１】
0003851723.tif 000002
【図２】
0003851723.tif 000003
【図３】
0003851723.tif 000004
【図４】
0003851723.tif 000005
【図５】
0003851723.tif 000006
【図６】
0003851723.tif 000007
【図７】
0003851723.tif 000008