系統中的每乙個程序都有自己的一組開啟的檔案 ,像根檔案系統,當前目工作目錄,安裝點等。
有四個資料結構將vfs
層和系統的程序緊密聯絡在一起,它們分別是:
files_struct,fs_struct
,file_system_type 和
namespace
結構體。
我們先看兩個圖:
檔案描述符是用來描述開啟的檔案的。每個程序用乙個files_struct
結構來記錄檔案描述符的使用情況,這個結構稱為使用者開啟檔案表
(含有描述符表)
。它是程序的私有資料。
files_struct 結構體定義在檔案
include/linux/fdtable.h
該結構體由程序描述符中的
files
域指向。所有與每個程序相關的資訊如開啟的檔案及檔案描述符都包含在其中。
44struct files_struct ;
1. 看看
struct fdtable
結構:struct fdtable ;
2.
fd陣列指標指向已開啟的檔案物件鍊錶,預設情況下,指向
fd_arry
陣列。因為
nr_open_default
等於32
,所以該陣列可以容納
32個檔案物件。如果乙個程序所開啟的檔案物件超過
32個。核心將分配乙個新陣列,並且將
fd指向它。
對於在fd
陣列中有入口位址的每個檔案來說,陣列的索引就是檔案描述符。通常,
陣列的第乙個元素(索引為
0)表示程序的標準輸入檔案,陣列的第二個元素(索引為
1)是程序的標準輸出檔案,陣列的第三個元素
(索引為
2)是程序的標準錯誤檔案)
fs_struct 結構描述程序與檔案系統的關係
我們來深入分析其**,它的定義在 include/linux/fs_struct.h,
struct fs_struct ;
看一下struct path
結構的定義 :
struct path
可以看到struct path
封裝了vfsmount
和dentry;
,所以struct path root,pwd
包含了當前程序的當前工作目錄和根目錄以及根目錄安裝點物件和
pwd安裝點物件。
在linux
中,用file_system_type
來描述各種特定檔案系統型別
,比如ext3
。也就是說
linux
支援的所有檔案系統型別都分別唯一的對應乙個
file_system_type結構。
它的定義在 include/linux/fs.h中。
struct file_system_type ;
成員說明:
(1)
name:檔案系統的名字,不能為空;
(2)
get_sb:在安裝檔案系統時,呼叫此指標所指函式以在磁碟中獲取超級塊;
(3)
kill_sb:解除安裝檔案檔案系統時候,呼叫此指標所指函式以進行一些清理工作;
(4)
owner:如果乙個檔案系統以模組的形式載入到核心,則該字段用來說明哪個模組擁有這個結構。一般為
this_module
;(5)
next:所有的檔案系統型別結構形成乙個鍊錶,該鍊錶的頭指標為全域性變數
file_systems
(struct file_system_type *file_systems
)。這個字段指向鍊錶中下乙個檔案系統型別結構;
(6)
fs_supers:同乙個檔案系統型別下的所有超級塊形成乙個雙聯表,這個欄位是這個雙聯表的頭結點。超級塊之間通過
s_instances
字段相互鏈結
.當檔案系統被實際安裝時,將有乙個vfsmount
結構體在安裝點被建立。該結構體用來代表檔案系統的例項即代表乙個安裝點。
vfsmount結構體被定義在
include/linux/mount.h中。
vfsmount 結構還儲存了在安裝時指定的標誌資訊,該資訊儲存在
mmt_flags中。
mnt_nosuid:禁止該檔案系統的可執行檔案設定
setuid
和setgid標誌
mnt_nodev:禁止訪問該檔案系統上的裝置檔案
mnt_noexec:禁止執行該檔案系統上的可執行檔案
說明:
在管理員安裝一些不是很安全的移動裝置時,這些標誌很有用。
我們來看個圖:
linux檔案系統(三) 程序與VFS的關係
宣告 本 linux檔案系統 部落格,共分四節,系統中的每乙個程序都有自己的一組開啟的檔案 像根檔案系統,當前目工作目錄,安裝點等。有四個資料結構將vfs 層和系統的程序緊密聯絡在一起,它們分別是 files struct,fs struct file system type 和 namespace...
linux檔案系統與根檔案系統
檔案系統 與 根檔案系統 要不我們就統一簡稱為fs和rfs 檔案系統 file system fs 根檔案系統 root file system rfs。首先你考慮一點描述語句 根檔案系統也是一種 檔案系統 可以認為是一種 特殊的 檔案系統 為什麼是叫 特殊的 呢?是因為這種 根 檔案系統 承載著某...
linux 檔案系統 Linux 檔案系統結構介紹
ubuntu 像所有類unix系統一樣 在分層樹中組織檔案,其中的關係就像父母和孩子一樣。目錄可以包含其他目錄以及常規檔案,它們是樹的 葉子 樹的任何元素都可以通過路徑名引用 絕對路徑以字元 標識根目錄,其中包含所有其他目錄和檔案 開頭,然後列出必須遍歷以到達該元素的每個子目錄,每個子目錄用 符號分...