linux VFS資料結構 一

2021-06-01 01:05:16 字數 4013 閱讀 7155

vfs的資料結構

超級塊物件

記錄已安裝檔案系統的整體資訊,由於具體的檔案系統來實現,它對應於具體檔案系統的超級塊或控制塊,儲存在磁碟的特定扇區上,如果不是基於磁碟的檔案系統,比如sysfs,會生成臨時的超級塊,儲存在記憶體當中。

01struct super_block ;
第2行指向超級塊鍊錶的指標

第3行裝置識別符號

第4行以位元組為單位的塊大小

第5行以位為單位的塊大小

第6行修改標誌

第7行檔案的最長長度

第8行檔案系統型別

第9行超級塊方法

第10行磁碟限額處理方法

第11行磁碟限額管理方法

第12行網路檔案系統使用的輸出操作

第13行安裝標誌

第14行檔案系統的魔數

第15行檔案系統根目錄的目錄項物件

第16行解除安裝所用的訊號量

第17行超級塊資訊量

第18行引用計數器

第19行對超級塊的已安裝檔案系統進行同步的標誌

第20行次級引用計數器

第22行指向超級塊安全資料結構的指標

第24行指向超級塊擴充套件屬性結構的指標

第26行所有索引節點的鍊錶

第27行改進型索引節點的鍊錶

第28行等待被寫入磁碟的索引節點的鍊錶

第30行用於處理遠端網路檔案系統的匿名目錄項的鍊錶

第31行檔案物件的鍊錶

第36行指向塊裝置驅動程式描述符的指標

第38行用於給定檔案系統型別的超級塊物件鍊錶的指標

第39行磁碟限額的描述符

第41行凍結檔案系統時使用的標誌

第42行程序掛起的等待佇列,直到檔案系統被解凍

第46行指向特定檔案的超級塊資訊的指標

第52行時間戳的粒度

超級塊的操作方法

01struct super_operations ;
第2行為索引節點物件分配空間,包括具體檔案系統的資料所需要的空間。

第3行撤消索引節點物件。

第5行當索引節點標記為修改(髒)時呼叫。

第6行用通過傳遞引數指定的索引節點物件的內容更新乙個檔案系統的索引節點。索引節點物件的i_ino欄位標識所涉及磁碟上檔案系統的索引節點。flag引數表示i/o操作是否應當同步。

第7行撤消索引節點時呼叫

第8行在必須撤消索引節點時呼叫。刪除記憶體中的vfs索引節點和磁碟上的檔案資料及元資料

第9行釋放通過傳遞的引數指定的超級塊物件

第10行用指定物件的內容更新檔案系統的超級塊

第11行在清除檔案系統來更新磁碟上的具體檔案系統資料時呼叫。

第14行將檔案系統的統計資訊返回,填寫在buf快取區中。

第15行用新選項重新安裝檔案系統

第16行當撤消磁碟索引節點執行具體檔案操作時呼叫。

第17行中斷乙個安裝操作

第19行用來顯示特定檔案系統的選項

第22行限額系統使用該方法從檔案中讀取資料。

第23行限額系統使用該方法將資料寫入檔案中

索引節點物件

存放關於具體檔案的一般資訊。對基於磁碟的檔案系統,通常對應於存放在磁碟上的檔案控制塊。每個索引節點物件都有乙個索引節點號,這個節點號唯一的標識檔案系統中的檔案。。

01struct inode ;

42 int i_cindex;

4344 __u32 i_generation;

4546#ifdef config_dnotify

47 unsigned long i_dnotify_mask; /* directory notify events */

48 struct dnotify_struct *i_dnotify; /* for directory notifications */

49#endif

5051#ifdef config_inotify

52 struct list_head inotify_watches; /* watches on this inode */

53 struct mutex inotify_mutex; /* protects the watches list */

54#endif

5556 unsigned long i_state;

57 unsigned long dirtied_when; /* jiffies of first dirtying */

5859 unsigned int i_flags;

6061 atomic_t i_writecount;

62#ifdef config_security

63 void *i_security;

64#endif

65 void *i_private; /* fs or device private pointer */

66};

第2行用於雜湊鍊錶的指標

