• 締切済み

ページキャッシュとは?

ページキャッシュについてお聞きします。 「ページング方式」でwikiで調べましたところ以下の様にかかれてます。 「使われていない物理ページには、スワップ領域以外のファイルに対応するページキャッシュと何とも対応していない完全な未使用ページがある。」 スワップ領域以外のファイルって何なんでしょうか? スワップ領域にはプロセスとそれに必要なファイルだけがロードされるということでしょうか? ファールデータ(例えば、mp3ファイル)などはページキャッシュにロードされるのでしょうか?

みんなの回答

  • notnot
  • ベストアンサー率47% (4847/10260)
回答No.3

>ハードディスクの中のデータをスワップ領域に移して、 >そして、スワップ領域に収まったデータをメインメモリに移してプログラムなどを実行してるのでしょうか?順番がおかしいでしょうか。。この辺が自分の中で曖昧です。 違います。 スワップ領域は、必要なメモリ量>物理メモリ量 の時にその差分を保存する場所です。もし、十分な物理メモリがあればスワップ領域は不要です。 例えば、デスクトップ用途でブラウザ・メーラー程度の利用しかしないのであれば、1~2GBも物理メモリがあればスワップ領域無しで良いです。 ディスクキャッシュは仮想記憶の仕組みとは全く関係ありません。 wikiの記述は間違いではありませんが、「ページング方式」の説明の中にわざわざ書くことではありませんね。「物理メモリ」の説明の中になら良いのですが。 キャッシュについて原理的な説明をすると、プログラムがファイルを読み込む場合、ディスク上のファイルはまず「バッファ」と呼ばれる物理メモリ領域に読み込まれ、それからプログラムのメモリ空間にコピーされます。このコピーが終わったバッファを解放せずに、「あとでまた中身が見たいかもしれない」という理由でそのままにしたものが「キャッシュ」です。もう一度そのファイルを読みこむ場合に、ディスクから再度読む必要が無くなります。またそのファイルを更新する場合はキャッシュを更新してからディスクに書きこむので、さらに再度更新後のデータを読む場合もキャッシュだけ見ればいいです。 実際の仕組みは効率化のためにさらに工夫されているので、かならずしも上述の動きをするわけではありませんが、概念的には同じです。

deepest
質問者

補足

回答ありがとうございます。 >キャッシュについて原理的な説明をすると、プログラムがファイルを読み込む場合、ディスク上のファイルはまず「バッファ」と呼ばれる物理メモリ領域に読み込まれ、それからプログラムのメモリ空間にコピーされます。 上述で言われているプログラムとはOS以外のプログラムのことですか?またファイルとはプログラムファイル以外のmp3やtxtなどのデータのことでしょうか?

  • Donotrely
  • ベストアンサー率41% (537/1280)
回答No.2

>スワップ領域以外のファイルって何なんでしょうか? wikiが正しいかどうかは別にして、wikiを読む限り、 かつて、必要があり物理ページ上に読み込んだ 実行ファイル(とそれが依存するライブラリ群) が、その後用が済んで不要になったが、そのまま残してあるもの、 と解釈されます。 そしてこれをページキャッシュと呼ぶ、とあります。 >スワップ領域にはプロセスとそれに必要なファイルだけがロードされるということでしょうか? デマンドページング方式においては、基本的にはそうです。 しかしページキャッシュに残っている場合はロードせずにこれを使うようです。 >ファールデータ(例えば、mp3ファイル)などはページキャッシュにロードされるのでしょうか? ページキャッシュというのは、用があって物理ページに読み込んだものを、 用が済んだ後もそのまま残地してある状態を指すみたいですから、 少くとも 「ページキャッシュにロード」 という表現はおかしいと思います。 mp3は単なるデータですので、実行ファイル(プレーヤetc.)により読み出されて参照される時は、 物理ページ上に運ばれると思います。でもファイルそのものじゃないかもしれません。 あくまでもmp3ファイルから読み出した断片データかもしれません。 っで、これがもし用が済んだ後も物理メモリ上に残っていたら、 その後再利用される可能性は0ではないと思います。 でもそういうことはあまりないと思います。 再利用される確率が高いのは.dllなどではないでしょうか?

deepest
質問者

お礼

回答ありがとうございます。 <その後用が済んで不要になったが、そのまま残してあるもの、  と解釈されます。  そしてこれをページキャッシュと呼ぶ、とあります。 この部分大変参考になります。 基本的に仮想記憶システムでは ハードディスクの中のデータをスワップ領域に移して、 そして、スワップ領域に収まったデータをメインメモリに移してプログラムなどを実行してるのでしょうか?順番がおかしいでしょうか。。この辺が自分の中で曖昧です。

  • kusa_mochi
  • ベストアンサー率76% (1599/2089)
回答No.1

