(57)【要約】      （修正有）【課題】データ転送処理が増加するにつれ、ＤＭＡコントローラからＣＰＵへの通知が増加し、ＣＰＵの処理が中断される。【解決手段】第１の記憶領域を特定する情報と第２の記憶領域を特定する情報とを含むデータ転送情報を格納する第１及び第２のキューを備えるメモリと、データ転送情報を第１又は第２のキューに登録する第１のプロセッサと、第１の記憶領域に記憶されているデータを第２の記憶領域に転送するデータ転送処理を行う第２のプロセッサとを備え、第２のプロセッサは第１のキューに登録されているデータ転送情報を読み出してデータ転送処理を行い、後続するデータ転送情報が第１のキューに登録されているときは、第１のキューからデータ転送情報を読み出してデータ転送処理を行い、後続するデータ転送情報が第１のキューに登録されていないときは、第２のキューからデータ転送情報を読み出してデータ転送処理を行う。【選択図】    図３
2005165439.tif 000002
【特許請求の範囲】
【請求項１】
第１の記憶領域を特定する情報と第２の記憶領域を特定する情報とを含むデータ転送情報を格納する第１及び第２のキューを備えるメモリと、
前記データ転送情報を前記第１又は第２のキューに登録する第１のプロセッサと、
前記第１の記憶領域に記憶されているデータを前記第２の記憶領域に転送するデータ転送処理を行う第２のプロセッサと、
を備え、
前記第２のプロセッサは、前記第１のキューに登録されている前記データ転送情報を読み出し、読み出した前記データ転送情報に基づいて前記データ転送処理を行い、読み出した前記データ転送情報に後続する前記データ転送情報が前記第１のキューに登録されているかどうかを判断し、
前記第２のプロセッサは、前記後続する前記データ転送情報が前記第１のキューに登録されているときは、前記後続する前記データ転送情報を前記第１のキューから読み出し、読み出した前記データ転送情報に基づいて前記データ転送処理を行い、
前記第２のプロセッサは、前記後続する前記データ転送情報が前記第１のキューに登録されていないときは、前記データ転送情報を前記第２のキューから読み出し、読み出した前記データ転送情報に基づいて前記データ転送処理を行うこと、
を特徴とするデータ転送装置。
【請求項２】
請求項１に記載のデータ転送装置であって、
前記第１のプロセッサが実行するタスクの識別情報であるタスク識別情報と、前記タスクに起因する前記データ転送処理の優先度とを対応付けて管理する優先度管理部を備え、
前記第１のプロセッサは、実行している前記タスクの前記タスク識別情報に対応する前記優先度を前記優先度管理部から取得し、取得した前記優先度に応じて、前記タスクに起因して実行される前記データ転送処理についてのデータ転送情報を登録する先となる前記キューを決定し、決定した前記キューに前記データ転送情報を登録すること、
を特徴とするデータ転送装置。
【請求項３】
請求項１に記載のデータ転送装置であって、
前記第１のプロセッサが実行する同一のタスクに起因して実行される前記データ転送処理についての前記データ転送情報が前記第２のキューに登録されている登録数を、前記タスクの前記タスク識別情報毎に記憶する登録数記憶部を備え、
前記第１のプロセッサは、前記第１又は第２のキューに登録しようとしている前記データ転送情報に対応する前記タスク以外の前記タスクに対応する前記登録数を前記登録数記憶部から取得し、取得した前記登録数に応じて、前記データ転送情報を登録する先となる前記キューを決定し、決定した前記キューに前記データ転送情報を登録すること、
を特徴とするデータ転送装置。
【請求項４】
第１の記憶領域を特定する情報と第２の記憶領域を特定する情報とを含むデータ転送情報を格納する第１及び第２のキューを備えるメモリと、
前記データ転送情報を前記第１又は第２のキューに登録する第１のプロセッサと、
前記第１の記憶領域に記憶されているデータを前記第２の記憶領域に転送するデータ転送処理を行う第２のプロセッサと、
を備え、
前記第２のプロセッサは、前記第１のキューに登録されている前記データ転送情報を読み出し、読み出した前記データ転送情報に基づいて前記データ転送処理を行い、読み出した前記データ転送情報に後続する前記データ転送情報が前記第１のキューに登録されているかどうかを判断し、
前記第２のプロセッサは、前記後続する前記データ転送情報が前記第１のキューに登録されているときは、前記後続する前記データ転送情報を前記第１のキューから読み出し、読み出した前記データ転送情報に基づいて前記データ転送処理を行い、
前記第２のプロセッサは、前記後続する前記データ転送情報が前記第１のキューに登録されていないときは、前記データ転送情報を前記第２のキューから読み出し、読み出した前記データ転送情報に基づいて前記データ転送処理を行うこと、
を特徴とするデータ転送装置。
【請求項５】
情報処理装置から記憶デバイスに対して送信されるデータ入出力要求を受信し、受信したデータ入出力要求を記憶するバッファメモリを備える通信インタフェース部と、
前記記憶デバイスとの間でデータを授受する記憶デバイスインタフェース部と、
前記バッファメモリの記憶領域を特定する情報と、前記記憶デバイスの記憶領域を特定する情報とを含むデータ転送情報を格納する第１及び第２のキューを備えるメモリと、
前記データ転送情報を前記第１又は第２のキューに登録する第１のプロセッサと、
前記バッファメモリと前記記憶デバイスとの間でデータを転送するデータ転送処理を行い、レジスタを備える第２のプロセッサと、
を備え、
前記第２のプロセッサは、前記第１のキューに登録されている前記データ転送情報を読み出し、読み出した前記データ転送情報に基づいて前記データ転送処理を行い、読み出した前記データ転送情報に後続する前記データ転送情報が前記第１のキューに登録されているかどうかを判断し、
前記第２のプロセッサは、前記後続する前記データ転送情報が前記第１のキューに登録されているときは、前記後続する前記データ転送情報を前記第１のキューから読み出し、読み出した前記データ転送情報に基づいて前記データ転送処理を行い、
前記第２のプロセッサは、前記後続する前記データ転送情報が前記第１のキューに登録されていないときは、前記第２のキューから前記データ転送情報を読み出し、読み出した前記データ転送情報に基づいて前記データ転送処理を行うこと、
を特徴とする記憶デバイス制御装置。
【請求項６】
情報処理装置から記憶デバイスに対して送信されるデータ入出力要求を受信するチャネル制御部と、
前記記憶デバイスに対するデータ入出力に関する制御を行うディスク制御部と、
前記チャネル制御部と前記ディスク制御部との間で授受されるデータを記憶するキャッシュメモリと、
を備える記憶デバイス制御装置であって、
前記チャネル制御部は、
前記情報処理装置から前記データ入出力要求を受信し、受信した前記データ入出力要求を記憶するバッファメモリを備える通信インタフェース部と、
前記バッファメモリの記憶領域を特定する情報と、前記キャッシュメモリの記憶領域を特定する情報とを含むデータ転送情報を格納する第１及び第２のキューを備えるメモリと、
前記データ転送情報を前記第１又は第２のキューに登録する第１のプロセッサと、
前記バッファメモリと前記キャッシュメモリとの間でデータを転送するデータ転送処理を行い、レジスタを備える、第２のプロセッサと、
を備え、
前記第２のプロセッサは、前記第１のキューに登録されている前記データ転送情報を読み出し、読み出した前記データ転送情報に基づいて前記データ転送処理を行い、読み出した前記データ転送情報に後続する前記データ転送情報が前記第１のキューに登録されているかどうかを判断し、
前記第２のプロセッサは、前記後続する前記データ転送情報が前記第１のキューに登録されているときは、前記後続する前記データ転送情報を前記第１のキューから読み出し、読み出した前記データ転送情報に基づいて前記データ転送処理を行い、
前記第２のプロセッサは、前記後続する前記データ転送情報が前記第１のキューに登録されていないときは、前記データ転送情報を前記第２のキューから読み出し、読み出した前記データ転送情報に基づいて前記データ転送処理を行うこと、
を特徴とする記憶デバイス制御装置。
【請求項７】
情報処理装置から記憶デバイスに対して送信されるデータ入出力要求を受信するチャネル制御部と、
前記記憶デバイスに対するデータ入出力に関する制御を行うディスク制御部と、
前記チャネル制御部と前記ディスク制御部との間で授受されるデータを記憶するキャッシュメモリと、
を備える記憶デバイス制御装置の制御方法であって、
前記チャネル制御部は、
前記情報処理装置から前記データ入出力要求を受信し、受信した前記データ入出力要求を記憶するバッファメモリを備える通信インタフェース部と、
前記バッファメモリの記憶領域を特定する情報と、前記キャッシュメモリの記憶領域を特定する情報とを含むデータ転送情報を格納する第１及び第２のキューを備えるメモリと、
前記データ転送情報を前記第１又は第２のキューに登録する第１のプロセッサと、
前記バッファメモリと前記キャッシュメモリとの間でデータを転送するデータ転送処理を行い、レジスタを備える、第２のプロセッサと、
を備え、
前記第２のプロセッサは、前記第１のキューに登録されている前記データ転送情報を読み出し、読み出した前記データ転送情報に基づいて前記データ転送処理を行い、読み出した前記データ転送情報に後続する前記データ転送情報が前記第１のキューに登録されているかどうかを判断し、
前記第２のプロセッサは、前記後続する前記データ転送情報が前記第１のキューに登録されているときは、前記後続する前記データ転送情報を前記第１のキューから読み出し、読み出した前記データ転送情報に基づいて前記データ転送処理を行い、
前記第２のプロセッサは、前記後続する前記データ転送情報が前記第１のキューに登録されていないときは、前記データ転送情報を前記第２のキューから読み出し、読み出した前記データ転送情報に基づいて前記データ転送処理を行うこと、
を特徴とする記憶デバイス制御装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送装置、記憶デバイス制御装置、記憶デバイス制御装置の制御方法。
【背景技術】
【０００２】
ＣＰＵを介さずにメモリとデバイスとの間で直接データを転送する方法として、従来からＤＭＡ（Direct Memory Access）コントローラを用いたＤＭＡ転送技術が広く使われている。ＤＭＡ転送に際し、ＣＰＵは、ＤＭＡコントローラにデータの転送元や転送先といったデータ転送に必要な情報を設定して、データ転送処理の指示を行う。ＤＭＡコントローラはデータ転送処理の指示がなされると、ＣＰＵを介することなくデータの転送処理を行う。
【特許文献１】特開２００３−９１４９７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、従来のＤＭＡ転送の処理では、ＣＰＵが直接ＤＭＡコントローラのレジスタにデータの転送元や転送先等の情報を設定しているため、特にデータ転送処理が頻繁に発生するような状況では、ＣＰＵによるＤＭＡコントローラへの設定処理にかかる時間が無視できない。また、ＤＭＡコントローラはデータ転送処理を終了すると、割り込みなどによってその旨をＣＰＵに通知するが、データ転送処理が増加するにつれ、ＤＭＡコントローラからＣＰＵへの通知も増加するため、通知の度にＣＰＵの処理が中断されてしまうことになる。
【０００４】
本発明は、このような背景を鑑みてなされたものであり、ＣＰＵを効率的に利用することができる、データ転送装置の制御方法、データ転送装置、記憶デバイス制御装置、記憶デバイス制御装置の制御方法、及びチャネルアダプタを提供することを目的とする。
【課題を解決するための手段】
【０００５】
第１の記憶領域を特定する情報と第２の記憶領域を特定する情報とを含むデータ転送情報を格納する第１及び第２のキューを備えるメモリと、前記データ転送情報を前記第１又は第２のキューに登録する第１のプロセッサと、前記第１の記憶領域に記憶されているデータを前記第２の記憶領域に転送するデータ転送処理を行う第２のプロセッサと、を備え、前記第２のプロセッサは、前記第１のキューに登録されている前記データ転送情報を読み出し、読み出した前記データ転送情報に基づいて前記データ転送処理を行い、読み出した前記データ転送情報に後続する前記データ転送情報が前記第１のキューに登録されているかどうかを判断し、前記第２のプロセッサは、前記後続する前記データ転送情報が前記第１のキューに登録されているときは、前記後続する前記データ転送情報を前記第１のキューから読み出し、読み出した前記データ転送情報に基づいて前記データ転送処理を行い、前記第２のプロセッサは、前記後続する前記データ転送情報が前記第１のキューに登録されていないときは、前記データ転送情報を前記第２のキューから読み出し、読み出した前記データ転送情報に基づいて前記データ転送処理を行うこととする。
【発明の効果】
【０００６】
ＣＰＵを効率的に利用することができる、データ転送装置、記憶デバイス制御装置、記憶デバイス制御装置の制御方法を提供できる。
【発明を実施するための最良の形態】
【０００７】
以下、本発明の実施の形態について図面を用いて詳細に説明する。
【０００８】
＝＝＝第１の実施の形態＝＝＝
図１は、本発明の一実施の形態であるコンピュータを示すブロック図である。  
コンピュータ１は、ＣＰＵ１０、ＲＡＭ２０、記憶装置３０、入力装置４０、出力装置５０、ＤＭＡコントローラ６０、Ｉ／Ｏインタフェース７０を備える。
【０００９】
ＣＰＵ１０は、コンピュータ１の全体の制御を司るプロセッサである。ＣＰＵ１０は記憶装置３０に記録されているプログラムを適宜ＲＡＭ２０に読み出し、ＲＡＭ２０に格納されたプログラムを実行することによって各種の機能を実現する。
【００１０】
記憶装置３０には、例えば、ハードディスクやフレキシブルディスク、半導体記憶装置など様々なものを用いることができる。記憶装置３０は図に示すようにコンピュータ１の外部に接続するようにしてもよいし、コンピュータ１に一体的に組み込んでもよい。入力装置４０はユーザによるコンピュータ１へのデータ入力等のために用いられる装置で、例えばキーボードやマウス等である。出力装置５０は情報を外部に出力するための装置で、例えばディスプレイやプリンタ等である。
【００１１】
Ｉ／Ｏインタフェース７０は、コンピュータ１が外部の装置との間で通信を行うためのインタフェースである。Ｉ／Ｏインタフェース７０は、例えば、ＬＡＮ（Local Area Network）に接続する通信インタフェースやシリアル接続のＲＳ２３２Ｃインタフェースなどである。Ｉ／Ｏインタフェース７０はバッファメモリ７１を備えており、ＣＰＵ１０の制御により、受信したデータをバッファメモリ７１に書き込んだり、バッファメモリ７１に記憶されているデータを外部の装置に送信したりすることができる。
【００１２】
ＤＭＡコントローラ６０は、デバイスとメモリとの間、あるいはメモリとメモリとの間でのデータの転送を行うものである。ＤＭＡコントローラ６０は、ＣＰＵ１０の指示によりデータ転送の処理を開始すると、ＣＰＵ１０を介さずにデータ転送処理を続けることができる。ＤＭＡコントローラ６０は、例えば、Ｉ／Ｏインタフェース７０の備えるバッファメモリ７１と記憶装置３０との間でデータを転送するデータ転送処理を行うことができる。ＤＭＡコントローラ６０は、複数のレジスタを備えており、そのひとつがスタートレジスタ６１である。スタートレジスタ６１は、ＤＭＡコントローラ６０の動作を開始させるためのレジスタである。ＤＭＡコントローラ６０はスタートレジスタ６１に書き込みがなされたことを契機にデータの転送処理を開始する。
【００１３】
また、ＤＭＡコントローラ６０の備える他のレジスタのひとつが、アボートレジスタ６２である。アボートレジスタ６２は、ＤＭＡコントローラ６０の動作を終了させるためのレジスタである。ＤＭＡコントローラ６０はアボートレジスタ６２に所定の値が書き込まれたことを契機にデータの転送処理を中止する。ＤＭＡコントローラ６０がデータ転送処理を中止する処理については後述する。
【００１４】
ＲＡＭ２０には３つのキューが設けられている。キューとはＦＩＦＯ（First In First Out）方式でデータが読み出されるように制御される記憶領域である。非優先転送情報キュー２１及び優先転送情報キュー２２は、ＣＰＵ１０が、データの転送元のアドレスや転送するデータのデータ長等の、データ転送に必要なデータを設定するデータ転送情報を登録するためのキューである。
【００１５】
ＣＰＵ１０は、実行中の各種処理のタスクにおいて、非優先転送キュー２１にデータ転送情報を登録する。タスクとはＣＰＵ１０により実行される一連の処理のことである。ＣＰＵ１０は、優先度の高いデータ転送処理についてのデータ転送情報は、優先転送情報キュー２２に登録する。ＣＰＵ１０は、例えば、優先度の高いタスクを実行しているときに必要なデータ転送処理を優先度の高いデータ転送処理とすることができる。また、ＣＰＵ１０が実行するタスクの種類に応じて、データ転送処理の優先度を予め設定し、ＲＡＭ２０や記憶装置３０等がタスクの種類と優先度とを対応付けたテーブル（優先度管理部）を記憶しておくようにしてもよい。この場合、ＣＰＵ１０は、実行しているタスクの種類に応じた優先度をテーブルから取得して、その優先度に応じて、データ転送情報を登録するキューを決定することができる。ＤＭＡコントローラ６０は、優先転送情報キュー２２に登録されているデータ転送情報については、非優先転送情報キューに登録されているデータ転送情報よりも優先して読み出し、データ転送処理を実行する。
【００１６】
終了ステータスキュー２３は、ＤＭＡコントローラ６０がデータ転送処理を終了したときに、そのデータ転送処理の結果を示す終了ステータスを登録するためのキューである。終了ステータスとは、例えば、エラーコード等が設定されたデータである。ＣＰＵ１０はデータ転送情報を非優先転送情報キュー２１又は優先転送情報キュー２２に登録する。ＤＭＡコントローラ６０は優先転送情報キュー２２からデータ転送情報を読み出す。ＤＭＡコントローラ６０は、優先転送情報キュー２２にデータ転送情報が登録されていないときは、非優先転送情報キュー２１からデータ転送情報を読み出す。ＤＭＡコントローラ６０は、読み出したデータ転送情報に基づいたデータ転送処理を行う。ＤＭＡコントローラ６０は、そのデータ転送処理の終了ステータスを終了ステータスキュー２３に登録する。
【００１７】
＝＝＝データ転送情報＝＝＝
図２は、データ転送情報の一例を示す図である。図２に示すように、データ転送情報は、転送ＩＤ欄２０１、転送方向欄２０２、ディスクアドレス欄２０３、転送長欄２０４を備える。
【００１８】
転送ＩＤ欄２０１には、データ転送情報を特定するＩＤが設定される。ＣＰＵ１０は、データ転送情報を生成する際に、各データ転送情報を特定するＩＤを付与し、この転送ＩＤ欄２０１に設定する。  
転送方向欄２０２には、記憶装置３０とバッファメモリ７１との間でデータが転送される方向を示す値が設定される。例えば、転送方向欄２０２に「０」が設定されているときは、バッファメモリ７１に記憶されているデータが記憶装置３０に転送される。転送方向欄２０２に「１」が設定されているときは、記憶装置３０に記憶されているデータがバッファメモリ７１に転送される。  
ディスクアドレス欄２０３には、記憶装置３０のアドレスが設定される。ＤＭＡコントローラ６０は、記憶装置３０のディスクアドレス欄２０３に記憶されているデータをバッファメモリ７１に転送したり、バッファメモリ７１に記憶されているデータを記憶装置３０のディスクアドレス欄２０３から始まる記憶領域に転送したりする。  
転送長欄２０４には、バッファメモリ７１と記憶装置３０との間で転送されるデータのデータ長が設定される。
【００１９】
ＤＭＡコントローラ６０は、上記のデータ転送情報によって、記憶装置３０上に、ディスクアドレス欄２０３に設定されているアドレスから、転送長欄２０４に設定されているデータ長分の記憶領域を特定することができる。例えば、データ転送情報の転送方向欄２０２に「０」が設定されている場合、ＤＭＡコントローラ６０は、記憶装置３０上のディスクアドレス欄２０３に設定されているアドレスから、転送長欄２０４に設定されているデータ長分の記憶領域に、バッファメモリ７１から読み出したデータを転送する。
【００２０】
なお、本実施形態では、ＤＭＡコントローラ６０は常にバッファメモリ７１の同じアドレスに対して読み書きをするものとし、データ転送情報にはバッファメモリ７１のアドレスは設定しないものとする。もちろん、データ転送情報にバッファメモリ７１のアドレスを設定し、ＤＭＡコントローラ６０が、そのアドレスに対してデータの読み書きをするようにしてもよい。
【００２１】
＝＝＝データ転送処理＝＝＝
図３は、本実施の形態における、バッファメモリ７１と記憶装置３０との間でのデータの転送処理の流れを示すフローチャートである。
【００２２】
ＣＰＵ１０はデータの転送情報をＲＡＭ２０の非優先転送情報キュー２１又は優先転送情報キュー２２に登録する（S3001）。ＣＰＵ１０は、ＤＭＡコントローラ６０のスタートレジスタに書き込みを行い、データ転送処理の開始を指示する（S3002）。
【００２３】
ＤＭＡコントローラ６０はスタートレジスタに書き込みが成されたことを検出すると、優先転送情報キュー２２にデータ転送情報が登録されているかどうかを判定する（S3003）。優先転送情報キュー２２にデータ転送情報が登録されている場合（S3003:YES）には、優先転送情報キュー２２からデータ転送情報を読み出す（S3004）。優先転送情報キュー２２にデータ転送情報が登録されていない場合（S3003:NO）には、非優先転送情報キュー２１からデータ転送情報を読み出す（S3005）。ＤＭＡコントローラ６０は、読み出したデータ転送情報に基づいてデータ転送処理を行う（S3006）。ＤＭＡコントローラ６０はデータ転送処理を終了すると、終了ステータスを終了ステータスキュー２３に登録する（S3007）。
【００２４】
一方、ＣＰＵ１０は、他の処理を行いながら、その処理の合間に終了ステータスキュー２３に新しい終了ステータスが登録されているかどうかを検査する（S3008）。ＣＰＵ１０は、終了ステータスが終了ステータスキュー２３に書き込まれたことを検出すると（S3008：YES）、その終了ステータスに応じた処理を行う（S3009）。終了ステータスに応じた処理とは、例えば、ＤＭＡコントローラ６０によるデータ転送処理が異常終了していた場合に、データ転送処理が失敗したことを示すメッセージ等を、出力装置５０に出力することである。
【００２５】
ＤＭＡコントローラ６０は、優先転送情報キュー２２又は非優先転送情報キュー２１に後続のデータ転送情報が登録されている場合、スタートレジスタへの書き込みを待たずに、（S3003）からの処理を続ける。
【００２６】
なお、上述したデータ転送処理では、ＣＰＵ１０がＤＭＡコントローラ６０のスタートレジスタに書き込みを行うことでＤＭＡコントローラ６０はデータ転送処理を開始するようにしたが、ＤＭＡコントローラ６０がう優先転送情報キュー２１及び非優先転送情報キュー２２を監視し、データ転送情報が書き込まれたことを検出することでデータ転送処理を開始するようにしてもよい。
【００２７】
上述のように、ＣＰＵ１０は、非優先転送情報キュー２１又は優先転送情報キュー２１にデータ転送情報を登録していくことにより、複数のデータ転送処理をＤＭＡコントローラ６０に指示することができる。ＤＭＡコントローラ６０は、優先転送転送情報キュー２２又は非優先転送情報キュー２１からデータ転送情報を読み出し、読み出したデータ転送情報に基づいてデータ転送処理を行うため、ＣＰＵ１０がデータ転送処理に必要なデータをデータ転送情報に設定して非優先転送情報キュー２２又は優先転送情報キュー２１に登録する処理とは独立して非同期にデータ転送処理を行うことができる。
【００２８】
本発明によれば、第１のプロセッサ（ＣＰＵ１０）は、メモリ（ＲＡＭ２０）に設けられたキュー（非優先転送情報キュー２１又は優先転送情報キュー２２）にデータ転送情報を登録していくことで、第２のプロセッサ（ＤＭＡコントローラ６０）と直接やり取りを行わずに、第２のプロセッサにデータ転送処理を指示することができる。従って、第１のプロセッサは、第２のプロセッサからデータ転送処理が終了する度に終了通知を通知されることなく、他の処理を行うことができるので、第１のプロセッサの効率的な利用を図ることが可能となる。
【００２９】
なお、第１のプロセッサ（ＣＰＵ１０）は、例えば、第２のキュー（非優先転送情報キュー２１）の先頭に優先度の高いデータ転送処理についてのデータ転送情報を登録することによって、データ転送処理の順序を制御することができる。しかし、第１のプロセッサが第２のキューに登録されているデータ転送情報の順序を変更している途中に、第２のプロセッサ（ＤＭＡコントローラ６０）が第２のキューからデータ転送情報を読み出してしまうと、第１のプロセッサが予定している順番にデータ転送処理が行われなくなってしまう。そのため、第１のプロセッサは、第２のキューに登録されているデータ転送情報の順番を変更して、優先度の高いデータ転送情報が先頭になるように並べ替えるためには、第２のプロセッサの動作を中断させておく必要がある。
【００３０】
ところが、本発明によれば、第２のプロセッサは、第１のキュー（優先転送情報キュー２２）に登録されているデータ転送情報を、第２のキューに登録されているデータ転送情報より優先して読み出てデータ転送処理を行う。従って、第１のプロセッサは、優先度の高いデータ転送処理についてのデータ転送情報を第１のキューに登録することにより、第２のキューの先頭にデータ転送情報を登録したことと同様の効果を奏することができる。よって、第１のプロセッサは、第２のプロセッサの動作を中断することなく、第１のキューに登録されているデータ転送情報についてのデータ転送処理が優先して行われるようにすることができる。つまり、第１のプロセッサは、データ転送処理が実行される順序の制御を、容易に行うことが可能となる。
【００３１】
また、第１のプロセッサは、第２のキューに登録されているデータ転送情報の並び順を変更することなく、第１のキューに登録されているデータ転送情報についてのデータ転送処理が優先して行われるようにすることができる。よって、優先度に応じてデータ転送情報を登録する際に必要なメモリへのアクセスを抑え、効率的なデータ転送処理を実現することができる。
【００３２】
また、第１のプロセッサは、第２のプロセッサが行ったデータ転送処理の結果をメモリ（終了ステータスキュー２３）を参照することによって把握することができる。そのため、第１のプロセッサは、第２のプロセッサから直接終了通知を受けることなく、第２のプロセッサのデータ転送処理の終了結果をメモリを介して間接的に取得することができる。従って、第１のプロセッサの効率的な動作を図ることができる。
【００３３】
また、一般的に、ＣＰＵ１０が動作するクロックは、ＤＭＡコントローラ６０に使用されるクロックよりも高速であるため、ＣＰＵ１０からＤＭＡコントローラ６０のレジスタにアクセスする時間よりも、ＲＡＭ２０にアクセスする時間の方が短いことが多い。そのため、本発明によって、ＣＰＵ１０がＤＭＡコントローラ６０に対してデータ転送処理に必要な情報を設定するのにかかる時間は短縮され、ＣＰＵ１０はより効率的に動作することが可能となる。
【００３４】
なお、ＤＭＡコントローラ６０は、ＲＡＭ２０からデータ転送情報を読み出す際に、ＤＭＡコントローラ６０とＲＡＭ２０とを結ぶバス上をバースト転送するようにしてもよい。これにより、ＤＭＡコントローラ６０はバスの使用効率のよいデータの読み出しが可能となる。よって、コンピュータ１全体として、効率的な転送処理を実現することが可能となる。
【００３５】
また、一般的には、ＣＰＵ１０がＤＭＡコントローラ６０に連続してデータ転送処理を実行させる場合には、ＣＰＵ１０はＤＭＡコントローラ６０がデータ転送処理が終了したことを検出した後に、続くデータ転送に必要な情報をＤＭＡコントローラ６０に設定しなくてはならない。これに対し、本発明よれば、ＣＰＵ１０はＤＭＡコントローラ６０の動作状況にかかわらず、データ転送処理に必要な情報をＲＡＭ２０に書き込むことができる。そのため、ＣＰＵ１０はＤＭＡコントローラ６０に対して複数のデータ転送処理を指示することができる。
【００３６】
また、ＣＰＵ１０は、実行するタスク毎に優先度を設定し、その優先度に応じて、データ転送情報を登録するキューを決定するようにしてもよい。これにより、ＣＰＵ１０は、優先度の高いタスクに起因して実行されるデータ転送処理を、優先度の低いタスクに起因して実行されるデータ転送処理に先立って実行されるようにすることができる。
【００３７】
＝＝＝データ転送中止処理＝＝＝
ここで、第１のプロセッサ（ＣＰＵ１０）が既にキュー（非優先転送情報キュー２１又は優先転送情報キュー２２）に登録したデータ転送情報について、第１のプロセッサが、例えば、その内容を変更したり、キューから削除したりしたいという状況が考えられる。このとき、第２のプロセッサ（ＤＭＡコントローラ６０）が、例えば、第１のプロセッサが変更している最中のデータ転送情報を読み出し、そのデータ転送情報に基づいてデータ転送処理を行ってしまうと、第１のプロセッサがそのデータ転送情報によって指示しようとする記憶領域とは異なる記憶領域間でのデータ転送処理が行われてしまうおそれがある。また、第２のプロセッサが、例えば、第１のプロセッサによってキューから削除されようとしているデータ転送情報に基づいてデータ転送処理を行ってしまうと、第２のプロセッサは無駄なデータ転送処理を行うことになってしまい、第２のプロセッサの処理効率のみならず、データ転送装置全体としてのデータ転送の効率も下げてしまうおそれがある。そのため、第１のプロセッサは、第２のプロセッサのデータ転送処理を一時中止させ、第１のプロセッサが変更や削除を行おうとしているデータ転送情報を第２のプロセッサが読み出すことがないようにする必要がある。ただし、第２のプロセッサがデータ転送処理を実行中にその実行中のデータ転送処理を中止してしまうと、再度そのデータ転送処理をやり直す必要があり、全体としてデータ転送にかかる処理時間が長くなってしまうおそれがある。そこで、本発明では、第２のプロセッサはデータ転送処理を完了した後に、レジスタ（アボートレジスタ６２）に、データ転送処理を中止することを示すコマンドである中止コマンドが設定されていれば、後続のデータ転送処理を中止するようにしている。
【００３８】
以下に、第１のプロセッサが第２のプロセッサのデータ転送処理を中止する処理について説明する。  
ＣＰＵ１０は、ＤＭＡコントローラ６０のアボートレジスタ６２に所定の値を設定することにより、ＤＭＡコントローラ６０のデータ転送処理を中止するように指示する。アボートレジスタ６２に設定される値として、あるデータ転送情報に基づくデータ転送処理を終了した時点で処理を中止するように指示する中止コマンドと、実行中のデータ転送処理を即座に中止するように指示する強制終了コマンドとの２種類がある。中止コマンドとは、例えば、「0x0001」のような値である。また、強制終了コマンドとは、例えば、「0x0002」のような値である。
【００３９】
図４は、ＤＭＡコントローラ６０がデータ転送処理を中止する処理の流れを示すフローチャートである。ＣＰＵ１０が、データ転送情報を非優先転送情報キュー２１又は優先転送情報キュー２２に登録し、ＤＭＡコントローラ６０のスタートレジスタ６１に書き込みを行うことによって、ＤＭＡコントローラ６０のデータ転送処理が開始される。
【００４０】
ＤＭＡコントローラ６０は、スタートレジスタ６１に書き込みが成されたことを検出すると、優先転送情報キュー２２からデータ転送情報を読み出す。優先転送情報キュー２２にデータ転送情報が登録されていない場合は、非優先転送情報キュー２１からデータ転送情報を読み出す（S4001）。ＤＭＡコントローラ６０は、読み出したデータ転送情報に基づいて、バッファメモリ７１と記憶装置３０との間でデータを転送するデータ転送処理を開始する（S4002）。
【００４１】
ＤＭＡコントローラ６０は、アボートレジスタ６２に書き込みがなされたことを検出すると（S4003）、アボートレジスタ６２を参照し、強制終了コマンドが設定されているかどうかを検査する（S4004）。アボートレジスタ６２に強制終了コマンドが設定されていた場合には（S4004:YES）、ＤＭＡコントローラ６０は実行中であるデータ転送処理を中止する（S4005）。ＤＭＡコントローラ６０は、データ転送処理を強制終了した旨を示す終了ステータスを作成し、作成した終了ステータスを終了ステータスキュー２３に登録して（S4006）、動作を終了する。
【００４２】
一方、アボートレジスタ６２に強制終了コマンドが設定されていなかった場合（S4004:NO）、ＤＭＡコントローラ６０は、アボートレジスタ６２に中止コマンドが書き込まれていたとしても、データ転送処理を継続する（S4007）。ＤＭＡコントローラ６０は、バッファメモリ７１と記憶装置３０との間でのデータ転送処理を行った後、アボートレジスタ６２を参照し、アボートレジスタ６２に中止コマンドが設定されているかどうかを検査する（S4008）。ＤＭＡコントローラ６０は、アボートレジスタ６２に中止コマンドが設定されている場合（S4008:YES）、以降のデータ転送処理を中止する。ＤＭＡコントローラ６０は、以降の処理を中止した旨を示す終了ステータスを作成し、終了ステータスキュー２３に登録する（S4009）。アボートレジスタ６２に中止コマンドが設定されていない場合には（S4008:NO）、正常に終了した旨を示す終了ステータスを作成して終了ステータスキュー２３に登録する（S4010）。その後、（S4002）に進み、優先転送情報キュー２２又は非優先転送情報キュー２１に登録されている後続のデータ転送情報についてのデータ転送処理を行う。
【００４３】
上記のように、本発明では、第２のプロセッサ（ＤＭＡコントローラ６０）はデータ転送処理を完了した後に、レジスタ（アボートレジスタ６２）に中止コマンドが設定されていれば、後続のデータ転送処理を中止する。従って、第２のプロセッサは、実行中のデータ転送処理の途中でそのデータ転送処理を中止してしまうことがない。また、第１のプロセッサ（ＣＰＵ１０）は、第２のプロセッサがデータ転送処理を完了したかどうかの監視を行ったり、第２のプロセッサからの完了通知を受けたりすることなく、データ転送処理を中止させるための中止コマンドを第２のプロセッサに指示することができる。従って、第１のプロセッサは、第２のプロセッサのレジスタに中止コマンドを設定することにより、第２のプロセッサがデータ転送処理を完了した時点で後続のデータ転送処理を中止するように、容易に第２のプロセッサを制御することができる。よって、第１のプロセッサの効率的な利用を図りつつ、第２のプロセッサのデータ転送処理の中止による、データ転送装置全体（コンピュータ１）としてのデータ転送能力の低下を最小限に抑えることができる。
【００４４】
なお、第１のプロセッサは、第２のプロセッサのレジスタに中止コマンドを設定した後、所定の時間のうちに、第２のプロセッサがデータ転送処理を中止したことを確認できなければ、第２のプロセッサがデータ転送処理を強制終了するように、強制終了コマンドをレジスタに書き込むようにしてもよい。これにより、例えば、第２のプロセッサがデータ転送処理を完了できずに待機してしまっているような場合に、第１のプロセッサは第２のプロセッサがデータ転送処理を強制的に終了するように制御することができる。よって、第１のプロセッサが第２のプロセッサのデータ転送処理を中止させるときに、第２のプロセッサがデータ転送処理を中止するまでにかかる時間が所定の時間を超えないようにすることができる。これにより、第１及び第２のプロセッサが効率的な処理を図ることができる。また、データ転送装置全体としてのデータ転送能力の低下を抑えることができる。
【００４５】
このように、ＣＰＵ１０は、ＤＭＡコントローラ６０がデータ転送処理を終了した時点で、それ以降のデータ転送処理を行わないように中止させることができる。ＣＰＵ１０はＤＭＡコントローラ６０のデータ転送処理が中止されると、例えば、キュー（非優先転送情報キュー２１又は優先転送情報キュー２２）に登録されているデータ転送情報について、その内容を更新したり、キューから削除したりする。その後、ＣＰＵ１０はＤＭＡコントローラ６０のアボートレジスタ６２に「０」を書き込み、アボートレジスタ６２に設定されている中止コマンドや強制終了コマンドをクリアする。ＤＭＡコントローラ６０は、アボートレジスタ６２に書き込みがなされると、アボートレジスタ６２に設定されている値を参照する。ＤＭＡコントローラ６０は、アボートレジスタ６２に設定されている値が、中止コマンドや強制終了コマンドではなかった場合には、優先転送情報キュー２２又は非優先転送情報キュー２１からデータ転送情報を読み出し、データ転送処理を再開する。
【００４６】
なお、ＤＭＡコントローラ６０が、例えば、データ転送処理を再開するように指示するためのレジスタである再開レジスタを備えるようにし、ＣＰＵ１０がアボートレジスタ６２に「０」を書き込む代わりに、この再開レジスタに値を設定することによってＤＭＡコントローラ６０がデータ転送処理を再開するようにしてもよい。
【００４７】
また、スタートレジスタ６１やアボートレジスタ６２、上記の再開レジスタといったレジスタは、例えば、同一のレジスタ（制御レジスタ）とすることもできる。この場合、ＤＭＡコントローラ６０は、この制御レジスタに設定される値の所定のビット位置に「１」が設定されているかどうかによって、データ転送処理の開始、中止、強制終了、又は再開を行うようにしてもよい。
【００４８】
＝＝＝登録済みデータ転送情報の削除＝＝＝
ここで、ＣＰＵ１０は、キュー（非優先転送情報キュー２１又は優先転送情報キュー２２）に登録されているデータ転送情報を削除する場合に、削除しようとしているデータ転送情報の転送長欄２０４に、データ転送処理を行わないことを示す値を設定するようにすることもできる。データ転送処理を行わないことを示す値とは、例えば「０」である。データ転送処理を行わないことを示す値として、例えば「−１」等の、通常データ長としては使われない値を用いるようにしてもよい。ＤＭＡコントローラ６０は、優先転送情報キュー２２又は非優先転送情報キュー２１から読み出したデータ転送情報の転送長欄２０４に、このようなデータ転送処理を行わないことを示す値が設定されていると、データ転送処理を行わないようにすることができる。
【００４９】
ＣＰＵ１０は、キュー（非優先転送情報キュー２１又は優先転送情報キュー２２）からデータ転送情報を削除することによっても、キューに登録済みのデータ転送情報についてのデータ転送処理をキャンセルすることができる。しかしながら、ＣＰＵ１０が、キューに登録済みのデータ転送情報の転送長欄２０４にデータ転送処理を行わないことを示す値を設定するだけで、キューに登録済みのデータ転送情報についてのデータ転送処理をキャンセルすることもできる。すなわち、ＣＰＵ１０は、キューに登録されているデータ転送情報の転送長欄２０４を更新するのみで、キューからデータ転送情報を削除するのと同様の効果を実現することができる。従って、ＣＰＵ１０がキューからデータ転送情報を削除するのに比べ、キューに登録されているデータ転送情報のデータ長に値を設定する方が、ＣＰＵ１０のＲＡＭ２０へのアクセスは少なくなる。よって、ＣＰＵ１０のＲＡＭ２０へのアクセスによる処理負担が軽減され、効率的なＣＰＵ１０の動作が可能となる。また、ＣＰＵ１０は、キューからデータ転送情報を削除する際に、ＤＭＡコントローラ６０のデータ転送処理を中止させる。そのため、ＣＰＵ１０のＲＡＭ２０へのアクセスが減り、データ転送処理のキャンセルするための処理時間が短縮されるため、ＤＭＡコントローラ６０がデータ転送処理を中止している時間も短縮される。よって、データ転送処理をキャンセルすることによるコンピュータ１のデータ転送能力の低下を抑えることができる。
【００５０】
このように、ＣＰＵ１０の処理負荷を軽減し、ＤＭＡコントローラ６０の処理の中止時間を短縮することによって、コンピュータ１全体としてのデータ転送処理効率を向上することができる。
【００５１】
＝＝＝第２の実施の形態＝＝＝
次に、本発明を、記憶デバイス制御装置に適用した実施の形態を説明する。  
図５は、本発明に係る第２の実施の形態として説明する情報処理システムの全体構成を示すブロック図である。
【００５２】
情報処理装置１００と記憶デバイス制御装置２００とはネットワーク４００に接続され、ネットワーク４００を介して相互に通信が可能となっている。ネットワーク４００は例えば、ＳＡＮ（Storage Area Network）である。ネットワーク４００は、ＳＡＮ以外にも、ＬＡＮ（Local Area Network）による接続としてもよい。ネットワーク４００のプロトコルには、ファイバーチャネル、ＥＳＣＯＮ（登録商標）、ＦＩＣＯＮ（登録商標）、ＳＣＳＩ（Small Computer System Interface）といった様々なものを利用することができる。
【００５３】
情報処理装置１００は、記憶デバイス制御装置２００の提供する記憶資源を利用することにより情報処理サービスを行うコンピュータである。情報処理装置１００の行う情報処理サービスとは、例えば、銀行の自動預金預け払いシステムや航空機の座席予約システムなどである。情報処理装置１００は、ＣＰＵ（Central Processing Unit）やメモリを備えたコンピュータであり、ＣＰＵによって各種のプログラムが実行されることにより様々な機能が実現される。情報処理装置１００は、例えば、メインフレームコンピュータやワークステーション、パーソナルコンピュータ等とすることができる。
【００５４】
記憶デバイス３００は、多数のディスクドライブを備えており、情報処理装置１００に対して記憶領域を提供する。ディスクドライブとしては、例えばハードディスク装置やフレキシブルディスク装置、半導体記憶装置等様々なものを用いることができる。記憶デバイス３００は、例えば複数のディスクドライブによりディスクアレイを構成するようにすることもできる。この場合、情報処理装置１００に対して提供される記憶領域は、ＲＡＩＤにより管理された複数のディスクドライブにより提供されるようにすることができる。
【００５５】
記憶デバイス制御装置２００は、情報処理装置１００から記憶デバイス３００に対するデータ入出力要求を受け付け、記憶デバイス３００に対するデータ入出力に関する処理を行う装置である。記憶デバイス制御装置２００は、チャネル制御部２１０、共有メモリ２２０、キャッシュメモリ２３０、ディスク制御部２４０を含んで構成される。チャネル制御部２１０は、情報処理装置１００との間で通信を行うための通信インタフェースを備え、情報処理装置１００から記憶デバイス３００に対するデータ入出力要求を受信する機能を有する。チャネル制御部２１０は、受信したデータ入出力要求に応じて、ディスク制御部２４０に記憶デバイス３００に対するデータ入出力を指示するコマンドをディスク制御部２４０に伝達する。ディスク制御部２４０は、このコマンドを受け付け、記憶デバイス３００に対するデータ入出力に関する処理を行う。共有メモリ２２０は、チャネル制御部２１０やディスク制御部２４０により共有されるメモリで、例えば、上記のようなデータ入出力の制御を指示するコマンドなどを記憶する。キャッシュメモリ２３０は、チャネル制御部２１０とディスク制御部２４０との間で授受されるデータを記憶する。
【００５６】
記憶デバイス３００の備えるディスクドライブにより提供される物理的な記憶領域である物理ボリュームには、論理的な記憶領域である論理ボリュームが設定されている。記憶デバイス制御装置２００は、この論理ボリュームを対象としてデータの入出力の制御を行う。情報処理装置１００が記憶デバイス制御装置２００の論理ボリュームに対してデータの書き込みを求めるデータ入出力要求（以下、データ書き込み要求と称する）を送信すると、チャネル制御部２１０がそのデータ入出力要求を受信する。チャネル制御部２１０は受信したデータ入出力要求に応じて、データ書き込みを指示するコマンド（以下、データ書き込みコマンドと称する）を生成し、共有メモリ２２０に書き込むとともに、情報処理装置１００から受信した書き込みデータをキャッシュメモリ２３０に書き込む。ディスク制御部２４０は、データ書き込みコマンドを共有メモリ１２０から読み出し、それに基づいてキャッシュメモリ２３０に書き込まれたデータを記憶デバイス３００に対して書き込むための処理を行う。なお、チャネル制御部２１０が共有メモリ２２０に書き込むデータ書き込みコマンドや、チャネル制御部２１０がキャッシュメモリ２３０に書き込むデータは、チャネル制御部２１０が直接ディスク制御部２４０に伝達するようにすることもできる。
【００５７】
＝＝＝チャネル制御部＝＝＝
チャネル制御部２１０は、情報処理装置１００から受信するデータ入出力要求に応じたデータ入出力の処理以外にも、下記のような処理を行うことがある。  
チャネル制御部２１０は、例えば、記憶デバイス３００の第１の論理ボリュームに記憶されているデータの保全性を高めるために、第１の論理ボリュームとは異なる第２の論理ボリュームに、第１の論理ボリュームに記憶されているデータの複製をコピーする処理（以下、ローカルコピー処理と称する）を行うことがある。
【００５８】
また、チャネル制御部２１０は、第１の論理ボリュームに記憶されているデータの保全性をさらに高めるため、第１の論理ボリュームに記憶されているデータを、他の記憶デバイス制御装置２００が制御している第３の論理ボリュームにコピーする処理（以下、利ｍ−とコピー処理と称する）を行うこともある。この場合、第１の記憶デバイス制御装置２００のチャネル制御部２１０と、第２の記憶デバイス制御装置２００のチャネル制御部２１０とが通信可能に接続する。第１の記憶デバイス制御装置２００は、第１の論理ボリュームに記憶されているデータを第２の記憶デバイス制御装置に送信する。これにより、第１の記憶デバイス制御装置２００に故障等が発生した場合であっても、情報処理装置１００が第２の記憶デバイス制御装置２００の第２の論理ボリュームにアクセスするようにするという、いわゆるフェイルオーバを実現することができる。
【００５９】
第１の記憶デバイス制御装置２００のチャネル制御部２１０は、第１の論理ボリュームのデータを第２の記憶デバイス制御装置に送信するが、第１の論理ボリュームにデータの書き込みがある度に、第１の論理ボリュームのデータを全て送信すると、転送処理に時間がかかり、また、通信経路のトラフィックも増加し、好ましくない。そこで、チャネル制御部２１０は、第１の論理ボリュームに記憶されているデータに対してなされた更新に関する情報（更新履歴）のみを送信するようにしている。この更新履歴のことをジャーナルと呼ぶ。
【００６０】
チャネル制御部２１０は、第１の論理ボリュームに対するデータの書き込み要求を情報処理装置１００から受信すると、第１の論理ボリュームに対するデータ書き込みコマンドを生成し、共有メモリ１２０に書き込む（ディスク制御部２４０に送信するようにしてもよい）とともに、第１の論理ボリュームに書き込まれたデータの複製（以下、ジャーナルデータと呼ぶ）を第２の論理ボリュームに書き込む。また、チャネル制御部２１０は、データ書き込みコマンドを作成した時刻（データが第１の論理ボリュームに書き込まれた時刻）、データ書き込み要求に指定された第１の論理ボリュームのアドレス、書き込まれるデータのデータ長、ジャーナルデータが書き込まれた第２の論理ボリュームのアドレス等を含むメタデータを作成する。上述のジャーナルとは、このメタデータとジャーナルデータとを含むデータである。このように、第１の記憶デバイス制御装置２００のチャネル制御部２１０は、データ書き込み要求に応じてジャーナルを生成する処理（以下、ジャーナル生成処理と称する）を行い、生成したジャーナルを第２の記憶デバイス制御装置２００に送信する。第２の記憶デバイス制御装置２００のチャネル制御部２１０は、受信したジャーナルに基づいて第２の論理ボリュームを更新する。チャネル制御部２１０がジャーナルを受信することをジャーナル取得処理と呼ぶ。また、チャネル制御部２１０が論理ボリュームをジャーナルに基づいて更新する処理をリストア処理と呼ぶ。このようにして、２つの記憶デバイス制御装置２００間で、第１の論理ボリュームと第２の論理ボリュームとが同じ内容になるようにすることができる。
【００６１】
また、チャネル制御部２１０は、過去の時点において論理ボリュームに記憶されていたデータを取得できるようにする処理（スナップショット処理）を行うこともある。
【００６２】
チャネル制御部２１０は、スナップショット処理を行うように指示するコマンド（スナップショットコマンド）を情報処理装置１００から受信し、受信したスナップショットコマンドに応じて、スナップショット処理を開始する。チャネル制御部２１０は、スナップショット処理を開始した後に、第１の論理ボリュームに対するデータの書き込み要求を情報処理装置１００から受信すると、第１の論理ボリュームにはデータを書き込まず、第２の論理ボリュームに書き込むように指示するデータ書き込みコマンドを生成する。チャネル制御部２１０は、データ書き込み要求に指定されていた第１の論理ボリュームのアドレスと、実際にデータを書き込む第２の論理ボリュームのアドレスとを対応付け、管理テーブルとして記憶しておく。チャネル制御部２１０は、管理テーブルを参照することにより、第１の論理ボリュームに記憶されているべき最新のデータが、第１の論理ボリュームと第２の論理ボリュームのどちらに記憶されているかを判定することができる。
【００６３】
チャネル制御部２１０は、情報処理装置１００からデータの読み出し要求を受信すると、受信したデータ読み出し要求に指定されている第１の論理ボリュームのアドレスに記憶されているべき最新のデータが、第１の論理ボリュームと第２の論理ボリュームのどちらに記憶されているかを判定する。チャネル制御部２１０は、その判定結果に応じて、第１又は第２の論理ボリュームから最新のデータを読み出す。チャネル制御部２１０は読み出したデータを、データ読み出し要求の応答として情報処理装置１００に返信する。
【００６４】
情報処理装置１００は、スナップショットコマンドを送信した時点のデータを読み出すためのスナップショットデータ読み出し要求を送信することもできる。チャネル制御部２１０は、第１の論理ボリュームに記憶されているデータを読み出すことにより、スナップショット処理が開始された時点でのデータを取得することができる。従って、チャネル制御部２１０がスナップショットデータ読み出し要求を受信すると、第１の論理ボリュームからデータを読み出し、情報処理装置１００に返信する。
【００６５】
なお、チャネル制御部２１０は、第１の論理ボリュームに対するデータの書き込み要求を受信したときに、第１の論理ボリュームに記憶されていたデータを第２の論理ボリュームにコピーし、最新のデータを第１の論理ボリュームに書き込むようにしてもよい。この場合、チャネル制御部２１０は、スナップショットデータ読み出し要求を受信すると、その要求に設定されているアドレスに応じて、第１又は第２の論理ボリュームからデータを読み出して、情報処理装置１００に返信する。
【００６６】
記憶デバイス制御装置２００は、上述したローカルコピー処理や、ジャーナル生成処理、ジャーナル取得処理、リストア処理により、論理ボリュームに記憶されているデータに冗長性を持たせ、データの保全性を高めることができる。また、記憶デバイス制御装置２００は、スナップショット処理により、過去の時点のデータを読み出すことができる。
【００６７】
次に、チャネル制御部２１０の構成を説明する。図６は、チャネル制御部２１０のハードウエア構成を示すブロック図である。この図に示すように、チャネル制御部２１０は、マイクロプロセッサ２１１、ローカルメモリ２１２、通信インタフェース２１３、バッファメモリ２１４、データ転送ＬＳＩ５００を備え、これらが同一のユニットに形成されて構成されている。チャネル制御部２１０は、記憶デバイス制御装置２００に一体的に組み込まれた形態とすることもできるし、記憶デバイス制御装置２００から着脱可能な独立したチャネル制御装置とすることもできる。
【００６８】
なお、この図において、チャネル制御部２１０はマイクロプロセッサ２１１、ローカルメモリ２１２、及び通信インタフェース２１３をそれぞれ４つずつ、またバッファメモリ２１４を２つ、データ転送ＬＳＩ５００を１つ備えているが、これらの数に限定するものではなく、例えば、マイクロプロセッサ２１１を１つ、データ転送ＬＳＩ５００を２つ備えるような形態とすることもできる。チャネル制御部２１０がデータ転送ＬＳＩ５００を複数備える場合、マイクロプロセッサ２１１は複数のデータ転送ＬＳＩ５００のそれぞれに対してデータ転送情報を通知する必要があるが、本発明によればマイクロプロセッサ２１１はデータ転送ＬＳＩ５００からの通知を待つことなく次に行うべき処理に移ることができるため、マイクロプロセッサ２１１はデータ転送ＬＳＩ５００のそれぞれに対してメモリを介して間接的にデータ転送情報を通知することができる。従って、データ転送処理の処理効率の向上が図られる。本実施の形態によるデータ転送処理の詳細については後述する。
【００６９】
マイクロプロセッサ２１１は、チャネル制御部２１０全体の制御を司るプロセッサであり、ローカルメモリ２１２に格納されたプログラムを実行することによって上述したローカルコピー処理や、ジャーナル生成処理、ジャーナル取得処理、リストア処理、スナップショット処理等を実行し、各種の機能を提供する。図６に示す４つのマイクロプロセッサ２１１は、それぞれ独立して通信インタフェース２１３から受信したデータ入出力要求の解釈をし、受信したデータ入出力要求に従ってデータ転送ＬＳＩ５００に対してデータ転送の指示をしたり、ディスク制御部２４０に対して記憶デバイス３００からのデータ読み出しの指示を行ったりもする。
【００７０】
ローカルメモリ２１２には様々なプログラムやデータが記憶される。本実施の形態におけるチャネル制御部２１０では、マイクロプロセッサ２１１は、それぞれ１つのローカルメモリ２１２を管理している。ローカルメモリ２１２はバスを介してマイクロプロセッサ２１１に接続されている。またローカルメモリ２１２はマイクロプロセッサ２１１内のバスを介することによって、データ転送ＬＳＩ５００とも間接的に接続されている。ローカルメモリ２１２は、マイクロプロセッサ２１１が実行するプログラムを格納したり、プログラムによって利用されるデータを記憶したりする。
【００７１】
通信インタフェース２１３は、情報処理装置１００との間で通信を行うためのインタフェースであり、情報処理装置１００との間で通信を行うための通信コネクタを備えている。チャネル制御部２１０の場合は、例えばファイバーチャネルやＳＣＳＩ、ＦＩＣＯＮ（登録商標）、ＥＳＣＯＮ（登録商標）、ＡＣＯＮＡＲＣ（登録商標）、ＦＩＢＡＲＣ（登録商標）のプロトコルに従って情報処理装置１００から送信されたデータ入出力要求などを受信する。通信インタフェース２１３は受信したデータをバッファメモリ２１４に記憶する。また、通信インタフェース２１３はバッファメモリ２１４に記憶されたデータを情報処理装置１００に対して送信することもできる。
【００７２】
通信インタフェース２１３が情報処理装置１００から受信するデータ入出力要求に応じて、マイクロプロセッサ２１１が行う、例えばデータ書き込みコマンドを作成する等の、記憶デバイス３００に対するデータ入出力に関する処理を、以下Ｉ／Ｏ処理と称する。これに対し、マイクロプロセッサ２１１が実行する、上述したローカルコピー処理や、ジャーナル生成処理、ジャーナル取得処理、リストア処理、スナップショット処理等を以下内部処理と称する。
【００７３】
データ転送ＬＳＩ５００は上述した第１の実施の形態であるコンピュータ１の備えるＤＭＡコントローラ６０と同様、デバイスとメモリの間、あるいはメモリとメモリとの間でのデータの転送を行うものである。本実施の形態において、データ転送ＬＳＩ５００は、主にバッファメモリ２１４とキャッシュメモリ２３０との間でのデータの転送を行う。このデータ転送の処理は、記憶デバイス制御装置２００が情報処理装置１００からデータ入出力要求を受け付けたときの、データの入出力処理の一部として行われる。通信インタフェース２１３がデータ入出力要求を受信すると、マイクロプロセッサ２１１は受信したデータ入出力要求に応じてデータ転送情報を生成し、生成したデータ転送情報をローカルメモリ２１２に書き込む。データ転送ＬＳＩ５００はローカルメモリ２１２に書き込まれたデータ転送情報を読み出し、読み出したデータ転送情報に基づいてデータを転送する。例えば、チャネル制御部２１０が情報処理装置１００からデータ書き込み要求を受信した場合、データ転送ＬＳＩ５００は、通信インタフェース２１３が受信してバッファメモリ２１４に記憶したデータをキャッシュメモリ２３０に転送する。また、データ転送ＬＳＩ５００のデータ転送処理は、例えば、記憶デバイス制御装置２００が他の記憶デバイス制御装置２００と接続し、記憶デバイス３００に記憶されているデータを複製する等、情報処理装置１００以外の装置との間で送受信されるデータについて、バッファメモリ２１４とキャッシュメモリ２３０との間でのデータ転送にも用いられる。
【００７４】
＝＝＝データ転送ＬＳＩ＝＝＝
図７は、データ転送ＬＳＩ５００の構成を示すブロック図である。  
データ転送ＬＳＩ５００は、ＤＭＡ５０１、ＰＣＩインタフェース５０２、ＰＣＩインタフェース５０３、バッファ制御部５０４、キャッシュインタフェース５０５、データ転送情報フェッチ部５０６を備える。
【００７５】
ＰＣＩインタフェース５０２は、ＰＣＩバスに接続し、ＰＣＩバスとの間でデータを授受する。データ転送ＬＳＩ５００は、ＰＣＩインタフェース５０２を介して通信インタフェース２１３と接続する。  
ＰＣＩインタフェース５０３もＰＣＩインタフェース５０２と同様、ＰＣＩバスに接続する。データ転送ＬＳＩ５００はＰＣＩインタフェース５０３を介してマイクロプロセッサ２１１やローカルメモリ２１２と接続する。  
なお、通信インタフェース２１３やマイクロプロセッサ２１１、ローカルメモリ２１２などとの接続を、同じＰＣＩバスで接続するようにしてもよい。その場合、データ転送ＬＳＩ５００にはＰＣＩインタフェースは少なくとも１つ存在すればよい。また、上記ＰＣＩインタフェース５０２及びＰＣＩインタフェース５０３はＰＣＩバス以外のバスを使用して外部の装置と接続するようにしてもよい。
【００７６】
バッファメモリ２１４は、チャネル制御部２１０が情報処理装置１００との間でデータをやり取りする際にデータを一時的に記憶しておくためのバッファである。バッファ制御部５０４は、バッファメモリ２１４に対するデータのやり取りをするための制御を行う。
【００７７】
キャッシュインタフェース５０５は、キャッシュメモリ２３０との間でデータをやり取りするインタフェースである。キャッシュインタフェース５０５には、より効率的にデータ転送をするためのバッファメモリ等を備えるようにすることもできる。
【００７８】
ＤＭＡ５０１は、例えばＤＭＡ（Direct Memory Access）プロセッサなどである。ＤＭＡ５０１は、データを転送する元となる記憶領域と、データを転送する先となる記憶領域を指定する情報を設定することによって、データ転送元の記憶領域に記憶されているデータをデータ転送先の記憶領域に転送することができる。ＤＭＡ５０１はＤＭＡプロセッサ以外にも、例えばマイクロプロセッサなどのプロセッサ上で実行されるプログラムとしてもよいし、特定用途向けＩＣ上にロジックを組み込むことなどによって実現してもよい。
【００７９】
データ転送情報フェッチ部５０６は、データ転送に必要な情報をローカルメモリ２１２から読み出し、ＤＭＡ５０１のレジスタに設定を行うなどの処理を行う。データ転送情報フェッチ部５０６は、例えば、特定用途向けＩＣやマイクロプロセッサとすることができる。
【００８０】
なお、データ転送ＬＳＩ５００は、データ転送情報フェッチ部５０６を備えず、ＤＭＡ５０１がローカルメモリ２１２にアクセスするようにしてもよい。
【００８１】
＝＝＝データ転送情報＝＝＝
図８は、データ転送ＬＳＩ５００がデータ転送に必要な情報であるデータ転送情報の詳細を示す表である。データ転送情報６００は、マスク欄６０１、転送バイト数欄６０２、キャッシュアドレス欄６０３、ＣＲＣ欄６０４、転送方向欄６０５、フラグ欄６０６、識別情報欄６０７、チェインフラグ欄６０８、ＲＣＲＣ欄６０９、バッファアドレス欄６１０、ＬＲＣ欄６１１を備える。
【００８２】
マイクロプロセッサ２１１は、ローカルメモリ２１２の所定のアドレスから複数のデータ転送情報６００を連続的に書き込む。よって、データ転送ＬＳＩ５００は、複数のデータ転送情報のそれぞれを連続してメモリから読み出すことができる。つまり、ローカルメモリ２１２上には、転送情報リストが登録されるキューが形成されることとなる。
【００８３】
また、マイクロプロセッサ２１１は、所定の数のデータ転送情報６００から形成される一群のデータ転送情報６００（以下、転送情報リストと称する）を単位として、一連のデータ転送処理に必要なデータ転送情報６００を管理する。一連のデータ転送処理とは、例えば、チャネル制御部２１０が受信したひとつのデータ入出力要求に応じて行うデータ転送に関して、データの転送元あるいは転送先であるキャッシュメモリ２３０上の記憶領域が不連続であるような場合に、データ転送ＬＳＩ５００が行う複数のデータ転送処理である。
【００８４】
以下に、データ転送情報６００の各欄について説明する。  
マスク欄６０１には、当該データ転送情報６００の所属する転送情報リストに属するデータ転送情報６００のうち、データ転送ＬＳＩ５００が直前に処理をしたデータ転送情報６００の各欄に設定されていた値を引き継ぐ目的として、当該データ転送情報６００の各欄にコピーして利用する場合に、どの欄の値をコピーするかを示す情報が設定される。  
転送バイト数欄６０２には、転送対象となるデータの長さが設定される。  
キャッシュアドレス欄６０３には、データ転送ＬＳＩ５００がデータの転送を行う転送元あるいは転送先として利用する、キャッシュメモリ２３０上のアドレスが設定される。
【００８５】
ＣＲＣ欄６０４には、転送対象となるデータについての誤り検出符号が設定される。例えば、マイクロプロセッサ２１１は、転送対象となるデータについてＣＲＣ（Cyclic Redundancy Check）手法を用いてＣＲＣ符合を計算し、ＣＲＣ欄６０４に設定する。データ転送ＬＳＩ５００はデータ転送を行う際に、この欄に設定された値を用いて、転送対象となるデータに誤りがないことを確認できる。例えば、転送対象となるデータに誤りがあると判断された場合、データ転送ＬＳＩ５００はデータの転送処理を行わないようにすることができる。
【００８６】
転送方向欄６０５には、データ転送ＬＳＩ５００が、キャッシュメモリ２３０に記憶されているデータをバッファメモリ２１４に転送するのか、あるいは、バッファメモリ２１４に記憶されているデータをキャッシュメモリ２３０に転送するのかを示す値が設定される。転送方向欄６０５には、例えば、データ転送ＬＳＩ５００がデータをキャッシュメモリ２３０からバッファメモリ２１４に転送する場合には「０」が設定され、バッファメモリ２１４からキャッシュメモリ２３０に転送する場合には「１」が設定される。
【００８７】
フラグ欄６０６には、様々な設定項目を示す情報が設定される。マイクロプロセッサ２１１は、例えば、上記のＣＲＣ欄の値を用いたデータの誤り検出をするかどうか、あるいはディスク制御部２４０に対してデータの書き込みを同期的にするか非同期的にするかといった設定を示す値をフラグ欄６０６に設定することができる。
【００８８】
識別情報欄６０７には、マイクロプロセッサ２１１が転送情報リスト毎に付与する識別情報（処理識別情報）が設定される。これにより、データ転送ＬＳＩ５００は、同一の転送情報リストに所属する一連のデータ転送情報を連続的にローカルメモリ２１２から読み出すことが可能となる。
【００８９】
チェインフラグ欄６０８には、転送情報リストに属する一連のデータ転送情報６００のおいて、直後に続くデータ転送情報６００を処理するべきかどうかを示すフラグ値が設定される。データ転送ＬＳＩ５００は、識別情報欄６０７あるいはチェインフラグ欄６０８に設定される値を用いて、メモリから読み出したデータ転送情報が関連して処理されるデータ転送情報群に所属するかどうかを判別することができる。また、データ転送ＬＳＩ５００は、当該データ転送情報６００が所属するデータ転送群に所属するの他のデータ転送情報６００を読み出し、データ転送処理を行うことができる。
【００９０】
ＲＣＲＣ欄６０９には、転送対象となるデータについての誤り検出符号が設定される。ＲＣＲＣ欄６０９に設定される誤り検出符号は、例えば、ＣＲＣ手法によって計算される。ＲＣＲＣ欄６０９は、例えば、本記憶デバイス制御装置２００が情報処理装置１００との記憶デバイス３００との間でのデータ転送ではなく、他の記憶装置に対するデータの複製（リモートコピー）に関するデータの転送を実施する場合に転送対象となるデータについての誤り検出符号である。ＲＣＲＣ欄６０９には、上述したＣＲＣ欄６０４と同様に転送対象となるデータについての誤り検出符号が設定されるが、ＲＣＲＣ欄６０９に設定される誤り検出符号は、後述する終了ステータス情報にコピーされ、ローカルメモリ２１２に書き込まれる。よって、マイクロプロセッサ２１１はデータ転送処理終了後に、その転送対象となったデータについての誤り検出符号を取得することができる。マイクロプロセッサ２１１は、例えば、データ転送処理の転送対象となるデータについての誤り検出符合を計算する初期値として、終了ステータス情報から取得した過去のデータ転送処理の転送対象となったデータについての誤り検出符号を用いることができる。マイクロプロセッサ２１１は、複数のデータ転送情報６００に跨って転送対象となるデータ全体についての誤り検出符号を計算することができる。
【００９１】
バッファアドレス欄６１０には、データ転送ＬＳＩ５００がデータの転送を行う転送元あるいは転送先として利用するバッファメモリ２１４上のアドレスが設定される。  
ＬＲＣ欄６１１には、当該データ転送情報６００についての誤り検出符号が設定される。この誤り検出符号は、例えば、ＬＲＣ手法によって計算されたＬＲＣ符号である。マイクロプロセッサ２１１は、データ転送情報６００をローカルメモリ２１２上に書き込む基準となるアドレスを初期値として、マスク欄６０１、転送バイト数欄６０２、キャッシュアドレス欄６０３、ＣＲＣ欄６０４、転送方向欄６０５、フラグ欄６０６、識別情報欄６０７、チェインフラグ欄６０８、ＲＣＲＣ欄６０９、及びバッファアドレス欄６１０の各欄の値を用いてＬＲＣ符号を計算する。
【００９２】
データ転送ＬＳＩ５００は、読み出したデータ転送情報が正しい情報であるかどうかを、データ転送情報に付帯される誤り検出符号により確認することができる。よって、より信頼性の高いデータ転送を実現できる。
【００９３】
また、マイクロプロセッサ２１１は、データ転送情報のみでなく、データ転送ＬＳＩ５００がローカルメモリ２１２からデータ転送情報を読み出す位置を決定するための基準位置も計算対象に含めて誤り検出符号を生成する。そのため、データ転送ＬＳＩ５００は、データ転送情報の内容に誤りがある場合であっても、データ転送ＬＳＩ５００がデータ転送情報を読み出したメモリ上の記憶位置が間違っている場合であっても、誤りがあることを検出することができる。
【００９４】
なお、本実施の形態において、データ転送情報６００のＣＲＣ欄６０４、ＲＣＲＣ欄６０９及びＬＲＣ欄６１１に設定される誤り検出符号は、ＣＲＣ符号やＬＲＣ符号に限定されるものではなく、チェックサムやハミング符号など様々なものを用いることができる。また、データ転送情報６００のＣＲＣ欄６０４、ＲＣＲＣ欄６０９及びＬＲＣ欄６１１に設定される誤り検出符号は、データ転送ＬＳＩ５００が計算するようにしてもよい。
【００９５】
また、本実施の形態では、識別情報欄６０７に設定される識別情報は転送情報リスト単位に設定されるが、データ転送情報６００単位に識別情報が付与されるようにしてもよい。データ転送ＬＳＩ５００は、データ転送情報６００に基づいてデータ転送処理を行い、その結果である後述の終了ステータス情報を転送情報リスト単位に付与された識別情報に対応させてローカルメモリ２１２に書き込む。よって、マイクロプロセッサ２１１は、識別情報を付与する単位でデータ転送処理の結果を取得することができる。
【００９６】
＝＝＝終了ステータス情報＝＝＝
図９は、データ転送ＬＳＩ５００によるデータ転送が終了した際に、データ転送ＬＳＩ５００がローカルメモリ２１２に書き込む終了ステータス情報の一例を示す表である。本実施の形態では、データ転送ＬＳＩ５００は、転送情報リスト単位で終了ステータス情報を生成し、ローカルメモリ２１２に書き込むものとしている。
【００９７】
終了ステータス情報７００には、識別情報欄７０１、終了ステータスコード欄７０２、転送処理数欄７０３、ＲＣＲＣ欄７０４が含まれる。  
識別情報欄７０１には、データ転送ＬＳＩ５００が読み出したデータ転送情報６００の識別情報欄６０７に設定されている識別情報がそのまま設定される。これにより、データ転送ＬＳＩ５００は終了ステータス情報７００を転送情報リストと対応付ける。  
終了ステータスコード欄７０２には、データ転送ＬＳＩ５００がデータを転送をどのように終了したかを示す値が設定される。本実施の形態では、終了ステータスコード欄７０２の第１ビットが「１」である場合、データ転送ＬＳＩ５００が、転送情報リストについてのデータ転送処理を正常に終了したことを示す。第２ビットが「１」である場合は、データ転送ＬＳＩ５００がマイクロプロセッサ２１１の強制終了コマンドによってデータ転送処理を強制終了したことを示す。第３ビットが「１」である場合は、データ転送ＬＳＩ５００がマイクロプロセッサ２１１からの中止コマンドによってデータ転送処理を中止していることを示す。第４ビットが「１」である場合は、データ転送ＬＳＩ５００がハードウェアのエラーによってデータ転送処理を中止したことを示す。
【００９８】
本発明によれば、データ転送情報６００と終了ステータス情報７００とが、マイクロプロセッサ２１１がデータ転送情報６００に付与する識別情報によって対応づけられる。従って、例えば、ローカルメモリ２１２に複数の終了ステータス情報７００が併存する場合でも、マイクロプロセッサ２１１は前記各終了ステータスが、それぞれどのデータ転送情報６００についての終了ステータスであるのかを特定することができる。また、マイクロプロセッサ２１１は、データ転送情報６００をデータ転送ＬＳＩ５００が正しく処理して、ローカルメモリ２１２へ終了ステータス情報７００を返答したかを判断することができる。例えば、データ転送ＬＳＩ５００により終了ステータス情報７００が書き込まれるローカルメモリ２１２上のアドレスが既知である場合、マイクロプロセッサ２１１は、データ転送ＬＳＩ５００がローカルメモリ２１２に書き込んだ終了ステータス情報７００が、マイクロプロセッサ２１１が指示したデータ転送情報６００に対応するものであることを確認できる。これにより、マイクロプロセッサ２１１は、データ転送ＬＳＩ５００がマイクロプロセッサ２１１の期待するデータ転送情報６００を読み出したこと、及びデータ転送ＬＳＩ５００がローカルメモリ２１２上の既知のアドレスに終了ステータス情報７００を書き込んだことを検査することができる。
【００９９】
転送処理数欄７０３には、転送情報リストに所属するデータ転送情報６００のうち、データ転送ＬＳＩ５００が処理をしたデータ転送情報６００の数が設定される。マイクロプロセッサ２１１は、データ転送情報６００のチェインフラグ欄６０８を用いて、転送情報リストのうち処理すべきデータ転送情報６００の数をデータ転送ＬＳＩ５００に指示し、データ転送ＬＳＩ５００は、実際にデータ転送の処理を行った数を終了ステータス情報７００の転送処理数欄７０３に設定する。マイクロプロセッサ２１１は、指示したデータ転送処理の数と、データ転送ＬＳＩ５００が行った処理の数とを比較して、データ転送ＬＳＩ５００が正しく動作したかどうかを判断することができる。
【０１００】
ＲＣＲＣ欄７０４には、データ転送情報６００のＲＣＲＣ欄５０９に設定されている値がそのまま設定される。なお、データ転送ＬＳＩ５００が、データ転送情報６００のＲＣＲＣ欄５０９に設定される値に基づいて、転送対象となるデータ等についての誤り検出符号を計算し、その結果をＲＣＲＣ欄７０４に設定するようにもできる。
【０１０１】
本発明では、マイクロプロセッサ２１１からデータ転送ＬＳＩ５００に対してメモリを介して間接的にデータ転送情報が通知されるが、このようにデータ転送ＬＳＩ５００が終了ステータス情報７００をメモリに書き込むことで、例えば、マイクロプロセッサ２１１が終了ステータスを事後的に調べることで、データ転送ＬＳＩ５００によりデータ転送処理が行われたかどうかを調べることができる。
【０１０２】
データ転送ＬＳＩ５００は、ローカルメモリ２１２から読み出したデータ転送情報６００の識別情報を、データ転送処理の終了ステータス情報７００の識別情報欄７０１に設定する。従って、複数の終了ステータス情報７００がローカルメモリ２１２上に併存する場合にも、マイクロプロセッサ２１１は、各終了ステータス情報７００が夫々どのデータ転送情報６００についての終了ステータス情報７００であるかを特定することができる。
【０１０３】
データ転送ＬＳＩ５００は、データ転送処理を終了すると、その結果を終了ステータス情報７００として、ローカルメモリ２１２の所定のアドレスから順に書き込む。本実施の形態では、このローカルメモリ２１２の所定のアドレスは、マイクロプロセッサ２１１が初期設定などによって、予めデータ転送ＬＳＩ５００のレジスタに設定するものとする。以下に、データ転送ＬＳＩ５００の各レジスタの設定について説明する。
【０１０４】
＝＝＝レジスタ構成＝＝＝
図１０は、データ転送ＬＳＩ５００が備えるレジスタを示す図である。データ転送ＬＳＩ５００は、ＬＰＢＡレジスタ８０１、ＬＳＢＡレジスタ８０２、ＬＳＩＢＡレジスタ８０３、ＬＮＵＭレジスタ８０４、ＳＮＵＭレジスタ８０５、ＬＩＰレジスタ８０６、ＳＴＰレジスタ８０７、ＬＯＰレジスタ８０８、ＰＯＰレジスタ８０９、ＡＢＯＲＴレジスタ８１０を備えている。
【０１０５】
ＬＰＢＡレジスタ８０１には、マイクロプロセッサ２１１がローカルメモリ２１２にデータ転送情報６００を書き込むアドレスの基準となるアドレス（以下、リストベースアドレスと称する）が設定される。マイクロプロセッサ２１１は、ＬＰＢＡレジスタ８０１に設定されるリストベースアドレスから順にデータ転送情報６００を書き込む。  
ＬＳＢＡレジスタ８０２には、データ転送ＬＳＩ５００がローカルメモリ２１２に終了ステータス情報７００を書き込むアドレスの基準となるアドレス（以下、ステータスベースアドレスと称する）が設定される。データ転送ＬＳＩ５００は、ステータスベースアドレスから順に終了ステータス情報７００を書き込む。
【０１０６】
ＬＳＩＢＡレジスタ８０３には、データ転送ＬＳＩ５００がステータスベースアドレスから何番目に終了ステータス情報７００を書き込んだかを示すポインタ（以下ステータスポインタと称する）を書き込むローカルメモリ２１２上のアドレス（以下、ステータスポインタアドレスと称する）が設定される。  
ＬＮＵＭレジスタ８０４には、１つの転送情報リストに設定可能なデータ転送情報６００の数が設定される。  
ＳＮＵＭレジスタ８０５には、データ転送ＬＳＩ５００がローカルメモリ２１２上に終了ステータス７００を書き込むことのできる数が設定される。
【０１０７】
ＬＩＰレジスタ８０６には、マイクロプロセッサ２１１がローカルメモリ２１２に書き込んだ転送情報リストがリストベースアドレスから何番目のものであるかを示す情報（以下、リスト書き込みポインタと称する）がマイクロプロセッサ２１１により設定される。マイクロプロセッサ２１１は転送情報リストに属するデータ転送情報６００をローカルメモリ２１２に書き込む度に、ＬＩＰレジスタ８０６を更新する。
【０１０８】
ＳＴＰレジスタ８０７には、ステータスポインタが設定される。データ転送ＬＳＩ５００は、終了ステータス情報７００をローカルメモリ２１２に書き込む度にＳＴＰレジスタ８０７を更新する。また、データ転送ＬＳＩ５００は、ＳＴＰレジスタ８０７に設定された値を、ローカルメモリ２１２上のステータスポインタアドレスに書き込む。
【０１０９】
ＬＯＰレジスタ８０８には、データ転送ＬＳＩ５００が読み出したデータ転送情報６００が所属する転送情報リストがリストベースアドレスから何番目のものであるかを示すポインタ（以下、リスト読み出しポインタと称する）がデータ転送ＬＳＩ５００によって設定される。
【０１１０】
ＰＯＰレジスタ８０９には、データ転送ＬＳＩ５００がローカルメモリ２１２から読み出したデータ転送情報６００が属する転送情報リストについて、その転送情報リストに属するデータ転送情報６００のうちデータ転送ＬＳＩ５００が実際の処理を行った数が設定される。マイクロプロセッサ２１２は、上述したデータ転送情報６００のチェインフラグ欄６０８などを用いて指示したデータ転送処理の数と、データ転送ＬＳＩ５００が実際に行ったデータ転送処理の数とを比較して、正しくデータ転送処理が行われたことを確認することができる。
【０１１１】
ＡＢＯＲＴレジスタ８１０は、データ転送ＬＳＩ５００が行っているデータ転送処理を中止するように指示するためのレジスタである。ＡＢＯＲＴレジスタ８１０には、データ転送ＬＳＩ５００が転送情報リスト単位でデータ転送処理を行い、各データ転送処理が終わったところで中止するように指示する値（以下、ＳＵＳＡＢＯＲＴと称する）を設定することができる。ＳＵＳＡＢＯＲＴとは、例えば、「0x0004」のような値である。また、ＡＢＯＲＴレジスタ８１０には、データ転送ＬＳＩ５００が実行しているデータ転送処理を即座に終了することを指示する値（以下、ＭＰＡＢＯＲＴと称する）を設定することもできる。ＭＰＡＢＯＲＴとは、例えば、「0x0001」のような値である。なお、データ転送ＬＳＩ５００がデータ転送処理の中止を行う処理の詳細は後述する。
【０１１２】
データ転送ＬＳＩ５００は、ＬＩＰレジスタ８０６に設定されているリスト書き込みポインタとＬＯＰレジスタ８０８に設定されているリスト読み出しポインタとを比較することによって、マイクロプロセッサ２１１から新しいデータ転送処理の指示が与えられたことを検出することができる。  
データ転送ＬＳＩ５００は、ＬＩＰレジスタ８０６及びＬＯＰレジスタ８０８の内容を比較することにより、後続して処理すべき転送情報リストが存在するかどうかを調べることができる。
【０１１３】
このように、マイクロプロセッサ２１１がリストベースアドレスから順に転送情報リストを書き込み、データ転送ＬＳＩ５００がリストベースアドレスから順に転送情報リストを読み出すことができる。つまり、ローカルメモリ２１２上に転送情報リストを登録するキューを実現することができる。
【０１１４】
なお、マイクロプロセッサ２１１は、優先度の高いデータ転送処理のためのデータ転送情報を登録するための優先キューと、通常のデータ転送処理のためのデータ転送情報を登録する非優先キューとの２つのキューにデータ転送情報を登録する。そのため、図１０に示すように、データ転送ＬＳＩ５００は、上記ＡＢＯＲＴレジスタ８１０を除く各レジスタを２つずつ備えている。これにより、２つのキューをローカルメモリ２１２上に実現することができる。
【０１１５】
なお、上述した各レジスタは、データ転送情報フェッチ回路５０６が備えるようにしてもよいし、ＤＭＡ５０１が備えるようにしてもよい。また、これらのレジスタに格納する情報は、レジスタではなく、ローカルメモリ２１２や共有メモリ２２０に格納し、データ転送ＬＳＩ５００がローカルメモリ２１２や共有メモリ２２０を参照するようにしてもよい。
【０１１６】
＝＝＝転送情報リストを用いたデータ転送処理＝＝＝
次に、本実施の形態による、転送情報リストを用いたデータ転送処理について、まずは転送情報リストが登録されるキューが１つの場合を説明する。図１１は、転送情報リストを用いたデータ転送処理が行われる処理の流れを示すフローチャートである。
【０１１７】
マイクロプロセッサ２１１は、データ転送ＬＳＩ５００のＬＮＵＭレジスタ８０４に設定した所定の数のデータ転送情報６００を転送情報リストとしてローカルメモリ２１２に書き込み（S11001）、データ転送ＬＳＩ５００のＬＩＰレジスタ８０６にリストポインタを設定する（S11002）。
【０１１８】
一方、データ転送ＬＳＩ５００は、ＬＩＰレジスタ８０６とＬＯＰレジスタ８０８とを比較しながら（S11003）、ＬＩＰレジスタ８０６に新しいリストポインタが設定されるのを待機している。データ転送ＬＳＩ５００は、マイクロプロセッサ２１２によってＬＩＰレジスタ８０６にリストポインタが設定されたことを検出すると（S11003：NO）、ローカルメモリ２１２上のデータ転送情報６００を読み出す（S11004）。データ転送ＬＳＩ５００内部では、データ転送情報フェッチ回路５０６がローカルメモリ２１２からデータ転送情報６００が読み出し、ＤＭＡ５０１のレジスタにデータ転送処理に必要な値を設定する（S11005）。データ転送ＬＳＩ５００は読み出したデータ転送情報６００に基づいて、キャッシュメモリ２３０とバッファメモリ２１４との間のデータ転送に関する処理を行う（S11006）。データ転送ＬＳＩ５００はデータ転送処理を終了すると、そのデータ転送情報６００のチェインフラグ欄６０８に設定されている値が「１」であるかどうかを調べる（S11007）。データ転送情報６００のチェインフラグ欄６０８に設定されている値が「１」であった場合（S11007：YES）には（S11004）に進む。ただし、次の（S11004）において読み出すデータ転送情報６００は、先にデータ転送ＬＳＩ５００がデータ転送情報６００を読み出したアドレスから、データ転送情報６００のデータ長分進めたアドレスに記憶されているデータ転送情報６００を読み出す。このようにして、データ転送ＬＳＩ５００は、読み出したデータ転送情報６００のチェインフラグ６０８に基づいて、順次データ転送情報６００を読み出す。なお、データ転送ＬＳＩ５００は、同一の転送情報リストに属するデータ転送情報６００の全てを一度に読み出すようにしてもよい。この場合、データ転送ＬＳＩ５００は、データ転送情報６００の識別情報欄６０７に同一の値が設定されているデータ転送情報６００を、同一の転送情報リストに属しているものと判断する。
【０１１９】
データ転送情報６００のチェインフラグ欄６０８が「１」でなかった場合（S11007：NO）には、データ転送ＬＳＩ５００は、データ転送処理の結果を終了ステータス情報７００としてローカルメモリ２１２に書き込み（S11008）、ＳＴＰレジスタ８０７に設定されるステータスポインタを１つ増やす（S11009）。データ転送ＬＳＩ５００は、ＳＴＰレジスタ８０７に設定されたステータスポインタをローカルメモリ２１２上のステータスポインタアドレスに書き込み、ＬＯＰレジスタ８０８に設定されるリストポインタを１増やして、ＬＯＰレジスタ８０８を更新する（S11010）。
【０１２０】
一方、データ転送ＬＳＩ５００によってステータスポインタが更新されると、マイクロプロセッサ２１１はその更新を検出し（S11011：YES）、ローカルメモリ２１２から終了ステータス情報７００を読み出し、例えば、情報処理装置１００にエラー情報を送信したり、表示装置にエラーの表示をするなど、その終了ステータス情報７００に応じた終了処理を行う（S11012）。
【０１２１】
このように、マイクロプロセッサ２１１が、複数のデータ転送情報６００をひとつの転送情報リストとしてローカルメモリ２１２に書き込むことによって、データ転送ＬＳＩ５００は、複数のデータ転送情報のそれぞれを連続してメモリから読み出すことができる。また、データ転送ＬＳＩ５００は、メモリから読み出したデータ転送情報６００が関連して処理されるデータ転送情報群に所属するかどうかを、データ転送情報６００の識別情報を用いて判別することができる。また、データ転送ＬＳＩ５００は、ローカルメモリ２１２から読み出したデータ転送情報６００の識別情報欄６０７あるいはチェインフラグ欄６０８を用いて、そのデータ転送情報が所属するデータ転送群に所属するの他のデータ転送情報６００を読み出し、データ転送処理を行うことができる。
【０１２２】
例えば、ディスクアレイ装置において、外部ホスト装置からデータの書き込み要求に付随する書き込みデータはキャッシュメモリに転送される。この場合に、キャッシュメモリ上に書き込みデータの全てについて連続したアドレスを確保できない場合がある。このように、データの転送元や転送先の記憶領域が不連続の領域であるような場合等、複数のデータ転送処理を連続して行いたい場合、本発明では、第１のプロセッサは、不連続の記憶領域を指定する複数のデータ転送情報に同一の処理識別情報を設定し、それら一群のデータ転送情報をキューに登録する。第２のプロセッサは、同一の処理識別情報が付帯されている一群のデータ転送情報についてデータ転送処理を行うことで、一群のデータ転送転送情報に対応するデータ転送処理を連続して行うことができる。
【０１２３】
なお、データ転送ＬＳＩ５００はＳＴＰレジスタ８０７に設定されるステータスポインタを定期的にローカルメモリ２１２に書き込むようにしてもよい。また、データ転送ＬＳＩ５００はＳＴＰレジスタを用いず、直接ローカルメモリ２１２にステータスポインタを格納するようにしてもよい。
【０１２４】
次に、キューが２つの場合について説明する。  
本実施の形態では、ローカルメモリ２１２上に、優先キューと非優先キューとの２つのキューが実現される。マイクロプロセッサ２１１は、優先度の高いデータ転送処理についての転送情報リストを優先キューに登録し、通常のデータ転送処理についての転送情報リストを非優先キューに登録する。
【０１２５】
本実施の形態においては、マイクロプロセッサ２１１は、情報処理装置１００からのデータ入出力要求に応じたＩ／Ｏ処理に関するタスクと、ローカルコピー処理や、ジャーナル生成処理、ジャーナル取得処理、リストア処理、スナップショット処理等の内部処理に関するタスクとの２種類にタスクを分類する。マイクロプロセッサ２１１は、それぞれのタスクの種類に対応するデータ転送情報が、非優先キューに登録されている登録数をローカルメモリ２１２にテーブル（登録数記憶部）として記憶しておく。マイクロプロセッサ２１１は、実行しているタスクの種類とは異なるの種類のタスクに起因して実行されるデータ転送処理についてのデータ転送情報の登録数を取得し、その登録数が所定数を超える場合に、当該データ転送処理の優先度が高いと判断する。マイクロプロセッサ２１１は、データ転送処理の優先度が高いと判断した場合には、そのデータ転送処理についてのデータ転送情報６００を優先キューに登録する。マイクロプロセッサ２１１は、データ転送処理の優先度が高くないと判断した場合は、データ転送情報６００を非優先キューに登録する。
【０１２６】
また、マイクロプロセッサ２１１は、実行するタスク以外のタスクに対応するデータ転送情報６００が非優先キューに登録されている登録数に応じて、データ転送情報６００を登録するキューを決定する。これにより、マイクロプロセッサ２１１は、実行する複数のタスクの夫々について行うデータ転送処理がバランスよく実行されるように、データ転送ＬＳＩ５００を制御することができる。
【０１２７】
なお、マイクロプロセッサ２１１は、例えば、データ転送処理の優先度が高いかどうかを、実行しているタスクの優先度等に応じて決定することもできる。この場合、マイクロプロセッサ２１１は、実行するタスクの識別情報と優先度とを、例えば、ローカルメモリ２１２に記憶しておく。マイクロプロセッサ２１１は、例えば、タスクの優先度をデータ転送処理の優先度として記憶しておくことができる。マイクロプロセッサ２１１は、この優先度に応じて、優先キューと非優先キューのどちらにデータ転送情報６００を登録するかを決定する。
【０１２８】
また、マイクロプロセッサ２１１は、実行するタスク毎に優先度を設定し、その優先度に応じて、データ転送情報６００を登録するキューを決定するようにしてもよい。これにより、マイクロプロセッサ２１１は、優先度の高いデータ転送処理を、優先度の低いデータ転送処理に先立って実行されるようにすることができる。
【０１２９】
上記のようにして２つのキューに登録されたデータ転送情報６００についての転送処理の流れも、上述の図１１に示す処理の流れと同様である。ただし、以下のような相違点がある。
【０１３０】
データ転送ＬＳＩ５００は（S11003）において、優先キューのためのＬＩＰレジスタ８０６とＬＯＰレジスタ８０８との比較をまず行い、優先キューに登録されている転送情報リストがあるかどうかを判定する。優先キューに登録されている転送情報リストがない場合（ＬＩＰレジスタ８０６に設定されている値とＬＯＰレジスタ８０８に設定されている値が同値の場合）に、非優先キューのためのＬＩＰレジスタ８０６及びＬＯＰレジスタ８０８との比較を行うようにする。データ転送ＬＳＩ５００は、優先キューに登録されている転送情報リストがある間は、非優先キューに登録されている転送情報リストについてのデータ転送処理は行わず、優先キューに登録されている転送情報リストについてのデータ転送処理を連続して行うようにする。このように、データ転送ＬＳＩ５００は、優先キューに登録されている転送情報リストを、非優先キューに登録されている転送情報リストより優先して読み出すことになる。
【０１３１】
なお、マイクロプロセッサ２１１は、例えば、非優先キューの先頭に優先度の高いデータ転送処理についてのデータ転送情報６００を登録することによって、データ転送処理の順序を制御することができる。しかし、マイクロプロセッサ２１１が非優先キューに登録されているデータ転送情報６００の順序を変更している途中に、データ転送ＬＳＩ５００が非優先キューからデータ転送情報６００を読み出してしまうと、マイクロプロセッサ２１１が予定している順番にデータ転送処理が行われなくなってしまう。そのため、マイクロプロセッサ２１１は、非優先キューに登録されているデータ転送情報６００の順番を変更して、優先度の高いデータ転送情報６００が先頭になるように並べ替えるためには、データ転送ＬＳＩ５００の動作を中断させておく必要がある。
【０１３２】
ところが、本発明によれば、データ転送ＬＳＩ５００は、優先キューに登録されているデータ転送情報６００を、非優先キューに登録されているデータ転送情報６００より優先して読み出てデータ転送処理６００を行う。従って、マイクロプロセッサ２１１は、優先度の高いデータ転送処理についてのデータ転送情報６００を優先キューに登録することにより、非優先キューの先頭にデータ転送情報６００を登録したことと同様の効果を奏することができる。よって、マイクロプロセッサ２１１は、データ転送ＬＳＩ５００の動作を中断することなく、優先キューに登録されているデータ転送情報６００についてのデータ転送処理が優先して行われるようにすることができる。つまり、マイクロプロセッサ２１１は、データ転送処理が実行される順序の制御を、容易に行うことが可能となる。
【０１３３】
また、マイクロプロセッサ２１１は、非優先キューに登録されているデータ転送情報６００の並び順を変更することなく、優先キューに登録されているデータ転送情報６００についてのデータ転送処理が優先して行われるようにすることができる。よって、優先度に応じてデータ転送情報６００を登録する際に必要なメモリへのアクセスを抑え、効率的なデータ転送処理を実現することができる。
【０１３４】
＝＝＝転送情報リスト単位でのデータ転送処理の中止＝＝＝
次に、データ転送ＬＳＩ５００が上記のようなデータ転送処理を中止する処理について説明する。
【０１３５】
上述したように、データ転送ＬＳＩ５００は、転送情報リストに設定されている複数のデータ転送情報６００について、チェインフラグ欄６０８に「１」が設定されている間、連続的にデータ転送処理を行う。ここで、マイクロプロセッサ２１１が、データ転送ＬＳＩ５００のＡＢＯＲＴレジスタ８１０にＳＵＳＡＢＯＲＴを書き込むと、データ転送ＬＳＩ５００は、上記の転送情報リストに設定されている複数のデータ転送情報についての一連のデータ転送処理を終了した後に、ローカルメモリ２１２に書き込まれている後続の転送情報リストについてのデータ転送処理を中止する。一方、マイクロプロセッサ２１１がデータ転送ＬＳＩ５００のＡＢＯＲＴレジスタ８１０にＭＰＡＢＯＲＴを書き込むと、データ転送ＬＳＩ５００は、上記のデータ転送処理を行っている間であっても、処理を中止する。すなわち、マイクロプロセッサ２１１は、ＭＰＡＢＯＲＴをＡＢＯＲＴレジスタ８１０に書き込むことにより、データ転送ＬＳＩ５００が実行している処理を強制終了することが可能となる。そのため、マイクロプロセッサ２１１は、例えば、データ転送ＬＳＩ５００がローカルメモリ２１２に終了ステータス情報７００を一定期間書き込まなかった場合に、ＭＰＡＢＯＲＴをＡＢＯＲＴレジスタ８１０に書き込み、データ転送ＬＳＩ５００のデータ転送処理を強制終了するように、データ転送ＬＳＩ５００を制御することができる。
【０１３６】
データ転送ＬＳＩ５００がデータ転送処理を中止する流れは、図４を用いて説明した、上述の第１の実施の形態に係るＤＭＡコントローラ６０のデータ転送処理の中止する流れと同様である。ＤＭＡコントローラ６０の代わりにデータ転送ＬＳＩ５００がデータ転送処理を行い、中止コマンドや強制終了コマンドが設定されるレジスタは、アボートレジスタ６２に代わり上記ＡＢＯＲＴレジスタ８１０である。
【０１３７】
また、（S4006）において継続するデータ転送処理は、ここでは転送情報リストに設定されている複数のデータ転送情報６００についてのデータ転送処理となる。また、非優先転送情報キュー２１及び優先転送情報キューは、ローカルメモリ２１２上の非優先リストベースアドレス及び優先リストベースアドレスから連続する記憶領域として実現され、終了ステータスキュー２２は、ローカルメモリ２１２上の非優先ステータスベースアドレス又は優先ステータスベースアドレスから連続する記憶領域として実現されている。
【０１３８】
また、データ転送ＬＳＩ５００は、データ転送処理を終了した結果の終了ステータスとして、上記の終了ステータス情報７００を作成し、ローカルメモリ２１２に書き込む。その際に、データ転送ＬＳＩ５００は、ローカルメモリ２１２から読み出したデータ転送情報６００の識別情報欄６０７に設定されている識別情報を、識別情報欄７０１に設定する。また、データ転送ＬＳＩ５００は、ＡＢＯＲＴレジスタ８１０にＳＵＳＡＢＯＲＴやＭＰＡＢＯＲＴが設定されていた場合には、終了ステータスコード欄７０２の該当するビットに「１」を設定する。
【０１３９】
このように、本発明では、第２のプロセッサ（データ転送ＬＳＩ５００）は、同一の処理識別情報が付帯されている一群のデータ転送情報（チェインフラグ欄６０８によって連結されているデータ転送情報群）についてデータ転送処理を行い、これら一群のデータ転送情報全てについてのデータ転送処理を行った後に、レジスタに中止コマンドが設定されていると、それ以降のデータ転送処理を中止する。従って、第２のプロセッサは、これら一群のデータ転送情報に基づく一連のデータ転送処理を完了した時点でデータ転送処理を中止することができる。よって、第２のプロセッサが、連続して処理すべき複数のデータ転送処理の途中でデータ転送処理を中止することがない。これにより、第２のプロセッサのデータ転送処理の中止による、データ転送装置全体としてのデータ転送能力の低下を最小限に抑えることができる。
【０１４０】
また、データ転送ＬＳＩ５００は、中止コマンドがＡＢＯＲＴレジスタ８１０に設定されたことにより、データ転送処理を中止したかどうかを示す中止フラグを終了ステータス情報７００の終了ステータスコード欄７０２に設定する。従って、マイクロプロセッサ２１１は、データ転送ＬＳＩ５００のＡＢＯＲＴレジスタ８１０に設定した中止コマンドに応じてデータ転送ＬＳＩ５００がデータ転送処理を中止したことを、ローカルメモリ２１２に記憶される終了ステータス情報７００の終了ステータスコード欄７０２を参照することによって取得することができる。よって、マイクロプロセッサ２１１は、データ転送ＬＳＩ５００の動作を監視したり、データ転送ＬＳＩ５００からデータ転送処理を中止した旨の通知を直接受けたりすることなく、データ転送ＬＳＩ５００がデータ転送処理を中止したことをローカルメモリ２１２を介して間接的に取得することができる。そのため、マイクロプロセッサ２１１の効率的な動作を図ることができる。
【０１４１】
＝＝＝その他の実施の形態＝＝＝
本実施の形態では、マイクロプロセッサ２１１がローカルメモリ２１２に書き込む単位を転送情報リスト単位としたが、データ転送情報単位とすることもできる。例えば、データ転送ＬＳＩ５００のＬＩＰレジスタ８０４又はＰＲＬＩＰレジスタ８１４を、ローカルメモリ２１２上に記憶されている複数のデータ転送情報６００の何番目かを示す情報とし、マイクロプロセッサ２１１が連続する複数のデータ転送情報６００を書き込んだ際に、その最後となるデータ転送情報６００がローカルメモリ２１２上で何番目に書き込まれたデータ転送情報になったかを設定する。そして、データ転送ＬＳＩ５００は、非優先リストベースアドレス又は優先リストベースアドレスに、データ転送情報６００のデータ長をＬＯＰレジスタ８０８又はＰＲＬＯＰレジスタ８１８に設定されている数分だけ加算し、ローカルメモリ２１２からデータ転送情報６００を読み出すアドレスを求め、データ転送情報６００を読み出すことができる。また、データ転送ＬＳＩ５００は、読み出したデータ転送情報６００のチェインフラグ欄６０８が「１」である間、読み出すアドレスにデータ転送情報６００のデータ長を足しながら、データ転送情報６００を読み続けることができる。これにより、マイクロプロセッサ２１１からデータ転送ＬＳＩ５００に伝達されるデータ転送に関する情報は、転送情報リスト単位ではなくデータ転送情報６００単位となり、可変長のデータ転送情報６００の受け渡しをすることができる。
【０１４２】
また、本発明の形態において、データ転送情報６００はマイクロプロセッサ２１１の管理するローカルメモリ２１２に書き込まれるようにしたが、ローカルメモリ２１２の代わりに、共有メモリ２２０やキャッシュメモリ２３０、その他のメモリ等、マイクロプロセッサ及びデータ転送ＬＳＩが同様にアクセス可能な記憶デバイスに記憶するようにしてもよい。
【０１４３】
また、本発明はディスク制御部２４０に適用する形態とすることもできる。例えば、ディスク制御部２４０がマイクロプロセッサと、ローカルメモリと、記憶デバイス３００にアクセスするインタフェースと、データ転送ＬＳＩとを備えるとすると、キャッシュメモリ２３０と記憶デバイス３００との間で転送されるデータに関するデータ転送処理に、上述したチャネル制御部２１０でのデータ転送処理と同様のデータ転送処理を実現できる。
【０１４４】
また、本発明は、チャネル制御部２１０の備える通信インタフェース２１３（通信インタフェース部）と、マイクロプロセッサ２１１と、ローカルメモリ２１２と、データ転送ＬＳＩ５００と、記憶デバイス３００に対するインタフェース（記憶デバイスインタフェース）とが一体的に配された記憶デバイス制御装置に適用することもできる。この場合、データ転送ＬＳＩ５００は、キャッシュメモリ２３０に替えて、記憶デバイス３００と、バッファメモリ２１４との間でのデータ転送処理を行うことができる。
【０１４５】
以上本実施の形態について説明したが、上記実施の形態は本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明はその趣旨を逸脱することなく変更、改良され得ると共に、本発明にはその等価物も含まれる。
【図面の簡単な説明】
【０１４６】
【図１】本発明の一実施の形態による、コンピュータを示すブロック図である。
【図２】本発明の一実施の形態による、データ転送情報の一例を示す図である。
【図３】本発明の一実施の形態による、データ転送処理の流れを示すフローチャートである。
【図４】本発明の一実施の形態による、ＤＭＡコントローラ６０がデータ転送処理を中止する処理の流れを示すフローチャートである。
【図５】本発明の一実施の形態による、第２の実施の形態としての情報処理システムの全体構成を示すブロック図である。
【図６】本発明の一実施の形態による、チャネル制御部２１０のハードウエア構成を示すブロック図である。
【図７】本発明の一実施の形態による、データ転送ＬＳＩ５００の構成を示すブロック図である。
【図８】本発明の一実施の形態による、データ転送ＬＳＩ５００がデータ転送に必要な情報であるデータ転送情報の詳細を示す表である。
【図９】本発明の一実施の形態による、データ転送ＬＳＩ５００によるデータ転送が終了した際に、データ転送ＬＳＩ５００がローカルメモリ２１２に書き込む終了ステータス情報の一例を示す表である。
【図１０】本発明の一実施の形態による、データ転送ＬＳＩ５００が備えるレジスタを示す表である。
【図１１】本発明の一実施の形態による、転送情報リストを用いたデータ転送処理が行われる処理の流れを示すフローチャートである。
【符号の説明】
【０１４７】
１      コンピュータ              １０    ＣＰＵ
２０    ＲＡＭ                    ２１    転送情報キュー
２２    終了ステータスキュー      ３０    記憶装置
４０    入力装置                  ５０    出力装置
６０    ＤＭＡコントローラ        ６１    スタートレジスタ
６２    アボートレジスタ          ７０    Ｉ／Ｏインタフェース
７１    バッファメモリ
１００  情報処理装置              ２００  記憶デバイス制御装置
２１０  チャネル制御部            ２１１  マイクロプロセッサ
２１２  ローカルメモリ            ２１３  通信インタフェース
２１４  バッファメモリ            ２２０  共有メモリ
２３０  キャッシュメモリ          ２４０  ディスク制御部
３００  記憶デバイス              ４００  ネットワーク
５００  データ転送ＬＳＩ５００    ６００  データ転送情報
７００  終了ステータス情報
【図１】
2005165439.tif 000003
【図２】
2005165439.tif 000004
【図３】
2005165439.tif 000005
【図４】
2005165439.tif 000006
【図５】
2005165439.tif 000007
【図６】
2005165439.tif 000008
【図７】
2005165439.tif 000009
【図８】
2005165439.tif 000010
【図９】
2005165439.tif 000011
【図１０】
2005165439.tif 000012
【図１１】
2005165439.tif 000013