Solaris核心proc目錄簡介(轉)

ba發表於2007-08-15
Solaris核心proc目錄簡介(轉)[@more@]【導讀】程式檔案系統 -- procfs -- 允許像管理檔案那樣直接管理核心程式。是一個偽檔案系統,提供了核心程式表的檔案系統介面。

/proc/目錄簡介

程式檔案系統,procfs,是一個偽檔案系統,它允許對一些非傳統意義上的檔案透過標準檔案I/O介面進行訪問。procfs將Solaris核心程式架構進行了抽象,比如當前系統中所有執行著的程式會在/proc/目錄下有所體現。系統中每個程式對應/proc/目錄下的一個子目錄,子目錄名即相應程式號(PID),所有程式號子目錄構成了/proc/目錄的全部內容。

許多提供程式資料和控制點的核心資料結構在/proc//子目錄下有相應反映,

比如,多執行緒程式中每個LWP的相關資料和控制結構體現在/proc//lwp/ 中。 /proc/目錄下的物件不是真實磁碟檔案,這些物件位於核心記憶體中,使用者執行ls(1)命令顯示/proc/目錄結構時,系統讀取核心記憶體並返回相應內容。

透過/proc,相對簡便地就可以獲取程式資訊,比如程式執行環境、核心資源利用率。程式控制和procfs直接相關,procfs最初的設計目的很簡單,就是為編寫偵錯程式提供一組介面,現在已經有了相當大的改進。

Solaris系統在/usr/proc/bin/目錄下提供了一組工具從/proc中析取程式資訊,同時可以進行簡單的程式控制。可以參看proc(1)手冊頁。程式狀態命令ps(1)也利用了procfs介面。

下面列舉可以透過/proc檔案系統獲取的控制和資訊資料,關於這些檔案的詳細資訊參看proc(4)手冊頁。

/proc -- procfs的根目錄

/proc/ -- 某一確定程式的根目錄,程式PID正是子目錄名

/proc//as -- 程式地址空間,即struct proc結構中p_as成員。換句話說,程式地址空間以/proc//as檔案的形式展現出來,透過這個偽檔案系統介面可以訪問相應程式地址空間。

struct as * p_as; /* 程式地址空間指標 */

# ls -l /proc/53/as

-rw------- 1 root root 1458176 2月 8 17:34 /proc/53/as

struct proc結構定義在/usr/include/sys/proc.h檔案中。

/proc//ctl -- 一個程式控制檔案。可以只寫開啟該檔案,然後給相應程式傳送控制資訊。可以停止、啟動程式,設定程式停止於某一特殊事件。這演示了procfs的強大和便捷。程式控制、事件跟蹤可以透過開啟相應程式的控制檔案完成,只需要寫入期待行為的控制資訊。參看proc(4)手冊瞭解控制資訊和控制函式的詳細介紹。

/proc//status -- 程式狀態資訊。對應/usr/include/sys/procfs.h檔案裡定義的struct pstatus結構。proc(4)手冊頁裡也有描述。這個結構中有一個成員

lwpstatus_t pr_lwp; /* status of the representative lwp */

該成員對應一個有代表性的LWP(輕量級程式)。單執行緒程式只有一個LWP,很容易選定這個有代表性的LWP。那些多執行緒程式通常有多個LWPs,一個核心函式遍歷當前程式的所有LWPs,根據他們的狀態選取這個有代表性的LWP。首先選取正在執行中的LWP,如果不存在這樣的LWP,按照可執行、休眠、停止的順序選取LWP。

/proc//lstatus -- lwpstatus結構陣列,程式中每個LWP對應一個lwpstatus結構。struct lwpstatus結構定義在/usr/include/sys/procfs.h檔案中。

/proc//psinfo -- 類似ps(1)命令提供的程式資訊。對應struct psinfo結構,類似struct pstatus結構,struct psinfo結構中有一個成員

lwpsinfo_t pr_lwp; /* information for representative lwp */

該成員的對應一個有代表性的LWP。

