説明

ストレージ装置、ストレージ装置の制御方法及び制御プログラム

【課題】ホスト装置から送信されたデータに応答するデータの送信の遅延を防止すること。
【解決手段】本発明にかかるストレージ装置は、ホスト装置から送信された要求データに応じて、要求データによって要求された処理を実行するストレージ装置であって、ストレージと、ストレージの制御を含む第1の処理と、ホスト装置から送信された要求データに応じて、要求データに応答する応答データをホスト装置に送信する第2の処理と、を実行するプロセッサと、所定の要求データについて、プロセッサを代替して第2の処理を実行する代替処理部と、を備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージ装置、ストレージ装置の制御方法及び制御プログラムに関する。
【背景技術】
【0002】
ドライブ装置は、それ自体が単独で使用されることはなく、ホストと接続されて使用される。ドライブ装置としては、例えば、光ディスク記録再生装置及びハードディスク装置等がある。ホストとしては、例えば、PC(Personal Computer)、レコーダー及びプレーヤー等がある。
【0003】
ディスクから読み込んだデータのドライブ装置からホストへの送信、又は、ディスクに書き込むデータのドライブ装置におけるホストからの受信は、I/Fを介して行われる。このような、I/Fの規格の一つとして、SATA(Serial Advanced Technology Attachment)がある。この規格では、3つの層によってデータを転送する制御が行われる。図5に、SATA規格において規定される3つの層を示す。3つの層として、トランスポート層(Transport Layer)、リンク層(Link Layer)及び物理層(PHY Layer)が規定されている。
【0004】
トランスポート層は、FIS(Frame Information Structure)の生成、及び、順序(プロトコル)の制御を行う。
リンク層は、伝送路のアービトレーション、フロー制御、並びに、FIS及び制御コードのビット列への変換(8/10b変換)を行う。
物理層は、ビット列をシリアル変換して転送する。つまり、実際の通信は、物理層において行われる。
【0005】
このようなドライブ装置の動作について説明する。
ドライブ装置は、トランスポート層で管理されるFISの種類によって、その動作が制御される。FISが送信中か、又は、受信中か等の管理は、リンク層において、プリミティブ(Primitive)と呼ばれる制御コードによって行われる。
【0006】
具体的に、ドライブ装置とホストとの間におけるFISの送受信例について説明する。ここでは、ホストからドライブ装置にFISを送信する場合について説明する。
【0007】
FISの転送が行われる前は、ホストとドライブ装置との間で、SYNC Primitiveが送受信されている。SYNC Primitiveは、バスがアイドル状態であることを示すプリミティブである。ホストは、FISを送信する場合、FISの送信要求となるX_RDY Primitiveをドライブ装置に送信する。ドライブ装置は、ホストからX_RDY Primitiveを受信した場合、FISの受信許可を通知するR_RDY Primitiveをホストに送信する。これによって、ドライブ装置が受信許可状態となるため、ホストは、FISのドライブ装置への送信を開始する。
【0008】
ドライブ装置は、ホストからFISを正常に受信した場合、R_IP Primitiveをホストに送信する。これによって、FISの送信が終了するため、ホストは、FISの送信終了を通知するWTRM Primitiveをドライブ装置に送信する。ドライブ装置は、ホストからWTRM Primitiveを受信した場合、受信完了を通知するR_OK Primitiveをホストに送信する。この後は、再び、ホストとドライブ装置とで、SYNC Primitiveの送受信を開始する。そして、ホスト及びドライブ装置は、次のFISの送受信を待つことになる。
【0009】
以上に、ホストからドライブ装置にFISが送信される場合について説明したが、FISの送信方向が変わった場合には、それに合わせて、上記の各プリミティブが逆方向に送信されることになる。
【0010】
通常、ドライブ装置は、ホストからのリセット及びATA/ATAPIコマンド発行等の要求に応じて、要求されたデータやTask File Registerの内容を示す情報(以下、「Task File Register情報」とする)をホストに送信する。このようなホストからの要求は、SATA規格で定められた仕様に基づいて行われる。この仕様では、ホストは、ドライブ装置からの応答を待って、ドライブ装置に対する新たな要求を発行するものとして規定されている。
【発明の概要】
【発明が解決しようとする課題】
【0011】
しかしながら、ホストには、SATA規格に違反した場合、または、Port Multiplierを使用した場合には、ドライブ装置からの応答を待たずに、次の要求を発行してくるものがある。つまり、ホストには、十分な時間を待たずに、次の要求を発行してくるものがある。ドライブ装置は、このようなホストに対して、ホストが次の要求を発行してくるまでの時間内に応答ができないと、想定していないタイミングでホストからの次の要求を受けることになる。その結果、ホスト及びドライブ装置で扱うデータに齟齬が生じてしまい、ホスト又はドライブ装置が正常に動作できなくなってしまうという問題がある。
【0012】
そのような問題が発生するケースについて、図6を参照して具体的に説明する。図6Aは、正常時のデータ送受信の流れを示す図であり、図6Bは、問題発生時のデータ送受信の流れを示す図である。なお、特に詳述しないが、図6の説明におけるFISは、上述した送信手順によって送信される。
【0013】
まず、図6Aの正常時のデータ送受信について説明する。
ホストからCOMRESETが送信された場合、ドライブ装置は、Task File Register情報を含むRegister FISを送信する。ホストからのCOMRESETは、上述したホストからのリセットに相当する。次に、ホストは、ドライブ装置にATA/ATAPIコマンドを発行する場合、ATA/ATAPIコマンドを示すFISをドライブ装置に送信する。ドライブ装置は、ホストからのFISを受信した場合、そのFISが示すATA/ATAPIコマンドに応答するFISをホストに送信する。
【0014】
続いて、図6Bの問題発生時のデータ送受信について説明する。
ホストからCOMRESETが送信された場合、ドライブ装置は、Task File Register情報を含むFISを送信しようとする。しかし、上述したように、ホストには、ドライブ装置からの応答を待たずに、次の要求を発行してくるものがある。このようなホストの場合、ドライブ装置からのFISの送信が遅れてしまうと、ドライブ装置からFISを送信する前に、ホストから次のFISが送信されてしまうことがある。その後に、ドライブ装置からFISを送信すると、ホストが次に送信したFISが示すATA/ATAPIコマンドに応答するFISでなく、ホストからのリセットに応答するFISが送信されてしまうことになる。その結果、ホスト又はドライブ装置が正常に動作できなくなってしまう。
【0015】
ここで、ドライブ装置からのFISの送信が遅れる要因として、ドライブ装置において、FISの送受信を制御するソフトウェアの動作遅延がある。一般的に、ドライブ装置は、CPU(Central Processing Unit)を有する。CPUは、ホストに対するFISの送受信を制御するソフトウェアと、ディスクを制御するソフトウェア等の複数のソフトウェアを実行する。そのため、ホストに対するFISの送受信を制御するソフトウェア以外のソフトウェアにCPUが占有され続けることによって、FISの送信が遅延してしまうことがあるという問題がある。
【0016】
つまり、ハードディスクや光ディスク等のストレージを備えたストレージ装置において、ホスト装置から送信されたデータに応答するデータの送信が遅延してしまうという場合があるという問題がある。
【課題を解決するための手段】
【0017】
本発明の第1の態様にかかるストレージ装置は、ホスト装置から送信された要求データに応じて、当該要求データによって要求された処理を実行するストレージ装置であって、ストレージと、前記ストレージの制御を含む第1の処理と、前記ホスト装置から送信された要求データに応じて、当該要求データに応答する応答データを前記ホスト装置に送信する第2の処理と、を実行するプロセッサと、前記ホスト装置から送信される要求データのうち、所定の要求データについて、前記プロセッサを代替して前記第2の処理を実行する代替処理部と、を備えたものである。
【0018】
本発明の第2の態様にかかるストレージ装置の制御方法は、ホスト装置から送信された要求データに応じて、当該要求データによって要求された処理を実行するストレージ装置の制御方法であって、プロセッサが、ストレージの制御を含む第1の処理と、前記ホスト装置から送信された要求データに応じて当該要求データに応答する応答データを前記ホスト装置に送信する第2の処理と、を実行し、前記処理の実行では、前記ホスト装置からの所定の要求データの送信を検出し、前記所定の要求データを検出した場合に、当該所定の要求データについて代替処理部が前記プロセッサを代替して前記第2の処理を実行するものである。
【0019】
本発明の第3の態様にかかる制御プログラムは、ホスト装置から送信された要求データに応じて、当該要求データによって要求された処理を実行するストレージ装置に、ストレージの制御を含む第1の処理と、前記ホスト装置から送信された要求データに応じて当該要求データに応答する応答データを前記ホスト装置に送信する第2の処理と、を実行する第1のプロセッサと共に備えられた第2のプロセッサに実行させる制御プログラムであって、前記ホスト装置からの所定の要求データの送信を検出する処理と、前記所定の要求データを検出した場合に、当該所定の要求データについて前記第1のプロセッサを代替して前記第2の処理を実行する処理と、を前記第2のプロセッサに実行させるものである。
【0020】
上述した本発明の各態様によれば、所定の要求データについて、プロセッサで実行される処理に影響されることなく、その要求データに応答する応答データをホスト装置に送信する処理を実行することができる。
【発明の効果】
【0021】
上述した本発明の各態様によれば、ホスト装置から送信されたデータに応答するデータの送信の遅延を防止することができるストレージ装置、ストレージ装置の制御方法及び制御プログラムを提供することができる。
【図面の簡単な説明】
【0022】
【図1】本発明の実施の形態にかかるストレージシステムの構成図である。
【図2】本発明の実施の形態にかかるドライブ装置の起動シーケンスにおける処理を示すフローチャートである。
【図3】本発明の実施の形態にかかるOOBシーケンス判定回路の処理を示すフローチャートである。
【図4】本発明の実施の形態にかかる起動シーケンサ管理回路の処理を示すフローチャートである。
【図5】本発明の実施の形態にかかるSATA規格において規定されている各層を説明するための図である。
【図6】本発明の実施の形態にかかる課題を説明するための図である。
【発明を実施するための形態】
【0023】
図1を参照して、本発明の実施の形態にかかるストレージシステム1の構成について説明する。図1は、本発明の実施の形態にかかるストレージシステム1の構成図である。
【0024】
ストレージシステム1は、ドライブ装置2及びホスト3を有する。ドライブ装置2は、LSI(Large Scale Integration)10、メモリ11、ドライバ12及びメカユニット13を有する。LSI10は、CPU20及びDSP(Digital Signal Processor)21を有する。DSP21は、OOBシーケンス判定回路30、プリミティブ・FIS送信/受信制御回路31及び起動シーケンサ管理回路32を有する。ドライブ装置2及びホスト3は、SATA規格のインタフェースによって相互に接続される。
【0025】
ドライブ装置2は、ストレージを有するストレージ装置である。ストレージは、例えば、光ディスク、ハードディスク、又は、メモリ等である。つまり、ドライブ装置2は、例えば、光ディスクドライブ、HDD(Hard Disk Drive)、又は、SSD(Solid State Drive)等である。なお、本実施の形態では、ドライブ装置2が光ディスクドライブである場合について例示する。
【0026】
ドライブ装置2は、ホスト3から送信された要求データに応じて、要求データによって要求された処理を実行する。要求データは、例えば、OOB信号、Align及びFIS等である。OOB信号は、例えば、COMRESET、COMMINT及びCOMWAKE等である。任意の処理を要求するFISは、例えば、ATA/ATAPIコマンドを示すFISである。ドライブ装置2は、例えば、ホスト3からの要求に応じて、ドライブ装置2のリセットや、ストレージに対する読み書き等のSATA規格で規定された処理を実行する。
【0027】
ホスト3は、任意の処理を要求する要求データをドライブ装置2に送信し、ドライブ装置2の実施結果を取得する装置である。
LSI10は、SATA規格における制御で使用されるTask File Register(図示せず)や、ディスクから取得した信号に対する処理の機能、メモリ制御用の機能を有する。
メモリ11は、CPU20が実行するプログラムや、CPU20が演算するデータ、ディスクから取得したデータが格納される。
【0028】
ドライバ12は、CPU20から出力された制御情報に基づいて、メカユニット13を制御する。ドライバ12は、メカユニット13の制御内容を示す制御情報をメカユニット13に出力することによって、メカユニット13を制御する。ドライバ12は、例えば、光ディスク(図示せず)に対するレンズの位置を制御する。
メカユニット13は、CPU20及びドライバ12から出力された制御情報に基づいて、光ディスクに対するデータの読み書きを行う。
【0029】
CPU20は、ホスト3に対してデータを送受信する処理や、光ディスクを制御する処理を実行する。CPU20は、ホスト3に対してデータを送受信する処理をCPU20に実行させるプログラムと、光ディスクを制御する処理をCPU20に実行させるプログラムと、を実行することによって、これらの処理を実行する。例えば、CPU20は、ホスト3からATA/ATAPIコマンドを示すFISを受信した場合に、そのFISが示すATA/ATAPIコマンドに応答するFISを生成してホスト3に送信する。具体的には、CPU20は、生成したFISと共に、生成したFISの送信を要求する制御情報をプリミティブ・FIS送信/受信制御回路31に出力することによって、プリミティブ・FIS送信/受信制御回路31からホスト3にFISを送信する。
【0030】
また、CPU20は、メカユニット13を制御する。CPU20は、メカユニット13の制御内容を示す制御情報をメカユニット13に出力する。CPU20は、例えば、メカユニット13が光ディスクに対して照射する光の強度、レンズの傾きを調整する。
【0031】
DSP21は、ドライブ装置2の起動シーケンスにおける処理や、データの送受信処理を実行する。DSP21は、代替処理部に対応する。
OOB(Out Of Band)シーケンス判定回路30は、OOBシーケンスの進行度合いを監視する。OOBシーケンス判定回路30は、OOBシーケンスの進行度合いに応じて、OOB信号及びAlignを生成してホスト3に送信する。OOBシーケンス判定回路30は、生成したOOB信号又はAlignと共に、生成したOOB信号又はAlignの送信を要求するOOB信号・プリミティブ情報をプリミティブ・FIS送信/受信制御回路31に出力することによって、プリミティブ・FIS送信/受信制御回路31からホスト3にOOB信号又はAlign送信する。
【0032】
プリミティブ・FIS送信/受信制御回路31は、ホスト3に対して、OOB信号、プリミティブ及びFIS等のデータの送受信を行う。プリミティブ・FIS送信/受信制御回路31は、CPU20から出力された制御情報に基づいて、FISをホスト3に送信する。プリミティブ・FIS送信/受信制御回路31は、OOBシーケンス判定回路30から出力されたOOB信号・プリミティブ情報に基づいて、OOB信号又はAlignをホスト3に送信する。プリミティブ・FIS送信/受信制御回路31は、起動シーケンサ管理回路32から出力されたFIS情報に基づいて、FISをホスト3に送信する。
【0033】
起動シーケンサ管理回路32は、ドライブ装置2の起動シーケンスの進行度合いを監視する。起動シーケンサ管理回路32は、OOBシーケンスの進行度合いに応じて、ドライブ装置2の動作モードの移行、FISの生成、及び、生成したFISのホスト3への送信を実行する。起動シーケンサ管理回路32は、生成したFISと共に、生成したFISの送信を要求するFIS情報をプリミティブ・FIS送信/受信制御回路31に出力することによって、プリミティブ・FIS送信/受信制御回路31からホスト3にFISを送信する。
【0034】
続いて、図2〜図4を参照して、本発明の実施の形態にかかるストレージシステム1の処理について説明する。図2は、本発明の実施の形態にかかるドライブ装置2の起動シーケンスにおける処理を示すフローチャートである。図3は、本発明の実施の形態にかかるOOB(Out Of Band)シーケンス判定回路30の処理を示すフローチャートである。図4は、本発明の実施の形態にかかる起動シーケンサ管理回路32の処理を示すフローチャートである。
【0035】
まず、ドライブ装置2及びホスト3は、相互に接続されて起動された場合、SATAの通信を確立するために、OOBシーケンスを開始する(S1)。OOBシーケンス判定回路30は、OOBシーケンス管理番号がどのような値となっているかを判定する(S101)。ここでは、OOBシーケンス管理番号の初期値が"0"である場合について説明する。OOBシーケンス管理番号は、例えば、OOBシーケンス判定回路30が有する記憶装置に格納される。記憶装置は、例えば、メモリ又はレジスタ等である。OOBシーケンス管理番号は、例えば、ドライブ装置2の起動時に、OOBシーケンス判定回路30によって初期値に初期化される。
【0036】
OOBシーケンス管理番号が"0"である場合、OOBシーケンス判定回路30は、OOBシーケンスが開始されたか否かを判定する。具体的には、ホスト3からCOMRESETが送信されたか否かを判定する(S102)。
【0037】
ホスト3からCOMRESETが送信されていない場合(S102:NO)、OOBシーケンス判定回路30は、ホストからCOMRESETが送信されたか否かの判定を継続して実行する(S102)。
【0038】
ホスト3からCOMRESETが送信された場合(S102:YES)、OOBシーケンス判定回路30は、COMINITをホスト3に送信する(S103)。具体的には、OOBシーケンス判定回路30は、COMINITの送信を要求するOOB信号・プリミティブ情報をプリミティブ・FIS送信/受信制御回路31に出力する。プリミティブ・FIS送信/受信制御回路31は、OOBシーケンス判定回路30からのOOB信号・プリミティブ情報に応じて、COMINITをホスト3に送信する。OOBシーケンス判定回路30は、OOBシーケンス管理番号を"1"に更新する(S104)。OOBシーケンス判定回路30は、更新後のOOBシーケンス管理番号を起動シーケンサ管理回路32に出力する。
【0039】
一方、起動シーケンサ管理回路32は、起動シーケンス管理番号がどのような値となっているかを判定する(S201)。ここで、起動シーケンス管理番号の初期値が"0"である場合について説明する。起動シーケンス管理番号は、例えば、起動シーケンス管理番号が有する記憶装置に格納される。起動シーケンス管理番号は、例えば、ドライブ装置2の起動時や、ホストとの通信が確立した後、ホストとの通信が遮断された場合に、起動シーケンサ管理回路32によって初期値に初期化される。
【0040】
起動シーケンス管理番号が"0"である場合、起動シーケンサ管理回路32は、OOBシーケンスが開始されたか否かを判定する(S202)。具体的には、OOBシーケンス管理番号が"1"となったか否かを判定する。
【0041】
OOBシーケンス管理番号が"1"となっていない場合(S202:NO)、起動シーケンサ管理回路32は、OOBシーケンスが開始されたか否かの判定を継続して実行する(S202)。
OOBシーケンス管理番号が"1"となった場合(S202:YES)、起動シーケンサ管理回路32は、起動シーケンス管理番号を"1"に更新する(S203)。ここで、起動シーケンサ管理回路32は、OOBシーケンス判定回路30から"1"に更新されたOOBシーケンス管理番号が出力された場合、OOBシーケンス管理番号が"1"となったと判定する。
【0042】
ステップS104の実行後、OOBシーケンス判定回路30は、再び、OOBシーケンス管理番号を判定する(S101)。OOBシーケンス管理番号が"1"である場合、OOBシーケンス判定回路30は、ホスト3からCOMWAKEが送信されたか否かを判定する(S105)。
【0043】
ホスト3からCOMWAKEが送信されていない場合(S105:NO)、OOBシーケンス判定回路30は、ホスト3からCOMWAKEが送信されたか否かの判定を継続して実行する(S105)。
【0044】
ホスト3からCOMWAKEが送信された場合(S105:YES)、OOBシーケンス判定回路30は、COMWAKEをホスト3に送信する(S106)。具体的には、OOBシーケンス判定回路30は、COMWAKEの送信を要求するOOB信号・プリミティブ情報をプリミティブ・FIS送信/受信制御回路31に出力する。プリミティブ・FIS送信/受信制御回路31は、OOBシーケンス判定回路30からのOOB信号・プリミティブ情報に応じて、COMWAKEをホスト3に送信する。
【0045】
また、OOBシーケンス判定回路30は、Alignをホスト3に送信する(S107)。具体的には、OOBシーケンス判定回路30は、Alignの送信を要求するOOB信号・プリミティブ情報をプリミティブ・FIS送信/受信制御回路31に出力する。プリミティブ・FIS送信/受信制御回路31は、OOBシーケンス判定回路30からのOOB信号・プリミティブ情報に応じて、Alignをホスト3に送信する。OOBシーケンス判定回路30は、OOBシーケンス管理番号を"2"に更新する(S108)。OOBシーケンス判定回路30は、更新後のOOBシーケンス管理番号を起動シーケンサ管理回路32に出力する。
【0046】
OOBシーケンス判定回路30は、再び、OOBシーケンス管理番号を判定する(S101)。OOBシーケンス管理番号が"2"である場合、OOBシーケンス判定回路30は、ホスト3からAlignが送信されたか否かを判定する(S109)。
【0047】
ホスト3からAlignが送信されていない場合(S109:NO)、OOBシーケンス判定回路30は、ホスト3からAlignが送信されたか否かの判定を継続して実行する(S109)。
【0048】
ホスト3からAlignが送信された場合(S109:YES)、OOBシーケンスが完了したことになる。その場合、OOBシーケンス判定回路30は、SYNC Primitiveのホスト3への送信を開始する(S2、S110)。具体的には、OOBシーケンス判定回路30は、SYNC Primitiveの送信の開始を要求するOOB信号・プリミティブ情報をプリミティブ・FIS送信/受信制御回路31に出力する。プリミティブ・FIS送信/受信制御回路31は、OOBシーケンス判定回路30からのOOB信号・プリミティブ情報に応じて、SYNC Primitiveのホスト3への送信を開始する。OOBシーケンス判定回路30は、OOBシーケンス管理番号を"3"に更新する(S111)。OOBシーケンス判定回路30は、更新後のOOBシーケンス管理番号を起動シーケンサ管理回路32に出力する。
【0049】
一方、起動シーケンサ管理回路32は、ステップS203の実行後、再び、起動シーケンス管理番号を判定する(S201)。起動シーケンス管理番号が"1"である場合、起動シーケンサ管理回路32は、OOBシーケンスが終了したか否かを判定する(S204)。具体的には、起動シーケンサ管理回路32は、OOBシーケンス管理番号が"3"となったか否かを判定する。
【0050】
OOBシーケンス管理番号が"3"となっていない場合、起動シーケンサ管理回路32は、OOBシーケンスが終了したか否かの判定を継続して実行する(S204)。
OOBシーケンス管理番号が"3"となった場合、起動シーケンサ管理回路32は、ドライブ装置2の動作モードを、X_RDY Primitiveを無視するモードに設定する(S3、S205)。具体的には、OOBシーケンス完了後にドライブ装置2からの必要な応答が終了するまで、ホスト3からの要求を全て拒否するために、ホスト3からX_RDY Primitiveが送信されてきても、ドライブ装置2からR_RDY Primitiveを送信しないモードに移行する。ここで、起動シーケンサ管理回路32は、OOBシーケンス判定回路30から"3"に更新されたOOBシーケンス管理番号が出力された場合、OOBシーケンス管理番号が"3"となったと判定する。
【0051】
ここで、起動シーケンサ管理回路32は、Task File Register情報を含むFIS(以下、「Register FIS」とも言う)をホスト3に送信する(S4、S206)。具体的には、起動シーケンサ管理回路32は、Register FISの送信を要求するFIS情報をプリミティブ・FIS送信/受信制御回路31に出力する。プリミティブ・FIS送信/受信制御回路31は、OOBシーケンス判定回路30からのFIS情報に応じて、Register FISをホスト3に送信する。起動シーケンサ管理回路32は、起動シーケンス管理番号を"2"に更新する(S207)。
【0052】
起動シーケンサ管理回路32は、再び、起動シーケンス管理番号を判定する(S201)。起動シーケンス管理番号が"2"である場合、起動シーケンサ管理回路32は、Register FISの送信が正常に完了したか否かを判定する(S5、S208)。具体的には、起動シーケンサ管理回路32は、Register FISの受信が完了したときにホスト3から送信されるR_OK Primitiveをプリミティブ・FIS送信/受信制御回路31が受信したか否かを判定する。
【0053】
R_OK Primitiveを受信していない場合(S208:NO)、起動シーケンサ管理回路32は、Register FISの送信が正常に完了したか否かの判定を継続して実行する(S208)。
【0054】
R_OK Primitiveを受信した場合(S208:YES)、起動シーケンサ管理回路32は、ドライブ装置2の動作モードを、X_RDY Primitiveの応答を許可するモードに設定する(S6、S209)。具体的には、ホスト3からの要求を許可にするために、ホスト3からX_RDY Primitiveが送信された場合に、ドライブ装置2からR_RDY Primitiveを送信するモードに移行する。
【0055】
起動シーケンサ管理回路32は、OOBシーケンス管理番号及び起動シーケンス管理番号を共に"0"に更新する(S210、S211)。OOBシーケンス管理番号の初期化は、例えば、起動シーケンサ管理回路32がOOBシーケンス管理番号の初期化を要求する初期化要求情報をOOBシーケンス判定回路30に出力し、OOBシーケンス判定回路30がその初期化要求情報に応じて実行する。
【0056】
このようにすることで、次のSATAの通信確立に備える。再度、ステップS1から処理が実行して通信を確立するケースとしては、例えば、ドライブ装置2及びホスト3が再接続された場合や、ホスト3がドライブ装置2の不正な動作を検出してCOMRESETによってドライブ装置2をリセットする場合等がある。ホスト3は、例えば、ドライブ装置2から所定の時間の間、応答がない場合にドライブ装置2をリセットする。
【0057】
そして、起動シーケンサ管理回路32は、SATA通信確立処理及びTask File Register情報の送信が終了したことを通知する終了通知情報をCPU20に出力する。CPU20は、起動シーケンサ管理回路32から出力された終了通知情報に応じて、ホスト3に対してデータを送受信する処理の実行を開始する。また、CPU20は、終了通知情報の通知後に、再度、ドライブ装置2の起動シーケンスを実行する場合、DSP21に対して、上述した起動シーケンスにおける処理の実行を指示する指示情報を送信する。DSP21は、CPU20から出力された指示情報に応じて、上述した起動シーケンスを実行する。
【0058】
このように、本実施の形態では、OOBシーケンスの終了が物理層からリンク層に通知されたときに、リンク層内でTask File Register情報をホスト3に送信する制御をおこなっている。したがって、ドライブ装置2内のソフトウェアの仕様に関わらず、安定してホスト3に対して初期認識応答を実行することができる。
【0059】
以上に説明したように、本実施の形態では、ホスト3から送信された要求データに応じて、要求データに応答する応答データをホスト3に送信する処理を、所定の要求データについて、プロセッサ20を代替して実行するDSP21を有するようにしている。これによれば、所定の要求データについて、プロセッサ20で実行される処理に影響されることなく、その要求データに応答する応答データをホスト3に送信する処理を実行することができる。そのため、ホスト3がドライブ装置2からの応答を十分な時間待たない要求データを、所定の要求データとして設定することで、ホスト3から送信された要求データに応答する応答データの送信の遅延を防止することができる。
【0060】
また、本実施の形態では、ホスト3から所定の要求データの次に送信される要求データを受信するときに、所定の要求データに応答する応答データを送信していない場合は、次に送信される要求データの受信を抑止するようにしている。これによれば、先に送信された要求データに応答する応答データを送信する前に、ホスト3からの次の要求データの送信が完了することを防止することができる。そのため、ホスト3及びドライブ装置2で扱うデータに齟齬が生じないようにすることができる。
【0061】
また、本実施の形態では、ホスト3からの起動シーケンスにおける要求データの受信に応じて、起動シーケンスの進行度合いを示す管理情報を更新するようにしている。そして、ホスト3から管理情報が示す進行度合いに応じた要求データが送信されなかった場合は、管理情報を更新せずに、応答データも送信しないようにしている。これによれば、ホスト3が故障又は障害等によって正常な順序で要求データを送信しなかった場合であっても、ドライブ装置2における誤動作を防止することができる。また、このとき、応答データを送信しないようにすることで、タイムアウトを検出したホスト3から再リセットをさせて、起動シーケンスを実行し直すようにさせることによって復旧を試みることができるようになる。
【0062】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【0063】
本実施の形態では、ホスト3からのOOBシーケンスの終了を示すAlignを検出した場合に、Alignに応答するFISについて、CPU20を代替してFISを送信する例について説明したが、応答データの送信を代替する所定の要求データは、Alignである場合に限られない。任意のATA/ATAPIコマンドを示すFISに応答するFISについて、CPU20を代替してFISを送信するようにしてもよい。例えば、ホスト3からATA/ATAPIコマンドを示すFISが連続して送信される場合に、ドライブ装置2が先のFISに応答するFISを送信する前に、ホスト3が十分な時間を待たずに次のFISを送信してきてしまうような場合に、ホスト及びドライブ装置で扱うデータに齟齬が生じないようにすることができる。
【0064】
本実施の形態では、OOBシーケンス及び起動シーケンスの進行度合いを、OOBシーケンス管理番号及び起動シーケンス管理番号によって管理したが、進行度合いを示す情報であれば、これに限られない。例えば、番号以外の文字列及びビットパターン等の情報で管理するようにしてもよい。
【0065】
本実施の形態では、CPU20を代替して、ホスト3から送信されたデータに応答するデータを送信する処理を回路によって実現した場合について例示したが、CPU20を代替する手段はこれに限られない。例えば、DSPやCPU等のプロセッサが、OOBシーケンス判定回路30及び起動シーケンサ管理回路32における処理を実行するプログラムを実行することによって実現してもよい。この場合、OOBシーケンス管理番号及び起動シーケンス管理番号をメモリ11に格納するようにしてもよい。
【0066】
また、このプログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて格納され、ストレージ装置に供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD−ROM(Read Only Memory)、CD−R、CD−R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(Random Access Memory))を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってストレージ装置に供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをストレージ装置に供給できる。
【0067】
また、プロセッサが上述の実施の形態の機能を実現するプログラムを実行することにより、上述の実施の形態の機能が実現される場合だけでなく、このプログラムが、プロセッサ上で稼動しているOS(Operating System)もしくはアプリケーションソフトウェアと共同して、上述の実施の形態の機能を実現する場合も、本発明の実施の形態に含まれる。さらに、このプログラムの処理の全てもしくは一部がストレージ装置に挿入された機能拡張ボードやストレージ装置に接続された機能拡張ユニットによって行われて、上述の実施の形態の機能が実現される場合も、本発明の実施の形態に含まれる。
【符号の説明】
【0068】
1 ストレージシステム
2 ドライブ装置
3 ホスト
10 LSI
11 メモリ
12 ドライバ
13 メカユニット
20 CPU
21 DSP
30 OOBシーケンス判定回路
31 プリミティブ・FIS送信/受信制御回路
32 起動シーケンサ管理回路

