檔案系統實現的。
三個子系統,並把層級掛載到了
/cgroup/cpu_and_mem.:
的cgroup。
相關子系統的控制檔案,你可以讀取這些控制檔案,這些控制檔案儲存的值就是對相應的
cgrouop
的控制資訊,你也可以寫控制檔案來更改控制資訊。
的檔案,裡面的包含了所有屬於這個
cgroup
的程序的程序號。
下,你cat tasks
,應該是空的,因為此時這個
cgroup
裡面還沒有程序。你
cd /cgroup/cpu_and_mem 再cat tasks
,你可以看到系統中所有程序的程序號,這是因為每建立乙個層級的時候,系統的所有程序都會自動被加到該層級的根
cgroup
裡面。tasks
檔案不僅可以讀,還可以寫,你將乙個程序的程序號寫入到某個
cgroup
目錄下的
tasks
裡面,你就將這個程序加入了相應的
cgroup。
檔案系統的實現之前,必須簡單的介紹一下
linux vfs。
unix
標準檔案系統的所有系統呼叫。
vfs對使用者提供統一的讀寫等檔案操作呼叫介面,當使用者呼叫讀寫等函式時,核心則呼叫特定的檔案系統實現。具體而言,檔案在核心記憶體中是乙個
file
資料結構來表示的。這個資料結構包含乙個
f_op
的字段,該字段中包含了一組指向特定檔案系統實現的函式指標。當使用者執行
read()
操作時,核心呼叫
sys_read(),
然後sys_read
()查詢到指向該檔案屬於的檔案系統的讀函式指標,並呼叫它,即file->f_op->read().
linux
並沒有採用
c++之類的物件導向的語言,而是採用了
c的結構體,然後在結構體裡面定義了一系列函式指標,這些函式指標對應於物件的方法。
實現的檔案系統,都必須實現定義這些物件,並實現這些物件中定義的函式指標。
cgroup
檔案系統也不例外,下面我們來看
cgroups
中這些物件的定義。
系統呼叫掛載
cgroup
檔案系統時使用。
mkdir
建立cgroup
或者用rmdir
刪除cgroup
時,就會呼叫相應的函式指標指向的函式。比如:使用
mkdir
建立cgroup
時,會呼叫
cgroup_mkdir
,然後在
cgroup_mkdir
中再呼叫具體實現的
cgroup_create
函式。
檔案系統中,對目錄下的控制檔案進行操作時,會呼叫該結構體中指標指向的函式。比如:對檔案進行讀操作時,會呼叫
cgroup_file_read
,在cgroup_file_read
中,會根據需要呼叫該檔案對應的
cftype
結構體定義的對應讀函式。
檔案系統中的
cgroups
控制檔案。
cgroups
定義乙個
cftype
的結構體來管理控制檔案。下面我們來看
cftype
的定義:
通過實現
cgroup
檔案系統來為使用者提供管理
cgroup
的工具,而
cgroup
檔案系統是基於
linux vfs
實現的。相應地,
cgroups
為控制檔案定義了相應的資料結構
cftype
,對其操作由
cgroup
檔案系統定義的通過操作捕獲,再呼叫
cftype
定義的具體實現。
檔案系統 why檔案系統
為什麼需要檔案系統,可否由作業系統直接寫裸裝置?裸裝置是一種沒有經過格式化的磁碟或分割槽,即讓作業系統直接管理操作磁碟設定,進行資料讀寫等。通過檔案系統的方式組織磁碟儲存和資料管理有很多好處,比如 1.資料讀取 管理等操作變得簡單便捷 檔案系統給使用者提供了乙個簡單的操作介面,只需簡單的操作就能實現...
檔案系統 檔案系統的架構
vfs是具體檔案系統的抽象,依靠超級塊 inode dentry以及檔案這些結構來發揮作用,檔案系統的架構就體現在這些結構的使用方式中。1 超級塊作用分析 1 2 所有的dentry都指向乙個dentry hashtable dentry hashtable是乙個樹組,每乙個樹組成員都是hash鍊錶...
檔案系統 編寫檔案系統
8.5 編寫乙個檔案系統 如果寫乙個實際檔案系統,但是涉及的東西太多,不容易簡明扼要的理解檔案系統的實現。linux核心中提供的romfs檔案系統是個非常理想的例子,既有實際應用架構,也清晰明了,故以romfs為例項分析檔案系統的實現。一 linux檔案系統的實現要素 編寫新檔案系統涉及一些基本物件...