(57)【特許請求の範囲】
【請求項１】
所定のデータサイズを表すクレジット単位で記憶領域を管理し、外部装置から転送されるデータを一時記憶するバッファメモリと、
前記バッファメモリで現在使用することが可能なクレジット数を、現クレジット値として保持する現クレジット保持手段と、
予約クレジット保持手段と、
前記外部装置から前記バッファメモリへのデータの転送に先駆けて、当該データの一時記憶に必要なクレジット数を、予約クレジット値として前記予約クレジット保持手段に登録する転送制御手段と、
前記現クレジット保持手段が保持する前記現クレジット値から、前記予約クレジット保持手段に登録された前記予約クレジット値を減算し、当該減算結果を使用可能クレジット値として出力する減算手段と、
を備えるバッファ管理装置。
【請求項２】
前記現クレジット保持手段は、前記予約クレジット値分のデータが前記バッファメモリに転送される毎に、当該予約クレジット値を前記現クレジット値から減算するとともに、前記バッファメモリから前記クレジット単位分のデータが出力される毎に、前記現クレジット値を１インクリメントし、
前記予約クレジット保持手段は、前記予約クレジット値分のデータの前記バッファメモリへの転送に応じて、自己が保持する前記予約クレジット値をクリアする請求項１に記載のバッファ管理装置。
【請求項３】
外部装置から転送されたデータを前記クレジット単位又は当該クレジットを構成する構成単位に変換し、前記バッファメモリに転送する中間バッファを更に備え、
前記現クレジット保持手段は、前記中間バッファによる前記予約クレジット値分のデータの転送完了に応じて、当該予約クレジット値を前記現クレジット値から減算し、
前記予約クレジット保持手段は、前記中間バッファによる前記予約クレジット値分のデータの転送完了に応じて、自己が保持する前記予約クレジット値をクリアする請求項２に記載のバッファ管理装置。
【請求項４】
前記現クレジット保持手段は、前記クレジット単位分のデータが前記バッファメモリに転送される毎に、前記現クレジット値を１デクリメントする請求項２に記載のバッファ管理装置。
【請求項５】
前記転送制御手段は、前記減算手段が出力した前記使用可能クレジット値に基づいて、前記外部装置が転送するデータのデータサイズと、当該データサイズに応じた前記予約クレジット値とを決定する請求項１〜４の何れか一項に記載のバッファ管理装置。
【請求項６】
前記転送制御手段は、外部装置からのライトコマンドにより書き込みが要求されたデータのデータサイズを、前記クレジットの単位系に変換する変換手段と、
前記変換手段で変換されたデータサイズと、前記使用可能クレジット値と、予め定められた受領可能なクレジット数の最大値とを比較し、その最小値を前記予約クレジット値として選択する選択手段と、
前記選択手段が選択した前記予約クレジット値分のデータサイズを指示した、トランスファーレディ信号を前記外部装置に通知する通知手段と、
を更に有する請求項５に記載のバッファ管理装置。
【請求項７】
前記転送制御手段と前記予約クレジット保持手段とを複数備え、
前記転送制御手段は、他の前記転送制御手段との間で、前記使用可能クレジット値の使用要求を調停し、一つの前記転送制御手段に対して、前記使用可能クレジット値の使用許可を与える調停手段を更に備え、
前記減算手段は、前記現クレジット保持手段が保持する前記現クレジット値から、前記予約クレジット保持手段の各々に保持された前記予約クレジット値の合計値を減算し、当該減算結果を前記使用可能クレジット値として出力する請求項１〜６の何れか一項に記載のバッファ管理装置。
【請求項８】
前記クレジットは、１セクタ又は複数のセクタで構成される１ページ分のデータサイズを単位とする請求項１〜７の何れか一項に記載のバッファ管理装置。
【請求項９】
所定のデータサイズを表すクレジット単位で記憶領域を管理し、外部装置から転送されるデータを一時記憶するバッファメモリのバッファ管理方法であって、
前記バッファメモリで現在使用することが可能なクレジット数を、現クレジット値として現クレジット保持手段に保持する現クレジット保持工程と、
前記バッファメモリへのデータの転送に先駆けて、当該データの一時記憶に必要なクレジット数を、予約クレジット値として予約クレジット保持手段に登録するデータ転送制御工程と、
前記現クレジット保持手段に保持された前記現クレジット値から、前記予約クレジット保持手段に登録された前記予約クレジット値を減算し、当該減算結果を使用可能クレジット値として出力する減算工程と、
を含むバッファ管理方法。
【請求項１０】
ホスト装置と接続可能な接続手段と、
所定のデータサイズを表すクレジット単位で記憶領域を管理し、前記ホスト装置から転送されるデータを一時記憶するバッファメモリと、
前記バッファメモリに一時記憶されたデータの書き込み先となる記憶媒体と、
前記バッファメモリで現在使用することが可能なクレジット数を、現クレジット値として保持する現クレジット保持手段と、
予約クレジット保持手段と、
前記ホスト装置から前記バッファメモリへのデータの転送に先駆けて、当該データの一時記憶に必要なクレジット数を、予約クレジット値として前記予約クレジット保持手段に登録する転送制御手段と、
前記現クレジット保持手段が保持する前記現クレジット値から、前記予約クレジット保持手段に登録された前記予約クレジット値を減算し、当該減算結果を使用可能クレジット値として出力する減算手段と、
を備える記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、バッファ管理装置、バッファ管理方法及び記憶装置に関するものである。
【背景技術】
【０００２】
記憶媒体を内蔵する記憶装置は、ホストコンピュータとの間で送受するデータを一時的に蓄積するバッファメモリを有している。このような記憶装置では、ホストコンピュータからのライトコマンドに応じた書き込みデータをバッファメモリ(ライトバッファ)に蓄積し、このライトバッファから該書き込みデータを順次読み出して記憶媒体に書き込む制御が行われている。
【０００３】
バッファメモリには、低コストで大容量の領域を確保可能なＤＲＡＭが採用されることが一般的であるが、近年では、より高速な処理が要求されることから、より高速に処理することが可能なＳＲＡＭを用いる場合がある。しかしＳＲＡＭはＤＲＡＭに比べ高コストであるため大容量の領域を確保することは困難であり、バッファオーバーが発生する可能性がある。従来、バッファオーバーの発生を防止する技術については種々提案されており、例えば、バッファメモリの空き容量が所定値以下の場合には、このバッファメモリとは異なるメモリ領域に一旦格納した後、バッファメモリに転送することで、バッファオーバーの発生を防止する技術が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−２６７５０２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、ＳＡＳ（Serial  Attached  SCSI）では、受領可能なデータサイズをＸＦＥＲ＿ＲＤＹ（トランスファーレディ）信号にて事前にＩｎｉｔｉａｔｏｒ側に通知する必要があり、この通知したデータサイズのデータがＩｎｉｔｉａｔｏｒ側から転送されることになる。この場合、Ｉｎｉｔｉａｔｏｒ側に通知した時点でのライトバッファの空き容量と、Ｉｎｉｔｉａｔｏｒ側からデータが転送された時点でのライトバッファの空き容量とが異なる可能性があり、バッファオーバーの発生を防止するため、ライトバッファの空き容量管理をより正確に行うことが可能な技術が望まれている。なお、従来技術では、現時点での空き容量しか考慮されていないため、データが転送される時点での空き容量を特定することができず、上記の問題を解決することは困難である。
【０００６】
本発明は、上記に鑑みてなされたものであって、ライトバッファの空き容量管理をより正確に行うことが可能なバッファ管理装置、バッファ管理方法及び記憶装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
実施の形態のメモリ管理装置は、バッファメモリと、現クレジット保持手段と、転送制御手段と、予約クレジット保持手段と、減算手段とを備える。バッファメモリは、所定のデータサイズを表すクレジット単位で記憶領域を管理し、外部装置から転送されるデータを一時記憶する。現クレジット保持手段は、バッファメモリで現在使用することが可能なクレジット数を、現クレジット値として保持する。転送制御手段は、外部装置から前記バッファメモリへのデータの転送に先駆けて、当該データの一時記憶に必要なクレジット数を、予約クレジット値として予約クレジット保持手段に登録する。減算手段は、現クレジット保持手段が保持する現クレジット値から、予約クレジット保持手段に登録された予約クレジット値を減算し、当該減算結果を使用可能クレジット値として出力する。
【図面の簡単な説明】
【０００８】
【図１】図１は、本実施形態に係る記憶装置の構成を模式的に示す図。
【図２】図２は、本実施形態に係るライトバッファ管理部の構成を模式的に示す図。
【図３】図３は、本実施形態に係るデータ転送制御部の構成を模式的に示す図。
【図４】図４は、本実施形態に係るライトバッファ管理部の制御シーケンスの一例を示す図。
【図５】図５は、本実施形態に係るライトバッファ管理部の制御シーケンスの他の例を示す図。
【図６】図６は、本実施形態に係るデータ転送制御部の制御シーケンスの一例を示す図。
【図７】図７は、本実施形態に係るライトバッファ管理部の変形例の構成を模式的に示す図。
【発明を実施するための形態】
【０００９】
図１は、本実施形態に係る記憶装置の構成を模式的に示す図である。同図に示すように、記憶装置１００は、ＳＡＳモジュール１０と、バッファ管理モジュール２０と、記憶媒体３０とを備えている。
【００１０】
ＳＡＳモジュール１０は、Ｉｎｉｔｉａｔｏｒとなるコンピュータ等のホスト２００に対し、記憶装置１００をＳＡＳ（Serial  Attached  SCSI）方式で接続するためのインターフェースである。ＳＡＳモジュール１０は、ＰＨＹ部１１、ＬＩＮＫ部１２、ＰＯＲＴ部１３、ＲｘＦＩＦＯ部１４、ＴｘＦＩＦＯ部１５、ＴＲＡＮＳＰＯＲＴ部１６及びＡＰＰ部１７を有している。なお、図１では、データ転送用の転送ポート＃０についての構成を示しているが、複数の転送ポートを備える場合には、ＰＨＹ部１１、ＬＩＮＫ部１２、ＰＯＲＴ部１３、ＲｘＦＩＦＯ部１４、ＴｘＦＩＦＯ部１５及びＴＲＡＮＳＰＯＲＴ部１６が、転送ポート分設けられることになる。
【００１１】
ＰＨＹ部１１は、物理層（Physical  Layer）の機能を司る機能部である。ＰＨＹ部１１は、ホスト２００から入力された電気的な信号をフレーム／プリミティブ単位の信号（フレーム／プリミティブ信号）に変換し、ＬＩＮＫ部１２に出力する。また、ＰＨＹ部１１は、ＬＩＮＫ部１２から入力されたフレーム／プリミティブ信号を電気的な信号に変換し、ホスト２００に出力する。
【００１２】
ＬＩＮＫ部１２は、リンク層（Link  Layer）の機能を司る機能部である。ＬＩＮＫ部１２は、ＰＨＹ部１１から入力されたフレーム／プリミティブ信号をフレーム／コマンド単位の信号（フレーム／コマンド信号）に変換し、ＲｘＦＩＦＯ部１４に出力するとともに、当該フレーム／コマンド信号の読み出しを制御するコネクション制御信号を、ＰＯＲＴ部１３に出力する。また、ＬＩＮＫ部１２は、ＰＯＲＴ部１３からコネクション制御信号が入力されると、このコネクション制御信号に従い、ＴｘＦＩＦＯ部１５からフレーム単位の信号(フレーム信号)を読み出し、フレーム／プリミティブ信号に変換してＰＨＹ部１１に出力する。
【００１３】
ＰＯＲＴ部１３は、ポート層（Port  Layer）の機能を司る機能部である。ＰＯＲＴ部１３は、ＬＩＮＫ部１２から入力されたコネクション制御信号をＴＲＡＮＳＰＯＲＴ部１６に転送する。また、ＰＯＲＴ部１３は、ＴＲＡＮＳＰＯＲＴ部１６から入力されたコネクション制御信号をＬＩＮＫ部１２に転送する。
【００１４】
ＲｘＦＩＦＯ部１４は、ＬＩＮＫ部１２が出力したフレーム／コマンド単位のデータを保持する。また。ＴｘＦＩＦＯ部１５は、ＴＲＡＮＳＰＯＲＴ部１６が出力したフレーム単位のデータを保持する。
【００１５】
ＴＲＡＮＳＰＯＲＴ部１６は、トランスポート層（Transport  Layer）の機能を司る機能部である。ＴＲＡＮＳＰＯＲＴ部１６は、ＰＯＲＴ部１３からコネクション制御信号が入力されると、このコネクション制御信号に従い、ＲｘＦＩＦＯ部１４からフレーム／コマンド信号を読み出す。
【００１６】
このとき、フレーム／コマンド信号で指示されたコマンドが、記憶媒体３０からデータの読み取りを指示するリードコマンドである場合、ＴＲＡＮＳＰＯＲＴ部１６は、リード用変換テーブル１６１を介してバッファ管理モジュール２０（後述するリード用ＡＦＩＦＯ部２１）にリード転送制御信号を送信することで、記憶媒体３０から読み取られたフレーム単位のデータ（フレームデータ）をバッファ管理モジュール２０から受け取る。そして、ＴＲＡＮＳＰＯＲＴ部１６は、フレームデータをＲｘＦＩＦＯ部１４に出力するとともに、当該フレームデータの読み出しを制御するコネクション制御信号を、ＰＯＲＴ部１３に出力する。ここで、リード用変換テーブル１６１は、リードコマンドにより読み出しの対象となったデータの格納アドレス等をバッファ管理モジュール２０に指示する機能部である。
【００１７】
また、フレーム／コマンド信号で指示されたコマンドが、記憶媒体３０へのデータの書き込みを指示するライトコマンドである場合、ＴＲＡＮＳＰＯＲＴ部１６は、ライト用変換テーブル１６２を介してバッファ管理モジュール２０（後述する、ライト用ＡＦＩＦＯ部２３）にライト転送制御信号を送信するとともに、書き込み対象となったデータをバッファ管理モジュール２０（後述するライト用ＡＦＩＦＯ部２３）に出力し、記憶媒体３０に記憶させる。ここで、ライト用変換テーブル１６２は、ライトコマンドにより書き込みの対象となるデータのセクタカウントやバッファアドレス、ＬＢＡ等をバッファ管理モジュール２０に指示する機能部である。なお、データの書き込みに係る構成の詳細については後述する。
【００１８】
ＡＰＰ部１７は、アプリケーション層（Application  Layer）の機能を司る機能部である。ＡＰＰ部１７は、ＴＲＡＮＳＰＯＲＴ部１６との間で種々のコマンドの遣り取りを行う。なお、ＰＨＹ部１１、ＬＩＮＫ部１２、ＰＯＲＴ部１３、ＴＲＡＮＳＰＯＲＴ部１６及びＡＰＰ部１７は、それぞれのレイヤーに応じた専用チップを用いて実現する形態としてもよいし、何れか複数又は全てのレイヤーの機能を統合したチップを用いて実現する形態としてもよい。
【００１９】
次に、バッファ管理モジュール２０について説明する。バッファ管理モジュール２０は、データの読み取り及び書き込み時に用いるバッファを管理するためのモジュールである。バッファ管理モジュール２０は、リード用ＡＦＩＦＯ部２１、リードバッファ２２、ライト用ＡＦＩＦＯ部２３、ライトバッファ２４及びクレジット管理部２５を有している。なお、データ転送用の転送ポートを複数備える場合、リード用ＡＦＩＦＯ部２１及びライト用ＡＦＩＦＯ部２３は、対応する転送ポートのＴＲＡＮＳＰＯＲＴ部１６とともに転送ポート毎に設けられることになる。
【００２０】
リード用ＡＦＩＦＯ部２１は、リード処理用の中間バッファである。リード用ＡＦＩＦＯ部２１は、ＴＲＡＮＳＰＯＲＴ部１６から入力されるリード転送制御信号に従い、リードバッファ２２に格納されたセクタ単位のデータを読み出すと、フレーム単位のデータに変換し、ＴＲＡＮＳＰＯＲＴ部１６に出力する。リードバッファ２２は、ＳＲＡＭやＤＤＲＳＤＲＡＭ等の半導体メモリであって、記憶媒体３０から読み出したデータ（セクタ単位）を一時記憶する。
【００２１】
ライト用ＡＦＩＦＯ部２３は、ライト処理用の中間バッファである。ライト用ＡＦＩＦＯ部２３は、ＴＲＡＮＳＰＯＲＴ部１６から入力されるライト転送制御信号に従い、ＴＲＡＮＳＰＯＲＴ部１６から転送された書き込み対象となるフレーム単位のデータを、セクタ単位のデータに変換し、ライトバッファ２４に格納する。
【００２２】
ライトバッファ２４は、ＳＲＡＭやＤＤＲＳＤＲＡＭ等の半導体メモリであって、書き込み対象のデータを一時記憶し、当該データを所定のタイミングで記憶媒体３０に書き込みを行う。ライトバッファ２４は、データの一時記憶を行う領域を、所定のデータサイズを表すクレジット単位で管理している。ここで、１のクレジットが表すデータサイズは特に問わないものとするが、記憶媒体３０での記憶単位に基づいて定めることが好ましい。例えば、記憶媒体３０の記憶単位がセクタ単位の場合には、１セクタ分のデータサイズを１クレジットとすることが好ましく、記憶媒体３０の記憶単位が複数のセクタから構成されるページ単位の場合には、１ページ分のデータサイズを１クレジットとすることが好ましい。なお、本実施形態では、１クレジットを、２のべき乗個のセクタ数（例えば、８セクタ）で構成されるページ単位とした例について説明する。
【００２３】
クレジット管理部２５は、ライト用ＡＦＩＦＯ部２３及びライトバッファ２４でのデータの入出力状態に基づいて、ライトバッファ２４で現在使用することが可能なクレジット数（後述する現クレジット値）を管理する。また、クレジット管理部２５は、書き込み対象のデータの転送に先駆けて、当該データの一時記憶に必要なクレジット数（後述する予約クレジット値）を確保し、その値を現クレジット値から減算した結果を、使用可能クレジット値としてＴＲＡＮＳＰＯＲＴ部１６に通知する。
【００２４】
ＴＲＡＮＳＰＯＲＴ部１６では、クレジット管理部２５から通知された使用可能クレジット値に基づいて、ホスト２００から転送されるデータのデータサイズを決定し、ＸＦＥＲ＿ＲＤＹ（トランスファーレディ）信号を用いてホスト２００に通知することで、データの転送フェーズに移行させる。このように、ＴＲＡＮＳＰＯＲＴ部１６、ライト用ＡＦＩＦＯ部２３及びクレジット管理部２５の協働により、ライトバッファ２４を管理するライトバッファ管理部４０が実現される（図１中破線部参照）。
【００２５】
以下、図２を参照して、ライトバッファ管理部４０の構成について説明する。ここで、図２は、図１に示したライトバッファ管理部４０の構成を模式的に示す図である。
【００２６】
ライトバッファ管理部４０は、上述したライト用変換テーブル１６２、ライト用ＡＦＩＦＯ部２３、ライトバッファ２４及びクレジット管理部２５に加え、データ転送制御部４４を備えている。ここで、データ転送制御部４４は、各転送ポートのＴＲＡＮＳＰＯＲＴ部１６に設けられる機能部である。
【００２７】
ライト用変換テーブル１６２は、ホスト２００が出力したライトコマンドに応じて、書き込み対象となったデータのセクタカウントや、バッファアドレス、バイトカウント、ＬＢＡ（論理ブロックアドレス）、記憶媒体３０内部でのＣＲＣ符号（ＢＣＲＣ）、記憶媒体３０内部でのＥＣＣ（ＢＥＣＣ）等を設定・保持し、ライト転送制御信号としてライト用ＡＦＩＦＯ部２３に出力する。ここで、セクタカウントは、ライト用ＡＦＩＦＯ部２３に出力するデータの総数、つまり後述するクレジット値に対応する。なお、セクタカウントは、後述するようにデータ転送制御部４４との協働により決定される。
【００２８】
ライト用ＡＦＩＦＯ部２３は、上述したようにＴＲＡＮＳＰＯＲＴ部１６から入力されるフレームデータをセクタ単位のデータに変換し、当該変換後のデータをライト転送制御信号に基づいてライトバッファ２４に出力する。また、ライト用ＡＦＩＦＯ部２３は、ライトバッファ２４への出力を開始すると、その旨をクレジット管理部２５の後述するセレクタ４２２及び４２３に通知する。また、ライト用ＡＦＩＦＯ部２３は、ＴＲＡＮＳＰＯＲＴ部１６から通知されたセクタカウント数（予約クレジット値）分のデータを出力し終えると、その旨をクレジット管理部２５の後述する現クレジットレジスタ４１、セレクタ４２２及び４２３に通知する。
【００２９】
ライトバッファ２４は、ライト用ＡＦＩＦＯ部２３から入力されたデータを一時記憶し、記憶媒体３０に１クレジット分のデータを出力する毎に、その旨を現クレジットレジスタ４１に通知する。
【００３０】
クレジット管理部２５は、図２に示すように、現クレジットレジスタ４１と、予約クレジット値管理部４２と、減算器４３と、データ転送制御部４４とを機能部として有している。
【００３１】
現クレジットレジスタ４１は、ライトバッファ２４で現在使用することが可能なクレジットの個数を、現クレジット値として保持する機能部である。具体的に、現クレジットレジスタ４１は、ライト用ＡＦＩＦＯ部２３から予約クレジット値分の出力通知に応じて、現クレジット値から、その出力通知に対応する予約クレジット値管理部４２からの入力予約クレジット値を減算する。また、現クレジットレジスタ４１は、ライトバッファ２４から１クレジット分の出力が通知される毎に、現クレジット値を１インクリメントする。
【００３２】
このように、現クレジットレジスタ４１では、ライト用ＡＦＩＦＯ部２３からのデータ出力（ライトバッファ２４へのデータ入力）及びライトバッファ２４からのデータ出力に応じて、現クレジット値をリアルタイムで更新する。この構成を採用することで、現クレジット値の管理をハードウェアで行うことが可能となるため、処理の高速化を図ることができる。なお、現クレジットレジスタ４１は、データの書き込みが行われない初期状態において、ライトバッファ２４の総クレジット値を保持しているものとする。
【００３３】
予約クレジット値管理部４２は、ホスト２００から転送（送信）されるデータのデータサイズに対応するクレジット数を、そのデータの転送前にデータ転送制御部４４から受け付け、予約クレジット値として管理する機能部である。具体的に、予約クレジット値管理部４２は、一又は複数の予約クレジットレジスタ４２１と、セレクタ４２２と、セレクタ４２３と、加算器４２４とを機能部として有している。
【００３４】
予約クレジットレジスタ４２１は、複数設けられており、ライトコマンドを用いて転送されるデータの予約クレジット値をそれぞれ保持する。なお、図２では、ｎ個分（ｎは任意の正の整数）の予約クレジットレジスタ４２１を設けた例を示している。
【００３５】
セレクタ４２２及びセレクタ４２３は、何れかの転送ポートのライト用ＡＦＩＦＯ部２３から入力されるデータ出力開始の通知に応じて、予約クレジットレジスタ４２１の中から、転送（出力）対象のライトコマンドに対応する予約クレジット値を保持した予約クレジットレジスタ４２１を選択し、その予約クレジット値を現クレジットレジスタ４１に出力する。また、セレクタ４２２は、何れかの転送ポートのライト用ＡＦＩＦＯ部２３から入力されるデータ出力完了の通知に応じて、転送（出力）の完了したライトコマンドに対応する予約クレジットレジスタ４２１をクリアする。
【００３６】
加算器４２４は、予約クレジットレジスタ４２１の各々が保持する予約クレジット値を加算し、その加算結果を減算器４３に出力する。
【００３７】
減算器４３は、現クレジットレジスタ４１が保持する現クレジット値から、予約クレジット値管理部４２が管理する予約クレジット値の総数、つまり加算器４２４の加算結果を減算し、この減算結果を使用可能クレジット値として、各転送ポート用のデータ転送制御部４４に出力する。ここで、使用可能クレジット値は、現在使用することが可能なライトバッファ２４のクレジット数（現クレジット値）から、転送が予定されているデータのデータサイズ（予約クレジット値）を減算したものとなる。つまり、この使用可能クレジット値を超えない範囲でライトバッファ２４を使用することで、ライトバッファ２４のバッファオーバーを防止することが可能となる。
【００３８】
データ転送制御部４４は、クレジット管理部２５（減算器４３）から通知される使用可能クレジット値に基づいて、ホスト２００から転送されるデータのデータサイズを決定する機能部である。
【００３９】
ここで、図３は、図２に示したデータ転送制御部４４の構成を模式的に示す図である。同図に示すように、データ転送制御部４４は、調停器４４１と、ページサイズ演算部４４２と、比較器４４３と、セレクタ４４４と、通知値演算部４４５とを備えている。
【００４０】
調停器４４１は、減算器４３が出力する使用可能クレジット値へのアクセス競合を防ぐため、他の転送ポートのＴＲＡＮＳＰＯＲＴ部１６（調停器４４１）との間で、使用可能クレジット値の使用要求を調停し、一つの調停器４４１に対して、使用可能クレジット値の使用許可を与える。具体的に、調停器４４１は、ライトコマンドによりライト用変換テーブル１６２の転送機能が起動されると、他の調停器４４１にクレジット管理部２５の使用権を要求（Ｒｅｑｕｅｓｔ）し、当該他の調停器４４１から使用権を獲得（Ｇｒａｎｔ）することで、一つの調停器４４１が、使用可能クレジット値を使用可能な状態を実現する。また、調停器４４１は、セレクタ４４４からの予約クレジット値の出力に応じて、使用権を解放（Ｒｅｌｅａｓｅ）する。
【００４１】
ページサイズ演算部４４２は、調停器４４１が使用権を獲得すると、ライト用変換テーブル１６２に保持された、ライトコマンド受領時のセクタカウントとＬＢＡとに基づいて、当該データがページ単位に分解された場合のページサイズを算出する。具体的に、ページサイズ演算部４４２は、１ページが２のべき乗のセクタ数で構成される場合、下記式（１）に基づいて演算することで、書き込み対象のデータがページ単位に分解された場合のページサイズを算出する。なお、下記式（１）において、“ｎ”は１以上の整数である。
【００４２】
【数１】
0005349515.tif 000002
【００４３】
比較器４４３は、減算器４３から通知された使用可能クレジット値と、予め定められたデータ書き込み時の最大ページサイズを示す最大ＸＦＥＲ＿ＲＤＹ設定値と、ページサイズ演算部４４２が算出したページサイズとを比較し、各値が示すデータサイズが最小の値のものを選択する。なお、最大ＸＦＥＲ＿ＲＤＹ設定値は、図示しない記録媒体に予め記憶されているものとする。
【００４４】
セレクタ４４４は、比較器４４３が選択した値を、予約クレジット値として自己の転送ポート用の予約クレジットレジスタ４２１に出力することで、予約クレジット値の登録を行う。
【００４５】
通知値演算部４４５は、ライト用変換テーブル１６２に保持された、書き込み対象データのセクタカウント及びＬＢＡと、比較器４４３の選択結果とに基づいて、ホスト２００及びライト用ＡＦＩＦＯ部２３に通知するセクタカウント（以下、通知用セクタカウントという）を導出する。具体的に、通知値演算部４４５は、比較器４４３が使用可能クレジット値を選択した場合、下記式（２）を用いて通知用セクタカウントを算出する。なお、下記式（２）では、１ページが２のべき乗のセクタ数で構成される場合を想定している。
【００４６】
【数２】
0005349515.tif 000003
【００４７】
また、通知値演算部４４５は、最大ＸＦＥＲ＿ＲＤＹ設定値が選択されると、この最大ＸＦＥＲ＿ＲＤＹ設定値に１ページを構成するセクタ数を乗算した値を、通知用セクタカウントとする。また、通知値演算部４４５は、ページサイズ演算部４４２が算出したページサイズが選択されると、このページサイズに１ページを構成するセクタ数を乗算した値を、通知用セクタカウントとする。
【００４８】
そして、通知値演算部４４５は、導出した通知用セクタカウントを、ＸＦＥＲ＿ＲＤＹ（トランスファーレディ）信号として、ＳＡＳモジュール１０を介してホスト２００に通知する。また、通知値演算部４４５は、導出した通知用セクタカウントを、ライト用ＡＦＩＦＯ部２３に通知する。これにより、ホスト２００では、ＸＦＥＲ＿ＲＤＹ信号に応じて、このＸＦＥＲ＿ＲＤＹ信号で通知した通知用セクタカウント分のデータ転送を開始する。また、ライト用変換テーブル１６２では、転送されたデータに応じたライト転送制御信号をライト用ＡＦＩＦＯ部２３に出力し、ライト用ＡＦＩＦＯ部２３へのデータ出力を開始する。
【００４９】
このように、データ転送制御部４４では、使用可能クレジット値、最大ＸＦＥＲ＿ＲＤＹ設定値及びページサイズ演算部４４２が算出したページサイズのうち、データサイズが最小のものを選択し、当該データサイズを予約クレジット値として予約クレジットレジスタ４２１に登録するとともに、当該データサイズのデータをホスト２００から送信させるため、ライトバッファ２４でのバッファオーバーの発生を確実に防ぐことができる。
【００５０】
次に、図２、図４及び図５を参照して、ライトバッファ管理部４０の動作について説明する。ここで、図４は、ライトバッファ管理部４０の制御シーケンスの一例を示す図である。なお、図４では、単一の転送ポート（転送ポート＃０）によりデータ転送が行われる例を示している。
【００５１】
まず、時刻ｔ１０の時点において、現クレジットレジスタ４１に保持された現クレジット値が「‘ｄ６４」、各予約クレジットレジスタ４２１に格納された予約クレジット値が「０」であるとする。このとき、減算器４３が出力する使用可能クレジット値は、現クレジット値と同じ「‘ｄ６４」となる。
【００５２】
続く時刻ｔ１１に、転送ポート＃０のデータ転送制御部４４から、予約クレジットレジスタ４２１に予約クレジット値「‘ｄ８」が登録され、転送ポート＃０のライト用ＡＦＩＦＯ部２３へのデータ転送が開始されると、減算器４３が出力する使用可能クレジット値は「‘ｄ６４」から「‘ｄ８」を減算した「‘ｄ５６」となる。
【００５３】
続いて、転送ポート＃０のライト用ＡＦＩＦＯ部２３からライトバッファ２４にデータ（セクタ単位）が順次転送され、時刻ｔ１２において、ライトバッファ２４が１クレジット分のデータを記憶媒体３０に出力すると、現クレジットレジスタ４１は、この記憶媒体３０への出力に応じて、現クレジット値を１インクリメントし「‘ｄ６５」とする。また、この時、減算器４３が出力する使用可能クレジット値は、「‘ｄ６５」から「‘ｄ８」を減算した「‘ｄ５７」となる。
【００５４】
また、時刻ｔ１３において、ライトバッファ２４が１クレジット分のデータを記憶媒体３０に出力すると、現クレジットレジスタ４１は、この記憶媒体３０への出力に応じて、現クレジット値を「‘ｄ６６」とするため、減算器４３が出力する使用可能クレジット値は「‘ｄ５８」となる。また、時刻ｔ１４において、ライトバッファ２４が１クレジット分のデータを記憶媒体３０に出力すると、現クレジットレジスタ４１は、この記憶媒体３０への出力に応じて、現クレジット値を「‘ｄ６７」とするため、減算器４３が出力する使用可能クレジット値は「‘ｄ５９」となる。
【００５５】
続く、時刻ｔ１５において、転送ポート＃０のライト用ＡＦＩＦＯ部２３からライトバッファ２４へのデータ転送が完了すると、現クレジットレジスタ４１は、現クレジット値「‘ｄ６７」から、この転送ポート＃０のデータ転送に用いた予約クレジットレジスタ４２１が保持する予約クレジット値「‘ｄ８」を減算することで、現クレジット値を「‘ｄ５９」とする。また、セレクタ４２２は、ライトバッファ２４への出力完了に応じて、転送ポート＃０に対応する予約クレジットレジスタ４２１をクリアする。なお、この時に減算器４３が出力する使用可能クレジット値は「‘ｄ５９」となるため、従前の値が維持されることになる。
【００５６】
時刻ｔ１６から時刻ｔ１９にかけて、ライトバッファ２４から３クレジット分のデータが記憶媒体３０に順次出力されると、上記と同様の制御により、現クレジット値及び使用可能クレジット値は「‘ｄ６０」から「‘ｄ６３」に順次上昇する。そして、時刻ｔ２０において、ライトバッファ２４からのデータ出力が完了すると、現クレジットレジスタ４１は、これに応じて、現クレジット値を「‘ｄ６４」とするため、減算器４３が出力する使用可能クレジット値は「‘ｄ６４」となる。
【００５７】
図５は、ライトバッファ管理部４０の制御シーケンスの他の例を示す図である。なお、図５では、複数の転送ポート（転送ポート＃０及び＃１）によりデータ転送が行われる例を示している。
【００５８】
まず、時刻ｔ３０の時点において、現クレジットレジスタ４１に保持された現クレジット値が「‘ｄ６４」、各予約クレジットレジスタ４２１に格納された予約クレジット値が「０」であるとする。このとき、減算器４３が出力する使用可能クレジット値は、現クレジット値と同じ「‘ｄ６４」となる。
【００５９】
続く時刻ｔ３１に、転送ポート＃０のデータ転送制御部４４から、予約クレジットレジスタ４２１に予約クレジット値「‘ｄ８」が登録され、転送ポート＃０のライト用ＡＦＩＦＯ部２３にデータの転送が開始されると、減算器４３が出力する使用可能クレジット値は「‘ｄ６４」から「‘ｄ８」を減算した「‘ｄ５６」となる。
【００６０】
続いて、転送ポート＃０のライト用ＡＦＩＦＯ部２３からライトバッファ２４にデータ（セクタ単位）が順次出力され、時刻ｔ３２において、ライトバッファ２４が１クレジット分のデータを記憶媒体３０に出力すると、現クレジットレジスタ４１は、この記憶媒体３０への出力に応じて、現クレジット値を１インクリメントし「‘ｄ６５」とする。また、この時、減算器４３が出力する使用可能クレジット値は、「‘ｄ６５」から「‘ｄ８」を減算した「‘ｄ５７」となる。
【００６１】
時刻ｔ３３において、転送ポート＃１のデータ転送制御部４４から、他の予約クレジットレジスタ４２１に予約クレジット値「‘ｄ４」が登録され、転送ポート＃１のライト用ＡＦＩＦＯ部２３にデータの転送が開始されると、減算器４３が出力する使用可能クレジット値は「‘ｄ５７」から「‘ｄ４」を減算した「‘ｄ５３」となる。
【００６２】
続く、時刻ｔ３４から時刻ｔ３６にかけて、ライトバッファ２４から３クレジット分のデータが記憶媒体３０に順次出力されると、上記と同様の制御により、現クレジット値は「‘ｄ６６」から「‘ｄ６８」に順次上昇し、これに応じて使用可能クレジット値は「‘ｄ５４」から「‘ｄ５６」に順次上昇する。
【００６３】
続く、時刻ｔ３７において、転送ポート＃１のライト用ＡＦＩＦＯ部２３からライトバッファ２４へのデータ転送が完了すると、現クレジットレジスタ４１は、現クレジット値「‘ｄ６８」から、この転送ポート＃１のデータ転送に用いた予約クレジットレジスタ４２１が保持する予約クレジット値「‘ｄ４」を減算することで、現クレジット値を「‘ｄ６４」とする。また、セレクタ４２２は、ライトバッファ２４へ転送完了に応じて、転送ポート＃１に対応する予約クレジットレジスタ４２１をクリアする。なお、この時に減算器４３が出力する使用可能クレジット値は、現クレジット値「‘ｄ６４」から転送ポート＃０の予約クレジット値「‘ｄ８」を減算した「‘ｄ５６」となるため、従前の値が維持されることになる。
【００６４】
時刻ｔ３８、ｔ３９において、ライトバッファ２４から記憶媒体３０に２クレジット分のデータが順次出力されると、上記と同様の制御により、現クレジット値は「‘ｄ６５」から「‘ｄ６６」に上昇し、これに応じて使用可能クレジット値は「‘ｄ５７」から「‘ｄ５８」に上昇する。
【００６５】
続く時刻ｔ４０において、転送ポート＃０のライト用ＡＦＩＦＯ部２３からライトバッファ２４へのデータの出力が完了すると、現クレジットレジスタ４１は、現クレジット値「‘ｄ６６」から、この転送ポート＃０のデータ転送に用いた予約クレジットレジスタ４２１が保持する予約クレジット値「‘ｄ８」を減算することで、現クレジット値を「‘ｄ５８」とする。また、セレクタ４２２は、ライトバッファ２４への出力完了に応じて、データ出力が行われた転送ポート＃０に対応する予約クレジットレジスタ４２１をクリアする。さらに、同タイミングで、ライトバッファ２４から１クレジット分のデータが記憶媒体３０に出力されると、現クレジットレジスタ４１は、現クレジット値を１インクリメントすることで「‘ｄ５９」とする。なお、この時に減算器４３が出力する使用可能クレジット値は「‘ｄ５９」となる。
【００６６】
時刻ｔ４１から時刻ｔ４４にかけて、ライトバッファ２４から記憶媒体３０に４クレジット分のデータが記憶媒体３０に順次出力されると、上記と同様の制御により、現クレジット値は「‘ｄ６０」から「‘ｄ６３」に順次上昇し、これに応じて使用可能クレジット値は「‘ｄ６０」から「‘ｄ６３」に順次上昇する。そして、時刻ｔ４５において、ライトバッファ２４からのデータ出力が完了すると、現クレジットレジスタ４１は、これに応じて、現クレジット値を「‘ｄ６４」とするため、減算器４３が出力する使用可能クレジット値は「‘ｄ６４」となる。
【００６７】
このように、ライトバッファ管理部４０では、ライトバッファ２４の使用可能クレジット値を動的に更新するため、データ転送制御部４４ではリアルタイムに使用可能クレジット値を把握しながら、データの書き込み量を制御することができる。
【００６８】
次に、図３及び図６を参照して、データ転送制御部４４の動作について説明する。ここで、図６は、データ転送制御部４４の制御シーケンスの一例を示す図である。
【００６９】
まず、時刻ｔ５０において、ライトコマンドにより何れかの転送ポートのライト用変換テーブル１６２の転送機能が起動されると、調停器４４１は、時刻ｔ５１において、使用権の要求（Ｒｅｑｕｅｓｔ）を開始する。続く、時刻ｔ５２において、調停器４４１が使用権を獲得（Ｇｒａｎｔ）すると、データ転送制御部４４は、時刻ｔ５３から時刻ｔ５４にかけて、ページサイズ演算部４４２、比較器４４３及びセレクタ４４４の機能により予約クレジット値を決定（選択）し、他の予約クレジット値が未登録の一の予約クレジットレジスタ４２１に登録する。また、調停器４４１では、予約クレジット値の登録に伴い、時刻ｔ５４から時刻ｔ５５にかけて、使用権を開放（Ｒｅｌｅａｓｅ）し、他の調停器４４１に使用権を引き渡す。
【００７０】
一方、通知値演算部４４５では、時刻ｔ５３からｔ５５にかけて、比較器４４３で選択された予約クレジット値に基づき通知用セクタカウントを導出すると、この値をＸＦＥＲ＿ＲＤＹ信号としてホスト２００に通知するとともに、自己の転送ポートに対応するライト用ＡＦＩＦＯ部２３に通知する。そして、ホスト２００へのＸＦＥＲ＿ＲＤＹ信号の通知に応じ、時刻ｔ５６からｔ５７にかけて、当該ホスト２００から書き込み対象のデータが、ＸＦＥＲ＿ＲＤＹ信号で通知したデータサイズ（セクタカウント）分転送され、ライト用ＡＦＩＦＯ部２３に出力が行われる。
【００７１】
このように、データ転送制御部４４では、書き込みデータの転送に先駆けて、予約クレジット値を予約クレジットレジスタ４２１に登録し、この予約クレジット値に応じたデータサイズの送信を、ＸＦＥＲ＿ＲＤＹ信号を介してホスト２００に通知することで、予約クレジット値分のデータがホスト２００から転送される。
【００７２】
以上のように、本実施形態によれば、ライトバッファ２４で現在使用することが可能な現クレジット値と、ホスト２００から転送予定のデータの一時記憶に必要な予約クレジット値とを管理し、現クレジット値から予約クレジット値を減算した使用可能クレジット値を出力する。これにより、ホスト２００からデータが転送される時点での空き容量、つまり使用可能クレジット値を特定することができるため、ライトバッファ２４の空き容量管理をより正確に行うことが可能となる。
【００７３】
また、データ転送制御部４４は、クレジット管理部２５の減算器４３が出力した使用可能クレジット値に基づいて、ホスト２００が転送するデータのデータサイズを決定し、このデータサイズの受領可能を指示したＸＦＥＲ＿ＲＤＹ信号を、ホスト２００に通知するとともに、当該データの一時記憶に必要な予約クレジット値を予約クレジットレジスタ４２１に登録する。これにより、使用可能クレジット値に基づいて、新たに転送されるデータのデータサイズと、その予約クレジット値とを決定することができるため、ホスト２００に通知した時点でのライトバッファの空き容量と、ホスト２００からデータが転送された時点でのライトバッファの空き容量とを同値とすることができ、バッファオーバーの発生を防止することが可能となる。また、本実施形態では、転送チャンネル毎にデータ転送制御部４４を設け、当該データ転送制御部４４の調停器４４１により、データ転送の際の競合を防ぐことができるため、複数のライトコマンドを同時に実行することができる。
【００７４】
以上、本発明の実施形態を説明したが、上記実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。上記実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更、追加等を行うことができる。また、上記実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【００７５】
例えば、上記実施形態のライトバッファ管理部４０では、ライト用ＡＦＩＦＯ部２３が通知されたセクタカウント分のデータをライトバッファ２４に出力した時点で、予約クレジットレジスタ４２１に登録された予約クレジット値をクリアする形態としたが、これに限らず、ライト用ＡＦＩＦＯ部２３から１クレジット分のデータが出力される毎に、該当する予約クレジット値から１デクリメントする形態としてもよい。以下、この形態について、図７を参照して説明する。
【００７６】
図７は、上述したライトバッファ管理部４０の変形例であるライトバッファ管理部４０Ａの構成を模式的に示す図である。なお、上述したライトバッファ管理部４０と同様の構成要素については、同一の符号を付与し、説明を省略する。
【００７７】
図７に示すように、ライトバッファ管理部４０Ａは、クレジット管理部２５Ａとして、現クレジットレジスタ４１Ａと、予約クレジット値管理部４２Ａと、減算器４３とを機能部として有している。また、ライトバッファ２４は、ライト用ＡＦＩＦＯ部２３から１クレジット分のデータが入力される毎に、その旨を現クレジットレジスタ４１Ａ及び予約クレジット値管理部４２Ａに通知する点が、ライトバッファ管理部４０の構成と異なっている。
【００７８】
ここで、現クレジットレジスタ４１Ａは、ライトバッファ２４から１クレジット分のデータの入力が通知される毎に、現クレジット値を１デクリメントする点が、上述した現クレジットレジスタ４１と異なっている。
【００７９】
また、予約クレジット値管理部４２Ａは、一又は複数の予約クレジットレジスタ４２１と、セレクタ４２２Ａと、セレクタ４２３Ａと、加算器４２４とを機能部として有している。ここで、セレクタ４２２Ａ及びセレクタ４２３Ａは、ライトバッファ２４から１クレジット分のデータの入力が通知される毎に、このデータを出力したライト用ＡＦＩＦＯ部２３の転送ポートに対応する対応する予約クレジットレジスタ４２１から、予約クレジット値を１デクリメントし、このデクリメント後の予約クレジット値を現クレジットレジスタ４１Ａに出力する点が、上述したセレクタ４２２及びセレクタ４２３と異なっている。
【００８０】
このように、ライトバッファ管理部４０Ａを構成することで、予約クレジット値をリアルタイムで更新することができる。なお、減算器４３から通知される使用可能クレジット値は、ライトバッファ管理部４０の構成と同様となるため、上記実施形態と同様の効果を奏することができる。
【００８１】
また、上記実施形態では、１ページを構成するセクタ数を２のべき乗としたが、これに限らず、２のべき乗以外の任意の値としてもよい。なお、１ページを構成するセクタ数を２のべき乗以外の値とする場合には、ページサイズ演算部４４２で、下記式（３）を用いてページサイズを算出するものとする。なお、下記式（３）において、“ｍ”は２のべき乗以外の１以上の整数である。
【００８２】
【数３】
0005349515.tif 000004
【００８３】
また、最大ＸＦＥＲ＿ＲＤＹ設定値が２のべき乗ベースで定められている場合には、上記式（３）の“セクタカウント”を最大ＸＦＥＲ＿ＲＤＹ設定値とすることで、当該最大ＸＦＥＲ＿ＲＤＹ設定値を２のべき乗以外のページサイズに変換する。
【００８４】
さらに、比較器４４３が使用可能クレジット値を選択した場合には、下記式（４）を用いて通知用セクタカウントを導出するものとする。
【００８５】
【数４】
0005349515.tif 000005
【００８６】
以上の構成とすることで、１ページが２のべき乗以外のセクタ数で構成される記憶媒体３０に対応することができるため、ライトバッファ管理部４０の汎用性を向上させることができる。
【符号の説明】
【００８７】
１００  記憶装置
１０  ＳＡＳモジュール
１１  ＰＨＹ部
１２  ＬＩＮＫ部
１３  ＰＯＲＴ部
１４  ＲｘＦＩＦＯ部
１５  ＴｘＦＩＦＯ部
１６  ＴＲＡＮＳＰＯＲＴ部
１６１  リード用変換テーブル
１６２  ライト用変換テーブル
１７  ＡＰＰ部
２０  バッファ管理モジュール
２１  リード用ＡＦＩＦＯ部
２２  リードバッファ
２３  ライト用ＡＦＩＦＯ部
２４  ライトバッファ
２５、２５Ａ  クレジット管理部
３０  記憶媒体
４０、４０Ａ  ライトバッファ管理部
４１、４１Ａ  現クレジットレジスタ
４２、４２Ａ  予約クレジット値管理部
４２１  予約クレジットレジスタ
４２２、４２２Ａ  セレクタ
４２３、４２３Ａ  セレクタ
４２４  加算器
４３  減算器
４４  データ転送制御部
４４１  調停器
４４２  ページサイズ演算部
４４３  比較器
４４４  セレクタ
４４５  通知値演算部
２００  ホスト
【図１】
0005349515.tif 000006
【図２】
0005349515.tif 000007
【図３】
0005349515.tif 000008
【図４】
0005349515.tif 000009
【図５】
0005349515.tif 000010
【図６】
0005349515.tif 000011
【図７】
0005349515.tif 000012