檔案系統永遠在外存中,儲存大量資料。
檔案能夠原地改寫,即能夠讀出一塊,並修改,再寫回。
外存和記憶體的傳輸的最小單位為block。
磁碟是隨機儲存器。
檔案系統設計也是分層設計思想。從最底層開始講起。
(1)i/o控制層,包括裝置驅動程式(翻譯高層命令控制硬體控制器)+中斷處理程式。
(2)基本檔案系統:傳送高層命令給裝置驅動程式用以對磁碟進行讀寫。
(3)檔案組織模組:從邏輯塊-->物理塊,給基本檔案系統使用。
(4)邏輯檔案系統:管理元資料。元資料就是一些檔案屬性+檔名。
分層設計在計算機網路裡也有提到,tcp/ip協議等。好處當然是能夠清晰的劃分各自的功能。
linux檔案系統:ext3,4.
windows檔案系統:fat,ntfs.
乙個檔案系統包括:
(1)引導控制塊(boot control block)是乙個卷的第一塊,如果該卷沒有作業系統,則為空。
(2)卷控制塊:卷的詳細資訊包括有多少塊可以用、塊大小等。
(3)目錄:檔名+fcb(inode 索引節點)。
fcb在另一篇部落格中已經講到,包括一些檔案的屬性但是不包括檔名。
fcb==inode==master file table
記憶體中有一些資訊是在檔案系統被mount的時候載入進去的,比如目錄,整個系統的開啟檔案表、單個程序的開啟檔案表。
檔案系統被mount時可能就已經把所有fcb都分配好了,存在pool中。
unix中目錄和檔案是一起處理的,windows中目錄和檔案有不同的系統呼叫。
比如open乙個新的檔案,則建立乙個fcb,在單個程序開啟檔案表,系統開啟檔案表等中適當加入記錄,並返回乙個控制代碼。
unix中稱為檔案描述符,windows中稱為檔案控制代碼。
乙個磁碟能有多個分割槽,如果乙個分割槽沒有檔案系統,則稱為生的。
引導區如果有多個作業系統和多個檔案系統,則通過啟動載入器能夠定位乙個作業系統。
根分割槽包括作業系統和系統檔案,在引導時匯入記憶體。
當裝入檔案系統時,可以自動或手動裝入。當裝入檔案系統時,作業系統需要判定是否有效,如果有效,則在裝入表中填入檔案系統的型別。
為了在不同檔案系統中無縫移動,引入了vfs。
(1)vfs把檔案系統的介面和具體實現分開。
(2)在nfs中,也要有乙個唯一標識遠端檔案的識別符號,因此vnode類似inode,儲存遠端檔案屬性。
因此通過vnode還是inode能區分本地和遠端檔案,再是通過特定檔案型別來區分檔案,因此我們可以正確的呼叫特定的操作。
vfs定義的4個主要物件型別:
(1)inode object。單獨的檔案。
(2)file object。開啟的檔案。
(3)superblock object。整個檔案系統。
(4)dentry object。單獨的目錄條目。
對於每個物件型別都有一系列的操作。
目錄實現有很多種,
(1)線性列表。
儲存檔名和指向fcb的線性鍊錶。
可以使用軟體快取來儲存最近使用過的目錄。
(2)雜湊表。
給定乙個檔名,通過雜湊函式,快速找到指定目錄。
缺點:雜湊函式及雜湊值都是預先給定,不能靈活變換。
解決方案:動態雜湊即可擴充套件雜湊、線性雜湊等。或者使用溢位桶。
檔案分配空間方法:
一、連續分配。
每個檔案都是連續分配。分配時遵循首次適應方法。
目錄是由(檔名,開始位置,長度)組成。
優點:直接訪問。
缺點:(1)外部碎片。
(2)確定檔案大小。
解決方法:
(1)對於外部碎片,重新打包即把所有檔案系統都複製到磁帶上,清空整個磁碟,並重新分配連續空間。
(2)對於無法確定檔案大小,則重新分配孔,但是費時;或者使用擴充套件連續空間。那麼目錄就是(檔名,開始位置,塊數,第二個開始位置)組成。
二、鏈結分配。
目錄為(檔名,檔案起始指標,檔案結尾指標)組成。
檔案由鍊錶組成。
優點:分配時只要有空閒塊即可。沒有外部碎片。
缺點:(1)順序訪問而不能隨機訪問。
(2)指標需要空間。
(3)內部碎片。
(4)可靠性問題。因為由指標鏈結,只要有乙個指標丟失,則檔案就崩潰。
解決方法:
對於指標占用空間問題,需要利用更少的指標,則引入了cluster(簇),即乙個簇由多個塊組成。但是會加劇內部碎片問題。
對於可靠性,我們可以用fat(檔案分配表),目錄為(檔名,開始塊)組成。先在fat找到指定塊,再指向塊的具體位置。
採用fat會導致磁頭尋道時間過長。
三、索引分配。
把所有索引放在一起,可以支援直接訪問。
但是索引可能會在乙個塊不夠存放,因此有了幾種方法:
(1)鏈結方案:通過將索引塊鏈結起來。
(2)多層索引。
(3)組合方案。例如unix中的inode,在inode中有15個指標存在檔案中,頭12個指標為直接塊。其他三個為間接索引塊。第乙個為一級間接塊。依次類推,第三個為**間接塊。
如果檔案不大,則可以直接訪問。
對於空閒空間,我們也需要維護乙個空閒空間鍊錶。下面介紹幾種方法實現。
(1)位向量。
通過已分配的塊記為0,未分配的塊記為1,則只需要簡單的位運算就能得出第乙個空閒塊或者連續空閒塊大小等結論。
缺點:所佔空間太大。
(2)鍊錶。
空閒空間通過鍊錶連起來,第乙個空閒塊的位址快取在記憶體中。
缺點:效率不高。
(3)組。
將n個空閒塊的位址存在第乙個空閒塊中。
(4)計數。
空閒空間表中每個條目記錄(起始,長度)的記錄。
作業系統之檔案系統簡介
作業系統是怎麼幫助找到乙個檔案的準確位置的呢?使用者是根據自己作業系統建立的根目錄 此電腦 和使用者自己建立的資料夾找到的,這些資料夾又在磁碟中充當什麼角色呢?每個檔案有乙個自己的元資料,元資料記錄了對應檔案的相關資訊,比如,檔案的起始塊的位置,記錄了檔案的最後一次修改時間,記錄了檔案的大小等等。超...
作業系統 檔案系統
5.2開啟檔案 在作業系統中就是確定程序操作哪個檔案。這個確定過程由兩個事件構成 1.將使用者程序task struct中的 filp 20 與核心中的file table 64 進行掛接。2.將使用者程序需要開啟的檔案對應的i節點在file table 64 中進行登記。filp 20 掌控乙個程...
作業系統 檔案系統
通過設計乙個基於索引結構的檔案系統,了解檔案系統設計以及物理塊分配的基本概念。硬體環境 計算機一台,區域網環境 軟體環境 windows 作業系統 visual studio2019 1 設計乙個檔案系統的索引結構,描述邏輯結構與物理索引結構之間的關係 2 檔案建立等基本功能 段 問1 這個標頭檔案...