GNU/Linux >> Belajar Linux >  >> Linux

Memahami Linux /proc/id/maps

Setiap baris di /proc/$PID/maps menggambarkan wilayah memori virtual yang berdekatan dalam suatu proses atau utas. Setiap baris memiliki bidang berikut:

address           perms offset  dev   inode   pathname
08048000-08056000 r-xp 00000000 03:0c 64593   /usr/sbin/gpm
  • alamat - Ini adalah alamat awal dan akhir wilayah di ruang alamat proses
  • izin - Ini menjelaskan bagaimana halaman di wilayah tersebut dapat diakses. Ada empat izin berbeda:baca, tulis, jalankan, dan bagikan. Jika baca/tulis/eksekusi dinonaktifkan, - akan muncul sebagai pengganti r /w /x . Jika suatu wilayah tidak dibagi , ini pribadi , jadi p akan muncul sebagai pengganti s . Jika proses mencoba mengakses memori dengan cara yang tidak diizinkan, kesalahan segmentasi dihasilkan. Izin dapat diubah menggunakan mprotect panggilan sistem.
  • offset - Jika wilayah dipetakan dari file (menggunakan mmap ), ini adalah offset dalam file tempat pemetaan dimulai. Jika memori tidak dipetakan dari file, itu hanya 0.
  • perangkat - Jika wilayah dipetakan dari file, ini adalah nomor perangkat mayor dan minor (dalam hex) tempat file berada.
  • inode - Jika wilayah dipetakan dari sebuah file, ini adalah nomor filenya.
  • nama jalur - Jika wilayah dipetakan dari sebuah file, ini adalah nama filenya. Kolom ini kosong untuk wilayah yang dipetakan secara anonim. Ada juga daerah khusus dengan nama seperti [heap] , [stack] , atau [vdso] . [vdso] singkatan dari objek bersama dinamis virtual. Ini digunakan oleh panggilan sistem untuk beralih ke mode kernel. Inilah artikel bagus tentangnya:"Apa itu linux-gate.so.1?"

Anda mungkin melihat banyak wilayah anonim. Ini biasanya dibuat oleh mmap tetapi tidak dilampirkan ke file apa pun. Mereka digunakan untuk banyak hal lain seperti memori bersama atau buffer yang tidak dialokasikan di heap. Misalnya, menurut saya perpustakaan pthread menggunakan wilayah yang dipetakan secara anonim sebagai tumpukan untuk utas baru.


pemetaan memori tidak hanya digunakan untuk memetakan file ke dalam memori tetapi juga merupakan alat untuk meminta RAM dari kernel. Ini adalah entri inode 0 - stack, heap, segmen bss Anda, dan lainnya


Silakan periksa: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

Bidang alamat adalah ruang alamat dalam proses yang ditempati oleh pemetaan.

Kolom perms adalah sekumpulan izin:

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

Bidang offset adalah offset ke dalam file/terserah;

dev adalah perangkatnya (mayor:minor);

inode adalah inode pada perangkat itu.0 menunjukkan bahwa tidak ada inode yang dikaitkan dengan wilayah memori, seperti halnya dengan BSS (data yang tidak diinisialisasi).

Bidang pathname biasanya berupa file yang mendukung pemetaan. Untuk file ELF, Anda dapat dengan mudah berkoordinasi dengan bidang offset dengan melihat bidang Offset di header program ELF (readelf -l).

Di bawah Linux 2.0, tidak ada kolom yang memberikan pathname.


Linux
  1. Memahami Sistem File /proc

  2. Memahami File /etc/inittab di Linux

  3. linux /proc/loadavg

  1. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  2. Linux – Tujuan Direktori /net?

  3. Pulihkan file yang dihapus yang saat ini sedang ditulis

  1. Linux – Menggabungkan /usr/bin Dan /usr/sbin Ke /bin (gnu/linux)?

  2. Memahami file /etc/xinetd.conf di Linux

  3. Memahami file /proc/meminfo (Menganalisis penggunaan Memori di Linux)