通過核心觀察 proc pid statm

2021-06-18 19:24:17 字數 1042 閱讀 8955

[root@localhost ~]# cat /proc/self/statm

654 57 44 0 0 334 0

輸出解釋

cpu 以及cpu0。。。的每行的每個引數意思(以第一行為例)為:

引數 解釋 /proc//status

size (total pages) 任務虛擬位址空間的大小 vmsize/4

resident(pages) 應用程式正在使用的物理記憶體的大小 vmrss/4

shared(pages) 共享頁數 0

trs(pages) 程式所擁有的可執行虛擬記憶體的大小 vmexe/4

lrs(pages) 被映像到任務的虛擬記憶體空間的庫的大小 vmlib/4

drs(pages) 程式資料段和使用者態的棧的大小 (vmdata+ vmstk )4

dt(pages) 髒頁數量

通過核心**,我們可以更加清楚的了解其含義:

顯示該資訊主要是通過  proc_pid_statm 該函式來實現的。如果對proc的機制不了解,請參考《linux裝置驅動程式》。

其呼叫過程:proc_pid_statm->statm_pmd_range->statm_pte_range。目的是從位址區間逐漸轉化成具體的每個頁表。閱讀**,只需了解乙個大概,不用了解很多細節,要比寫起來輕鬆許多。

其中totals,pages,shared,dirty的是通過虛擬位址的頁表來進行判斷。

do while (address < end);

trs、drs、lrs是通過線性位址區間來進行區分的。

int proc_pid_statm(struct task_struct *task, char * buffer)

。。。。。

while (vma)

pages=trs+drs+lrs

因此說,trs  drs  lrs  與totals,pages,shared,dirty兩組,分別從兩個角度觀察記憶體。

關於proc的內容,參見:

proc檔案系統---程序相關 

proc檔案系統的相關資訊 

通過原始碼編譯linux核心

tar xvf linux 5.2.11.tar.xz c usr src kernels3 進入 usr src kernels目錄,配置核心編譯引數。注意要先安裝配置圖形化介面的軟體包 ncurses devel。make menuconfig或者直接將當前系統的核心配置檔案 boot conf...

核心下各種通過XX查詢

1 status pslookupprocessbyprocessid processid,process obj 通過程序id查詢程序物件 ntstatus pslookupprocessbyprocessid in handle processid,out peprocess process 需...

如何在IAR中通過Watch視窗觀察區域性變數的值

最近在用430開發一款產品,在軟體除錯的時候發現watch視窗中無法觀察區域性變數的值,總是顯示,下面通過乙個簡答的例子說明一下現象 include msp430g2553.h global variable unsigned char receiveglobal unsigned char add...