6---1
一、文件和文件系統
文件管理:把所管理的程序和數據組織成一系列的文件,並能進行合理的存儲、使用等操作。
1 )基本概念
數據項:描述對象某種屬性的字符集;是數據組織中可以命名的最小邏輯數據單位。
記錄:一組相關數據項集合,描述對象某方面的屬性;
關鍵字:一個記錄中的一個或幾個數據項的集合,用於唯一的標識一個記錄。
文件:由創建者定義的、具有文件名的一組相關元素的集合。
·有結構:由相關記錄組成
·無結構:字符流的形式
·屬性:類型、長度、物理位置、創建時間
2 )文件類型
不同的系統對文件的管理方式不同
大多用擴展名標誌文件類型,按如下幾種方式分類文件
·按用途:系統、用戶、庫文件
·按數據形式:源文件、目標文件、可執行文件
· 按存取控制屬性:只執行、只讀、讀寫
·按組織和處理方式:普通文件、目錄文件、特殊(設備)文件
3)文件系統模型
二、文件的邏輯結構
文件結構:
文件的邏輯結構:按用戶觀點如何組織數據
基本要求:檢索速度高、方便修改、降低存儲空間費用(不連續)
文件的物理結構:根據外存上的物理塊的分配機制,記錄文件外存的存儲結構。用戶感知不到的。
!!注:以上的紅色虛線箭頭只是表示順序文件更適合用定長記錄的方式去組織,另一個索引文件更適合用變長記錄的方式去組織。
①順序文件
·兩種記錄排列方式
··串結構:按記錄形成的時間順序串行排序。記錄順序與關鍵字無關;
··順序結構:按關鍵字排序。
·檢索方法:
··從頭檢索,順序查找要找的記錄,定長的計算相對快。
··順序結構,可用折半查找、插值查找、跳步查找等算法提高效率
順序結構記錄按關鍵字排序,可按關鍵字檢索
定長:結合折半查找算法等提高檢索速度
變長:從第1個記錄開始順序掃描,直到掃描到要檢索的關鍵字標識的記錄(例如:數據庫、文件系統的基於文件名排序的目錄檢索)
順序文件的優缺點:
1·.不方便隨機存取某條記錄,但適用批量存取的場合。
2·適合磁帶等特殊介質。
3·單記錄的查找、修改等交互性差;增減不方便(改進辦法:把增刪改的記錄登記在一個事務文件中,在某段時間間隔後再與原文件合併更新)。
②索引文件
爲了方便單個記錄的隨機存取,爲文件建立一個索引表,記錄每項記錄在文件的邏輯地址及記錄長度;該索引表按關鍵字排序,。
索引表內容:
·索引號、長度、記錄地址指針
檢索效率
·索引表本身即是個按記錄鍵排序的定長順序文件,所以能利用算法提高索引表檢索速度
一個索引文件可以有多個索引表
爲方便用戶根據不同記錄屬性檢索記錄,爲順序文件建立多個索引表,每種能成爲檢索條件的域都配備一張索引表。
索引文件的優缺點
適用於變長記錄,可提高檢索速度,實現直接存取
索引表增加了存儲開銷
③索引順序文件
·既要方便,又要降低開銷
· 本方式是最常見的一種邏輯文件形式。
將順序文件的所有記錄分組
還是建立索引表,但每個表項記錄的是每組第1條記錄的鍵值和地址。
組內記錄仍按順序方式檢索和使用。
·檢索一條記錄的過程:
先計算記錄是在第幾組,然後再檢索索引確定組在哪裏後,在組內順序查找。
·可利用多級索引,進一步提高檢索效率。
3、外存分配方式
·目標:有效利用外存空間,提高文件訪問速度
·常用三種方式:
連續分配
鏈接分配(不連續)
索引分配
通常一個系統中僅採用一種方式
·採用的磁盤分配方式決定了文件的“物理結構”
順序結構;鏈接式結構;索引式結構。
注意與邏輯結構名類似但不是一回事。
缺點:
·會產生外存碎片。可緊湊法彌補,但需要額外的空間,和內存緊湊相比更花時間。
·創建文件時要給出文件大小;存儲空間利用率不高,不利於文件的動態增加和修改;
適用於變化不大順序訪問的文件,在流行的UNIX系統中仍保留了連續文件結構。如對換區
2)鏈接分配
·可以爲每一個文件分配一組不相鄰的盤塊。
·設置鏈接指針,將同屬於一個文件的多個離散盤塊鏈接成一個鏈表,這樣形成的文件稱爲鏈接文件。會有鏈接成本。
優點:
·離散分配,消除外部碎片,提高利用率
·同時適用於文件的動態增長;修改容易
FAT表的相關計算
MS-DOS文件分配結構爲例:
一個1.2M的磁盤,盤塊512B大小;若文件系統採用FAT格式,則FAT表大小如何?
·表項個數=盤塊個數= 容量/盤塊大小 = 1.2 *220 / 29 = 1.2 *211 個
·表項大小,決定於盤塊數量編號需要的位數=12 位;
FAT表大小 = 表項個數 * 表項大小
= 1.2 *211 * 12 bit
= 1.2 *211 * 1.5B = 3.6KB
以半字節(0.5B=4b)爲基本單位,表項需12位(1.5B)
3)索引分配
鏈接的不足
·順序檢索的時間成本:不能支持高效的盤塊直接存取。要對一個文件進行直接存取,仍需在FAT中順序的查找許多盤塊號。
·鏈接信息的空間成本:FAT需佔用較大的內存空間。當磁盤容量較大時,FAT可能要佔用數MB以上的內存空間。這是令人難以忍受的
改進:
系統運行時只涉及部分文件,FAT表無需全部調入內存
·每個文件單獨建索引表(物理盤塊索引),記錄所有分配給它的盤塊號;
·建立文件時,便分配一定的外存空間用於存放文件盤塊索引表信息;
計算:
③混合組織索引(增量式索引組織方式)
多種索引方式相結合,以UNIX system V的索引結點爲例:
顯式鏈接方式
·FCB中得到文件首盤號c0。
·FAT中檢索c0,找到c0項記錄的c1,繼續找
·找到c3後,在C3盤塊中偏移428B。
索引方式
·FCB中找到盤塊索引表的地址d(存放索引表的盤塊)
·索引表的d+3*4B處即直接檢索到物理塊設結果爲e,在e盤塊中偏移428B。
4、存儲空間的管理
爲實現存儲空間分配,系統需要:
·記住空閒存儲空間使用情況;爲空間設置相應的數據結構;
·提供對存儲空間分配、回收的操作手段。
典型的管理方法:
1)空閒表和空閒鏈表法
2)位示圖法
3)成組鏈接法
1)空閒表法和空閒鏈表法
空閒表法
·常用於連續分配管理方式
數據結構
·系統爲外存上的所有空閒區建立一張空閒表
·每個空閒區對應一個空閒表項
(表項包括序號、空閒區的第一個盤塊號、空閒盤塊數等。)
·將所有空閒區按其起始盤塊號遞增的次序排列,如右圖。
存儲空間的分配與回收操作
·與內存的動態分配類似,同樣可採用首次適應算法、循環首次適應算法等。
·回收主要解決對數據結構的數據修改。
·應該說明,雖然很少採用連續分配方式,然而在外存的管理中,由於它具有較高的分配速度,可減少訪問磁盤的I/O頻率,故它在諸多分配方式中仍佔有一席之地。(如實現虛擬用的部分外存就是連續分配方式)
空閒鏈表法
將所有空閒盤區拉成一條空閒鏈。
數據結構:鏈
根據構成鏈所用基本元素的不同,可把鏈表分成兩種形式:
空閒盤塊鏈
空閒盤區鏈
空閒盤塊鏈
將磁盤上的所有空閒空間,以盤塊爲單位拉成一條鏈。
優點:分配和回收一個盤塊的過程非常簡單,但爲一個文件分配盤塊時,可能要重複操作多次。
空閒盤區鏈
將所有空閒盤區拉成一條鏈。每個盤區上含有:
指示下一空閒盤區的指針、本盤區大小等信息
分配通常採用首次適應算法。回收盤區時,將回收區與相鄰的空閒盤區相合並。
爲提高檢索速度,可以採用顯式方法,爲空閒盤區建立一張鏈表放在內存中。
分配、回收操作涉及的鏈式數據結構的處理方便
空閒盤塊鏈
分配回收簡單。鏈表長,大量分配時需要操作的指針多
空閒盤區鏈
鏈表長度不定,分配時操作的指針數量相對較少,但分配回收操作相對複雜。
3)成組鏈接法
大型文件系統,空閒表或空閒鏈表太長不方便管理操作。
UNIX系統中採用成組鏈接法,這是將兩種方法結合而形成的一種空閒盤塊管理方法。
中心思想:
所有盤塊按規定大小劃分爲組;
組間建立鏈接;
組內的盤塊藉助一個系統棧可快速處理,且支持離散分配回收。
成組鏈接法
鏈表長度上限固定
組內的盤塊藉助一個系統棧可快速處理,且分配回收比較簡單。
支持離散分配回收。