1.文件系統
文件是具有文件名的一組關聯信息的集合,通常文件由若干個記錄組成。文件系統是操作系統與管理文件有關的軟件和數據集合。從用戶的角度看,文件系統實現“按名存取”。從系統的角度看,文件系統是對文件存儲器的存儲空間進行組織、分配負責文件的存儲並對存入的文件實施保護、檢索的一組軟件集合。
文件系統模型可以分為三個層次:底層是對象及其屬性(文件、目錄和磁盤存儲空間);中間層是對對象的進行操作和管理的軟件集合(核心部分);最高層是文件系統提供給用戶的接口。
為使用戶能靈活方便地使用和控制文件,文件系統提供了一組進行文件操作的系統調用:建立文件、刪除文件、打開文件、關閉文件、讀文件和寫文件。
2.文件的邏輯結構
文件結構是指文件的組織形式,文件的組織分為文件的邏輯結構(即邏輯結構)和文件的物理組織(即物理結構)。文件的邏輯結構是從用戶的角度出發所看到的文件組織形式,文件的物理結構是從系統的角度看到物理存儲的形式。
文件的邏輯結構分為:記錄式的有結構文件,另一種是字符流式的無結構文件。有結構文件又稱為記錄式文件,記錄式文件又分為定長記錄和變長記錄。根據用戶需要可以用多種方式來組織這些記錄,形成如下幾種文件:
(1)順序文件:由一些列記錄按某種順序排列所形成的文件,通常是定長記錄。文件中的記錄可以是任意順序的,可以按照不同的順序進行排列。增加或刪除一個記錄比較困難。
(2)索引文件:記錄為可變長度時,通常建立一張索引表,並為每個記錄設置一個表項。索引表中的表項包括該記錄的索引號、記錄長度以及指向該記錄的邏輯地址指針。
(3)索引順序文件:兩種文件的結合。它為文件建立一張索引表,為每一組記錄中的第一個記錄設置一個表項。將記錄中所有記錄分為若干組(例如50個記錄為一組),為順序文件建立一張索引表,在索引表中的第一個記錄建立一個索引項,包括該記錄的鍵值和指向該記錄的指針。
無結構文件是一種流式文件,其長度以字節為單位。對流式文件的訪問是采用讀寫指針來指出下一個要訪問的字節。可以把記錄文件看作流式文件的一個特例。
3.文件的物理結構
文件的物理結構指在外存上的存儲組織形式,由邏輯地址到物理地址的映射是和物理結構相關的。文件存儲設備通常划分為大小相等的物理塊,物理塊是分配及傳輸信息的基本單位。同時,文件信息划分為物理存儲塊大小相等的邏輯塊。有以下幾種物理結構:
(1)順序結構:一種簡單的物理結構,將一個邏輯文件存儲在外存連續的物理塊中。這種方式保證了邏輯文件中的記錄順序與存儲中文件占用盤塊順序一致。為了能找到文件必須記錄第一個記錄所在的盤塊號以及文件的長度(以盤塊號的方式進行統計)。這種方式容易造成外碎片,即有些小的盤塊無法在滿足文件分配需求,可以通過緊湊的方法使盤上所有的空閑盤塊集中在一起,存有文件的盤塊集中在一起。這種方式還有一個缺點就是必須事先知道文件的長度。
(2)鏈接結構:將邏輯上連續的文件存放在外存不連續的區域上。通過鏈表的方式將同一個文件串成一個鏈表。這種方式消除了外碎片,顯著提高了外存空間的利用率。文件可動態增長、刪除,十分方便。
分為隱式連接和顯示連接。隱式連接,文件目錄包含了一個指向第一個盤塊的指針和最后一個盤塊的指針,其余指針在盤塊中。顯示連接:把用於連接各文件物理塊指針,顯示地存放在一張表中。查文件的時候只需要去這張表,由於查表的過程是在內存中完成,這種方式降低了磁盤的訪問次數(FAT采用了這種方式)。整個系統有一張分配表FAT,在FAT中每個表項存儲了存放一個盤塊的塊號。每個文件的第一個塊號存儲在自己的FCB中。這種方式就是FAT占用內存空間太大,每次查找一個文件需要將整個FAT調入內存。
(3)索引結構:索引結構將一個邏輯文件的信息存放在外存的若干個物理塊中,並為每個文件建立一個索引表,索引表中的每個表目存放文件信息所在的邏輯塊號中和與之對應信息存放在的邏輯結構和與之對應的物理塊號中,以索引結構存放的文件稱為索引文件。在存取文件時至少需要兩次訪問存儲器,第一次訪問索引表,第二次根據索引表提供的信息訪問文件信息。索引分配方式又分為單級索引、多級索引和混合索引。單級索引為每個文件只分配一個索引塊,再把分配給文件的所有盤塊號記錄在該索引塊中。建立文件時,為之分配一個索引塊,然后該文件的所有盤塊號記錄在其中。當文件較大時,需要分配多個索引塊。索引塊太多時,查找效率太低,於是就為索引塊建立索引塊,這樣查找速率的提高很多。混合索引將上兩種方式結合起來。
4.文件的目錄
文件目錄是一種數據結構,用於表識系統中的文件及其物理地址,供檢索時使用。文件包含文件體和文件說明(描述和控制文件的數據結構,稱為文件控制塊FCB)。文件管理程序借助FCB,對文件施以各種操作,人們把文件控制塊的有序集合稱為文件目錄,即一個文件控制塊就是一個目錄項。
文件控制塊包括文件名、文件的物理位置、文件的物理結構(上面講過)和文件的邏輯結構(上面講過),存儲控制信息(權限)和使用信息(建立日期等)。
文件目錄較多時,如果查找某個文件,需要將文件目錄調用內存,查找指定文件名的文件目錄,這樣比較慢。因為文件目錄是由FCB組成,但是在檢索文件的時候,只有用到了文件名。這樣,需要再建立一張表,包括文件名到索引節點的映射。(unix這么干的)
文件目錄可以按照單級目錄、二級目錄和多級目錄結構組織。
目錄查詢技術:當用戶提供文件名時,對目錄進行查詢,找出該文件的文件控制塊或對應索引節點。然后根據FCB或者索引節點中所記錄的物理地址(盤塊號),換算出文件在磁盤上的物理地址;最后通過磁盤驅動程序,將所需文件讀入內存。目前對目錄的查詢方式有線性檢索和hash方法。
5.文件存儲空間管理
空閑表和空閑鏈表:空閑表為每個文件分配連續的存儲空間。系統為外存上的所有空閑區建立一張空閑表,每個空閑區對應一個空閑表項。空閑鏈表是將所有空閑盤區拉成一條空閑鏈,分為空閑盤塊鏈和空閑盤區鏈。
位示圖:利用二進制記錄盤中一個盤塊的使用情況。
6.文件共享
三種方法:繞道法、鏈接法和基本文件目錄。繞道法從文件當前目錄向上返回到與所要共享文件所在路徑的交叉點,再順序向下訪問到共享文件。鏈接法直接將一個目錄的鏈接指針指向共享目錄。