web-dev-qa-db-ja.com

Linuxの/ proc / id / mapsを理解する

組み込みLinuxアプリケーションのメモリ使用量を理解しようとしています。 /proc/pid/mapsユーティリティ/ファイルは、詳細を確認するのに適したリソースのようです。残念ながら、すべての列とエントリが理解できるわけではありません。

匿名iノード0エントリとはどういう意味ですか?これらは、いくつかの大きなメモリセグメントのようです。

136
simon

/proc/$PID/mapsの各行は、プロセスまたはスレッド内の連続した仮想メモリの領域を示します。各行には次のフィールドがあります。

address           perms offset  dev   inode   pathname
08048000-08056000 r-xp 00000000 03:0c 64593   /usr/sbin/gpm
  • address-これは、プロセスのアドレス空間内の領域の開始アドレスと終了アドレスです。
  • 許可-これは、リージョン内のページへのアクセス方法を説明します。読み取り、書き込み、実行、共有の4つの異なるアクセス許可があります。読み取り/書き込み/実行が無効になっている場合、r/w/xの代わりに-が表示されます。リージョンがsharedではない場合、privateであるため、pの代わりにsが表示されます。プロセスが許可されていない方法でメモリにアクセスしようとすると、セグメンテーションフォールトが生成されます。権限は、mprotectシステムコールを使用して変更できます。
  • offset-リージョンがファイルからマップされた場合(mmapを使用)、これはマッピングが開始されるファイル内のオフセットです。メモリがファイルからマップされていない場合、それは0です。
  • device-リージョンがファイルからマップされた場合、これはファイルが存在するメジャーおよびマイナーデバイス番号(16進数)です。
  • inode-リージョンがファイルからマップされた場合、これはファイル番号です。
  • pathname-リージョンがファイルからマップされた場合、これはファイルの名前です。匿名のマップされた領域の場合、このフィールドは空白です。 [heap][stack]、または[vdso]などの名前の特別な領域もあります。 [vdso]は、仮想動的共有オブジェクトを表します。システムコールがカーネルモードに切り替えるために使用します。 これについての良い記事は次のとおりです: "linux-gate.so.1とは?"

多くの匿名地域に気付くかもしれません。これらは通常mmapによって作成されますが、どのファイルにも添付されません。これらは、ヒープに割り当てられていない共有メモリやバッファなど、さまざまなものに使用されます。たとえば、pthreadライブラリは、新しいスレッドのスタックとしてマップされた匿名領域を使用すると思います。

234
Jay Conrod

メモリマッピングは、ファイルをメモリにマップするために使用されるだけでなく、カーネルからRAMを要求するツールでもあります。これらはiノード0のエントリです-スタック、ヒープ、bssセグメントなど

8
Xeor

確認してください: http://man7.org/linux/man-pages/man5/proc.5.html

address           perms offset  dev   inode       pathname
00400000-00452000 r-xp 00000000 08:02 173521      /usr/bin/dbus-daemon

アドレスフィールドは、マッピングが占めるプロセス内のアドレス空間です。

Permsフィールドは一連の許可です:

 r = read
 w = write
 x = execute
 s = shared
 p = private (copy on write)

オフセットフィールドは、ファイルへのオフセットです。

devはデバイス(メジャー:マイナー)です。

inodeはそのdevice.0のinodeです。BSS(未初期化データ)の場合のように、inodeはメモリ領域に関連付けられていないことを示します。

パス名フィールドは通常、マッピングをサポートしているファイルになります。 ELFファイルの場合、ELFプログラムヘッダーのオフセットフィールド(readelf -l)を調べることで、オフセットフィールドと簡単に調整できます。

Linux 2.0では、パス名を指定するフィールドはありません。

5
cahit beyaz