Linux

procfs 和 sysfs 有什麼區別?

  • May 29, 2019

procfs 和 sysfs 有什麼區別?為什麼它們被製成文件系統?據我了解,proc 只是儲存有關係統中執行的程序的即時資訊的東西。

procfs 和 sysfs 有什麼區別?

proc是舊的,它或多或少沒有規則和結構。在某個時候,人們認為這proc有點太混亂了,需要一種新的方式。

然後sysfs被創建,新添加的東西被放入到sysfs設備資訊中。

所以從某種意義上說,他們做同樣的事情,但sysfs更有條理。

為什麼它們被製成文件系統?

UNIX 哲學告訴我們,一切都是“文件”,因此它被創建,所以它表現為文件。

據我了解,proc 只是儲存有關係統中執行的程序的即時資訊的東西。

那些部分一直存在,他們可能永遠不會進入sysfs

但是您可以在 中找到更多proc尚未移動的舊東西。

一開始(回到 Unix),程序發現系統上正在執行的程序的方式是直接從核心記憶體中讀取程序結構(打開 /dev/mem,並直接解釋原始數據)。這就是第一個“ps”命令的工作方式。隨著時間的推移,一些資訊可以通過系統呼叫獲得。

但是,通過 /dev/mem 將系統數據直接暴露給使用者空間是一種不好的形式,並且每次您想要導出一些新的流程數據時都不斷創建新的系統呼叫令人討厭,因此創建了一個更新的方法訪問使用者空間應用程序的結構化數據以了解程序屬性。這是 /proc 文件系統。使用 /proc,即使核心中的底層資料結構發生變化,介面和結構(目錄和文件)也可以保持不變。這比早期的系統要脆弱得多,並且可以更好地擴展。

/proc 文件系統最初設計用於發布“ps”、“top”、“free”和其他一些系統實用程序所需的程序資訊和一些關鍵系統屬性。然而,由於它易於使用(無論是從核心端還是使用者空間端),它都成為了各種系統資訊的垃圾場。此外,它開始獲得讀/寫文件,用於調整設置和控制核心或其各個子系統的操作。然而,實現控制介面的方法是臨時的,/proc 很快就變得一團糟。

sysfs(或 /sys 文件系統)旨在為這種混亂添加結構,並提供一種統一的方式將系統資訊和控制點(可設置的系統和驅動程序屬性)從核心暴露給使用者空間。現在,核心中的驅動程序框架會在註冊驅動程序時根據驅動程序類型及其資料結構中的值自動在 /sys 下創建目錄。這意味著特定類型的驅動程序都將具有通過 sysfs 公開的相同元素。

許多遺留系統資訊和控制點仍然可以在 /proc 中訪問,但是所有新的匯流排和驅動程序都應該通過 sysfs 公開它們的資訊和控制點。

引用自:https://unix.stackexchange.com/questions/4884