(57)【要約】【課題】記憶装置から、要求ブロックとともに、近傍のブロックも読み出す処理を用いたデータアクセスにおける、読み出したブロックの利用効率を向上させる技術を提供する。【解決手段】アクセス制御プログラムは、コンピュータに、第１のデータに対するアクセス要求に応じて、第１のデータを含む第１のブロックを含む連続するブロックを読み出し、連続するブロックのメモリ領域へのロードにより、メモリ領域から押し出されたページに対応する記憶装置のブロックを、メモリ領域におけるページへのアクセス状況に応じて無効化すると共に、無効化したブロックに対応する押し出されたページである第２のデータを記憶装置の連続した空き領域へ書き込む処理を実行させることにより、上記課題の解決を図る。【選択図】図４
2016038907.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
第１のデータに対するアクセス要求に応じて、記憶領域がブロック単位で管理された記憶装置から、前記第１のデータを含む第１のブロックを含む連続するブロックを読み出し、
前記連続するブロックを、記憶領域をページ単位で管理するメモリ領域にロードし、
前記連続するブロックの前記メモリ領域へのロードにより、該メモリ領域から押し出されたページに対応する前記記憶装置の前記ブロックを、該メモリ領域における該ページへのアクセス状況に応じて無効化すると共に、無効化した前記ブロックに対応する前記押し出されたページである第２のデータを前記記憶装置の連続した空き領域へ書き込む、
処理を実行させることを特徴とするアクセス制御プログラム。
【請求項２】
前記書き込みにおいて、前記押し出されたページのうち、前記メモリ領域にてアクセスされた前記ページに対応する前記記憶装置の前記ブロックを無効化する
ことを特徴とする請求項１に記載のアクセス制御プログラム。
【請求項３】
前記読み出しにおいて、前記記憶装置から前記連続するブロックを読み出して前記メモリ領域にロードする第１読出方法と、該第１読出方法を行うと共に前記記憶装置の前記連続するブロックを無効化する第２読出方法と、のうちいずれかの読出方法を用いて前記連続するブロックを読み出し、
前記書き込みにおいて、前記第２のデータが前記メモリ領域にてアクセスされたページである場合、前記メモリ領域にてアクセスされていないページであって、前記無効化したブロックに対応する前記押し出されたページである第３のデータを、前記第２のデータと共に、前記空き領域へ書き込む
ことを特徴とする請求項２に記載のアクセス制御プログラム。
【請求項４】
前記読み出しにおいて、前記連続するブロックのうち、有効なブロックの割合に応じて、前記第１読出方法と、前記第２読出方法とのうちいずれかの読出し方法を選択する
ことを特徴とする請求項３に記載のアクセス制御プログラム。
【請求項５】
第１のデータに対するアクセス要求に応じて、記憶領域がブロック単位で管理された記憶装置から、前記第１のデータを含む第１のブロックを含む連続するブロックを読み出す読出部と、
前記連続するブロックを、記憶領域をページ単位で管理するメモリ領域にロードするロード部と、
前記連続するブロックの前記メモリ領域へのロードにより、該メモリ領域から押し出されたページに対応する前記記憶装置の前記ブロックを、該メモリ領域における該ページへのアクセス状況に応じて無効化すると共に、無効化した前記ブロックに対応する前記押し出されたページである第２のデータを前記記憶装置の連続した空き領域へ書き込む書込部と、
を備えることを特徴とするアクセス制御装置。
【請求項６】
コンピュータが、
第１のデータに対するアクセス要求に応じて、記憶領域がブロック単位で管理された記憶装置から、前記第１のデータを含む第１のブロックを含む連続するブロックを読み出し、
前記連続するブロックを、記憶領域をページ単位で管理するメモリ領域にロードし、
前記連続するブロックの前記メモリ領域へのロードにより、該メモリ領域から押し出されたページに対応する前記記憶装置の前記ブロックを、該メモリ領域における該ページへのアクセス状況に応じて無効化すると共に、無効化した前記ブロックに対応する前記押し出されたページである第２のデータを前記記憶装置の連続した空き領域へ書き込む、
ことを特徴とするアクセス制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置に記憶されたデータにアクセスする技術に関する。
【背景技術】
【０００２】
近年、ビジネスの高速化に伴い、次々と流れてくる大量のデータをリアルタイムに処理することが求められている。これに伴い、流れて来るデータに対し、その場で分析処理を実行する技術であるストリームデータ処理が注目されている。
【０００３】
ストリーム処理の中には、メモリに載るサイズを越えるデータを分析対象とするものも存在する。メモリに載るサイズを越えるデータを処理するためには、処理に応じて、ディスクに対するアクセスを行い、分析処理が実行される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１０−３１５５９号公報
【特許文献２】特開２００８−１６０２４号公報
【特許文献３】特開２００８−２０４０４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
データアクセスの効率化を図るため、サーバが、データアクセスで要求されたディスクのブロックとともに、そのブロックの近傍にあるブロックもアクセスされることを期待して、物理的に近傍にあるブロックを予めメモリ領域に読み出すことができる。
【０００６】
しかしながら、ブロックの近傍にあるブロックがアクセスされるのは、ディスクにおけるブロックの配置と、データアクセスとが関連を持つ場合である。ディスクにおけるブロックの配置がデータアクセスと十分に関連を持たない場合は、アクセス要求されたブロックの近傍のブロックを予め読み出しても、実際にアクセスされない状況が生じ、メモリ領域の利用効率を低下させる。
【０００７】
本発明は、一側面として、記憶装置から、要求ブロックとともに、近傍のブロックも読み出す処理を用いたデータアクセスにおける、読み出したブロックの利用効率を向上させる技術を提供する。
【課題を解決するための手段】
【０００８】
本発明の一側面に係るアクセス制御プログラムは、コンピュータに、次の処理を実行させる。コンピュータは、第１のデータに対するアクセス要求に応じて、記憶領域がブロック単位で管理された記憶装置から、第１のデータを含む第１のブロックを含む連続するブロックを読み出す。コンピュータは、連続するブロックを、記憶領域をページ単位で管理するメモリ領域にロードする。コンピュータは、連続するブロックのメモリ領域へのロードにより、メモリ領域から押し出されたページに対応する記憶装置のブロックを、メモリ領域における該ページへのアクセス状況に応じて無効化する。コンピュータはそれと共に、無効化したブロックに対応する押し出されたページである第２のデータを記憶装置の連続した空き領域へ書き込む。
【発明の効果】
【０００９】
本発明によれば、一側面として、記憶装置から、要求ブロックとともに、近傍のブロックも読み出す処理を用いたデータアクセスにおける、読み出したブロックの利用効率を向上させることができる。
【図面の簡単な説明】
【００１０】
【図１】データアクセスにおけるメモリ領域とディスク間でのデータブロックの取り扱いを説明するための図である。
【図２】データアクセスにおけるプリフェッチを説明するための図である。
【図３Ａ】ディスクアクセスが頻発する場合に起こりうる事象を説明するための図（その１）である。
【図３Ｂ】ディスクアクセスが頻発する場合に起こりうる事象を説明するための図（その２）である。
【図４】本実施形態におけるアクセス制御装置の一例を示す。
【図５Ａ】本実施形態における動作を説明するための図（その１）である。
【図５Ｂ】本実施形態における動作を説明するための図（その２）である。
【図５Ｃ】本実施形態における動作を説明するための図（その３）である。
【図６】本実施形態における充填率を説明するための図である。
【図７】本実施形態におけるデータとブロックを説明するための図である。
【図８】本実施形態におけるサーバのハードウェア構成を示す。
【図９】本実施形態における物理レイアウト管理情報の一例を示す。
【図１０】本実施形態におけるページ管理リストの一例を示す。
【図１１】本実施形態におけるＩＯ実行部の動作フローを示す。
【図１２】本実施形態におけるＩＦ  getitems_bulk(K, N)の動作フローを示す。
【図１３】本実施形態におけるＩＯサイズ算出部の動作フローを示す。
【図１４】本実施形態におけるブロックＩｄ（K＝７）のブロックがリクエストされた場合のページ管理リストの更新例である。
【図１５】本実施形態におけるgetitems_bulk(K, N)呼び出し後のページ管理リストの更新例を示す。
【図１６】本実施形態におけるページ管理部の動作フローを示す。
【図１７Ａ】本実施形態におけるＩＦ  setitems_bulk(N)の動作フロー（その１）を示す。
【図１７Ｂ】本実施形態におけるＩＦ  setitems_bulk(N)の動作フロー（その２）を示す。
【図１７Ｃ】本実施形態におけるＩＦ  setitems_bulk(N)の動作フロー（その３）を示す。
【図１８】本実施形態におけるページ管理リストの下から４エントリで示すページに対応するブロックが対象ブロックとして選択される場合を説明するための図である。
【図１９】本実施形態における物理レイアウト管理情報から、ブロックのエントリが抽出される例を説明するための図である。
【図２０】本実施形態における物理レイアウト管理情報の更新例を示す。
【図２１】本実施形態におけるページ管理リストから対象ブロックに対応するページのエントリが削除される例を説明するための図である、
【図２２】本実施形態におけるプログラムを実行するコンピュータのハードウェア環境の構成ブロック図の一例である。
【発明を実施するための形態】
【００１１】
メモリに載るサイズを越えるデータを扱うストリーム処理では、大量のデータが流入した場合、ディスクアクセスが頻発し、サーバ全体の処理性能に影響を与える。
【００１２】
図１は、データアクセスにおけるメモリ領域とディスク間でのブロックの取り扱いを説明する図である。図１において、ディスク１０２と、メモリ領域１０１とが示されている。ここでは、メモリ上の一部領域を、メモリ領域１０１としている。メモリ領域のページ置き換えのアルゴリズム（ページ置き換えアルゴリズム）に関しては、一例として、メモリ領域１０１において参照されていない時間が最も長いページを置換対象にする方式（Least Recently Used、ＬＲＵ）が用いられる。
【００１３】
図１において、ディスク１０２上には複数のブロック１〜８が配置されている。データアクセス要求により要求されたデータが記憶されているブロックが読み出され、メモリ領域１０１に配置される。例えば、ブロック１，３，５に記憶されたデータについてデータアクセス要求がされた場合、ディスク１０２からブロック１，３，５が読み出され、読み出されたブロック１，３，５に対応するページ１，３，５がメモリ領域１０１に配置される。
【００１４】
ここで、メモリ領域１０１上で配置されるページを置き換える場合、置き換え対象となるページ（置き換えページ）は、ページ置き換えアルゴリズムにより決定される。
【００１５】
ＬＲＵ方式では、メモリ領域１０１に保持されたページであって、かつ、最終アクセス日時が最古のページが、置き換えページとして選択される。置き換えページに対応するブロックは、たとえばディスク１０２へ書き戻される。ページは、ページへのアクセスの日時の古い順に、キュー１０３によって管理される。例えば、アクセスされたデータに対応するページは、キュー１０３の最後尾へ配置される。その結果、アクセスされなかったデータに対応するページほどキュー１０３の先頭に位置することになる。キュー１０３の先頭に位置するページから、ページ置き換えの対象ページが選択され、その選択されたページ内のデータがたとえばディスク１０２へ書き戻される。図１において、キュー１０３は、（Ａ１）、（Ａ２），（Ａ３）の順でデータアクセスが発生後のキューの状態を示す。
【００１６】
図２は、データアクセスにおけるプリフェッチを説明するための図である。本実施形態において、プリフェッチは、ディスク１０２上でアクセス要求されたブロックと物理配置が近傍のブロックブロックを、予めメモリ領域１０１に読み出しておくことである。
【００１７】
図２では、データアクセスで要求されたブロック（５）に対応するページをメモリ領域１０１に配置する際の様子を示す。すなわち、図２では、そのページをメモリ領域に配置する際、ディスクの物理配置上で、要求されたブロック（５）の近傍にあるブロック（６，７）もアクセスして、メモリ領域１０１上のページ（５，６，７）が配置された状態を表している。
【００１８】
図３Ａ及び図３Ｂは、ディスクアクセスが頻発する場合に起こりうる事象を説明するための図である。ディスクアクセスが頻発する状況では、メモリ領域１０１のサイズ制限のため、ページ置き換えアルゴリズムによるメモリ領域１０１からディスク１０２への書き戻しも頻発する。
【００１９】
図３Ａにおいて、データアクセス（Ａ１）のプリフェッチで、ディスク１０２におけるブロック１とその近傍ブロック（２，３，４）がアクセスされると、メモリ領域１０１にページ１，２，３，４が配置される。
【００２０】
データアクセス（Ａ２）のプリフェッチで、ディスク１０２におけるブロック５とその近傍ブロック（６，７，８）がアクセスされると、メモリ領域１０１にページ５，６，７，８が配置される。この場合、メモリ領域１０１のサイズ制限（例えば、６ページ分とする）のため、ページ置き換えアルゴリズムによりページの置き換えが発生する。その結果、データアクセス（Ａ１）で先読みされたブロック３，４に対応するページ３，４はアクセスされていないので、置き換え対象となる。
【００２１】
プリフェッチで先読みされたページ（アクセス要求前にディスクから読み出されてメモリ上に配置されたページ）のうちアクセスされずに置き換わるページが増えると、アクセスされないページがメモリ領域１０１を占める割合が増加する。その結果、メモリ領域の利用効率が低下する。また、プリフェッチで先読みされたページのうちアクセスされずに置き換わるページが増えると、プリフェッチにより読み出された複数のブロックのうちでアクセスされたブロックの割合が低下することになり、ディスクアクセスも非効率となる。
【００２２】
例えば、図３Ｂに示すように、データアクセス（Ａ１）〜（Ａ４）のアクセスがあった場合について説明する。データアクセス（Ａ１）、（Ａ２）及び（Ａ４）でプリフェッチが行われる。データアクセス（Ａ１）でプリフェッチされたブロックに対応するページ１，２，３，４のうち、アクセスされたページは、ページ１，２であり、使用されたページの割合は２／４である。一方で、データアクセス（Ａ２）でプリフェッチされたブロックに対応するページ５，６，７，８のうち、アクセスされたページは、ページ５であり、アクセスされたページの割合は、１／４である。
【００２３】
そこで、本実施形態では、記憶装置からプリフェッチされたブロックに対応するページのメモリ領域での使用の有無に応じて、ブロックを記憶装置へ配置することにより、プリフェッチによる無駄読みを削減し、メモリ領域の利用効率を向上させる技術を説明する。
【００２４】
図４は、本実施形態におけるアクセス制御装置の一例を示す。アクセス制御装置１は、読出部２と、ロード部３と、書込部４とを含む。アクセス制御装置１の一例として、制御部１２が挙げられる。
【００２５】
読出部２は、第１のデータに対するアクセス要求に応じて、記憶領域がブロック単位で管理された記憶装置から、第１のデータを含む連続するブロックを読み出す。読出部２の一例として、ＩＯ実行部１３が挙げられる。
【００２６】
ロード部３は、連続するブロックを、記憶領域をページ単位で管理するメモリ領域にロードする。ロード部３の一例として、ＩＯ実行部１３が挙げられる。
【００２７】
書込部４は、連続するブロックのメモリ領域へのロードにより、メモリ領域から押し出されたページに対応する記憶装置のブロックを、メモリ領域におけるページへのアクセス状況に応じて無効化する。書込部４は、それと共に、無効化したブロックに対応する押し出されたページである第２のデータを記憶装置の連続した空き領域へ書き込む。書込部４の一例として、ページ管理部１７が挙げられる。
【００２８】
このように構成することにより、記憶装置５からプリフェッチされたブロックに対応するページがメモリ領域で使用されたか否かに応じて、ブロックを記憶装置５へ配置することができる。
【００２９】
書込部４は、押し出されたページのうち、メモリ領域にてアクセスされたページに対応する記憶装置のブロックを無効化する。このように構成することにより、メモリ領域においてアクセスされたページを記憶装置５に書き戻す場合に、そのページに対応する記憶装置上のブロックを無効にして追記することができる。その結果、記憶装置の物理領域上連続した空き領域を確保することができると共に、アクセスされたページに対するブロックを記憶装置の物理領域上にまとまって配置することができる。
【００３０】
読出部２は、第１読出方法と、第２読出方法と、のうちいずれかの読出方法を用いて連続するブロックを読み出す。第１読出方法は、記憶装置５から連続するブロックを読み出してメモリ領域にロードする読み出し方法である。第２読出方法は、第１読出方法を行うと共に、記憶装置５の連続するブロックを無効化して読み出し方法である。
【００３１】
書込部４は、第２のデータがメモリ領域にてアクセスされたページである場合、メモリ領域にてアクセスされていないページのデータであって、無効化したブロックのデータに対応する押し出されたページのデータである第３のデータを、第２のデータと共に、空き領域へ書き込む。
【００３２】
このように構成することにより、メモリ領域にてアクセスされたデータと共に、第２読出方法にてメモリ領域に読み出されたデータのうちアクセスされなかったデータを記憶装置に追記することができる。
【００３３】
読出部２は、アクセス要求された第１のブロック及び第１のブロックに隣接する少なくとも１つのブロックのうち、有効なブロックの割合に応じて、第１読出方法と、第２読出方法とのうちいずれかの読出し方法を選択する。
【００３４】
このように構成することにより、プリフェッチの対象となるブロックのうち、有効なブロックの割合に応じて、読み出し方法を選択することにより、アクセスされたブロックの削除及び追記の繰り返しによる無効な領域の散在を解消することができる。
【００３５】
以下に、本実施形態を詳述する。
本実施形態は、例えば、サーバ装置（以下、「サーバ」と称する。）におけるストレージミドルウェア機能を実現する制御部により実行される。ディスクからのブロックの読み出しでは、サーバは、アプリケーションプログラム（以下、「アプリケーション」と称する。）からのデータアクセスで要求されたブロックの他、物理領域が近傍のブロックを併せて読み出す（プリフェッチ）。
【００３６】
その読み出しでは、サーバは、揮発性read（読み出すブロックは、ディスク１０２上から削除する（無効にする）と、不揮発性read（読み出すブロックをディスク１０２から削除しない）の２つから、読み出し方法を選択して実行する。読み出し方法の選択は、プリフェッチによりディスク１０２から読み出した複数のブロックのうちの“有効”なブロックの割合（充填率）に基づいて決定される。サーバは、ブロックの読み出しを通常は不揮発性readにより実行するが、充填率の値が閾値を下回ると、ブロックの読み出しを揮発性readにより実行する。
【００３７】
サーバは、メモリ領域１０１上のページの、ディスクへの書き込みを、“使われたページ（すなわち、アクセスのあったページ）”と“使われなかったページ（すなわち、アクセスのなかったページ）”を２つのリストで別々に指定する。ここで、“使われたページ”をディスク１０２に書き戻す場合、サーバは、以前にディスク１０２から読み出したときの、当該ページに対応するブロックを無効にして、その当該ページに対応するブロックをまとめてディスク１０２の物理領域に追記する。これにより、使われたページに対応するブロックをまとめてディスク１０２に配置することができるので、無駄読みを削減すると共に、メモリ領域の利用効率を向上させることができる。
【００３８】
“使われなかったページ”が不揮発性readで読み出されている場合、サーバは、何もしない。一方、“使われなかったページ”が揮発性readで読み出されている場合、サーバは、“使われなかったページ”も“使われたページ”と併せて、ディスク１０２の物理領域に追記する。揮発性readを実行することで、揮発性readによりプリフェッチで読み出した複数のブロックを、ディスク１０２の物理領域から削除することができるので、物理領域上に連続した空き領域を確保することができる。
【００３９】
なお、ディスク１０２に対して“使われたページ”に対応するブロックの追記を繰り返すと、ディスク１０２の物理領域上に無効な領域が散在し、連続した空き領域が確保しにくくなる。その結果、ページをまとめてディスクに書き戻す時、必要な連続空き領域を確保出来ない場合が起こり得る。この場合、ブロックの並べ替えなどを実行せずに、ディスク１０２に無効な領域が散在するのを解消するため、充填率が閾値を下回ると揮発性readを実行し、連続した空き領域を確保する。
【００４０】
図５Ａ−図５Ｃは、本実施形態における動作を説明するための図である。本実施形態では、ページ置き換えアルゴリズムの一例として、ＬＲＵ方法を用いる。また、メモリ領域１０１のサイズ制限は、例えば、６ブロック分とする。
【００４１】
図５Ａに示すように、不揮発性readで読み出されたページで、“使われなかったページ”は再びディスク１０２に書き戻さない。
【００４２】
図５Ａにおいて、データアクセス（Ａ１）では、不揮発性readにより、ブロック（１）及びその近傍ブロック（２，３，４）がアクセスされる。データアクセス（Ａ２）では、不揮発性readにより、ブロック（５）及びその近傍ブロック（６，７，８）がアクセスされる。
【００４３】
メモリ領域１０１に格納されたページ３，４は“使わなかったページ”であり、これらは不揮発性readで読み出されているので、ページ３，４は再びディスク１０２に書き戻さない。
【００４４】
図５Ｂに示すように、“使われたページ”をディスク１０２に書き戻す場合には、ディスク１０２上の、そのページの読み込み元のブロックを“無効”にして、既存の有効な最後のブロックの次の領域に追記する。
【００４５】
図５Ｂにおいて、データアクセス（Ａ１，Ａ２，Ａ３）実行後、データアクセス（Ａ４）が実行されるとする。データアクセス（Ａ４）では、プリフェッチにより、ブロック（９）及びその近傍ブロック（１０〜１４）のブロックが読み出される。
【００４６】
その時、メモリ領域１０１上の全ページは、メモリ領域１０１のサイズの制限のために、ディスク１０２へ書き戻される。ブロック（１、２、５）に対応するページは“使われたページ”なので、ディスク１０２に書き戻す時は、ディスク１０２上にある既存の該当ブロック（１，２，５）を“無効”にして、ディスク１０２にて使用されている領域の最後に追記される。図５Ｃに示すように、使われたページに対応するブロックが、ディスク１０２にて使用されている領域の最後にまとまって配置される。
【００４７】
このように、ディスク１０２上の領域にブロックを追記していくことで、“使われたページ”に対応するブロックがまとまって配置される。これにより、無駄読み削減と、メモリ領域の利用効率の向上が図れる。
【００４８】
図６は、本実施形態における充填率を説明するための図である。充填率とは、ディスク１０２上のブロックを読み出した場合における、その読む出したブロック中のうち“有効”なブロックの割合である。
【００４９】
図６において、プリフェッチで読み出したブロックは、５ブロックである。そのうち有効ブロックは３つのブロック（３，４，６）である。この場合、充填率＝３／５＝６０％となる。したがって、読み出したブロックのうち、無効ブロックの数が増えると充填率が下がる。
【００５０】
ブロックが有効か無効かのブロックの状態は、例えば、後述する全ブロックのレイアウト管理情報に保持されている。なお、ブロックの状態の保持の方法については、これに限定されない。
【００５１】
使われたブロックは、上述したように、既存の該当ブロックが無効にされて、使用されている領域の最後に追記される。これを繰り返すと、ディスク１０２に無効ブロックが散在し、ディスク１０２上にまとまった領域を確保しづらくなるため、充填率の値が閾値より小さい場合には、揮発性readを実行するようにする。
【００５２】
本実施形態によれば、“使われたブロック”が、ディスクの領域上にまとまって配置される。その結果として、プリフェッチによる無駄読みを削減し、メモリ領域の利用効率を向上させることができる。すなわち、プリフェッチの効率化と、メモリ領域による高速化を両立させることができる。
【００５３】
以下に、本実施形態をさらに詳述する。
図７は、本実施形態におけるデータとブロックを説明するための図である。データは、図７（Ａ）に示すように、キーと値（value）との組である。ブロックは、ディスク１０２において、アドレスで管理される管理単位である。データは、図７（Ｂ）に示すように、ディスク１０２にブロック単位で格納される。１つのブロックには、複数の組のデータが含まれる。
【００５４】
ブロック及び該ブロックに対応するページは、ブロックＩｄにより識別される。ブロックの読み出しは、ブロックＩｄを指定することにより行われる。
【００５５】
図８は、本実施形態におけるサーバのハードウェア構成を示す。サーバ１１は、制御部１２とディスク（ストレージ）２０を含む。制御部１２は、本実施形態に係るプログラムを記憶装置（不図示）から読み出して実行することにより、ディスク２０へのブロックの読み書きを行うストレージミドルウェア機能を有する。
【００５６】
ストレージミドルウェアにおける入出力（ＩＯ）のインターフェース（ＩＦ）として、例えば、“getitems_bulk(K, N)”、“setitems_bulk(N)”がある。
【００５７】
“getitems_bulk(K, N)”は、制御部１２がディスク２０からメモリ領域へブロックを読み出すＩＦである。Kは読み出し要求対象のブロックＩｄである。制御部１２は、キーKに対応するブロックとディスク上の物理配置が近くのブロックもまとめて読み出す（プリフェッチ）。Nは後述するＩＯサイズである。ＩＯサイズは、アクセスする物理配置の近傍の範囲（サイズでも、データ件数でもよい）を示し、指定された範囲で示される近傍領域にアクセスがされる。本実施例では、ＩＯサイズ（N）をブロック数で指定する。
【００５８】
“setitems_bulk(N)”は、ディスク２０へブロックを書き込むＩＦである。制御部１２は、ＩＯサイズ（N）を指定する。setitems_bulk(N)は、ＩＯサイズ（N）から書き込むブロックを決定する。
【００５９】
制御部１２は、ＩＯ実行部１３、ＩＯサイズ算出部１６、ページ管理部１７、メモリ領域１９を含む。
【００６０】
ＩＯ実行部１３は、アプリケーションからのデータアクセス（readアクセス、またはwriteアクセス）要求に基づいて、ディスク２０上のブロックにアクセスするブロック読み出しを実行する。
【００６１】
ＩＯ実行部１３は、ブロックＩＯキュー１４と、物理レイアウト管理情報１５を有する。ブロックＩＯキュー１４は、要求されたブロックのＩｄを入れるキューである。物理レイアウト管理情報１５は、ディスク２０上の各ブロックについて、そのブロックの有効・無効と、そのブロックのブロックアドレスとを管理する。
【００６２】
ＩＯ実行部１３は、“getitems_bulk(K, N)”を実行することにより、ブロック読み出しを行う。ＩＯ実行部１３は、アプリケーションからブロックへのアクセス要求があった場合、その要求されたブロックのブロックＩｄをブロックＩＯキュー１４に入れ、ブロックＩＯキュー１４から順次、ブロックＩｄを取り出して要求を実行する。
【００６３】
その際、ＩＯ実行部１３は、ＩＯサイズ算出部１６を呼び出し、読み出すブロック数（Ｎ）を取得する。Ｎは、ＩＯサイズ算出部１６がブロックＩＯキュー１４の長さ（Ｌ）と１つ前のブロック読み出し要求で算出したＩＯサイズ（Ｎ’）によって決定する値であり、１以上の値である。
【００６４】
ＩＯ実行部１３は、ブロックの読み出しの場合には、ブロックＩＯキュー１４の先頭からブロックＩｄを取り出し、物理レイアウト管理情報１５を通して、ブロックアドレスを取得し、そのブロックアドレスに基づいてディスク２０にアクセスする。
【００６５】
このとき、ＩＯ実行部１３は、指定ブロックＩｄ（Ｋ）に対応するブロックにアクセスする。それと共に、ＩＯ実行部１３は、Ｎで指定された数に従ってディスク２０上の物理配置のその近傍のブロックにアクセスし、そのアクセスしたブロックのうち、物理レイアウト管理情報で有効なブロックを返す。
【００６６】
ＩＯ実行部１３は、ブロックの読み出しの際には、通常、不揮発性readを用い、ある閾値を下回ったら揮発性readを用いる。
【００６７】
ＩＯ実行部１３は、ブロックを読み出す前に、物理レイアウト管理情報１５を参照し、充填率を算出し、充填率に基づいて、読み出し方式を揮発性readにするか、不揮発性readにするか選択する。
【００６８】
ＩＯ実行部１３は、揮発性readを選択した場合においてブロックを削除する時は、物理レイアウト管理情報１５上でそのブロックを無効にする。
【００６９】
また、ＩＯ実行部１３は、“setitems_bulk(N)”を実行することにより、メモリ領域１９上にあるページに対応するブロックのうち、Ｎで指定された数のブロックをディスク２０へ書き戻す。このとき、ＩＯ実行部１３は、後述するページ管理リスト１８上の参照カウンタの情報に従って、メモリ領域１９上にあるページに対応するブロックを、使われたブロック[used_key_value_list]と使われなかったブロック[unused_key_value_list]とに分類する。
【００７０】
[unused_key_value_list]で指定されたブロックについて、ＩＯ実行部１３は、ブロックをディスク２０に書き込む前に物理レイアウト管理情報１５を参照し、揮発性readで読み出されたか、不揮発性readで読み出されたかを確認する。すなわち、ＩＯ実行部１３は、物理レイアウト管理情報１５を参照し、当該ブロックが無効になっているか否かにより、揮発性readで読み出されたか、不揮発性readで読み出されたかを確認する。
【００７１】
ＩＯ実行部１３は、[unused_key_value_list]で指定されたブロックが不揮発readで読み出されている場合には何もしない。ＩＯ実行部１３は、[unused_key_value_list]で指定されたブロックが揮発性readで読み出されている場合、そのブロックをディスク２０への追記対象にする。
【００７２】
ＩＯ実行部１３は、[used_key_value_list]で指定されたブロックについて、既存の該当ブロックを無効にして、ディスク２０への追記対象にする。
【００７３】
ＩＯ実行部１３は、ディスク２０へ追記する対象ブロックが決定した場合、物理レイアウト管理情報１５を更新して、ディスク２０へ、決定した対象ブロックを追記する。ＩＯ実行部１３は、追記対象に関わらず、[unused_key_value_list]及び[used_key_value_list]で指定されたブロックについては、ページ管理リスト１８から削除する。
【００７４】
ＩＯサイズ算出部１６は、ブロックＩＯキュー１４に積まれた要求されたブロックＩｄの数（以下、キュー長（Ｌ））と、１つ前のブロック読み出し要求で算出したＩＯサイズ（Ｎ’）から、ＩＯサイズ（＝読み出すブロック数）（Ｎ）を算出して返す。
【００７５】
ページ管理部１７は、ページ管理リスト１８を保持する。ページ管理部１７の処理の詳細については、図１１で説明する。ページ管理リスト１８は、各ブロックの参照回数と直近でアクセスされたブロックを管理するために用いられる。
【００７６】
ページ管理リスト１８は、各ブロックの参照カウンタを持つ。ページ管理部１７は、ブロック読み出し要求があると、ページ管理リスト１８における、該当ブロックの参照カウンタをカウントアップして、当該ブロックをページ管理リスト１８の先頭に移動する。
【００７７】
図９は、本実施形態における物理レイアウト管理情報の一例を示す。物理レイアウト管理情報１５は、「ブロックＩｄ」１５−１、「有効／無効フラグ」１５−２、「ブロックアドレス」１５−３のデータ項目を含む。
【００７８】
「ブロックＩｄ」１５−１には、ディスク２０上のブロックを識別するブロックＩｄが格納されている。「有効／無効フラグ」１５−２には、ブロックＩｄで示されるブロックが有効（〇）か無効（×）かのフラグ情報が格納される。ブロックアドレス１５−３には、ブロックＩｄで示されるブロックのディスク２０上のアドレスが格納される。
【００７９】
ＩＯ実行部１３は、ブロックＩＯキュー１４に格納された先頭のブロックＩｄから順に読み出す。ＩＯ実行部１３は、物理レイアウト管理情報１５を参照し、ブロックＩＯキュー１４から読み出したブロックＩｄのブロックアドレスを取得する。ＩＯ実行部１３は、その取得したブロックアドレスの示すディスク２０上のアドレスにアクセスする。
【００８０】
図１０は、本実施形態におけるページ管理リストの一例を示す。ページ管理リスト１８は、「ブロックＩｄ」１８−１、「参照カウンタ」１８−２のデータ項目を含む。「ブロックＩｄ」１８−１には、メモリ領域１９に配置されたページに対応するブロックを識別するブロックＩｄが格納されている。「参照カウンタ」１８−２には、ブロックＩｄで示されるブロックに対応するページの参照回数が格納される。
【００８１】
ページ管理リスト１８には、より直近でアクセスされたページが、よりリストの先頭に格納される。
【００８２】
図１１は、本実施形態におけるＩＯ実行部の動作フローを示す。ＩＯ実行部１３は、ブロックＩＯキュー１４に格納されたブロックＩｄ（＝Ｋ）を、ブロックＩＯキュー１４の先頭から順に読み出すと、ブロックＩＯキュー１４に積まれた要求されたブロックＩｄの数（以下、キュー長（Ｌ））を取得する（Ｓ１）。
【００８３】
ＩＯ実行部１３は、ＩＯサイズ算出部１６を呼び出し、ＩＯサイズ（読み出すブロック数）（Ｎ）を取得する（Ｓ２）。ＩＯサイズ算出部１６は、ブロックＩＯキューの長さ（Ｌ）と、１つ前のブロック読み出しリクエストで算出したＩＯサイズ（Ｎ’）から、ＩＯサイズ（Ｎ）を決定する。キュー長（Ｌ）には、事前に閾値が設定される。Ｎの初期値は１とし、Ｌが閾値を超えている場合、例えば、Ｎ’×２倍の値を新しいＮとする（例：１，２，４，８，・・・増える）。逆に、そのＬが閾値を下回っている場合、Ｎを１／２にする（例、８，４，２，１）。Ｎの最小値は１、最大値は事前に決めた値（例えば、６４といった値）とする。
【００８４】
ＩＯ実行部１３は、ページ管理部１７を呼び出す（Ｓ３）。ページ管理部１７は、必要に応じて、メモリ領域１９からアクセス頻度の低いページをディスク２０へ書き出す。ページ管理部１７は、メモリ領域１９が満杯である場合において、ブロックを読み出す時は、まず、メモリ領域１９に保持されたページのうち、ＩＯサイズ分のページをディスク２０へ書き戻す。その書き戻し対象となるページは、ページ管理リスト１８の下位のページからＩＯサイズ分（Ｎ個）とする。その時、ページ管理部１７は、参照カウンタの値によって、使われたページと使われなかったページに分類する。ページ管理リスト１８において、参照カウンタ=0のブロックＩｄに対応するページは“使われなかったページ”であり、参照カウンタ＞0のブロックＩｄに対応するページは“使われたページ”となる。
【００８５】
ＩＯ実行部１３は、ＩＦ  getitems_bulk(K, N)を呼び出す（Ｓ４）。ＩＯ実行部１３は、指定ブロックＩｄ（Ｋ）に対応するブロックにアクセスすると共に、ＩＯサイズ（読み出すブロック数）に従ってディスク２０の物理配置上、指定ブロックＩｄ（Ｋ）近傍のブロックにもアクセスする。ＩＯ実行部１３は、そのアクセスしたブロックのうち、有効なブロックを返す。
【００８６】
ＩＯ実行部１３は、ブロックの読み出しの際には、通常、不揮発性readを用い、ある閾値を下回ったら揮発性readを用いる。ＩＯ実行部１３は、ブロックを読み出す前に、物理レイアウト管理情報１５を参照して充填率を算出し、算出した充填率に基づいて、読み出し方式を揮発性readにするか、不揮発性readにするか選択する。ＩＯ実行部１３は、揮発性readを選択した場合においてブロックを削除する時は、物理レイアウト管理情報１５上でそのブロックを無効にする。
【００８７】
図１２は、本実施形態におけるＩＦ  getitems_bulk(K, N)の動作フローを示す。呼び出されたgetitems_bulk(K, N)には、入力パラメータとして、リクエストされたブロックＩｄ（Ｋ）と、ＩＯサイズ（Ｎ）が渡される。
【００８８】
ＩＯ実行部１３は、物理レイアウト管理情報１５から、ブロックＩｄ（＝Ｋ）のブロックアドレスを取得する（Ｓ１１）。例えば、図９において、リクエストされたブロックＩｄが“１”の場合、物理レイアウト管理情報１５からブロックアドレス“１００１”が取得される。
【００８９】
ＩＯ実行部１３は、物理レイアウト管理情報１５から、充填率（Ｆ）を計算する（Ｓ１２）。例えば、図９において、ＩＯサイズ（Ｎ）＝４の場合、プリフェッチにより読み出されるブロックは、ブロックＩｄ＝１〜４の４ブロックである。この読み出された４ブロックのうち、有効／無効フラグが有効（〇）のブロックは、２ブロックであるから、充填率は、２／４＝５０％となる。
【００９０】
ＩＯ実行部１３は、充填率（Ｆ）と閾値Ｔ１とを比較する（Ｓ１３）。閾値Ｔ１は、予め記憶部に設定されている。充填率（Ｆ）＜閾値Ｔ１の場合、ＩＯ実行部１３は、read方式として揮発性readを選択し、read方式フラグＸに“１”を設定する（Ｓ１４）。充填率（Ｆ）≧閾値Ｔ１の場合、ＩＯ実行部１３は、read方式として不揮発性readを選択し、read方式フラグＸに“０”を設定する（Ｓ１５）。
【００９１】
ＩＯ実行部１３は、read方式フラグＸに設定された値に応じたread方式を用いて、ディスク２０からブロックＩｄ＝Ｋ〜Ｋ＋Ｎ−１のブロックを読み出す（Ｓ１６）。
【００９２】
read方式フラグＸ＝“１”（揮発性read）の場合、ＩＯ実行部１３は、Ｓ１６で読み出したブロックを無効化するため、物理レイアウト管理情報１５において、その読み出したブロックの有効／無効フラグを無効（×）に更新する（Ｓ１７）。
【００９３】
ＩＯ実行部１３は、Ｓ１６で読み出した有効なブロックを返す（Ｓ１８）。すなわち、ＩＯ実行部１３は、Ｓ１６で読み出したブロックのうち、Ｓ１７での更新前の物理レイアウト管理情報１５において、有効／無効フラグが有効（〇）になっているブロックを返す。ＩＯ実行部１３は、その読み出した有効なブロックに対応するページをメモリ領域１９に保持する。
【００９４】
図１３は、本実施形態におけるＩＯサイズ算出部の動作フローを示す。図１１のＳ２において、ＩＯ実行部１３により呼び出されたＩＯサイズ算出部１６は、図１３のフローを実行する。ＩＯサイズ算出部１６は、入力パラメータとして、ブロックＩＯキュー長（Ｌ）と、前回算出したＩＯサイズ（Ｎ’）をＩＯ実行部１３により受け取る。
【００９５】
ＩＯサイズ算出部１６は、ブロックＩＯキュー長（Ｌ）と閾値Ｔ２とを比較する（Ｓ２１）。閾値Ｔ２は、予め記憶部に設定されている。ブロックＩＯキュー長（Ｌ）＞閾値Ｔ２の場合、ＩＯサイズ算出部１６は、Ｎ’×２により算出した値をＮに設定する（Ｓ２２）。ここで、Ｎの最大値は事前に決められている。Ｎの最大値を例えば６４とし、それ以上大きくはしない。
【００９６】
ブロックＩＯキュー長（Ｌ）≦閾値Ｔ２の場合、ＩＯサイズ算出部１６は、Ｎ’／２により算出した値をＮに設定する（Ｓ２３）。ここで、Ｎの最小値を“１”とし、それより小さくはしない。
【００９７】
ＩＯサイズ算出部１６は、算出したＩＯサイズ（Ｎ）をＩＯ実行部１３へ返す（Ｓ２４）。
【００９８】
次に、ページ管理部１７とページ管理リスト１８について説明する。
図１４は、本実施形態におけるブロックＩｄ（Ｋ＝７）のブロックがリクエストされた場合のページ管理リストの更新例である。ブロックＩｄ＝７のブロックがリクエストされると、ページ管理部１７は、ページ管理リスト１８において、ブロックＩｄ＝７の参照カウンタをインクリメントし、ブロックＩｄ＝７のエントリをページ管理リスト１８の先頭に移動させる。
【００９９】
図１５は、本実施形態におけるgetitems_bulk(K, N)呼び出し後のページ管理リストの更新例を示す。図１５では、ブロックＩｄ（Ｋ＝１）のブロックがリクエストされ、ＩＯサイズＮ＝４、ＩＦ  getitems_bulk(１，４)、ブロックＩｄ＝［１，２，３，４］のブロックが読み出される場合について説明する。
【０１００】
ページ管理部１７は、リクエストされたブロック（ブロックＩｄ＝１）に対応するページのエントリを、ページ管理リスト１８の先頭へ配置する。また、ページ管理部１７は、ＩＯサイズ＝４指定で読み出された、リクエストされていないブロック（ブロックＩｄ＝２，３，４）に対応するページのエントリを、ページ管理リスト１８の最後に配置し、それらの参照カウンタを“０”に設定する。
【０１０１】
図１６は、本実施形態におけるページ管理部の動作フローを示す。図１１のＳ３において、ＩＯ実行部１３により呼び出されたページ管理部１７は、図１６のフローを実行する。ページ管理部１７は、入力パラメータとして、リクエストされたブロックＩｄ（Ｋ）と、ＩＯサイズ（Ｎ）をＩＯ実行部１３により受け取る。
【０１０２】
ページ管理部１７は、リクエストされたブロック（Ｋ）について、図１４及び図１５で説明したように、ページ管理リスト１８を更新する（Ｓ３１）。
【０１０３】
ページ管理部１７は、メモリ領域に保持されている全ページ数、すなわち、ページ管理リスト１８に登録されている全エントリの数を取得する（Ｓ３２）。
【０１０４】
ページ管理部１７は、Ｓ３２で取得したページ数が、メモリ領域１９に保持可能なページの最大数である場合（Ｓ３３で「Ｙｅｓ」）、次の処理を行う。すなわち、ページ管理部１７は、ＩＦ  setitems_bulk(N)を呼び出し、ＩＯサイズ分のページをメモリ領域１９からディスク２０へ書き出す（Ｓ３４）。その後、制御は、ＩＯ実行部１３へ戻る。
【０１０５】
図１７Ａ−図１７Ｃは、本実施形態におけるＩＦ  setitems_bulk(N)の動作フローを示す。ページ管理部１７により呼び出されたsetitems_bulk(N)には、入力パラメータとして、ＩＯサイズ（Ｎ）が渡される。
【０１０６】
ページ管理部１７は、ページ管理リスト１８を参照して、ＩＯサイズ（Ｎ）に基づいて対象ブロックを決定する（Ｓ４１）。ここでは、ページ管理部１７は、ページ管理リスト１８の最後からＩＯサイズ（Ｎ）分のページに対応するブロックを対象ブロックとして選択する。例えば、Ｎ＝４の場合、図１８において破線で囲んだ部分で示されるように、ページ管理リスト１８の下から４エントリで示すページに対応するブロックが対象ブロックとして選択される。
【０１０７】
ページ管理部１７は、Ｓ４１で選択された対象ブロックに対応するページを、ページ管理リスト１８の参照カウンタに基づいて、使われた（used）ページに対応するブロックと（usedブロック）、使われなかった（unused）ページに対応するブロック（unusedブロック）とに分類する（Ｓ４２）。図１８の場合、usedブロックは、ブロックＩｄ＝６のブロックであり、unusedブロックは、ブロックＩｄ＝２，３，４のブロックである。
【０１０８】
ページ管理部１７は、unusedブロックのうち追記対象となるブロックを決定する（Ｓ４３）。Ｓ４３の処理の詳細を、図１７Ｂに示す。
【０１０９】
ページ管理部１７は、物理レイアウト管理情報１５から、Ｓ４２で分類したunusedブロックのエントリを抽出する（Ｓ４３−１）。上述の例の場合（unusedブロックは、ブロックＩｄ＝２，３，４のブロック）、図１９において破線で囲んだ部分で示されるように、物理レイアウト管理情報１５から、ブロックＩｄ＝２，３，４のブロックのエントリが抽出される。
【０１１０】
ページ管理部１７は、Ｓ４３−１においてunusedブロックとして抽出されたブロックのうち、揮発性readされたブロック、すなわち、有効／無効フラグが無効であるブロックを、追記対象に決定する（Ｓ４３−２）。ここでは、Ｓ４３−１で抽出されたブロックＩｄ＝２，３，４のブロックのうち、有効／無効フラグが無効であるブロックＩｄ＝３，４のブロックが追記対象となる。後述するように、usedブロックに合わせて、unusedブロックはディスク２０に追記される。図１７Ａに戻る。
【０１１１】
ページ管理部１７は、usedブロックと合わせて、unusedブロックをディスク２０に追記する処理を行う（Ｓ４４）。Ｓ４４の処理の詳細を図１７Ｃに示す。
【０１１２】
ページ管理部１７は、Ｓ４２で分類したusedブロックと、Ｓ４３で選択された追記対象のunusedブロックに基づいて、物理レイアウト管理情報１５を更新する（Ｓ４４−１）。上記の例では、Ｓ４２で分類したusedブロックは、ブロックＩｄ＝６のブロックである。また、Ｓ４３で選択された追記対象のunusedブロックは、ブロックＩｄ＝３，４のブロックである。この場合、usedブロックについて無効にするため、ページ管理部１７は、図２０に示すように、物理レイアウト管理情報１５において、usedブロック（ブロックＩｄ＝６）の有効／無効フラグを無効（×）にする。
【０１１３】
そして、ページ管理部１７は、Ｓ４２で分類したusedブロックと、Ｓ４３で選択された追記対象のunusedブロックを、物理レイアウト管理情報１５の最後に追加する。ページ管理部１７は、図２０に示すように、旧ブロックＩｄ＝６，３，４に対応するブロックとして、新たにブロックＩｄ＝１０，１１，１２のエントリを、物理レイアウト管理情報１５の最後に追加する。このとき、追加されたエントリの有効／無効フラグは、有効（〇）となっている。
【０１１４】
ページ管理部１７は、ディスク２０にて有効なブロックが配置されている最後の領域に隣接する空き領域（または無効化された領域）へ、Ｓ４４−１において物理レイアウト管理情報１５に追加したブロックＩｄに対応するブロックを追記する（Ｓ４４−２）。すなわち、ページ管理部１７は、ディスク２０において書込まれた記憶領域のうち、物理的に一番後ろに位置する記憶領域から物理的に連続するｍ個のブロックが記憶されていない空領域（または無効化された領域）に、ｍ個のブロックを書込みする。ここで、ｍ（ｍ：整数）個のブロックとは、Ｓ４４−１において物理レイアウト管理情報１５に追加したブロックＩｄに対応するブロックのことである。
【０１１５】
ページ管理部１７は、unusedブロックとusedブロックを、ページ管理リスト１８から削除する（Ｓ４４−３）。ページ管理部１７は、ページ管理リスト１８から、Ｓ４１で決定された対象ブロック（unusedブロックとusedブロック）を削除する。図２１の場合、ページ管理リスト１８の下から４つのブロックが削除される。
【０１１６】
本実施形態によれば、“使われたブロック”がディスクの記憶領域上にまとまって配置される。また、揮発性readによりプリフェッチで読み出した複数のブロックをディスクのそれらが配置されていた領域から削除するので、物理領域上に連続した空き領域を確保することができる。その結果として、プリフェッチによる無駄読みを削減し、メモリ領域の利用効率を向上させることができる。それと共に、プリフェッチの効率化と、メモリ領域による高速化との両立を図ることができる。
【０１１７】
なお、本実施形態では、メモリ領域１９からディスク２０へページを書き戻す場合、ディスク２０にて配置された有効なブロックのうち最後の有効なブロックに隣接する空きブロック（または無効化されたブロック）へ、書き戻されるブロックを追記したが、これに限定されない。例えば、追記対象となるブロックのサイズ以上の空き領域（無効化された領域）がディスク２０内にあれば、その空き領域の直前にある有効なブロックの次の領域からそのブロックを書き込むようにしてもよい。
【０１１８】
このように、本実施形態におけるアクセス制御プログラムは、コンピュータに、次の処理を実行させる。コンピュータは、記憶領域をブロック単位で管理する記憶装置から、アクセス要求されたデータが配置されているブロック及びそのブロックと物理配置が隣接する１以上のブロックを読み出す。コンピュータは記憶装置から読み出したブロックが記憶するデータを、メモリ領域上のページに書き込む。ブロックの読み出しの際に利用可能なメモリ領域に空きページがないと、コンピュータは、アクセス状況からメモリ上のページを選択し、当該ページ内のデータをメモリ上から削除または記憶装置へ書き込む。すなわち、コンピュータは、空きページを作成する。その後、コンピュータは、ブロックを読み出し、読み出したブロックが記憶するデータを空きページに書き込む（ページ内のデータ置き換え、以下、ページ置き換え）。その時、コンピュータは、選択されたページへのアクセス状況に応じて、そのページ内のデータを読み出した記憶装置上ブロックを無効化する。ページ内のデータを記憶装置に書き込む時は、コンピュータは、ページ内のデータを読み出した記憶装置上のブロックを無効化した後、記憶装置上の連続した空き領域へ書き込む。
【０１１９】
図２２は、本実施形態におけるプログラムを実行するコンピュータのハードウェア環境の構成ブロック図の一例である。コンピュータ３０は、サーバ装置１１として機能する。コンピュータ３０は、ＣＰＵ３２、ＲＯＭ３３、ＲＡＭ３６、通信Ｉ／Ｆ３４、記憶装置３７、出力Ｉ／Ｆ３１、入力Ｉ／Ｆ３５、読み取り装置３８、バス３９、出力機器４１、入力機器４２によって構成されている。
【０１２０】
ここで、ＣＰＵは、中央演算装置を示す。ＲＯＭは、リードオンリメモリを示す。ＲＡＭは、ランダムアクセスメモリを示す。Ｉ／Ｆは、インターフェースを示す。バス３９には、ＣＰＵ３２、ＲＯＭ３３、ＲＡＭ３６、通信Ｉ／Ｆ３４、記憶装置３７、出力Ｉ／Ｆ３１、入力Ｉ／Ｆ３５、及び読み取り装置３８が接続されている。読み取り装置３８は、可搬型記録媒体を読み出す装置である。出力機器４１は、出力Ｉ／Ｆ３１に接続されている。入力機器４２は、入力Ｉ／Ｆ３５に接続にされている。
【０１２１】
記憶装置３７としては、ハードディスク、フラッシュメモリ、磁気ディスクなど様々な形式の記憶装置を使用することができる。記憶装置３７またはＲＯＭ３３には、ＣＰＵ３２をアクセス制御装置１として機能させるプログラムが格納されている。ＲＡＭ３６は、データを一時的に保持するメモリ領域を有する。
【０１２２】
ＣＰＵ３２は、記憶装置３７等に格納した上記実施形態で説明した処理を実現するプログラムを読み出し、当該プログラムを実行する。
【０１２３】
上記実施形態で説明した処理を実現するプログラムは、プログラム提供者側から通信ネットワーク４０、および通信Ｉ／Ｆ３４を介して、例えば記憶装置３７に格納されてもよい。また、上記実施形態で説明した処理を実現するプログラムは、市販され、流通している可搬型記憶媒体に格納されていてもよい。この場合、この可搬型記憶媒体は読み取り装置３８にセットされて、記憶装置３７にそのプログラムがインストールされ、インストールされたプログラムがＣＰＵ３２によって読み出されて、実行されてもよい。可搬型記憶媒体としてはＣＤ−ＲＯＭ、フレキシブルディスク、光ディスク、光磁気ディスク、ＩＣカード、ＵＳＢメモリ装置など様々な形式の記憶媒体を使用することができる。このような記憶媒体に格納されたプログラムが読み取り装置３８によって読み取られる。
【０１２４】
また、入力機器４２には、キーボード、マウス、電子カメラ、ウェブカメラ、マイク、スキャナ、センサ、タブレットなどを用いることが可能である。また、出力機器４１には、ディスプレイ、プリンタ、スピーカなどを用いることが可能である。また、ネットワーク４０は、インターネット、ＬＡＮ、ＷＡＮ、専用線、有線、無線等の通信網であってよい。
【０１２５】
なお、本実施形態は、以上に述べた実施の形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で種々の構成または実施形態を取ることができる。
【０１２６】
上記実施形態に関し、更に以下の付記を開示する。
（付記１）
コンピュータに、
第１のデータに対するアクセス要求に応じて、記憶領域がブロック単位で管理された記憶装置から、前記第１のデータを含む第１のブロックを含む連続するブロックを読み出し、
前記連続するブロックを、記憶領域をページ単位で管理するメモリ領域にロードし、
前記連続するブロックの前記メモリ領域へのロードにより、該メモリ領域から押し出されたページに対応する前記記憶装置の前記ブロックを、該メモリ領域における該ページへのアクセス状況に応じて無効化すると共に、無効化した前記ブロックに対応する前記押し出されたページである第２のデータを前記記憶装置の連続した空き領域へ書き込む、
処理を実行させることを特徴とするアクセス制御プログラム。
（付記２）
前記書き込みにおいて、前記押し出されたページのうち、前記メモリ領域にてアクセスされた前記ページに対応する前記記憶装置の前記ブロックを無効化する
ことを特徴とする付記１に記載のアクセス制御プログラム。
（付記３）
前記読み出しにおいて、前記記憶装置から前記連続するブロックを読み出して前記メモリ領域にロードする第１読出方法と、該第１読出方法を行うと共に前記記憶装置の前記連続するブロックを無効化する第２読出方法と、のうちいずれかの読出方法を用いて前記連続するブロックを読み出し、
前記書き込みにおいて、前記第２のデータが前記メモリ領域にてアクセスされたページである場合、前記メモリ領域にてアクセスされていないページであって、前記無効化したブロックに対応する前記押し出されたページである第３のデータを、前記第２のデータと共に、前記空き領域へ書き込む
ことを特徴とする付記２に記載のアクセス制御プログラム。
（付記４）
前記読み出しにおいて、前記連続するブロックのうち、有効なブロックの割合に応じて、前記第１読出方法と、前記第２読出方法とのうちいずれかの読出し方法を選択する
ことを特徴とする付記３に記載のアクセス制御プログラム。
（付記５）
第１のデータに対するアクセス要求に応じて、記憶領域がブロック単位で管理された記憶装置から、前記第１のデータを含む第１のブロックを含む連続するブロックを読み出す読出部と、
前記連続するブロックを、記憶領域をページ単位で管理するメモリ領域にロードするロード部と、
前記連続するブロックの前記メモリ領域へのロードにより、該メモリ領域から押し出されたページに対応する前記記憶装置の前記ブロックを、該メモリ領域における該ページへのアクセス状況に応じて無効化すると共に、無効化した前記ブロックに対応する前記押し出されたページである第２のデータを前記記憶装置の連続した空き領域へ書き込む書込部と、
を備えることを特徴とするアクセス制御装置。
（付記６）
前記書込部は、前記押し出されたページのうち、前記メモリ領域にてアクセスされた前記ページに対応する前記記憶装置の前記ブロックを無効化する
ことを特徴とする付記５に記載のアクセス制御装置。
（付記７）
前記読出部は、前記記憶装置から前記連続するブロックを読み出して前記メモリ領域にロードする第１読出方法と、該第１読出方法を行うと共に前記記憶装置の前記連続するブロックを無効化する第２読出方法と、のうちいずれかの読出方法を用いて前記連続するブロックを読み出し、
前記書き込みにおいて、前記第２のデータが前記メモリ領域にてアクセスされたページである場合、前記メモリ領域にてアクセスされていないページであって、前記無効化したブロックに対応する前記押し出されたページである第３のデータを、前記第２のデータと共に、前記空き領域へ書き込む
ことを特徴とする付記６に記載のアクセス制御装置。
（付記８）
前記読出部は、前記連続するブロックのうち、有効なブロックの割合に応じて、前記第１読出方法と、前記第２読出方法とのうちいずれかの読出し方法を選択する
ことを特徴とする付記７に記載のアクセス制御装置。
（付記９）
コンピュータが、
第１のデータに対するアクセス要求に応じて、記憶領域がブロック単位で管理された記憶装置から、前記第１のデータを含む第１のブロックを含む連続するブロックを読み出し、
前記連続するブロックを、記憶領域をページ単位で管理するメモリ領域にロードし、
前記連続するブロックの前記メモリ領域へのロードにより、該メモリ領域から押し出されたページに対応する前記記憶装置の前記ブロックを、該メモリ領域における該ページへのアクセス状況に応じて無効化すると共に、無効化した前記ブロックに対応する前記押し出されたページである第２のデータを前記記憶装置の連続した空き領域へ書き込む、
ことを特徴とするアクセス制御方法。
（付記１０）
前記書き込みにおいて、前記押し出されたページのうち、前記メモリ領域にてアクセスされた前記ページに対応する前記記憶装置の前記ブロックを無効化する
ことを特徴とする付記９に記載のアクセス制御方法。
（付記１１）
前記読み出しにおいて、前記記憶装置から前記連続するブロックを読み出して前記メモリ領域にロードする第１読出方法と、該第１読出方法を行うと共に前記記憶装置の前記連続するブロックを無効化する第２読出方法と、のうちいずれかの読出方法を用いて前記連続するブロックを読み出し、
前記書き込みにおいて、前記第２のデータが前記メモリ領域にてアクセスされたページである場合、前記メモリ領域にてアクセスされていないページであって、前記無効化したブロックに対応する前記押し出されたページである第３のデータを、前記第２のデータと共に、前記空き領域へ書き込む
ことを特徴とする付記１０に記載のアクセス制御方法。
（付記１２）
前記読み出しにおいて、前記連続するブロックのうち、有効なブロックの割合に応じて、前記第１読出方法と、前記第２読出方法とのうちいずれかの読出し方法を選択する
ことを特徴とする付記１１に記載のアクセス制御方法。
【符号の説明】
【０１２７】
１０１  メモリ領域
１０２  ディスク
１０３  キュー
１      アクセス制御装置
２      読出部
３      ロード部
４      書込部
５      記憶装置
１１    サーバ
１２    制御部
１３    ＩＯ実行部
１４    ブロックＩＯキュー
１５    物理レイアウト管理情報
１６    ＩＯサイズ算出部
１７    ページ管理部
１８    ページ管理リスト
１９    メモリ領域
２０    ディスク
【図１】
2016038907.tif 000003
【図２】
2016038907.tif 000004
【図３Ａ】
2016038907.tif 000005
【図３Ｂ】
2016038907.tif 000006
【図４】
2016038907.tif 000007
【図５Ａ】
2016038907.tif 000008
【図５Ｂ】
2016038907.tif 000009
【図５Ｃ】
2016038907.tif 000010
【図６】
2016038907.tif 000011
【図７】
2016038907.tif 000012
【図８】
2016038907.tif 000013
【図９】
2016038907.tif 000014
【図１０】
2016038907.tif 000015
【図１１】
2016038907.tif 000016
【図１２】
2016038907.tif 000017
【図１３】
2016038907.tif 000018
【図１４】
2016038907.tif 000019
【図１５】
2016038907.tif 000020
【図１６】
2016038907.tif 000021
【図１７Ａ】
2016038907.tif 000022
【図１７Ｂ】
2016038907.tif 000023
【図１７Ｃ】
2016038907.tif 000024
【図１８】
2016038907.tif 000025
【図１９】
2016038907.tif 000026
【図２０】
2016038907.tif 000027
【図２１】
2016038907.tif 000028
【図２２】
2016038907.tif 000029