任務管理、記憶體管理和檔案系統是核心最為核心的部分。其中記憶體管理最為複雜,檔案系統最為龐大。核心通過引入虛擬檔案系統,從而支援數十種不同的檔案系統,不得不讓人感嘆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...