iT邦幫忙

2021 iThome 鐵人賽

DAY 29
0
自我挑戰組

當你凝視linux, linux也在凝視你系列 第 29

Day29 procfs, sysfs, debugfs

前言

講完了複雜了中斷處理,鐵人賽的倒數第二天,要來看看一些虛擬的文件系統了,首先是 procfssysfs 為什麼這兩個目錄會存在呢?為了是讓調整測試kernel的時候能夠比較方便,所以才創造出了這兩個虛擬系統。

procfs

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: 一個目錄包含了硬連結到該行程啟動的任何任務

sysfs

有了proc目錄,為什麼還要sys目錄呢?
在Linux kernel的開發階段,很多kernel module會向proc目錄中添加節點和目錄,導致PROC目錄中的內容雜亂無章,因此在procfs 之後誕生了sysfs這個新的虛擬文件系統。這個新的設備模型是為了統一所有電腦的操作與表示,包含設備與設備之間的連接。

sys文件系統的幾個主要目錄跟功能簡述
block : 描述系統裡的 block device
class : 根據設備功能分類的設備模型
devices: 描述系統中所有的設備
fs: 描述系統所有的文件系統
module: 描述系統的模塊
bus: 將系統中所有的設備連接到某個總線
dev: 按照 character device 和 block device的主次號碼連接到真實設備的符號連接文件
firmware: 與系統加載硬體相關的接口
kernel: kernel 可調整的參數
power: 電源管理相關的參數。

debugfs

這是一種用來調整內核的內存文件系統,可以透過debugfs和用戶空間機換數據。有時我們需要在運行中修改某些kernel 的數據,因此利用這個臨時的文件系統把在意的數據映射到用戶空間。 sysfs與 procfs也可以做到這些事情,前者是用來反映系統以及行程的狀態訊息,後者是用於Linux設備驅動模型,因此把私人的測試訊息加入這兩個虛擬文件系統不大合適,因此特別創立了這個虛擬系統。


上一篇
Day28 softirq, tasklet, workqueue
下一篇
Day30 file system, inode
系列文
當你凝視linux, linux也在凝視你30

尚未有邦友留言

立即登入留言