前文中講到了檔案系統有哪幾類操作,這裡對沒類操作檔案系統是如何定址,如果讀寫的進行乙個詳細的說明。
1、目錄樹的讀取
所有對檔案的操作,給使用者看來第一步就是得知道這個檔案的目錄,所以首先就需要讀取目錄。
每個目錄都是乙個檔案,該檔案存放該目錄下所有檔案的相關資訊,同樣該檔案也有對應的innode。
簡答步驟:由於目錄樹是由根目錄開始讀起,因此系統透過掛載的資訊可以找到掛載點的 inode 號此時就能夠得到根目錄的 inode 內容,並依據該 inode 讀取根目錄的 block 內的檔名資料,再一層一層的往下讀到正確的檔名。
具體步驟:讀取 /etc/passwd 這個檔案時,系統是如何讀取的呢?
2、讀取檔案:例如/etc/httpd/httpd.conf
上面目錄樹的讀取大致相同,這裡我們把目錄檔案中存放的目錄項叫做dentry,讀取過程如下:
3、建立檔案:例如/etc/testfile.txt
想要建立乙個檔案,首先得先給這個檔案分配inode和block。
4、刪除檔案:例如/etc/fstab
刪除檔案直接上級目錄(etc)裡面的那條dentry記錄,inode bitmap裡面把檔案(fstab)原先對應的inode號標記為未使用,block bitmap中把檔案(fstab)原先對應的block標記為未使用。
刪除檔案本身並沒有刪除檔案所對應的block和inode,也就是說block上的資料並沒有被抹除,除非後面向其block中覆蓋資料
5、複製檔案
複製檔案本質就是新建乙個檔案,並填充原始檔資料的過程,詳細可參考上面的建立和讀取檔案過程
6、剪下檔案
在同乙個分割槽下,剪下速度非常快,**這是因為其本質也只是將dentry記錄換乙個目錄而已,所以根本就不涉及什麼耗時的操作。**而跨分割槽剪下檔案的過程其實就是在另外乙個分割槽上建立乙個新檔案,並複製,複製完成之後再刪除原先分割槽上資料的乙個過程。
注意,這裡的跨分割槽只的是跨硬碟的不同邏輯分割槽,因為檔案系統是以分割槽進行掛在的。
7、軟連線和硬連線
7.1 軟連線(符號鏈結)與硬鏈結聯絡
軟連線本質:在inode table中本該儲存block號資訊的地方儲存了乙個路徑,如:/etc/httpd/httpd.conf,所以軟連線檔案的大小都是其對應的檔案路徑的字元個數
7.2 軟連線(符號鏈結)與硬鏈結區別
7.3 硬鏈結與複製的區別
互為硬鏈結的兩檔案inode號肯定是相同的,對應的block號也是相同的;而複製的檔案inode號和block號也肯定不相同,只是block裡面儲存的資料是一樣而已
參考部落格:
檔案系統學習5 檔案系統IO子系統
io系統 01 io子系統 io系統 02 使用者態的檔案io操作 io系統 03 虛擬檔案系統 vfs io系統 04 節點路徑搜尋 io系統 05 open流程分析 io系統 06 因open建立的結構體關係 io系統 07 io寫流程分析 io系統 08 io讀流程分析 io系統 09 直接i...
檔案系統學習(3)
一 說在前面 在嵌入式中呢,首先uboot的最終目的是啟動我們的核心,核心的目的是啟動我們的應用程式。怎麼啟動的呢?我們來分析下init post 這個函式 static int noinline init post void 如果uboot中的bootargs中有設定init,if就會被執行。而且...
作業系統學習筆記(四) 檔案系統
磁碟的0號扇區稱為主引導記錄mbr,用來引導計算機。在mbr的結尾是分割槽表,該錶給出了每個分割槽的起始和結束位址。表中的乙個分割槽被標記為活動分割槽。乙個可能的檔案系統布局。檔案儲存實現的關鍵問題是記錄各個檔案分別用到哪些磁碟塊 連續分配 優點 鍊錶分配 為每個檔案構造磁碟塊鍊錶,每個塊的第乙個字...