質問

Linux noobの質問:

500MBのRAMと500MBのスワップスペースがある場合、OSとプロセスは1GBのメモリを使用できますか?

つまり、プログラムとOSが使用できるメモリの合計量は、物理メモリサイズとスワップサイズの合計ですか?

どのSNMPカウンターを照会するかを把握しようとしていますが、最初にLinuxが仮想メモリをどのように使用するかを少し理解する必要があります。

ありがとう

役に立ちましたか?

解決

はい、これは本質的に正しいです。実際の数は(非常に)わずかに少ないかもしれませんが、すべての意図と目的のために、 x 物理メモリと y 仮想メモリ(Linuxではスワップ)がある場合、 x + y メモリをオペレーティングシステムおよびOSの下で実行されているプログラムで使用できるようにします。

他のヒント

実際には、それは本質的に正しいですが、あなたの「仮想」はメモリは、「物理メモリ」のにはありません。 (マシュー・シャーリーが述べたように)。

あなたの「仮想メモリ」 「物理」と「物理」の両方をカバーする抽象化レイヤーです。 (RAMの場合)および「スワップ」 (ハードディスクと同様に、もちろんRAMと同じくらい物理的です)メモリ。

仮想メモリは本質的に抽象化レイヤーです。あなたのプログラムは常に「仮想」に対応しています。アドレスは、データが存在する場所に応じて、OSがRAMまたはディスク(最初にRAMにロードする必要がある)のアドレスに変換します。したがって、プログラムはメモリ不足を心配する必要はありません。

これほど簡単なものはもうありません...

メモリページは遅延的に割り当てられます。プロセスは、大量のメモリをmalloc()し、使用することはできません。したがって、500MB_RAM + 500MB_SWAPシステムでは、少なくとも理論的には、ヒープから2ギガのメモリを割り当てることができ、そのメモリを使いすぎないようにするまで問題なく動作します。 (この時点で、より多くのメモリページを取得できなかったプロセスはすべて無効になります。うまくいけば、それは私のプロセスです。しかし、常にではありません。)

32ビットシステムのハードアドレス制限として、個々のプロセスは4ギガに制限される場合があります。マシンに4ギガバイト以上のRAMがあり、地獄のアドレス指定スキームから奇妙なセグメント化された36ビットの残虐行為を使用している場合でも、個々のプロセスは4ギガバイトに制限されています。その4つのギグの一部は、共有ライブラリとプログラムコードのために行かなければなりません。そのため、ADDRESSINGの制限として、スタックとヒープの2〜3ギガまで減らします。

ファイルをmmapすることで、より多くのメモリを効率的に使用できます。基本的に追加のスワップとして機能します。つまりプログラムのバイナリコードデータをメモリにロードしてから、swapfileにスワップアウトするのではなく、ファイルは単にmmappedされます。必要に応じて、ページはファイルから直接RAMにスワップされます。

スパースデータとmmappedスパースファイルを使用して、興味深いものを入手できます。 X-windowsが大量のメモリ使用量を要求するのを見たことがありますが、実際にはほんの少ししか使用していませんでした。

ところで:" 無料"あなたを助けるかもしれません。おそらく" cat / proc / meminfo "または / proc / $ PID / status Vm 行。 (特に VmData および VmStk 。)または" $ PIDを上げる"

ほとんどの場合それは本当ですが、完全には正しくありません。特定のプロセスでは、それを実行する環境によって、プロセスで使用可能なメモリが制限される場合があります。 ulimit -v の出力も確認してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top