2012-11-30 43 views
4

這裏RES和PRES領域之間的區別是procstat輸出的和平:是什麼在Linux procstat

PID    START    END PRT RES PRES REF SHD FL TP PATH 
36502   0x400000   0x45d000 r-x 77 0 23 11 CN vn /usr/local/sbin/httpd 
36502   0x65c000   0x660000 rw- 3 3 2 1 CN vn /usr/local/sbin/httpd 
36502   0x660000   0x800000 rw- 5 4 2 1 CN sw 
36502  0x80065c000  0x800693000 r-x 25 0 83 32 CN vn /libexec/ld-elf.so.1 

什麼是RES(居民頁)和PRES之間的主要百米運動員(私人駐地頁)?這是關於共享和私人內存或不是?

並且有一個所謂的映射標誌(CN)。據我所知,這些標誌適用於每頁基礎,而不是整個內存段,因爲它是標記爲寫時複製,而不是段的頁面。那麼爲什麼procstat顯示它的整個段?

另一個問題是 - 我可以從這個輸出中找出真正複製了多少頁面(在寫入時複製過程中)以及父過程中剩餘的數量?

請你能幫忙弄清楚所有這些東西嗎? 我將非常感謝,謝謝

回答

0

procstat(1)是一個FreeBSD實用程序來獲取詳細的過程信息。一個類似的工具exists for Linux,但是Linux特定的字段與您的問題中的輸出不同。這個輸出必須來自FreeBSD系統,因爲這些字段在Linux VM子系統的環境中是沒有意義的。

爲了回答您的具體問題:

  1. RES是居民頁數,而PRES是進程的私有陰影對象的居民頁數[1]。當一個虛擬機對象被複制時,Shadow對象被創建[2],並且一個進程可能會請求創建一個私有副本,以使其他進程映射文件或文件本身不會看到這些更改[3]。
  2. 映射標誌適用於映射的內存對象,而不是直接對頁面。某些對象類型可能不是寫時複製,但vnodes和swap(顯示在輸出中)是。 [1]
  3. 我想你問的是「什麼頁數與父母共享,哪些數字有一個頁面的修改副本?」。在這個輸出中你可以看到23個其他的mmap對象引用了httpd文本。這些可能是httpd子進程以及這個進程的數據段。[1]

參考

[1] http://freebsd.1045724.n5.nabble.com/proc-filesystem-td5719455.html

[2] https://developer.apple.com/library/mac/documentation/Darwin/Conceptual/KernelProgramming/vm/vm.html

[3] http://www.freebsd.org/cgi/man.cgi?query=mmap&sektion=2