講完了複雜了中斷處理,鐵人賽的倒數第二天,要來看看一些虛擬的文件系統了,首先是 procfs
與 sysfs
為什麼這兩個目錄會存在呢?為了是讓調整測試kernel的時候能夠比較方便,所以才創造出了這兩個虛擬系統。
profs 並不是真正意義上的文件系統,雖然會放在記憶體中,卻不會佔用磁碟空間,proc文件系統包含了結構化的目錄和虛擬文件,既可以向用戶呈現kernel中的一些訊息,也可以當作一種從user space 向kernel發送訊息。 這些虛擬文件在試用查看命令查看時會返回大量的訊息,但是文件本身顯示為 0byte ,此外這些特殊文件中,大多數見的時間及日期屬性是當前系統時間和日期。事實上 ps, top這些SHELL命令就是從proc文件系統中讀取信息的。
/proc/PID/cmdline
: 啟動該行程的命令列./proc/PID/cwd
: 當前工作目錄的符號連結./proc/PID/environ
: 影響行程的環境變數的名字和值./proc/PID/exe
: 最初的可執行檔的符號連結, 如果它還存在的話。/proc/PID/fd
: 一個目錄,包含每個打開的檔案描述子的符號連結./proc/PID/fdinfo
: 一個目錄,包含每個打開的檔案描述子的位置和標記/proc/PID/maps
: 一個文字檔案包含記憶體對映檔案與塊的資訊。/proc/PID/mem
: 一個二進位圖像(image)表示行程的虛擬記憶體, 只能通過ptrace化行程存取./proc/PID/root
: 該行程所能看到的根路徑的符號連結。如果沒有chroot監獄,那麼行程的根路徑是/./proc/PID/status
: 包含了行程的基本資訊,包括執行狀態、記憶體使用。/proc/PID/task
: 一個目錄包含了硬連結到該行程啟動的任何任務
有了proc目錄,為什麼還要sys目錄呢?
在Linux kernel的開發階段,很多kernel module會向proc目錄中添加節點和目錄,導致PROC目錄中的內容雜亂無章,因此在procfs 之後誕生了sysfs這個新的虛擬文件系統。這個新的設備模型是為了統一所有電腦的操作與表示,包含設備與設備之間的連接。
sys文件系統的幾個主要目錄跟功能簡述block
: 描述系統裡的 block deviceclass
: 根據設備功能分類的設備模型devices
: 描述系統中所有的設備fs
: 描述系統所有的文件系統module
: 描述系統的模塊bus
: 將系統中所有的設備連接到某個總線dev
: 按照 character device 和 block device的主次號碼連接到真實設備的符號連接文件firmware
: 與系統加載硬體相關的接口kernel
: kernel 可調整的參數power
: 電源管理相關的參數。
這是一種用來調整內核的內存文件系統,可以透過debugfs和用戶空間機換數據。有時我們需要在運行中修改某些kernel 的數據,因此利用這個臨時的文件系統把在意的數據映射到用戶空間。 sysfs與 procfs也可以做到這些事情,前者是用來反映系統以及行程的狀態訊息,後者是用於Linux設備驅動模型,因此把私人的測試訊息加入這兩個虛擬文件系統不大合適,因此特別創立了這個虛擬系統。