linux檔案系統相關概念

2022-05-01 02:45:09 字數 2653 閱讀 5570

struct task_struct ;

注意檔案表項中有乙個引用計數,來表示,多幾個檔案描述符,指向這個檔案表項。。不同的檔案描述符可以指向相同的檔案表項

/檔案描述符陣列/

檔案描述符陣列對應的struct file指標,陣列的元素,是指向file的指標

apue中的對應是

其中檔案表項是struct file型別物件

struct file ;

struct file_operations ;

每個file結構體都有乙個指向dentry結構體的指標,「dentry」是directory entry(目錄項)的縮寫。

file物件中包含乙個指標,指向dentry物件。dentry物件代表乙個獨立的檔案路徑,如果乙個檔案路徑被開啟多次,那麼會建立多個file物件,但它們都指向同乙個dentry物件。

struct dentry ; 

struct inode ; 

在記憶體中, 每個檔案都有乙個dentry(目錄項)和inode(索引節點)結構,dentry記錄著檔名,上級目錄等資訊,正是它形成了我們所看到的樹狀結構;而有關該檔案(該檔案可以是磁碟上面的目錄檔案)的組織和管理的資訊主要存放inode裡面,它記錄著檔案在儲存介質上的位置與分布。同時dentry->d_inode指向相應的inode結構。dentry與inode是多對一的關係,因為有可能乙個檔案有好幾個檔名(inode(可理解為ext2 inode)對應於物理磁碟上的具體物件,dentry是乙個記憶體實體,其中的d_inode成員指向對應的inode。也就是說,乙個inode可以在執行的時候鏈結多個dentry,而d_count記錄了這個鏈結的數量。)

vfs檔案系統中的inode和dentry與實際檔案系統的inode和dentry有一定的關係,但不能等同。真實磁碟檔案的inode和dentry是存在於物理外存上的,但vfs中的inode和dentry是存在於記憶體中的,系統讀取外存中的inode和dentry資訊進行一定加工後,生成記憶體中的inode和dentry。虛擬的檔案系統也具有inode和dentry結構,只是這是系統根據相應的規則生成的,不存在於實際外存中。

我們談到目錄項和索引節點時,有兩種含義。一種是在儲存介質(硬碟)中的(如ext3_inode),一種是在記憶體中的,後者是根據在前者生成的。記憶體中的表示就是dentry和inode,它是vfs中的一層,不管什麼樣的檔案系統,最後在記憶體中描述它的都是dentry和inode結構。

vfs dentry結構:

每個檔案都有乙個dentry(可能不止乙個),這個dentry鏈結到上級目錄的dentry。根目錄有乙個dentry結構,而根目錄裡的檔案和目錄都鏈結到這個根dentry,二級目錄裡的檔案和目錄,同樣通過dentry鏈結到二級目錄。這樣一層層鏈結,就形成了一顆dentry樹。從樹頂可以遍歷整個檔案系統的所有目錄和檔案。

為了加快對dentry的查詢,核心使用了hash表來快取dentry,稱為dentry cache。dentry cache在後面的分析中經常用到,因為dentry的查詢一般都先在dentry cache裡進行查詢。

磁碟上面的概念:

目錄項:包括檔名和inode節點號(磁碟上面的概念)(用於指向磁碟資料塊)inode是指向乙個檔案資料區的指標號碼,乙個inode對應著系統中唯一的一片物理資料區,而位於兩個不同物理資料區的檔案必定分別對應著兩個不同的inode號碼,這裡是磁碟的dentry

inode:又稱檔案索引節點,是檔案基本資訊的存放地和資料塊指標存放地。

資料塊:檔案的具體內容存放地。

inode指向的是資料塊(資料塊包括:普通檔案塊和目錄檔案塊)

硬連線和軟連線:在磁碟層面上公升到記憶體層面,linux作業系統的vfs層面。

一般情況下,檔名和inode號碼是"一一對應"關係,每個inode號碼對應乙個檔名。但是,linux系統允許,多個檔名指向同乙個inode號碼。這意味著,可以用不同的檔名訪問同樣的內容;對檔案內容進行修改,會影響到所有檔名;但是,刪除乙個檔名,不影響另乙個檔名的訪問。這種情況就被稱為"硬鏈結"(hard link)。

即vfs中的多個dentry,對應同乙個vfd中的inode。就是硬連線

軟連線:

檔案a和檔案b的inode號碼雖然不一樣,但是檔案a的內容是檔案b的路徑。讀取檔案a時,系統會自動將訪問者導向檔案b。因此,無論開啟哪乙個檔案,最終讀取的都是檔案b。這時,檔案a就稱為檔案b的"軟鏈結"(soft link)或者"符號鏈結(symbolic link)。這種檔案的資料部分僅包含它所要鏈結檔案的路徑名

軟鏈結有自己的inode,並在磁碟上有一小片空間存放路徑名。因此,軟鏈結能夠跨檔案系統,也可以和目錄鏈結!其二,軟鏈結可以對乙個不存在的檔名進行鏈結,但直到這個名字對應的檔案被建立後,才能開啟其鏈結。

超級塊和dentry關係:

inode有乙個指標指向超級塊,超級塊主要是描述檔案型別(ext3還是別的型別),同時超級塊有乙個指標,指向dentry快取中的dentry。表明此此檔案系統是掛載在什麼目錄下面

Linux檔案系統學習(一)之相關概念

一切皆是檔案 是 unix linux 的基本哲學之一。不僅普通的檔案,目錄 字元裝置 塊裝置 套接字等在 unix linux 中都是以檔案被對待 它們雖然型別不同,但是對其提供的卻是同一套操作介面。另外所謂的塊裝置 是指支援隨機訪問的儲存裝置 與此相對應的是字元裝置,它只支援順序訪問。另外lin...

Linux 驅動相關檔案系統

1.dev 裝置檔案目錄,存放所有系統中device 裝置 的相關資訊。dev snd 音效卡裝置 2.etc 系統配置檔案 3.opt 表示可選擇,自定義軟體安裝的地方 4.proc 作業系統執行時,程序相關資訊,由系統動態生成。proc ioports 可以檢視i o埠使用情況。proc mod...

LINUX檔案系統相關命令

檔案的歸檔和壓縮 1 壓縮檔案 使用者在進行資料備份時,需要把若干檔案集成為乙個檔案以便儲存。儘管集成為乙個檔案進行管理,但檔案大小仍然沒變。若需要網路傳輸檔案時,就希望將其壓縮成較小的檔案,以節省在網路傳輸的時間。因此本節介紹檔案的歸檔與壓縮。2 歸檔檔案是將一組檔案或目錄儲存在乙個檔案中。壓縮檔...