あるプロセスが動く際には、共有ライブラリだったりデータファイルだったり、色々な外部ファイルを読む必要が有ると思うが、それらがメモリ上にキャッシュされたものではないだろうか。 Windows系のユーザーなら、ディスクキャッシュと言えば理解できるだろうか。 逆にスワップ領域に対応するページというのは、ワーキングセットだったページではないかと思われる。 >スワップ領域にはプロセスとそれに必要なファイルだけがロードされるということでしょうか?  これは違うのではないかな。  スワップ領域はあくまでプロセスのワーキングセットの中で、HDDに退避させられた部分が置かれる領域だと思うので、データファイル等を読み込んだ場合はページキャッシュに置かれてプロセスからそのキャッシュを参照しているのだと思う。 >ファールデータ(例えば、mp3ファイル)などはページキャッシュにロードされるのでしょうか?  それで解釈は合っているのではないかと。

deepest
質問者

お礼

回答ありがとうございます。まだ自分は基本的なことがよくわかってないのでちゃんとつめて行きたいと思います。大変参考になりました。ありがとうございます。

関連するQ&A

  • 仮想記憶の仕組み

    仮想記憶の仕組みでスワップ領域には分割したプロセスが置かれ、セグメント番号が付けられたりします。 もし、必要なプロセスの一部分がメインメモリにない場合このスワップ領域からメインメモリにロードしないといけませんよね。 そこで補助記憶装置上の スワップ領域にある必要とするプロセスの一部分を、探し出すとき、ファイルシステム(FAT)を使うのでしょうか? またそれならクラスタ番号とセグメント番号は対応されて管理されてるのでしょうか。

  • SE初心者の質問(ページング編)

    仮想メモリと実メモリの間のやりとりを ページングというと思いますが、 私の持っている書籍には、 「実メモリ」と「仮想メモリ」を部分的にスワップしながら プログラムを実行する。 Windowsは、仮想記憶の仕組みが「ページング方式」である。 と書いています。 もう、質問内容がおわかりかもしれませんが、 「ページング」と「スワップ」の違いがわかりません。 IT用語辞典でも、スワップはプロセス単位で ページングはページ単位、と書いていますが、 やっていること(目的)は同じようにみうけられます。 どのような使い分けがなされているのでしょうか? また、各々の仕組みも違うのでしょうか?

  • backing storeって何ですか?

    『UNIXのカーネル』という書籍の、カーネルのページングの解説部分に >フォ-ルトハンドらは、対応するページを物理メモリ内で見つけられなかった >場合、新しいページを割り当てて0で初期化するか、あるいは2次記憶装置から >データを読み出して初期化する。 後者の場合、実行ファイル、共有ライブラリ >・オブジェクト・ファイル、またはスワップ領域に保存されたコピーから読み出 >すページが選択される。 これらのオブジェクトはプロセスのページに対する >バッキングストア(backing store)を構成している。 とあったのですが、バッキングストアが何をする場所のなのかが書いていないのでわかりません。 Webも探したのですが、これといった答えを見つけられませんでした。 どなたかご存知の方がいらっしゃいましたら教えてくださいm(_ _)m

  • 物理メモリとページファイル及びスワップについて

    参考サイト:http://www.atmarkit.co.jp/fwin2k/win2ktips/076pgfilesize/076pgfilesize.html メモリについて調べていて疑問に思ったことがあるので質問させてもらいます。 ・今まで仮想メモリというのは物理メモリの不足を補うために適時HDDに確保された領域(ページファイル)のみを示す用語だと認識していたのですが、そうではなく「仮想メモリ=物理メモリ+ページファイル」という実質使用可能なメモリの総量という意味の言葉ですか? ・例えば1GBや2GBなど、十分な物理メモリがあるとき、トータルで使用されるメモリがそれよりも少ないならば、HDDに領域を確保しない。つまり物理メモリを超えそうになったときに初めてページファイルは作成され、物理メモリで足るようになれば解放されるものだと思っていました。しかし、参考サイトを読んだ限りでは「ページファイルは必要に応じて生成されるのではなく、恒常的に存在し、使用頻度の低いデータはメモリにいくら空きがあったとしてもスワップされる。」と認識しました。必要に応じてページファイルが適時拡張されるのはいいのですが、ページファイルはどんなに物理メモリが使用状況に対して十分でも常に存在するものなのですか?また、物理メモリが十分に足りていても使われないデータはスワップアウトされてしまいますか? ・ページファイルはデフォルトで物理メモリの1.5倍の大きさがあるらしいのですが、当然このファイルがHDD上にとった領域は別のファイル(.txtなど)の保存領域としては利用できませんよね? 長くなりましたが、以上4点についてご教授お願いします。説明不足がありましたら追記しますのでよろしくお願いします。

  • プロセスについて

    アプリを起動するとプロセスが発生すると思うのですが、そのプロセスはまず仮想メモリアドレス空間に待機しその後物理メモリにて処理され、いっぱいだった場合はページングファイルが使われると思います。 その場合、1つのアプリでのプロセスが物理メモリとページングファイルに分かれることはあるのでしょうか?

  • プロセスと仮想メモリについて

    プロセスと仮想メモリについて こんばんは。 プロセスについて勉強しています。 その過程で、「プロセスは物理メモリーとは切り離された仮想メモリーにアクセスする。 仮想メモリーはひとつのプロセスに対して4Gバイト割り当てられる。」 とありました。 今まで仮想メモリーと言うのは、ページングファイル(物理メモリの代わりに使用される ハードディスクの領域)のことだと思っていましたが、この仮想メモリーと、プロセスを 語る上での仮想メモリーとは別物なのでしょうか? 宜しくお願いいたします。

  • Memory Boosterの表示の読み方。残り物理メモリが41%もあるのに、残りページファイルが36%も消費されている。

    XPのホームエディション、物理メモリは256MBの者です。 「Memory Booster」というソフトを、試用で使っています。メインの窓の下の方に、「仮想メモリ状態」という項目があります。その中には、「残り物理メモリ」「残りページファイル」「残り仮想メモリ」の3つの項目があります。 たとえば今なら、「残り物理メモリ」が41%で、「残りページファイル」が64%と表示されています。これの意味が分かりません。 私の理解では、「ページファイル」とは、「物理メモリがゼロになってからスワップアウトが起こって使用される領域」となっています。なのに、物理メモリが41%も残っているのに、ページファイルが36%も消費されているのは、納得がいきません。ちなみに、私のPCは、ページファイルを、382MB確保しています。 私の理解がおかしいのでしょうか? どなたか指摘してください。お願いします。

  • ウェブのキャッシュが残っている可能性のあるページ(Google以外で)

    ウェブのキャッシュが残っている可能性のあるページ(Google以外で) バグで掲示板のデータが消えてしまいました。 数か月前にバックアップを取ってあったので、 そこから今までのキャッシュを探しています。 データファイル自体は xxx.dat と一つのファイルなのですが、 ↓のような形で表示していたので、 xxx.cgi に最初の20件 xxx.cgi?page=1 だと21件~40件 xxx.cgi?page=2 だと41件~60件 xxx.cgi?page=3 だと61件~80件 Googleだと、別ページ扱いでキャッシュが見つかりました。 Googleで出てきたものは拾い切りましたので、 Google以外でそういう、ウェブ上にあるものを自動的にキャッシュを 残しているサイトがあれば、教えてください。

  • 特定のプロセスだけディスクへのスワップを禁止する方法はありますか?

    OSはWinXP Proです。下記の2つの投稿を踏まえて質問いたします。 http://okwave.jp/qa2418975.html http://okwave.jp/qa2821850.html 物理メモリ上のデータがあふれた場合や、あまり頻繁に使わなさそうなデータはOSが選択的にディスク上の仮想メモリへスワップアウトするわけですが、このときに特定のプロセスのデータだけスワップアウトしないようにする事はできますか? すなわち、スワップアウトするデータをOSに任せずに自分で選ぶ事は可能ですか? 目的は、特定のアプリケーションだけ頻繁に使うので、そのアプリのデータだけスワップさせたくないという事です。現状で、自分のPCは1.5Gのメモリを積んでいて、タスクマネージャのコミットチャージで見ると900Mぐらいしか使っていません。600Mもあれば、ひとつのアプリのプロセスを載せるには十分だと思います。 仮想メモリの設定でページングファイルを作らない、とすれば全てのデータは物理メモリ上におけるのでしょうが、それだとメモリを恐ろしく積まねばならず、非効率です。 ということなんですが、よろしくお願いします。

  • Apache 2.2のmod_cacheについて

     DBからのデータを表示するPHPのページが重たく、ページをすべてロードするのに5秒以上かかるので、Apache側でキャッシュすることにしました。  バーチャルホスト ディレクティブに以下のように設定したところ、ページにアクセスすると/path/to/cacheにファイルが作られるようにはなったものの、依然としてロード時間に変化はありませんでした。 CacheRoot /path/to/cache CacheEnable disk / CacheIgnoreCacheControl On  その後試行錯誤して、以下の内容も追加してみたのですが、ページのロード時間が短縮されることはありませんでした。 CacheIgnoreNoLastMod On CacheIgnoreURLSessionIdentifiers jsessionid PHPSESSID CacheDirLevels 5 CacheDirLength 2 CacheDefaultExpire 86400 CacheMaxExpire 172800  何かおかしな所や足りないところ等ありましたらご教示ください。  宜しくお願い致します。