第3行用於描述索引節點當前狀態的鍊錶的指標

第4行用於超級塊的索引節點鍊錶的指標

第5行引用索引節點的目錄項物件鍊錶的頭

第6行索引節點號

第7行引用計數器

第8行硬鏈結數目

第9行所有者識別符號

第10行組識別符號

第11行實裝置識別符號

第13行檔案的位元組數

第17行上次訪問檔案的時間

第18行上次寫檔案的時間

第19行上次修改索引節點的時間

第20行塊的位元組數

第21行檔案的塊數

第26行在直接i/o檔案操作中避免出現競爭條件的讀/寫訊號量

第27行索引節點的操作

第28行預設檔案操作

第29行指向超級塊物件的指標

第30行指向檔案鎖鏈表的指標

第31行指向address_space物件

第32行檔案的address_space物件

第34行索引節點磁碟限額

第36行用於具體的字元或塊裝置索引節點鍊錶的指標

第38行管道檔案使用

第39行指向塊裝置驅動程式的指標

第40行指向字元裝置驅動程式的指標

第42行擁有一組次裝置號的裝置檔案的索引

第44行索引節點版本號

第47行目錄通知事件的位掩碼

第48行用於目錄通知

第56行索引節點的狀態標誌

第57行索引節點的弄髒時間

第59行檔案系統的安裝標誌

第61行用於寫程序的引用計數器

第63行指向索引節點安全結構的指標

索引結點的操作方法

01struct inode_operations ;
第2行為與目錄項物件相關的普通檔案建立乙個新的磁碟索引節點

第3行為包含在乙個目錄項物件中的檔名對應的索引節點查詢目錄

第4行建立乙個新的名為new_dentry的硬鏈結,它指向dir目錄下名為old_dentry的檔案。

第5行從乙個目錄中刪除目錄項物件所指定檔案的硬鏈結

第6行在某個目錄下,為與目錄項物件相關的符號鏈結建立乙個新的索引節點

第7行在某個目錄下,為與目錄項物件相關的目錄建立乙個新的索引節點

第8行從乙個目錄刪除子目錄,子目錄的名稱包含在目錄項物件中。

第9行在某個目錄中,為與目錄項物件相關的特定檔案建立乙個新磁碟索引節點。

第10行將old_dir目錄下由old_entry標識的檔案移動new_dir目錄下。

第12行將目錄項所指定的符號鏈結中對應的檔案路徑名拷貝到buffer所指定的使用者態記憶體區

第13行解析索引節點物件所指定的符號鏈結

第14行釋放由follow_link方法分配的用於解析符號鏈結的所有臨時資料結構

第15行修改與索引節點相關的檔案長度

第16行檢查是否允許對索引節點所指的檔案進行指定模式的訪問。

第17行在觸及索引節點屬性後通知乙個」修改事件」

第18行由一些檔案系統用於讀取索引節點屬性

第19行獲取擴充套件屬性名稱的整個鍊錶

第20行刪除索引節點的擴充套件屬性。

linux VFS中dentry結構解析

linux vfs中dentry結構解析 先看 此書中對dentry,file,process,inode這幾個資料結構關係的解析。程序每開啟乙個檔案,就會有乙個file結構與之對應。同乙個程序可以多次開啟同乙個檔案而得到多個不同的file結構,file結構描述了被開啟檔案的屬性,讀寫的偏移指標等等...

資料結構(一)

資料結構是由某一資料元素的集合和該集合中資料元素之間的關係組成的,記為 data structure 資料結構的核心技術是分解與抽象。通過分解可以劃分出資料的層次 再通過抽象就能得到資料的邏輯結構 依據資料元素之間的關係的不同,可以分為線性結構和非線性結構。1.線性結構又稱作線性表。線性表中的每乙個...

資料結構 (一)

1 資料結構是計算機組織和儲存資料的方式。2 資料 資料元素 資料項 最小的標識單位 3 四種邏輯結構 集合 線性結構 樹形結構 圖結構。4 資料儲存結構 順序儲存方式 鏈式儲存方式 索引儲存方式 雜湊儲存方式。5 涉及到的運算 建立 查詢 讀取 插入 刪除等。6 具有線性結構的有 線性表 棧 佇列...