2016-08-04 10 views
1

この件に関して他のスレッドはほとんどありませんが、明確な答えが見つかりませんでした。スワップパーティションを持たない仮想メモリ

Linuxでは、セカンダリI/Oデバイス(HDD、SSDなど)がなくても、ページングを実行するスワップパーティションがない場合、仮想メモリはどのように機能しますか?

私は私の例を挙げる:スワップパーティションやセカンダリストレージを持たない組み込みターゲットで(initramfsから)カスタムディストリビューションを実行しています。 topでは、実行中のプロセスが物理アドレス(RSS)よりも多くの仮想アドレス(VIRT)を消費していることがわかります。 500MBと20MB。

VIRTとRSSの違いは、割り当てられたメモリだけですが、アクセスされたことがない(したがって、OSによってはマップされない)のですか? (メモリオーバーコミットメント)

私は、仮想メモリが動作するためにページング(スワップについては話しません)が必要だと思っていましたが、私が間違っていたと思い始めています(Linuxメモリ管理については、

このような構成でPage Faultがoom-killerを体系的に呼び出すのは意味しますか?

乾杯

+0

これはプログラミングよりもコンピュータサイエンスの問題です。そのための別のサイトがありますが、これは[Unix and Linux](// unix.stackexchange.com)サイトのほうがよいでしょう。要するに、より多くのバーチャル> RAM +スワップを使用している場合は、オーバーコミットが原因です。あなたの場合、スワップ== 0が、不等式にプラグインするだけです。測定では、プロセスごとに共有セグメント(プログラムテキストなど)が数えられ、単純に追加されます。それも数字を押し出すだろう。 –

答えて

0

次の2つの異なる概念の混同に苦しんでいるように聞こえる:仮想メモリと論理アドレス変換。

論理アドレス変換(論理メモリ)では、CPUは各プロセスに一意の線形アドレス空間を提示します。オペレーティングシステムは、論理アドレスを物理メモリに変換する一連のページテーブルを管理します。

仮想メモリは、セカンダリストレージデバイスを使用して物理メモリをシミュレートするプロセスです。仮想メモリは、論理アドレスに対応する物理アドレスがない状況を処理します。

悲しいことに、ほとんどのプロセッサのドキュメントはこれらの2つの用語を組み合わせています。

仮想メモリには2次ストレージが必要です。論理メモリはそうではありません。したがって、セカンダリストレージがない場合は、論理メモリの変換を行うことができます。そのような翻訳は、技術的に「論理的」である場合、「仮想」と呼ばれることになります。

+0

ありがとう、私はついにそれを得ました!あなたは正しいです、私は2つの概念が実際に同じであると考えました。 – kashikai

+0

* "ほとんどのプロセッサのドキュメンテーションは、それらの2つの用語を組み合わせています" * - 私は間違ったソースを "非難している"と思う。私の古い大学の教科書(1970年頃)とさらに最近の技術記事は同じです。それはおそらくあなたが言及するよりも広く普及し、確立されています。あなたが書いたのと同じコンセプトを推進するのはマイクロソフト(そしてその同僚)です。 – sawdust

3

仮想メモリはプロセスがそのメモリ空間で見ているものばかりです。これは、多くのものが含まれます。

  • 実際に使用されるRAM
  • スワップメモリ​​
  • メモリマップされた実際のファイル
  • メモリマッピングされたデバイスを
  • コピー・オン・ライト大mallocを
  • をするために使用され、匿名mmapsを
  • フォークされたプロセスからのコピーオンライトメモリ
  • 共有メモリ
  • ロード済みプロセス間で共有されるライブラリ

実際のファイルからのスワップされたページとmmapedページだけが、ページフォールト時にディスクにヒットする必要があります。

2つのプロセスがlibcを共有する場合、それらは直ちにVIRT> RSSを持ち、過剰なコミットメントはありません。

関連する問題