【特許請求の範囲】
【請求項1】
ホスト装置から送信された要求データに応じて、当該要求データによって要求された処理を実行するストレージ装置であって、
ストレージと、
前記ストレージの制御を含む第1の処理と、前記ホスト装置から送信された要求データに応じて当該要求データに応答する応答データを前記ホスト装置に送信する第2の処理と、を実行するプロセッサと、
前記ホスト装置から送信される要求データのうち、所定の要求データについて、前記プロセッサを代替して前記第2の処理を実行する代替処理部と、
を備えたストレージ装置。
【請求項2】
前記ストレージ装置は、前記ホスト装置から前記所定の要求データの次に送信される次要求データを受信するときに、前記所定の要求データに応答する応答データを送信していない場合は、前記次要求データの受信を抑止する管理部をさらに備えた請求項1に記載のストレージ装置。
【請求項3】
前記ストレージ装置は、SATA(Serial Advanced Technology Attachment)規格に従って、前記ホスト装置との間でデータを送受信し、
前記要求データは、前記ホスト装置に対してFISの応答が必要となるデータであり、
前記応答データは、前記要求データに応答するFIS(Frame Information Structure)である
請求項1又は2に記載のストレージ装置。
【請求項4】
前記ストレージ装置は、SATA規格に従って、前記ホスト装置との間でデータを送受信し、
前記所定の要求データは、前記SATA規格によって規定されるAlignであり、
前記応答データは、前記Alignに応答するFISである
請求項1に記載のストレージ装置。
【請求項5】
前記ストレージ装置は、SATA規格に従って、前記ホスト装置との間でデータを送受信し、
前記所定の要求データは、前記SATA規格によって規定されるAlignであり、
前記応答データは、前記Alignに応答するFISであり、
前記次要求データは、ATA/ATAPIコマンドを示すFISである
請求項2に記載のストレージ装置。
【請求項6】
前記ストレージ装置は、
前記ストレージ装置の起動シーケンスの進行度合いを示す管理情報を格納する記憶部をさらに備え、
前記管理部は、前記ホスト装置からの前記起動シーケンスにおける要求データの受信に応じて、前記記憶部に格納された管理情報を更新し、
前記代替処理部は、前記記憶部に格納された管理情報が前記Alignの受信完了を示す場合に、前記応答データを送信する
請求項4又は5に記載のストレージ装置。
【請求項7】
前記ストレージ装置は、
前記ストレージ装置の起動シーケンスの進行度合いを示す管理情報を格納する記憶部をさらに備え、
前記管理部は、前記ホスト装置からの前記起動シーケンスにおける要求データの受信に応じて、前記記憶部に格納された管理情報を更新し、
前記データ送受信部は、前記記憶部に格納された管理情報が示す前記Alignの受信完了を示す場合に、前記次要求データの受信の抑止を開始し、当該管理情報が前記応答データの送信完了を示す場合に、前記次要求データの受信の抑止を解除する
請求項5に記載のストレージ装置。
【請求項8】
前記ストレージは、ハードディスク、光ディスク、又は、メモリである請求項1乃至7のいずれか1項に記載のストレージ装置。
【請求項9】
ホスト装置から送信された要求データに応じて、当該要求データによって要求された処理を実行するストレージ装置の制御方法であって、
プロセッサが、ストレージの制御を含む第1の処理と、前記ホスト装置から送信された要求データに応じて当該要求データに応答する応答データを前記ホスト装置に送信する第2の処理と、を実行し、
前記処理の実行では、
前記ホスト装置からの所定の要求データの送信を検出し、
前記所定の要求データを検出した場合に、当該所定の要求データについて代替処理部が前記プロセッサを代替して前記第2の処理を実行する
ストレージ装置の制御方法。
【請求項10】
ホスト装置から送信された要求データに応じて、当該要求データによって要求された処理を実行するストレージ装置に、ストレージの制御を含む第1の処理と、前記ホスト装置から送信された要求データに応じて当該要求データに応答する応答データを前記ホスト装置に送信する第2の処理と、を実行する第1のプロセッサと共に備えられた第2のプロセッサに実行させる制御プログラムであって、
前記ホスト装置からの所定の要求データの送信を検出する処理と、
前記所定の要求データを検出した場合に、当該所定の要求データについて前記第1のプロセッサを代替して前記第2の処理を実行する処理と、
を前記第2のプロセッサに実行させる制御プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate