核心隨記 四 檔案系統 1

2022-03-15 22:29:15 字數 2852 閱讀 3868

任務管理、記憶體管理和檔案系統是核心最為核心的部分。其中記憶體管理最為複雜,檔案系統最為龐大。核心通過引入虛擬檔案系統,從而支援數十種不同的檔案系統,不得不讓人感嘆linux以及它顯示出的開源的力量的強大。

虛擬檔案系統(virtual filesystem),也可以稱為虛擬檔案系統轉換(virual filesystem switch ,簡稱vfs),是linux強大的集中體現。linux通過vfs可以處理幾十種特定的檔案系統,它在核心中的位置如下:

5.1、資料結構

虛擬檔案系統所隱含的主要思想在於引入了乙個通用的檔案模型,這個模型能夠表示所有支援的檔案系統。該模型嚴格遵守傳統unix檔案系統提供的檔案模型。通用檔案模型由下列關鍵物件組成:

(1)    超級塊(superblock)物件:

存放系統中已安裝檔案系統的有關資訊。對於基於磁碟的檔案系統,這類物件通常對應於存放在磁碟上的檔案系統控制塊,也就是說,每個檔案系統都有乙個超級塊物件。

(2)    索引節點(inode)物件:

存放關於具體檔案的一般資訊。對於基於磁碟的檔案系統,這類物件通常對應於存放在磁碟上的檔案控制塊(fcb),也就是說,每個檔案都有乙個索引節點物件。每個索引節點物件都有乙個索引節點號,這個號唯一地標識某個檔案系統中的指定檔案。

(3)    目錄項(dentry)物件:

存放目錄項與對應檔案進行鏈結的資訊。vfs把每個目錄看作乙個由若干子目錄和檔案組成的常規檔案。

(4)    檔案(file)物件:

存放開啟檔案與程序之間進行互動的有關資訊。這類資訊僅當程序訪問檔案期間存在於記憶體中。

程序與vfs之間的互動:

5.1.1、超級塊物件

code

//vfs超級塊(fs/fs.h)

struct

super_block ;

//超級塊鍊錶(fs/super.c)

list_head(super_blocks);

//超級塊操作函式

struct

super_operations ;

//include/linux/fs.h

//檔案系統型別

struct

file_system_type ;

超級塊和檔案系統型別的關係如下:

5.1.2、inode物件

code

//索引節點物件(fs/fs.h)

struct

inode  u;

#ifdef __need_i_size_ordered

seqcount_t        i_size_seqcount;

#endif

};//

fs/inode.c

list_head(inode_in_use); 

//正在使用的索引節點鍊錶

list_head(inode_unused); 

//有效未使用的索引節點鍊錶

//索引節點物件存放的雜湊表

static

struct

hlist_head 

*inode_hashtable; 

//索引節點快取

static

kmem_cache_t 

*inode_cachep; 

//索引節點操作函式

struct

inode_operations ;

索引節點與超級塊的關係:

5.1.3、目錄項物件

code

//include/linux/dcache.h

struct

dentry ;

//目錄項物件快取

static

kmem_cache_t 

*dentry_cache; 

//目錄項物件雜湊表

static

struct

hlist_head 

*dentry_hashtable;

/***所有"未使用"目錄項物件都存放在乙個lru雙向鍊錶中.該變數存放lru鍊錶的首元素和尾元素的位址.

*/static

list_head(dentry_unused);

struct

dentry_operations ;

超級塊、索引節點與目錄項的關係:

5.1.4、檔案物件

code

//檔案物件(fs/fs.h)

struct

file ;

超級塊、索引節點、目錄項和檔案物件的關係:

5.2、與程序相關的資料結構

//include/linux/namespace.h

//命名空間

struct

namespace;//

include/linux/fs_struct.h

//程序的根目錄和當前目錄

struct

fs_struct ;

//include/linux/file.h

//程序開啟的檔案表

struct

files_struct ;

//include/linux/sched.h

struct

task_struct 

實驗四 檔案系統

實驗四 檔案系統 一 實驗目的 1 熟悉linux檔案系統的檔案和目錄結構,掌握linux檔案系統的基本特徵 2 模擬實現linux檔案系統的簡單i o流操作 備份檔案。二 實驗內容 1 瀏覽linux系統根目錄下的子目錄,熟悉每個目錄的檔案和功能 2 設計程式模擬實現linux檔案系統的簡單i o...

說說IO(四) 檔案系統

檔案系統各有不同,其最主要的目標就是解決磁碟空間的管理問題,同時提供高效性 安全性。如果在分布式環境下,則有相應的分布式檔案系統。linux上有ext系列,windows上有fat和ntfs。如圖為乙個linux下檔案系統的結構。其中vfs virtual file system 是linux ke...

說說IO(四) 檔案系統

檔案系統各有不同,其最主要的目標就是解決磁碟空間的管理問題,同時提供高效性 安全性。如果在分布式環境下,則有相應的分布式檔案系統。linux 上有 ext 系列,windows 上有 fat 和 ntfs 如圖為乙個 linux 下檔案系統的結構。其中 vfs virtual file system...