解決策 1:
要するに:
-
仮想サイズ: プロセスが管理しているアドレス空間の量です。仮想アドレス空間には、プロセスがポインタ (メモリ アドレス参照) を介してアクセスできるすべてのものが含まれます。たとえば、プログラムがビデオ カードのフレームバッファにアクセスする場合、そのメモリはプロセスの仮想空間にマップされ、ポインタに格納されているアドレスを受け取ります。メモリ マップ ファイルと匿名マッピングも、仮想アドレス空間のサイズに含まれます。ほとんどすべてが仮想サイズです。
03
に記載されているすべてのアドレス範囲のサイズを合計すると、 、仮想サイズとほぼ同じ値が返されるはずです。 -
居住者の規模: 現在メモリに常駐しているプロセスに特に属するメモリの量です。つまり、スワップにないメモリの量です。プロセスの実行中であっても、プロセスの一部がスワップ メモリに存在する可能性があることに注意してください。オペレーティング システムは、プロセスがアクセスしようとすると、これらの領域をスワップからプルします。これには、ヒープ、すべてのスレッドのスタック、およびその他のプライベート マッピングを含める必要があります。
12
を見ると 、20
、34
およびその他の匿名マッピング (ファイル パスのないもの) は、スワップされるか、常駐サイズで考慮されます。 -
共有サイズ: 複数のプロセスに属する可能性があるメモリの量です。たとえば、メモリにロードされた同じアプリケーションの 4 つのインスタンスがある場合、ヒープの 4 つのインスタンスと少なくとも 4 つのスタック (プロセスごとに 1 つ) があります (これは常駐メモリです)。プログラムとそのライブラリのバイナリ コード。こちらは共有スペース。プログラム バイナリ コードとそのライブラリだけでなく、ローカライズ ファイル、読み取り専用プログラム データ、SysV および POSIX 共有メモリ セグメント、セマフォなども含まれます。 、ライブラリおよびプログラム ファイルに関連付けられたほとんどのマッピングは共有されます。
VIRT には RSS と SHR の結合が含まれており、常にそれらのいずれよりも大きいことに注意してください。 RSS と SHR の両方として説明される地域があるかもしれません。
解決策 2:
ジュリアーノの答え:
<ブロック引用>RSS + SHR <=VIRT であることに注意してください。
これは誤りです。SHR には、他のプロセスと共有できるすべての仮想メモリが含まれており、RSS には、プロセスによって使用される RAM 内のすべてのメモリが物理的に含まれています。
したがって、現在 RAM にあるすべての共有メモリは SHR と RSS の両方でカウントされるため、SHR + RSS は重複カウントを含む可能性があるため意味がありません。
RSS + SHR> VIRT でプロセスを構築するには、大きなファイル (1GB) を mmap してから完全に読み取ります。mmap されたファイルは RAM にロードされ、VIRT、SHR、RSS はそれぞれ 1GB よりわずかに大きくなるため、SHR は+ RSS> VIRT。