(57)【要約】【課題】記憶装置をエミュレートする際の物理記憶領域の容量を削減すること。【解決手段】制御部１ｂは、記憶装置２ａに対するデータの書き込みが要求されたとき、当該データの書き込み先として指定された記憶装置２ａのアドレスが管理情報３に登録されておらず、かつ、当該データと同一のデータが記憶装置２ｂに記憶されている場合には、記憶装置２ｂに対する当該データの書き込み処理を回避して、当該データの書き込み先として指定された記憶装置２ａのアドレスと、当該データと同一のデータの記憶装置２ｂにおける格納場所を示すアドレスとを対応付けて管理情報３に登録する。【選択図】図１
2015162002.tif 000002
【特許請求の範囲】
【請求項１】
第１の記憶装置に対するデータの書き込み処理を、第２の記憶装置に対してデータを書き込むことでエミュレートする記憶制御装置において、
前記第１の記憶装置に対する書き込みが要求された際にデータの書き込み先として指定された前記第１の記憶装置のアドレスと、書き込みが要求されたデータの前記第２の記憶装置における格納場所を示すアドレスとが対応付けて登録された管理情報を記憶する記憶部と、
前記第１の記憶装置に対するデータの書き込みが要求されたとき、当該データの書き込み先として指定された前記第１の記憶装置のアドレスが前記管理情報に登録されておらず、かつ、当該データと同一のデータが前記第２の記憶装置に記憶されている場合には、前記第２の記憶装置に対する当該データの書き込み処理を回避して、当該データの書き込み先として指定された前記第１の記憶装置のアドレスと、当該データと同一のデータの前記第２の記憶装置における格納場所を示すアドレスとを対応付けて前記管理情報に登録する制御部と、
を有することを特徴とする記憶制御装置。
【請求項２】
前記管理情報には、データの書き込み先として指定された前記第１の記憶装置のアドレスと、書き込みが要求されたデータの前記第２の記憶装置における格納場所を示すアドレスと、書き込みが要求されたデータに基づくハッシュ値とが対応付けて登録され、
前記制御部は、前記第１の記憶装置に対するデータの書き込みが要求されたとき、当該データに基づくハッシュ値を前記管理情報から検索することで、当該データと同一のデータが前記第２の記憶装置に記憶されているかを判定する、
ことを特徴とする請求項１記載の記憶制御装置。
【請求項３】
前記管理情報は、前記第２の記憶装置のアドレスごとに、当該管理情報において対応付けられた前記第１の記憶装置のアドレスの数を示すカウント数を含み、
前記制御部は、前記第１の記憶装置に対するデータの書き込みが要求されたとき、当該データの書き込み先として指定された前記第１の記憶装置のアドレスが前記管理情報に登録されておらず、かつ、当該データと同一のデータが前記第２の記憶装置に記憶されていない場合には、前記第２の記憶装置のアドレスのうち、対応する前記カウント数が０のアドレスに対して当該データを書き込むとともに、当該データを書き込んだ前記第２の記憶装置のアドレスに対応する前記カウント数を１増加させる、
ことを特徴とする請求項１または２記載の記憶制御装置。
【請求項４】
前記制御部は、前記第１の記憶装置に対するデータの書き込みが要求されたとき、当該データの書き込み先として指定された前記第１の記憶装置の第１のアドレスが前記管理情報に登録されており、かつ、前記管理情報において前記第１の記憶装置の前記第１のアドレスに対応付けられた前記第２の記憶装置の第２のアドレスに格納されているデータが、書き込みが要求されたデータと異なる場合には、前記第２の記憶装置の前記第２のアドレスに対応する前記カウント数を１減少させることを特徴とする請求項３記載の記憶制御装置。
【請求項５】
前記管理情報は、
複数のレコードを含み、各レコードに、前記第２の記憶装置に書き込まれたデータに基づくハッシュ値と、前記第２の記憶装置におけるデータの格納場所とが対応付けて登録されたデータ管理情報と、
データの書き込み先として指定された前記第１の記憶装置のアドレスと、書き込みが要求されたデータに対応する前記データ管理情報の前記レコードを指し示す指示情報とが対応付けて登録されたアドレス管理情報と、
を含むことを特徴とする請求項１乃至４の何れか１項に記載の記憶制御装置。
【請求項６】
前記制御部は、前記第１の記憶装置に対するデータの書き込みが要求されたとき、当該データの書き込み先として指定された前記第１の記憶装置のアドレスが前記アドレス管理情報に登録されておらず、かつ、当該データに基づくハッシュ値を含む前記レコードが前記データ管理情報に登録されている場合には、当該データの書き込み先として指定された前記第１の記憶装置のアドレスと、当該データに基づくハッシュ値を含む前記レコードを指し示す前記指示情報とを対応付けて前記アドレス管理情報に登録することを特徴とする請求項５記載の記憶制御装置。
【請求項７】
前記制御部は、前記第１の記憶装置に対するデータの読み出しが要求されたとき、前記管理情報から、データの読み出し先として指定された前記第１の記憶装置のアドレスと対応付けられた前記第２の記憶装置のアドレスを取得し、取得した前記第２の記憶装置のアドレスからデータを読み出すことを特徴とする請求項１乃至４の何れか１項に記載の記憶制御装置。
【請求項８】
前記管理情報において対応付けられる前記第１の記憶装置のアドレスおよび前記第２の記憶装置のアドレスは、前記第１の記憶装置および前記第２の記憶装置をそれぞれ同一サイズごとに分割した記憶領域ごとのアドレスを示し、
前記制御部は、前記第１の記憶装置に対して書き込みが要求されたデータを一定サイズの分割データに分割し、分割された分割データごとに、当該分割データの前記第１の記憶装置における書き込み先のアドレスが前記管理情報に登録されているか、および、当該分割データと同一のデータが前記第２の記憶装置に記憶されているかを判定する、
ことを特徴とする請求項１乃至７の何れか１項に記載の記憶制御装置。
【請求項９】
第１の記憶装置に対するデータの書き込み処理を、第２の記憶装置に対してデータを書き込むことでエミュレートする記憶制御方法であって、
コンピュータが、
前記第１の記憶装置に対するデータの書き込みが要求されたとき、当該データの書き込み先として指定された前記第１の記憶装置のアドレスが、前記第１の記憶装置に対する書き込みが要求された際にデータの書き込み先として指定された前記第１の記憶装置のアドレスと、書き込みが要求されたデータの前記第２の記憶装置における格納場所を示すアドレスとが対応付けて登録された管理情報に登録されておらず、かつ、当該データと同一のデータが前記第２の記憶装置に記憶されている場合には、前記第２の記憶装置に対する当該データの書き込み処理を回避して、当該データの書き込み先として指定された前記第１の記憶装置のアドレスと、当該データと同一のデータの前記第２の記憶装置における格納場所を示すアドレスとを対応付けて前記管理情報に登録する、
ことを特徴とする記憶制御方法。
【請求項１０】
第１の記憶装置に対するデータの書き込み処理を、第２の記憶装置に対してデータを書き込むことでエミュレートする記憶制御プログラムであって、
コンピュータに、
前記第１の記憶装置に対するデータの書き込みが要求されたとき、前記第１の記憶装置に対する書き込みが要求された際にデータの書き込み先として指定された前記第１の記憶装置のアドレスと、書き込みが要求されたデータの前記第２の記憶装置における格納場所を示すアドレスとが対応付けて登録された管理情報を参照し、
書き込みが要求されたデータの書き込み先として指定された前記第１の記憶装置のアドレスが前記管理情報に登録されておらず、かつ、当該データと同一のデータが前記第２の記憶装置に記憶されている場合には、前記第２の記憶装置に対する当該データの書き込み処理を回避して、当該データの書き込み先として指定された前記第１の記憶装置のアドレスと、当該データと同一のデータの前記第２の記憶装置における格納場所を示すアドレスとを対応付けて前記管理情報に登録する、
処理を実行させることを特徴とする記憶制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は記憶制御装置、記憶制御方法および記憶制御プログラムに関する。
【背景技術】
【０００２】
ＨＤＤ（Hard Disk Drive）などの記憶装置に対するアクセス処理をエミュレートする技術が知られている。例えば、複数のＳＣＳＩ（Small Computer System Interface）記憶装置をエミュレートする技術が提案されている。この提案は、エミュレートされた記憶装置に対応するプロパティおよび物理記憶装置内のファイル記憶空間を用いて、エミュレートされた記憶装置上でのＳＣＳＩコマンドの履行をエミュレートするやり方で、ＳＣＳＩコマンドを履行する。
【０００３】
また、重複データを無くすための技術が提案されている。この提案では、データセットを受信し、データセットの中からデータが重複している可能性があるポイント（アンカーポイント）を識別する。アンカーポイントを取り巻く領域と、データベース内のアンカーポイントを取り巻く領域とを比較し、前方デルタ値および後方デルタ値を識別する。アンカーポイント、前方デルタ値および後方デルタ値を用いて、受信したデータセット中の重複データをストレージインジケータで置き換える。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−７８６４１号公報
【特許文献２】特表２００９−５３５７０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、記憶装置のエミュレーションにおいては、エミュレーション対象の記憶装置に対して書き込みが要求されたデータの総量と同じ容量の物理記憶領域が必要であり、必要な物理記憶領域が大きいという問題がある。
【０００６】
１つの側面では、本発明は、記憶装置をエミュレートする際の物理記憶領域の容量を削減できる記憶制御装置、記憶制御方法および記憶制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
１つの態様では、第１の記憶装置に対するデータの書き込み処理を、第２の記憶装置に対してデータを書き込むことでエミュレートする記憶制御装置が提供される。この記憶制御装置は、記憶部と制御部とを有する。記憶部は、第１の記憶装置に対する書き込みが要求された際にデータの書き込み先として指定された第１の記憶装置のアドレスと、書き込みが要求されたデータの第２の記憶装置における格納場所を示すアドレスとが対応付けて登録された管理情報を記憶する。制御部は、第１の記憶装置に対するデータの書き込みが要求されたとき、当該データの書き込み先として指定された第１の記憶装置のアドレスが管理情報に登録されておらず、かつ、当該データと同一のデータが第２の記憶装置に記憶されている場合には、第２の記憶装置に対する当該データの書き込み処理を回避して、当該データの書き込み先として指定された第１の記憶装置のアドレスと、当該データと同一のデータの第２の記憶装置における格納場所を示すアドレスとを対応付けて管理情報に登録する。
【０００８】
また、１つの態様では、第１の記憶装置に対するデータの書き込み処理を、第２の記憶装置に対してデータを書き込むことでエミュレートする記憶制御方法が提供される。この記憶制御方法は、コンピュータが、第１の記憶装置に対するデータの書き込みが要求されたとき、当該データの書き込み先として指定された第１の記憶装置のアドレスが、第１の記憶装置に対する書き込みが要求された際にデータの書き込み先として指定された第１の記憶装置のアドレスと、書き込みが要求されたデータの第２の記憶装置における格納場所を示すアドレスとが対応付けて登録された管理情報に登録されておらず、かつ、当該データと同一のデータが第２の記憶装置に記憶されている場合には、第２の記憶装置に対する当該データの書き込み処理を回避して、当該データの書き込み先として指定された第１の記憶装置のアドレスと、当該データと同一のデータの第２の記憶装置における格納場所を示すアドレスとを対応付けて管理情報に登録する。
【０００９】
また、１つの態様では、第１の記憶装置に対するデータの書き込み処理を、第２の記憶装置に対してデータを書き込むことでエミュレートする記憶制御プログラムが提供される。この記憶制御プログラムは、コンピュータに、第１の記憶装置に対するデータの書き込みが要求されたとき、第１の記憶装置に対する書き込みが要求された際にデータの書き込み先として指定された第１の記憶装置のアドレスと、書き込みが要求されたデータの第２の記憶装置における格納場所を示すアドレスとが対応付けて登録された管理情報を参照し、書き込みが要求されたデータの書き込み先として指定された第１の記憶装置のアドレスが管理情報に登録されておらず、かつ、当該データと同一のデータが第２の記憶装置に記憶されている場合には、第２の記憶装置に対する当該データの書き込み処理を回避して、当該データの書き込み先として指定された第１の記憶装置のアドレスと、当該データと同一のデータの第２の記憶装置における格納場所を示すアドレスとを対応付けて管理情報に登録する処理を実行させる。
【発明の効果】
【００１０】
１つの側面では、記憶装置をエミュレートする際の物理記憶領域の容量を削減できる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態の記憶制御装置を示す図である。
【図２】第２の実施の形態の情報処理システムを示す図である。
【図３】エミュレーション装置のハードウェア例を示す図である。
【図４】ＨＤＤのエミュレーションの例を示す図である。
【図５】エミュレーション装置の機能の構成例を示す図である。
【図６】アドレスハッシュテーブルの例を示す図である。
【図７】データハッシュテーブルの例を示す図である。
【図８】データ管理テーブルの例を示す図である。
【図９】データの書き込み要求を受けた場合の具体例（その１）を示す図である。
【図１０】データの書き込み要求を受けた場合の具体例（その２）を示す図である。
【図１１】データの書き込み要求を受けた場合の具体例（その３）を示す図である。
【図１２】書き込み要求に対する処理例を示すフローチャート（その１）である。
【図１３】書き込み要求に対する処理例を示すフローチャート（その２）である。
【図１４】データの読み出し要求を受けた場合の具体例を示す図である。
【図１５】読み出し要求に対する処理例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の記憶制御装置を示す図である。記憶制御装置１は、記憶装置２ａに対するアクセス処理を、記憶装置２ｂを用いてエミュレートする装置である。例えば、記憶制御装置１は、記憶装置２ａに対するデータの書き込み処理を、記憶装置２ｂにデータを書き込むことでエミュレートする。
【００１３】
ここで、記憶装置２ｂは、記憶制御装置１に接続された、実記憶領域を伴う記憶装置である。なお、記憶装置２ｂは、例えば、記憶制御装置１に内蔵されていてもよい。一方、記憶装置２ａは、仮想的な記憶装置である。また、記憶装置２ａに対するデータの書き込み要求は、例えば、記憶制御装置１の外部に接続された図示しない外部装置から送信される。あるいは、記憶装置２ａに対するデータの書き込み要求は、記憶制御装置１が所定のソフトウェアを実行することで出力されてもよい。
【００１４】
記憶制御装置１は、記憶部１ａおよび制御部１ｂを有する。記憶部１ａは、ＲＡＭ（Random Access Memory）、ＳＳＤ（Solid State Drive）やＨＤＤなどの記憶装置によって実現される。制御部１ｂの処理は、ＣＰＵ（Central Processing Unit）やＦＰＧＡ（Field Programmable Gate Array）などのプロセッサが所定のプログラムを実行することで実現される。
【００１５】
記憶部１ａは、管理情報３を格納する。管理情報３には、記憶装置２ａに対する書き込みが要求された際にデータの書き込み先として指定された記憶装置２ａのアドレスと、書き込みが要求されたデータの記憶装置２ｂにおける格納場所を示すアドレスとが対応付けて登録される。
【００１６】
制御部１ｂは、記憶装置２ａに対するデータの書き込みが要求されたとき、当該データの書き込み先として指定された記憶装置２ａのアドレスが管理情報３に登録されておらず、かつ、当該データと同一のデータが記憶装置２ｂに記憶されている場合には、記憶装置２ｂに対する当該データの書き込み処理を回避して、当該データの書き込み先として指定された記憶装置２ａのアドレスと、当該データと同一のデータの記憶装置２ｂにおける格納場所を示すアドレスとを対応付けて管理情報３に登録する。これにより、記憶装置２ｂに対して同一のデータが重複して格納されることが防止され、その結果、データの格納に必要な記憶装置２ｂの容量を削減することができる。
【００１７】
ここで、書き込み処理の具体例について説明する。まず、初期状態として、管理情報３には、記憶装置２ａのアドレスＡＤａ１と記憶装置２ｂのアドレスＡＤｂ１、および、記憶装置２ａのアドレスＡＤａ２と記憶装置２ｂのアドレスＡＤｂ２が、それぞれ対応付けて登録されているものとする。また、記憶装置２ｂにおいては、アドレスＡＤｂ１にデータＸ１が格納され、アドレスＡＤｂ２にデータＸ２が格納されているものとする。このような初期状態は、例えば、次のような処理によって実現される。
【００１８】
制御部１ｂは、記憶装置２ａのアドレスＡＤａ１に対するデータＸ１の書き込み要求を受け付ける。制御部１ｂは、管理情報３にアドレスＡＤａ１が登録されておらず、かつ、データＸ１が記憶装置２ｂに記憶されていないと判定すると、データＸ１を記憶装置２ｂのアドレスＡＤｂ１に書き込む。これとともに、制御部１ｂは、管理情報３に対して、記憶装置２ａのアドレスＡＤａ１と記憶装置２ｂのアドレスＡＤｂ１とを対応付けて登録する。
【００１９】
また、制御部１ｂは、記憶装置２ａのアドレスＡＤａ２に対するデータＸ２の書き込み要求を受け付ける。制御部１ｂは、管理情報３にアドレスＡＤａ２が登録されておらず、かつ、データＸ２が記憶装置２ｂに記憶されていないと判定すると、データＸ２を記憶装置２ｂのアドレスＡＤｂ２に書き込む。これとともに、制御部１ｂは、管理情報３に対して、記憶装置２ａのアドレスＡＤａ２と記憶装置２ｂのアドレスＡＤｂ２とを対応付けて登録する。
【００２０】
このような初期状態から、制御部１ｂは、記憶装置２ａのアドレスＡＤａ３に対するデータＸ２の書き込み要求を受け付けたとする。制御部１ｂは、管理情報３にアドレスＡＤａ３が登録されていないが、記憶装置２ｂにはデータＸ２が記憶されていると判定する。この場合、制御部１ｂは、管理情報３に対して、記憶装置２ａのアドレスＡＤａ３と記憶装置２ｂのアドレスＡＤｂ２とを対応付けて登録するが、記憶装置２ｂへのデータＸ２の書き込みを回避する。
【００２１】
これにより、記憶装置２ａのアドレスＡＤａ３に対してデータＸ２が書き込まれたことが管理情報３によって管理される一方、記憶装置２ｂにおける複数の記憶領域に同一のデータＸ２が記憶されることが防止される。したがって、データの格納に必要な記憶装置２ｂの容量を削減することができる。また、記憶装置２ｂに対する書き込みアクセスの回数を少なくすることができ、書き込みアクセスに要する時間も短縮できる。
【００２２】
また、例えば、記憶装置２ａのアドレスＡＤａ３からのデータ読み出しが要求された場合、制御部１ｂは、管理情報３に基づいて、アドレスＡＤａ３のデータが格納された記憶装置２ｂのアドレスＡＤｂ２を特定し、アドレスＡＤｂ２からデータを読み出す。このように、管理情報３を用いることで、重複データを排除しながらも、データの読み出しを正しく実行することができる。
【００２３】
［第２の実施の形態］
図２は、第２の実施の形態の情報処理システムを示す図である。第２の実施の形態の情報処理システムは、エミュレーション装置１００およびアクセス装置２００を含む。
【００２４】
エミュレーション装置１００は、記憶装置のエミュレーションを実行する装置である。すなわち、エミュレーション装置１００は、エミュレーション対象の記憶装置に対するアクセス処理を、内部の物理記憶領域を用いて擬似的に実現する。後述するように、本実施の形態では、エミュレーション対象の記憶装置として、ディスクアレイに内蔵されたＨＤＤを想定する。
【００２５】
アクセス装置２００は、エミュレーション対象の記憶装置にアクセスする装置である。アクセス装置２００は、エミュレーション対象の記憶装置のアドレスを指定した書き込み要求や読み出し要求をエミュレーション装置１００に送信することで、エミュレーション対象の記憶装置にアクセスする。
【００２６】
なお、エミュレーション装置１００は、例えば、ソフトウェアの検証のために使用される。この場合、アクセス装置２００は、検証対象のソフトウェアを実行し、その実行の結果として発行された書き込み要求や読み出し要求をエミュレーション装置１００に送信する。また、他の態様の例として、検証対象のソフトウェアがエミュレーション装置１００で実行されてもよい。この場合、エミュレーション装置１００は、検証対象のソフトウェアを実行することで発行された書き込み要求や読み出し要求に応じて、記憶装置のエミュレーションを行う。
【００２７】
図３は、エミュレーション装置のハードウェア例を示す図である。エミュレーション装置１００は、図３に示すようなコンピュータとして実現できる。
エミュレーション装置１００は、プロセッサ１０１、ＲＡＭ１０２、ＨＤＤ１０３、通信部１０４、画像信号処理部１０５、入力信号処理部１０６、ディスクドライブ１０７および機器接続部１０８を有する。各ユニットはエミュレーション装置１００のバスに接続されている。
【００２８】
プロセッサ１０１は、エミュレーション装置１００の情報処理を制御する。プロセッサ１０１は、例えばＣＰＵ、ＭＰＵ（Micro Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡまたはＰＬＤ（Programmable Logic Device）などである。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、ＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡ、ＰＬＤのうちの２以上の要素の組合せであってもよい。
【００２９】
ＲＡＭ１０２は、エミュレーション装置１００の主記憶装置である。ＲＡＭ１０２は、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ１０２は、プロセッサ１０１による処理に用いる各種データを記憶する。
【００３０】
ＨＤＤ１０３は、エミュレーション装置１００の補助記憶装置である。ＨＤＤ１０３は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。エミュレーション装置１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
【００３１】
通信部１０４は、アクセス装置２００と通信を行えるインタフェースである。
画像信号処理部１０５は、プロセッサ１０１からの命令に従って、エミュレーション装置１００に接続されたディスプレイ１１に画像を出力する。ディスプレイ１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイなどを用いることができる。
【００３２】
入力信号処理部１０６は、エミュレーション装置１００に接続された入力デバイス１２から入力信号を取得し、プロセッサ１０１に出力する。入力デバイス１２としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
【００３３】
ディスクドライブ１０７は、レーザ光などを利用して、光ディスク１３に記録されたプログラムやデータを読み取る駆動装置である。光ディスク１３として、例えば、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などを使用できる。ディスクドライブ１０７は、例えば、プロセッサ１０１からの命令に従って、光ディスク１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００３４】
機器接続部１０８は、エミュレーション装置１００に周辺機器を接続するための通信インタフェースである。例えば、機器接続部１０８にはメモリ装置１４やリーダライタ装置１５を接続できる。メモリ装置１４は、機器接続部１０８との通信機能を搭載した記録媒体である。リーダライタ装置１５は、メモリカード１６へのデータの書き込み、またはメモリカード１６からのデータの読み出しを行う装置である。メモリカード１６は、カード型の記録媒体である。機器接続部１０８は、例えば、プロセッサ１０１からの命令に従って、メモリ装置１４またはメモリカード１６から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００３５】
なお、アクセス装置２００も、エミュレーション装置１００と同様のハードウェアを有するコンピュータとして実現できる。
図４は、ＨＤＤのエミュレーションの例を示す図である。
【００３６】
本実施の形態では、アクセス装置２００によるアクセス先の記憶装置として、それぞれ複数のＨＤＤを備えるディスクアレイ２１，２１ａ，２１ｂを想定する。また、アクセス装置２００によるアクセス先は、ディスクアレイを識別する“ＤＥ（Disk Enclosure）番号”と、ディスクアレイ内のＨＤＤを識別する“ＨＤＤ番号”と、ＨＤＤ内のブロック位置を示す“ブロックアドレス”との組み合わせによって表されるものとする。
【００３７】
エミュレーション装置１００は、内蔵されたＨＤＤ１０３を物理記憶領域として用いて、ディスクアレイ２１，２１ａ，２１ｂのエミュレーションを行う。エミュレーション装置１００は、ディスクアレイ２１，２１ａ，２１ｂによるボリューム構成をアクセス装置２００に認識させる。そして、エミュレーション装置１００は、アクセス装置２００から、データの書き込み先または読み出し元としてＤＥ番号、ＨＤＤ番号およびブロックアドレスが指定された書き込み要求または読み出し要求を受信する。エミュレーション装置１００は、ディスクアレイ２１，２１ａ，２１ｂに対して書き込みが要求された場所やデータを管理テーブルにより管理しながら、書き込みが要求されたデータを内部のＨＤＤ１０３へ書き込み、また、読み出しが要求されたデータを内部のＨＤＤ１０３から読み出す。これにより、エミュレーション装置１００は、ディスクアレイ２１，２１ａ，２１ｂに対するアクセス処理をエミュレートする。
【００３８】
図５は、エミュレーション装置の機能の構成例を示す図である。エミュレーション装置１００は、テーブル記憶部１１０、データ記憶部１２０および制御部１３０を有する。
テーブル記憶部１１０は、制御部１３０の処理に用いられる情報を記憶する。テーブル記憶部１１０は、ＲＡＭ１０２またはＨＤＤ１０３により実現されてもよい。テーブル記憶部１１０が記憶する情報には、アドレスハッシュテーブル、データハッシュテーブルおよびデータ管理テーブルが含まれる。
【００３９】
アドレスハッシュテーブルには、エミュレーション対象の記憶装置（ディスクアレイ２１，２１ａ，２１ｂ）におけるアドレスと、データハッシュテーブルのレコードとの対応関係を示す情報が登録される。データハッシュテーブルには、書き込みが要求されたデータと、物理記憶領域（データ記憶部１２０）における格納場所との対応関係を示す情報が登録される。データ管理テーブルには、物理記憶領域に格納されたデータが、エミュレーション対象の記憶装置におけるいくつのアドレスと対応関係を有しているかを示すエントリ数が登録される。
【００４０】
データ記憶部１２０は、ディスクアレイ２１，２１ａ，２１ｂをエミュレートする際の物理記憶領域として使用され、アクセス装置２００から書き込みが要求されたデータを記憶する。データ記憶部１２０は、ＨＤＤ１０３により実現される。なお、データ記憶部１２０は、例えば、エミュレーション装置１００に接続された外部の記憶装置により実現されてもよい。
【００４１】
制御部１３０は、アクセス装置２００からのアクセス要求に応じて、データ記憶部１２０を物理記憶領域として使用しながら、ディスクアレイ２１，２１ａ，２１ｂに対するアクセス処理をエミュレートする。制御部１３０は、アクセス処理のエミュレートの際に、テーブル記憶部１１０に記憶された各テーブルを参照する。
【００４２】
制御部１３０は、ディスクアレイ２１，２１ａ，２１ｂに対する書き込み処理をエミュレートする際、書き込みデータを一定サイズに分割し、分割されたデータごとにデータ記憶部１２０への書き込みを制御する。また、制御部１３０は、テーブル記憶部１１０に記憶された各テーブルを用いることで、同一の分割データがデータ記憶部１２０に格納されないように書き込みを制御する。これにより、データ記憶部１２０におけるデータの重複を排除し、データ記憶部１２０において使用される容量を削減する。
【００４３】
図６は、アドレスハッシュテーブルの例を示す図である。アドレスハッシュテーブル１１１は、テーブル記憶部１１０に格納される。アドレスハッシュテーブル１１１の各レコードは、ネクストポインタ、アドレスハッシュ値、ＤＥ番号、ＨＤＤ番号、ブロックアドレス、データハッシュ値およびデータハッシュポインタの項目を含む。
【００４４】
ネクストポインタの項目には、アドレスハッシュテーブル１１１における次のレコードを示すポインタ情報が登録される。アドレスハッシュテーブル１１１における各レコードは、ネクストポインタの項目に登録されるポインタ情報によって連結される。また、アドレスハッシュテーブル１１１に新規のレコードが追加されると、その追加前における最後尾のレコードのネクストポインタのポインタ情報が、新規のレコードを示すように更新され、新規のレコードのネクストポインタには先頭レコードを示すポインタ情報が登録される。
【００４５】
アドレスハッシュ値の項目には、同じレコード内のＤＥ番号、ＨＤＤ番号、ブロックアドレスの各項目に登録された値を所定のハッシュ関数でハッシュ化した値が登録される。所定のハッシュ関数とは、例えば、ＣＲＣ（Cyclic Redundancy Check）３２、ＭＤ（Message Digest Algorithm）５、ＳＨＡ（Secure Hash Algorithm）−１、ＳＨＡ−２５６などである。
【００４６】
ＤＥ番号、ＨＤＤ番号、ブロックアドレスの各項目には、アクセス装置２００から受信した書き込み要求に含まれるＤＥ番号、ＨＤＤ番号、ブロックアドレスがそれぞれ登録される。データハッシュ値の項目には、書き込みが要求されたデータを所定のハッシュ関数でハッシュ化した値が登録される。所定のハッシュ関数とは、上記で説明した通りである。データハッシュポインタの項目には、データハッシュテーブルのレコードを示すポインタ情報が登録される。
【００４７】
図７は、データハッシュテーブルの例を示す図である。データハッシュテーブル１１２は、テーブル記憶部１１０に格納される。データハッシュテーブル１１２の各レコードは、ネクストポインタ、データハッシュ値、および物理アドレスの項目を含む。
【００４８】
ネクストポインタの項目には、データハッシュテーブル１１２における次のレコードを示すポインタ情報が登録される。アドレスハッシュテーブル１１１と同様に、データハッシュテーブル１１２における各レコードも、ネクストポインタの項目に登録されるポインタ情報によって連結される。データハッシュ値の項目には、書き込みが要求されたデータを所定のハッシュ関数でハッシュ化した値が登録される。所定のハッシュ関数とは、上記で説明した通りである。物理アドレスの項目には、データ記憶部１２０における対応するデータの格納位置が登録される。
【００４９】
図８は、データ管理テーブルの例を示す図である。データ管理テーブル１１３は、テーブル記憶部１１０に予め格納される。データ管理テーブル１１３は、物理アドレスおよびエントリ数の項目を含む。
【００５０】
データ管理テーブル１１３には、データ記憶部１２０に記録可能な分割データ数だけのレコードが予め設けられる。物理アドレスの項目には、データ記憶部１２０における対応するアドレスが登録される。エントリ数の項目には、当該項目に対応するデータ記憶部１２０のアドレスと対応関係を成す、エミュレーション対象の記憶装置におけるアドレスの数が登録される。エントリ数の項目の初期値は“０”であり、エントリ数が“０”の場合、当該項目に対応するデータ記憶部１２０の領域は未使用状態（上書き可能な状態）であることを示す。また、例えば、エントリ数が“１”の場合、当該項目に対応するデータ記憶部１２０のアドレスと対応関係を成す、エミュレーション対象の記憶装置におけるアドレスの数は１つであることを示している。
【００５１】
次に、データの書き込み要求を受けた場合の具体例を図９〜１２で説明する。制御部１３０は、アクセス装置２００からデータの書き込み要求を受信すると、書き込みが要求されたデータを一定サイズ（例えば５１２Ｂｙｔｅ）ごとに分割し、分割したデータごとに書き込み処理を行う。以下、書き込みを要求されたデータを分割して得られた分割データのそれぞれを“書き込みデータ”と呼ぶ場合がある。
【００５２】
図９は、データの書き込み要求を受けた場合の具体例（その１）を示す図である。図９では、エミュレーション対象の記憶装置における新規のアドレスに新規のデータの書き込みが要求された場合の処理について説明する。以下、図９に示す処理をステップ番号に沿って説明する。
【００５３】
（Ｓ１１）制御部１３０は、ＤＥ番号“ＤＥ＃１”、ＨＤＤ番号“ＨＤＤ＃１”、ブロックアドレス“Ａｄｄ＃１”を書き込み先とする、書き込みデータ“Ｄａｔａ＃１”の書き込み要求を受け付ける。制御部１３０は、ＤＥ番号“ＤＥ＃１”、ＨＤＤ番号“ＨＤＤ＃１”、ブロックアドレス“Ａｄｄ＃１”に基づいて、所定のハッシュ関数でハッシュ化した値“Ａｄｄ＃１＿ｈａｓｈ”を算出する。
【００５４】
制御部１３０は、算出したハッシュ値“Ａｄｄ＃１＿ｈａｓｈ”と同一のハッシュ値が、アドレスハッシュテーブル１１１の何れかのレコードにおけるアドレスハッシュ値の項目に存在するか検索する。ここでは、制御部１３０は、同一のハッシュ値がアドレスハッシュテーブル１１１のどのレコードにも存在しないと判定したとする。この場合、制御部１３０は、アドレスハッシュテーブル１１１に新規のレコード１１１ａを登録する。制御部１３０は、レコード１１１ａにおけるＤＥ番号、ＨＤＤ番号、ブロックアドレス、アドレスハッシュ値の項目に、“ＤＥ＃１”、“ＨＤＤ＃１”、“Ａｄｄ＃１”、ハッシュ値“Ａｄｄ＃１＿ｈａｓｈ”をそれぞれ登録する。なお、図９ではＤＥ番号、ＨＤＤ番号、ブロックアドレスの各項目の図示を省略する。
【００５５】
（Ｓ１２）制御部は、書き込みデータ“Ｄａｔａ＃１”を所定のハッシュ関数でハッシュ化した値“Ｄａｔａ＃１＿ｈａｓｈ”を算出する。制御部１３０は、算出したハッシュ値“Ｄａｔａ＃１＿ｈａｓｈ”と同一のハッシュ値が、データハッシュテーブル１１２の何れかのレコードにおけるデータハッシュ値の項目に存在するか検索する。ここでは、制御部１３０は、同一のハッシュ値がデータハッシュテーブル１１２のどのレコードにも存在しないと判定したとする。
【００５６】
（Ｓ１３）制御部１３０は、データ管理テーブル１１３からエントリ数の項目が０であるレコードを検索する。制御部１３０は、エントリ数の項目が０のレコードに対応するアドレス“ＡＤ１２”を取得する。
【００５７】
（Ｓ１４）制御部１３０は、データハッシュテーブル１１２に新規のレコード１１２ａを登録する。制御部１３０は、レコード１１２ａのデータハッシュ値、物理アドレスの項目に、“Ｄａｔａ＃１＿ｈａｓｈ”、アドレス“ＡＤ１２”をそれぞれ登録する。
【００５８】
（Ｓ１５）制御部１３０は、データ記憶部１２０のアドレス“ＡＤ１２”の領域に、書き込みデータ“Ｄａｔａ＃１”を書き込む。
（Ｓ１６）制御部１３０は、アドレスハッシュテーブル１１１のレコード１１１ａにおけるデータハッシュ値、データハッシュポインタの項目に、“Ｄａｔａ＃１＿ｈａｓｈ”、データハッシュテーブル１１２のレコード１１２ａを示す“Ｄｈａｓｈ＃１＿ｐ”をそれぞれ登録する。
【００５９】
（Ｓ１７）制御部１３０は、データ管理テーブル１１３のアドレス“ＡＤ１２”に対応するエントリ数の項目に１を加算する。これは、データ記憶部１２０のアドレス“ＡＤ１２”と、エミュレーション対象の記憶装置における、“ＤＥ＃１”、“ＨＤＤ＃１”、“Ａｄｄ＃１”で表される１つのアドレスとが対応関係を成すようになるからである。
【００６０】
このように、エミュレーション対象の記憶装置における書き込みが要求されたアドレス、および書き込みデータと、書き込みデータが実際に記憶されたエミュレーション装置１００の物理記憶領域のアドレスとを、アドレスハッシュテーブル１１１とデータハッシュテーブル１１２とで対応付けることができる。
【００６１】
図１０は、データの書き込み要求を受けた場合の具体例（その２）を示す図である。図１０では、エミュレーション対象の記憶装置における新規のアドレスに対して、データ記憶部１２０に格納済みのデータの書き込みが要求された場合の処理を説明する。以下、図１０に示す処理をステップ番号に沿って説明する。
【００６２】
（Ｓ２１）制御部１３０は、ＤＥ番号“ＤＥ＃２”、ＨＤＤ番号“ＨＤＤ＃２”、ブロックアドレス“Ａｄｄ＃２”を書き込み先とする、書き込みデータ“Ｄａｔａ＃１”の書き込み要求を受け付ける。制御部１３０は、ＤＥ番号“ＤＥ＃２”、ＨＤＤ番号“ＨＤＤ＃２”、アドレス“Ａｄｄ＃２”に基づいて、所定のハッシュ関数でハッシュ化した値“Ａｄｄ＃２＿ｈａｓｈ”を算出する。
【００６３】
制御部１３０は、算出したハッシュ値“Ａｄｄ＃２＿ｈａｓｈ”と同一のハッシュ値が、アドレスハッシュテーブル１１１の何れかのレコードにおけるアドレスハッシュ値の項目に存在するか検索する。ここでは、制御部１３０は、同一のハッシュ値がアドレスハッシュテーブル１１１のどのレコードにも存在しないと判定したとする。この場合、制御部１３０は、アドレスハッシュテーブル１１１に新規のレコード１１１ｂを登録する。制御部１３０は、レコード１１１ｂにおけるＤＥ番号、ＨＤＤ番号、ブロックアドレス、アドレスハッシュ値の項目に、“ＤＥ＃２”、“ＨＤＤ＃２”、“Ａｄｄ＃２”、ハッシュ値“Ａｄｄ＃２＿ｈａｓｈ”をそれぞれ登録する。なお、図１０ではＤＥ番号、ＨＤＤ番号、ブロックアドレスの各項目の図示を省略する。
【００６４】
（Ｓ２２）制御部１３０は、書き込みデータ“Ｄａｔａ＃１”を所定のハッシュ関数でハッシュ化した値“Ｄａｔａ＃１＿ｈａｓｈ”を算出する。制御部１３０は、算出したハッシュ値“Ｄａｔａ＃１＿ｈａｓｈ”と同一のハッシュ値がデータハッシュテーブル１１２の何れかのレコードにおけるデータハッシュ値の項目に存在するか検索する。
【００６５】
ここでは、制御部１３０は、同一のハッシュ値がデータハッシュテーブル１１２のレコード１１２ｂに存在すると判定したとする。これにより、書き込みデータ“Ｄａｔａ＃１”がすでにデータ記憶部１２０に格納済みであることが判定される。この場合、制御部１３０は、データ記憶部１２０に対する書き込みデータ“Ｄａｔａ＃１”の書き込みも、データハッシュテーブル１１２の更新も行わない。
【００６６】
（Ｓ２３）制御部１３０は、アドレスハッシュテーブル１１１のレコード１１１ｂにおけるデータハッシュ値、データハッシュポインタの項目に、“Ｄａｔａ＃１＿ｈａｓｈ”、レコード１１２ｂを示す“Ｄｈａｓｈ＃１＿ｐ”をそれぞれ登録する。
【００６７】
（Ｓ２４）制御部１３０は、データハッシュテーブル１１２のレコード１１２ｂの物理アドレスの項目から、アドレス“ＡＤ１２”を取得する。制御部１３０は、データ管理テーブル１１３のアドレス“ＡＤ１２”に対応するエントリ数の項目に１を加算する。加算後の値は２となる。これは、データ記憶部１２０のアドレス“ＡＤ１２”が、アドレスハッシュテーブル１１１の２つのレコード１１１ｂ，１１１ｃに登録された、エミュレーション対象の記憶装置のアドレスと、対応関係を成すようになるからである。
【００６８】
このように、書き込みが要求されたデータに基づくハッシュ値が、データハッシュテーブル１１２の何れかのレコードにすでに登録されている場合には、データ記憶部１２０へのデータの格納が回避される。これにより、重複するデータの格納を防止することができ、データの格納に必要な物理記憶領域の容量が削減される。
【００６９】
また、エミュレーション対象の記憶装置における、同一のデータが格納されたアドレスは、アドレスハッシュテーブル１１１のデータハッシュポインタによって、データハッシュテーブル１１２の同一のレコードに関連付けられる。制御部１３０は、当該データの読み出しが要求された場合に、このようなデータハッシュポインタが指し示すデータハッシュテーブル１１２のレコードを参照することで、データの実際の格納場所を認識し、その格納場所からデータを読み出すことが可能になる。
【００７０】
図１１は、データの書き込み要求を受けた場合の具体例（その３）を示す図である。図１１では、エミュレーション対象の記憶装置におけるデータ書き込み済みのアドレスに対して、データ記憶部１２０に格納済みである他のデータの上書きが要求された場合の処理を説明する。以下、図１１に示す処理をステップ番号に沿って説明する。
【００７１】
（Ｓ３１）制御部１３０は、ＤＥ番号“ＤＥ＃１”、ＨＤＤ番号“ＨＤＤ＃１”、ブロックアドレス“Ａｄｄ＃１”を書き込み先とする、書き込みデータ“Ｄａｔａ＃２”の書き込み要求を受け付ける。制御部１３０は、ＤＥ番号“ＤＥ＃１”、ＨＤＤ番号“ＨＤＤ＃１”、ブロックアドレス“Ａｄｄ＃１”に基づいて、所定のハッシュ関数でハッシュ化した値“Ａｄｄ＃１＿ｈａｓｈ”を算出する。
【００７２】
制御部１３０は、算出したハッシュ値“Ａｄｄ＃１＿ｈａｓｈ”と同一のハッシュ値が、アドレスハッシュテーブル１１１の何れかのレコードにおけるアドレスハッシュ値の項目に存在するか検索する。ここでは、制御部１３０は、同一のハッシュ値がアドレスハッシュテーブル１１１のレコード１１１ｄに存在すると判断する。
【００７３】
（Ｓ３２）制御部１３０は、書き込みデータ“Ｄａｔａ＃２”を所定のハッシュ関数でハッシュ化した値“Ｄａｔａ＃２＿ｈａｓｈ”を算出する。制御部１３０は、算出したハッシュ値“Ｄａｔａ＃２＿ｈａｓｈ”と同一のハッシュ値が、アドレスハッシュテーブル１１１のレコード１１１ｄにおけるデータハッシュ値の項目に登録されているかを判定する。ここでは、制御部１３０は、同一のハッシュ値が登録されていないと判定したとする。
【００７４】
（Ｓ３３）制御部１３０は、アドレスハッシュテーブル１１１のレコード１１１ｄにおけるデータハッシュポインタの項目から、ポインタ“Ｄｈａｓｈ＃１＿ｐ”を取得する。制御部１３０は、データハッシュテーブル１１２のポインタ“Ｄｈａｓｈ＃１＿ｐ”に対応するレコード１１２ｄの物理アドレスの項目から、アドレス“ＡＤ１２”を取得する。
【００７５】
（Ｓ３４）制御部１３０は、アドレス“ＡＤ１２”に対応するデータ管理テーブル１１３のレコードのエントリ数の項目に登録された値から、１を減算する。これは、データ記憶部１２０のアドレス“ＡＤ１２”と、エミュレーション対象の記憶装置における、ＤＥ番号“ＤＥ＃１”、ＨＤＤ番号“ＨＤＤ＃１”、ブロックアドレス“Ａｄｄ＃１”で表されるアドレスとが対応関係を成さないようになったからである。
【００７６】
（Ｓ３５）制御部１３０は、書き込みデータ“Ｄａｔａ＃２”に基づくハッシュ値“Ｄａｔａ＃２＿ｈａｓｈ”と同一のハッシュ値が、データハッシュテーブル１１２の何れかのレコードにおけるデータハッシュ値の項目に存在するか検索する。ここでは、制御部１３０は、同一のハッシュ値がデータハッシュテーブル１１２のレコード１１２ｅに存在すると判断したとする。
【００７７】
（Ｓ３６）制御部１３０は、アドレスハッシュテーブル１１１のレコード１１１ｄにおけるデータハッシュ値の項目に登録されたハッシュ値“Ｄａｔａ＃１＿ｈａｓｈ”を、“Ｄａｔａ＃２＿ｈａｓｈ”に更新する。また、制御部１３０は、アドレスハッシュテーブル１１１のレコード１１１ｄにおけるデータハッシュポインタの項目に登録されたポインタ“Ｄｈａｓｈ＃１＿ｐ”を、データハッシュテーブル１１２のレコード１１２ｅを指し示すポインタ“Ｄｈａｓｈ＃２＿ｐ”に更新する。これは、エミュレーション対象の記憶装置における、ＤＥ番号“ＤＥ＃１”、ＨＤＤ番号“ＨＤＤ＃１”、ブロックアドレス“Ａｄｄ＃１”で表される領域のデータが、レコード１１２ｅに対応するデータ記憶部１２０の記憶領域に格納されていたデータに変更されたからである。
【００７８】
（Ｓ３７）制御部１３０は、データハッシュテーブル１１２のレコード１１２ｅにおける物理アドレスの項目から、アドレス“ＡＤ１３”を取得する。制御部１３０は、アドレス“ＡＤ１３”に対応するデータ管理テーブル１１３のエントリ数の項目の値に１を加算する。これは、データ記憶部１２０のアドレス“ＡＤ１３”と、エミュレーション対象の記憶装置における、“ＤＥ＃１”、“ＨＤＤ＃１”、“Ａｄｄ＃１”で表されるアドレスとが、新たに対応関係を成すようになるからである。
【００７９】
以上の図１１の例のように、エミュレーション対象の記憶装置におけるデータ書き込み済みのアドレスに対して、データ記憶部１２０に格納済みである他のデータの上書きが要求された場合には、データ記憶部１２０に対するデータの書き込みは行われず、アドレスハッシュテーブル１１１における１つのレコードにおけるデータハッシュ値およびデータハッシュポインタの更新のみが行われる。
【００８０】
ここで、図１１の例では、ステップＳ３４の処理により、アドレス“ＡＤ１２”に対応するデータ管理テーブル１１３のレコードのエントリ数の項目の値は、減算により０になったものとする。この場合、データ記憶部１２０のアドレス“ＡＤ１２”の記憶領域は解放され、他のデータによって上書き可能になる。
【００８１】
すなわち、本実施の形態では、データ記憶部１２０の単位記憶領域に、エミュレーション対象の記憶装置のアドレスが対応付けられるたびに、この単位記憶領域に対応するエントリ数が１だけ増加する。また、この単位記憶領域と、エミュレーション対象の記憶装置のアドレスとの対応関係がなくなるたびに、この単位記憶領域に対応するエントリ数が１だけ減少する。これにより、エントリ数は、対応するデータ記憶部１２０の単位記憶領域が、エミュレーション対象の記憶装置における何個の記憶領域に対応する物理記憶領域として使用されているかを示すようになる。
【００８２】
このようなエントリ数の管理方法によれば、制御部１３０は、エントリ数が０であるときに、データ記憶部１２０の対応する単位記憶領域に新たなデータを上書き可能であると判定できる。よって、制御部１３０は、データ管理テーブル１１３を用いた簡単な管理方法によって、データ記憶部１２０におけるデータを上書き可能な単位記憶領域を正確に判定できる。また、一度データが書き込まれた単位記憶領域を、他のデータの格納に再利用できるようになるので、データ記憶部１２０の必要な記憶容量を削減できる。
【００８３】
次に、エミュレーション装置１００の書き込み要求に対する処理手順を、図１２，１３のフローチャートを用いて説明する。
図１２は、書き込み要求に対する処理例を示すフローチャート（その１）である。以下、図１２に示す処理をステップ番号に沿って説明する。なお、図１２，１３の処理は、エミュレーション装置１００がアクセス装置２００から書き込み要求を受信したとき、書き込みが要求されたデータを分割した分割データごとに実行される。
【００８４】
（Ｓ５１）制御部１３０は、データの書き込み先を示すＤＥ番号、ＨＤＤ番号およびブロックアドレスを取得する。
（Ｓ５２）制御部１３０は、ＤＥ番号とＨＤＤ番号とアドレスとに基づいて、所定のハッシュ関数でアドレスハッシュ値を算出する。
【００８５】
（Ｓ５３）制御部１３０は、アドレスハッシュテーブル１１１の何れかのレコードに、算出したアドレスハッシュ値と同じアドレスハッシュ値が存在するか判定する。存在する場合、すなわち、同じアドレスハッシュ値が登録されたレコードが特定された場合には、処理をステップＳ５４に進める。存在しない場合、処理をステップＳ５７に進める。
【００８６】
（Ｓ５４）制御部１３０は、書き込みデータに基づいて、所定のハッシュ関数でデータハッシュ値を算出する。
（Ｓ５５）制御部１３０は、ステップＳ５３で特定されたアドレスハッシュテーブル１１１のレコードに登録されたデータハッシュ値と、ステップＳ５４で算出したデータハッシュ値とが一致するかを判定する。一致する場合、処理を終了する。一致しない場合、処理をステップＳ５６に進める。
【００８７】
（Ｓ５６）制御部１３０は、データハッシュテーブル１１２のレコードのうち、ステップＳ５３で特定されたアドレスハッシュテーブル１１１のレコードに登録されたデータハッシュポインタが示すレコードを特定する。制御部１３０は、特定したデータハッシュテーブル１１２のレコードから、物理アドレスを取得する。制御部１３０は、データ管理テーブル１１３のレコードのうち、取得した物理アドレスに対応するレコードを特定し、特定したレコードにおけるエントリ数を１だけ減算する。これにより、書き込み要求先に格納されていた古いデータに対応するエントリ数が、１だけ減算される。
【００８８】
（Ｓ５７）制御部１３０は、アドレスハッシュテーブル１１１に新規のレコードを登録する。制御部１３０は、登録したレコードに、ステップＳ５１で取得したＤＥ番号、ＨＤＤ番号およびブロックアドレスと、ステップＳ５２で算出したアドレスハッシュ値とを登録する。
【００８９】
（Ｓ５８）制御部１３０は、書き込みデータに基づいて、所定のハッシュ関数でデータハッシュ値を算出する。
（Ｓ５９）制御部１３０は、データハッシュテーブル１１２の何れかのレコードに、ステップＳ５４またはステップＳ５８で算出したデータハッシュ値と同じデータハッシュ値が存在するか判定する。存在する場合、すなわち、同じデータハッシュ値が登録されたレコードが特定された場合には、処理を図１３のステップＳ６４に進める。存在しない場合、処理を図１３のステップＳ６１に進める。
【００９０】
図１３は、書き込み要求に対する処理例を示すフローチャート（その２）である。以下、図１３に示す処理をステップ番号に沿って説明する。
（Ｓ６１）制御部１３０は、データ管理テーブル１１３にエントリ数の項目が０のレコードが存在するか判定する。存在する場合、処理をステップＳ６２に進める。存在しない場合、処理をステップＳ６６に進める。
【００９１】
（Ｓ６２）制御部１３０は、データ管理テーブル１１３からエントリ数の項目が０のレコードを特定し、特定したレコードから物理アドレスを取得する。制御部１３０は、データハッシュテーブル１１２に新規のレコードを登録する。制御部１３０は、登録したレコードに、ステップＳ５４またはステップＳ５８で算出したデータハッシュ値と、特定したデータ管理テーブル１１３のレコードから取得した物理アドレスとを登録する。
【００９２】
（Ｓ６３）制御部１３０は、データ記憶部１２０におけるステップＳ６２で取得した物理アドレスの領域に、書き込みが要求されたデータを書き込む。
（Ｓ６４）制御部１３０は、アドレスハッシュテーブル１１１のレコードに、ステップＳ５４またはステップＳ５８で算出したデータハッシュ値と、データハッシュテーブル１１２のレコードを示すデータハッシュポインタを登録する。
【００９３】
ここで、ステップＳ５４〜Ｓ５６が実行された場合、アドレスハッシュテーブル１１１における登録先のレコードは、ステップＳ５３で特定されたレコードとなる。一方、ステップＳ５７，Ｓ５８が実行された場合、アドレスハッシュテーブル１１１における登録先のレコードは、ステップＳ５７で新規に登録されたレコードとなる。
【００９４】
また、ステップＳ５９で“Ｙｅｓ”と判定された場合、登録されるデータハッシュポインタは、ステップＳ５９で特定されたレコードを示すポインタとなる。一方、ステップＳ５９で“Ｎｏ”と判定された場合、登録されるデータハッシュポインタは、ステップＳ６２で新規に登録されたレコードを示すポインタとなる。
【００９５】
（Ｓ６５）制御部１３０は、データ管理テーブル１１３のレコードにおけるエントリ数の項目の値に１を加算する。そして、処理を終了する。加算の対象となるデータ管理テーブル１１３のレコードは、ステップＳ６４で登録されたデータハッシュポインタが示すデータハッシュテーブル１１２のレコードに登録された物理アドレスを含むレコードとなる。
【００９６】
（Ｓ６６）制御部１３０は、アクセス装置２００に空き容量が枯渇している旨を通知する。そして、処理を終了する。
次に、エミュレーション装置１００がデータの呼出し要求を受けた場合について説明する。
【００９７】
図１４は、データの読み出し要求を受けた場合の具体例を示す図である。以下、図１４に示す処理をステップ番号に沿って説明する。
なお、制御部１３０は、アクセス装置２００からデータの読み出し要求を受信すると、読み出しが指定された領域を一定サイズごとに分割し、分割した領域ごとに図１４に示すような読み出し処理を行う。分割される領域のサイズは、書き込みが要求された際にデータを分割して得られる分割データのサイズと同じである。
【００９８】
（Ｓ７１）制御部１３０は、ＤＥ番号“ＤＥ＃０”、ＨＤＤ番号“ＨＤＤ＃０”、ブロックアドレス“Ａｄｄ＃０”からのデータ読み出し要求を受け付ける。制御部１３０は、ＤＥ番号“ＤＥ＃０”、ＨＤＤ番号“ＨＤＤ＃０”、ブロックアドレス“Ａｄｄ＃０”に基づいて、所定のハッシュ関数でハッシュ化した値“Ａｄｄ＃０＿ｈａｓｈ”を算出する。
【００９９】
制御部１３０は、算出したハッシュ値“Ａｄｄ＃０＿ｈａｓｈ”と同一のハッシュ値が、アドレスハッシュテーブル１１１の何れかのレコードにおけるアドレスハッシュ値の項目に存在するか検索する。ここでは、制御部１３０は、同一のハッシュ値がアドレスハッシュテーブル１１１のレコード１１１ｆに登録されていると判定したとする。
【０１００】
（Ｓ７２）制御部１３０は、アドレスハッシュテーブル１１１のレコード１１１ｆからデータハッシュポインタ“Ｄｈａｓｈ＃０＿ｐ”を取得する。制御部１３０は、データハッシュテーブル１１２から、データハッシュポインタ“Ｄｈａｓｈ＃０＿ｐ”が示すレコードを検索する。ここでは、データハッシュテーブル１１２からレコード１１２ｆが検索されたとする。
【０１０１】
（Ｓ７３）制御部１３０は、データハッシュテーブル１１２のレコード１１２ｆから物理アドレス“ＡＤ１１”を取得する。制御部１３０は、データ記憶部１２０から、物理アドレス“ＡＤ１１”に格納されているデータ“Ｄａｔａ＃０”を読み出し、アクセス装置２００に送信する。
【０１０２】
ここで、制御部１３０は、図１２のステップＳ５９では、データの重複を判定するために、データそのもの同士を比較するのではなく、データを基に算出されたデータハッシュ値同士を比較する。これにより、比較対象のデータ量が小さくなり、重複判定の処理速度が向上する。ステップＳ５４でも、データハッシュ値同士が比較されることで、比較の処理速度が向上する。
【０１０３】
さらに、制御部１３０は、ステップＳ５３でも、アドレスハッシュテーブル１１１のレコードを検索するために、ＤＥ番号、ＨＤＤ番号およびブロックアドレスという大きなサイズのデータ同士を比較するのではなく、これらの情報を基に算出されたアドレスハッシュ値同士を比較する。これにより、比較対象のデータ量が小さくなり、レコード検索の処理速度が向上する。
【０１０４】
次に、エミュレーション装置１００の読み出し要求に対する処理手順を、図１５のフローチャートを用いて説明する。
図１５は、読み出し要求に対する処理例を示すフローチャートである。以下、図１５に示す処理をステップ番号に沿って説明する。
【０１０５】
（Ｓ８１）制御部１３０は、データの読み出し領域を示すＤＥ番号、ＨＤＤ番号およびブロックアドレスを取得する。
（Ｓ８２）制御部１３０は、ＤＥ番号、ＨＤＤ番号およびブロックアドレスに基づいて、所定のハッシュ関数でアドレスハッシュ値を算出する。
【０１０６】
（Ｓ８３）制御部１３０は、算出したアドレスハッシュ値と同じハッシュ値が、アドレスハッシュテーブル１１１の何れかのレコードにおけるアドレスハッシュ値の項目に存在するか判定する。存在する場合、すなわち、同じアドレスハッシュ値が登録されたレコードが特定された場合には、制御部１３０は、特定されたレコードからデータハッシュ値とデータハッシュポインタとを取得し、処理をステップＳ８４に進める。存在しない場合、処理をステップＳ８６に進める。
【０１０７】
（Ｓ８４）制御部１３０は、データハッシュテーブル１１２から、ステップＳ８３で取得したデータハッシュポインタが示すレコードを特定する。制御部１３０は、特定したレコードに登録されたデータハッシュ値が、ステップＳ８３で取得したデータハッシュ値と一致するかを判定する。一致しない場合、処理をステップＳ８６に進める。一致した場合、処理をステップＳ８５に進める。
【０１０８】
（Ｓ８５）制御部１３０は、ステップＳ８４で特定したデータハッシュテーブル１１２のレコードから、物理アドレスを取得する。制御部１３０は、データ記憶部１２０の記憶領域のうち、取得した物理アドレスに対応する記憶領域からデータを読み出し、読み出したデータをアクセス装置２００に送信する。そして、処理を終了する。
【０１０９】
（Ｓ８６）制御部１３０は、アクセス装置２００に読み出し要求のデータが存在しない旨を通知する。そして、処理を終了する。
以上説明した第２の実施の形態によれば、制御部１３０は、データの書き込み要求を受けた場合に、アドレスハッシュテーブル１１１およびデータハッシュテーブル１１２を参照することで、同一のデータがデータ記憶部１２０にすでに格納されているかを判定できる。そして、制御部１３０は、同一のデータがデータ記憶部１２０にすでに格納されていると判定すると、そのデータをデータ記憶部１２０に書き込むことを回避して、テーブル記憶部１１０内のテーブル情報の更新のみを行う。
【０１１０】
これにより、データの書き込みが要求されたデータのうち、同一のデータがデータ記憶部１２０の複数の記憶領域に重複して格納されることを防止できる。したがって、データ記憶部１２０の記憶容量、すなわち、記憶装置をエミュレーションする際に使用される物理記憶領域の容量を小さくすることができる。また、データ記憶部１２０に対する書き込みアクセスの回数を少なくすることができ、書き込みアクセスに要する時間も短縮できる。
【０１１１】
また、制御部１３０は、アクセス装置２００から書き込みが要求されたデータを一定サイズごとに分割した分割データを単位として、記憶装置に対するアクセス処理のエミュレーションを行う。これにより、エミュレーション対象の記憶装置の記憶領域と、物理記憶領域とを対応付けて管理する処理や、管理の際に使用されるテーブルの構造が単純化される。したがって、エミュレーションの処理効率を向上できる。
【０１１２】
なお、前述のように、第１の実施の形態の情報処理は、制御部１ｂにプログラムを実行させることで実現できる。また、第２の実施の形態の情報処理は、エミュレーション装置１００が備えるプロセッサ１０１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体（例えば、光ディスク１３、メモリ装置１４およびメモリカード１６など）に記録できる。
【０１１３】
プログラムを流通させる場合、例えば、当該プログラムを記録した可搬記録媒体が提供される。また、プログラムを他のコンピュータの記憶装置に格納しておき、ネットワーク経由でプログラムを配布することもできる。コンピュータは、例えば、可搬記録媒体に記録されたプログラムまたは他のコンピュータから受信したプログラムを、記憶装置に格納し、当該記憶装置からプログラムを読み込んで実行する。ただし、可搬記録媒体から読み込んだプログラムを直接実行してもよく、他のコンピュータからネットワークを介して受信したプログラムを直接実行してもよい。
【０１１４】
また、上記の情報処理の少なくとも一部を、ＤＳＰ、ＡＳＩＣ、ＰＬＤなどの電子回路で実現することもできる。
以上、図示の実施の形態に基づいて説明したが、本発明はこれに限定されるものではなく、各部の構成は、同様の機能を有する任意の構成のものに置換することができる。また、本発明に他の任意の構成物や工程が付加されていてもよい。
【符号の説明】
【０１１５】
１  記憶制御装置
１ａ  記憶部
１ｂ  制御部
２ａ，２ｂ  記憶装置
３  管理情報
【図１】
2015162002.tif 000003
【図２】
2015162002.tif 000004
【図３】
2015162002.tif 000005
【図４】
2015162002.tif 000006
【図５】
2015162002.tif 000007
【図６】
2015162002.tif 000008
【図７】
2015162002.tif 000009
【図８】
2015162002.tif 000010
【図９】
2015162002.tif 000011
【図１０】
2015162002.tif 000012
【図１１】
2015162002.tif 000013
【図１２】
2015162002.tif 000014
【図１３】
2015162002.tif 000015
【図１４】
2015162002.tif 000016
【図１５】
2015162002.tif 000017