/proc//lpsinfo -- lwpsinfo結構陣列,程式中每個LWP對應一個lwpsinfo結構

/proc//map -- 地址空間對映資訊,可以用pmap(1)命令顯示這些資料資訊。

/proc//rmap -- 程式中保留地址空間段。用pmap -r命令顯示這些資料資訊。

/proc//xmap -- 擴充套件地址空間對映資訊。用pmap -x命令顯示這些資料資訊。

/proc//cred -- 程式身份驗證資訊,對應/usr/include/sys/procfs.h檔案中

定義的struct prcred結構。

/proc//sigact -- sigaction結構陣列,描述和本程式相關的所有訊號設定。

struct sigaction結構定義在/usr/include/sys/signal.h檔案中。

/proc//auxv -- auxv_t結構陣列,包含程式執行時傳遞給動態連結器的初始值。

auxv_t結構定義在/usr/include/sys/auxv.h檔案中。

/proc//ldt -- 區域性描述符表(LDT),僅存於Intel x86架構。

/proc//usage -- 程式資源利用率的相關資料,對應struct prusage結構,該

結構定義在/usr/include/sys/procfs.h檔案中。

/proc//lusage -- prusage結構陣列,對應各個LWP資源利用狀況。

/proc//pagedata -- 程式地址空間的另外一種表現方式,可以用於跟蹤頁面級

的引用和修改。參看struct prpageheader結構定義。

/proc//watch -- prwatch結構陣列。透過寫控制檔案/proc//ctl可以設定PCWATCH操作,此時建立該檔案。允許監視一個或多個地址空間範圍,當訪問這些被監視頁面時,產生一次陷入。

scz注:這個功能和SoftIce的BPR功能類似,adb支援這種陷入,不知是否利用了procfs

/proc//cwd -- 到程式當前工作目錄的符號連結

/proc//root -- 到程式根目錄的符號連結(和上面那個什麼區別)

/proc//fd -- 這是一個子目錄,包含程式開啟的檔案控制程式碼

/proc//fd/nn -- 對應程式開啟的某個確定的檔案控制程式碼

/proc//object -- 這是一個子目錄,包含程式相關的可執行檔案以及動態連結庫。

/proc//object/nn -- 二進位制目標檔案。程式對應的可執行檔名為a.out,其餘是程式相關的動態連結庫檔案。

object目錄提供的資訊是程式級的,每個/proc//目錄有一個lwp子目錄,提供了LWP級的資訊:

/proc//lwp -- 這是一個子目錄,包含程式中所有LWPs的資訊

/proc//lwp/ -- 這是一個子目錄,包含對應lwpid的LWP資訊

/proc//lwp//lwpctl -- 一個控制檔案,透過它可以在LWP級上針對每個LWP釋出控制操作

/proc//lwp//lwpstatus -- LWP狀態資訊,對應lwpstatus結構,該結構定義在/usr/include/sys/procfs.h檔案中

/proc//lwp//lwpsinfo -- 對應lwpsinfo結構,同樣定義在/usr/include/sys/procfs.h檔案中

/proc//lwp//lwpusage -- LWP資源利用資訊,對應prusage結構

/proc//lwp//xregs -- 這個檔案是處理器架構相關的,某些平臺上可能沒有這個檔案。對於SPARC系統,這個文對/usr/include/sys/procfs_isa.h檔案中定義的prxregset結構。

/proc//lwp//gwindows -- 常規暫存器視窗。這個檔案僅存於SPARC架構的系統,描述LWP使用的常規暫存器組(硬體上下文的一部分),對應gwindows結構,該結構定義在/usr/include/sys/regset.h檔案中。

/proc//lwp//asrs -- 輔助暫存器組,僅存於SPARC V9(UltraSPARC)架構,專為SPARC V9架構定義的一組額外的硬體暫存器,要求sun4u、64-bit核心(Solaris 7及其後續版本)、64-bit程式。注意,64-bit核心可以執行32-bit程式,但是32-bit程式沒有這樣一個檔案與之對應。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-959441/,如需轉載,請註明出處,否則將追究法律責任。

相關文章