1、文件和文件系統
文件管理:把所管理的程序和數據組織成一系列的文件,并能進行合理的存儲、使用等操作。
1 )基本概念
數據項:描述對象某種屬性的字符集;是數據組織中可以命名的最小邏輯數據單位。
記錄:一組相關數據項集合,描述對象某方面的屬性;
關鍵字:一個記錄中的一個或幾個數據項的集合,用于唯一的標識一個記錄。
文件:由創建者定義的、具有文件名的一組相關元素的集合。
有結構:由相關記錄組成
無結構:字符流的形式
屬性:類型、長度、物理位置、創建時間
2 )文件類型
不同的系統對文件的管理方式不同
大多用擴展名標志文件類型,按如下幾種方式分類文件
按用途:系統、用戶、庫文件
按數據形式:源文件、目標文件、可執行文件
按存取控制屬性:只執行、只讀、讀寫
按組織和處理方式:普通文件、目錄文件、特殊(設備)文件
4)文件操作
操作系統提供哪些文件操作?
最基本的操作
創建/刪除文件:分空間,形成FCB及目錄(名,地址)
讀、寫:按名檢索目錄,找到文件地址,開始讀、寫
設置文件讀寫位置,實現隨機存取(尤其適用于記錄文件)
還需要:“打開”與“關閉”:
? 文件讀/寫操作 = 檢索 + 讀/寫。
每次讀寫前都要重復檢索增大開銷。所以為了方便對同一文件的多次讀寫,一次檢索到文件后就在內存中記錄其位置,避免重復檢索。被記錄下位置的文件就是“打開”文件;
不需要再操作文件時,通過“關閉”這個系統調用關閉文件——即從打開文件表上刪除其路徑信息即可。
其他操作:改名、改所屬用戶、改訪問權限等屬性的操作。
2、文件的邏輯結構
文件系統設計的關鍵要素:
如何構成一個文件,以及如何存儲在外存。
文件結構:
文件的邏輯結構file logical structure:按用戶觀點如何組織數據;又稱文件組織file organization
基本要求:檢索速度高、方便修改、降低存儲空間費用(不連續)
文件的物理結構:根據外存上的物理塊的分配機制,記錄文件外存的存儲結構。用戶感知不到的。
1)文件邏輯結構的類型
有結構文件(記錄式)
①定長記錄
②變長記錄
如何組織記錄:
順序文件。系統需按該類型記錄“長度”,通常定長。
索引文件。系統需為文件建立索引表。
索引順序文件。建索引表,記錄每組記錄的第一個記錄位置。
無結構文件(字符流式)
字節為單位,利用讀寫指針依次訪問。
系統對該類文件不需格式處理。
①順序文件
兩種記錄排列方式
串結構:按記錄形成的時間順序串行排序。記錄順序與關鍵字無關;
順序結構:按關鍵字排序。
檢索方法:
從頭檢索,順序查找要找的記錄,定長的計算相對快。
順序結構,可用折半查找、插值查找、跳步查找等算法提高效率
②索引文件
為了方便單個記錄的隨機存取,為文件建立一個索引表,記錄每項記錄在文件的邏輯地址及記錄長度;該索引表按關鍵字排序,。
索引表內容:
索引號、長度、記錄地址指針
檢索效率
索引表本身即是個按記錄鍵排序的定長順序文件,所以能利用算法提高索引表檢索速度
折半檢索過程舉例
1.給出用戶關鍵字
2.檢索索引表(設有n條記錄,設一個索引表項占x字節),則索引表的x*n/2字節處記錄著n/2號記錄的地址
3.根據第2步的地址,讀一條記錄,若記錄中關鍵字不匹配,再判斷找第n/4還是第n/2+n/4條記錄
一個索引文件可以有多個索引表
? ???為方便用戶根據不同記錄屬性檢索記錄,為順序文件建立多個索引表,每種能成為檢索條件的域都配備一張索引表。
索引文件的優缺點
適用于變長記錄,可提高檢索速度,實現直接存取
索引表增加了存儲開銷
③索引順序文件
既要方便,又要降低開銷
本方式是最常見的一種邏輯文件形式。
將順序文件的所有記錄分組
還是建立索引表,但每個表項記錄的是每組第1條記錄的鍵值和地址。
組內記錄仍按順序方式檢索和使用。
檢索一條記錄的過程:
先計算記錄是在第幾組,然后再檢索索引確定組在哪里后,在組內順序查找。
可利用多級索引,進一步提高檢索效率。
3、外存分配方式
目標:有效利用外存空間,提高文件訪問速度
常用三種方式:
連續分配
鏈接分配(不連續)
索引分配
通常一個系統中僅采用一種方式
采用的磁盤分配方式決定了文件的“物理結構”
順序結構;鏈接式結構;索引式結構。
注意與邏輯結構名類似但不是一回事。
3)索引分配
鏈接的不足
順序檢索的時間成本:不能支持高效的盤塊直接存取。要對一個文件進行直接存取,仍需在FAT中順序的查找許多盤塊號。
鏈接信息的空間成本:FAT需占用較大的內存空間。當磁盤容量較大時,FAT可能要占用數MB以上的內存空間。這是令人難以忍受的
改進:
系統運行時只涉及部分文件,FAT表無需全部調入內存
每個文件單獨建索引表(物理盤塊索引),記錄所有分配給它的盤塊號;
建立文件時,便分配一定的外存空間用于存放文件盤塊索引表信息;
混合組織索引(增量式索引組織方式)
多種索引方式相結合,以UNIX system V的索引結點為例:
一個索引結點定義為13個地址項:iaddr(0)~iaddr(12),總的來說分為兩種:直接地址、間接地址
iaddr(0)~iaddr(9)存放直接地址,即存文件數據的盤塊號;
iaddr(10)存放單級索引的索引盤塊號;
剩余的用于文件較大時存放多級索引數據。
iaddr(11)存放二級索引的主索引盤塊號
iaddr(12)存放三級索引的主索引盤塊號
索引文件在順序訪問或隨機訪問中都比較靈活,是一種比較
好的文件物理結構,但也是需要一定的用于索引表的空間開銷和檢索文件索引的時間開銷的。
UNIX系統是使用索引結構成功的例子。
4、存儲空間的管理
為實現存儲空間分配,系統需要:
記住空閑存儲空間使用情況;為空間設置相應的數據結構;
提供對存儲空間分配、回收的操作手段。
典型的管理方法:
1)空閑表和空閑鏈表法
2)位示圖法
3)成組鏈接法