內存的主要使用者是進程,而外存的主要使用者是用戶,外存中的信息可以離開進程獨立的存在。
可將外存數據的集合體稱為文件,將外存抽象成文件的集合。外存的管理者稱為文件系統。
外存通常被劃分為大小相等的存儲塊,每個存儲塊有一個地址(序號)。外存的基本訪問單位為塊。
1、外部存儲器
(1)磁帶:能永久保存大容量數據,順序存取,存取速度慢,主要用于備份。
(2)磁盤:隨機存取,可以定位并存取磁盤上任意存儲塊中的數據。
一次磁盤操作時間=尋道時間 + 旋轉延遲時間 + 數據傳輸時間。
(3)光盤:容量大,便宜,結構與磁盤類似。
(4)U盤:Flash Memory,與內存類似,在掉電情況下內容不會丟失
(5)外存抽象
(6)分區與卷
2、外存管理
(1)分配策略
外存分配給文件 —— ①預分配(文件創建時為其分配存儲空間);② 動態分配(按需分配)
(2)分配單位
分配單位可以是扇區、塊、簇。綜合考慮,常用的分配單位有以下兩種:
①連續、變長大分配單位 ——NTFS
②不連續、定長小分配單位(塊) ——EXT2/3/4
(3)空閑塊管理(略寫)
外存管理的首要任務是記錄塊的使用情況。
①空閑空間表法——適用于連續、變長大單位分配、
②空閑塊鏈表法——小塊鏈表適合于以塊為單位的定長、動態分配;大塊鏈表適合于連續的、變長分配。
③位圖法——即可用于變長的連續分配,也可用于定長的非連續分配。
④空閑塊成組鏈接法
3、文件物理結構
邏輯塊是分配給文件的。在文件的生存周期中,它會請求追加和釋放邏輯塊,邏輯塊內的數據會被讀、寫。
文件系統要為每個文件建立一個數據結構,記錄它的各個文件塊在外存中的位置(文件的各個數據塊多對應的邏輯塊)映射關系取決于文件在外存上的存儲方式或存儲結構(即文件的物理組織結構)。
(1)連續結構——可用作備份,光盤上大量使用
將文件數據連續存儲在連續的邏輯塊中,只需文件在外存上的開始位置和大小。
(2)串連結構:每個邏輯塊中設立一個指針,指向文件的下一個邏輯塊。
(3)索引結構:為每個文件建立一個索引表,在其中記錄文件各數據塊到邏輯塊的映射關系。
(4)多重索引結構
為了方便擴充,應建立多重索引表(索引表分級,類似多級頁表)
(5)ucore采用簡化的多重索引結構。前12塊(0-11)直接索引,12塊以后簡介索引。
每個sfs_disk
文件最大為 1024*4096 + 12*4096 字節。
4、文件控制塊
(1)FCB文件控制塊 —— 文件的檔案,一個文件控制塊唯一的描述一個文件。包含內容:
(2)一個文件有兩種標識:文件系統用文件控制塊和標志號描述整個文件;用戶用文件名。
文件名到文件控制塊的映射 --> 目錄或文件夾
一個目錄通常是一張表,其中的表項稱為目錄項,一個 目錄項記錄一個名字與一個FBC的對應關系。(目錄項:文件名到文件的映射,即文件名與inode號的對應關系)
一個文件只能有一個FBC,但是可以有多個文件名。代表同一文件的不同名字可以位于不同的目錄中。
①單級目錄結構
②二級目錄結構:用戶名為第一級,文件為第二級
③樹型目錄結構:允許用戶在自己的目錄中再建立子目錄。
目錄樹一個唯一的根,文件是樹的葉子。標識文件的方法是路徑名。
用戶或進程當前的位置為當前工作目錄,用戶注冊時的工作目錄為他的home。
從根到某一個特定文件的路徑稱為絕對路徑;從當前工作目錄到特定文件的路徑稱為相對路徑。(絕對路徑是相對于主目錄 home 的路徑名;相對路徑名是相對于其當前工作目錄的路徑名)
④非循環圖目錄結構
樹型目錄結構不支持共享,增加了共享以后的樹變成了圖。
非循環圖目錄結構允許一個文件或目錄出現在多個父目錄中。
ucore中FCB結構的nlink就是硬鏈接數。
(3)ucore一個存儲塊中僅保存一個目錄項。目錄項:文件名到文件的映射,即文件名與inode號的對應關系。ucore目錄是一個目錄項的數組。
EXE根目錄文件實例:第一個名字“.”,第二個名字“..”,前兩個inode號均為2。
(4)如果一個文件僅有一個名字,刪除文件時要刪除目錄項和文件的FCB。如果文件有多個名字 --> 刪除目錄項不一定刪除FCB。