1. 程式人生 > >第六章7、8 目錄.PPT

第六章7、8 目錄.PPT

                                 第 七 、八 章    檔案與磁碟空間管理

分邏輯結構和物理結構:
邏輯結構:
檔案系統設計的關鍵要素:
如何構成一個檔案,以及如何儲存在外存。
檔案結構:
檔案的邏輯結構file logical structure:按使用者觀點如何組織資料;又稱檔案組織file organization
基本要求:檢索速度高、方便修改、降低儲存空間費用(不連續)
檔案的物理結構:根據外存上的物理塊的分配機制,記錄檔案外存的儲存結構。使用者感知不到的。

1)檔案邏輯結構的型別
有結構檔案(記錄式)
①定長記錄
②變長記錄
如何組織記錄:
順序檔案。系統需按該型別記錄“長度”,通常定長。
索引檔案。系統需為檔案建立索引表。
索引順序檔案。建索引表,記錄每組記錄的第一個記錄位置。
無結構檔案(字元流式)
位元組為單位,利用讀寫指標依次訪問。
系統對該類檔案不需格式處理。
在這裡插入圖片描述


在這裡插入圖片描述
①順序檔案
兩種記錄排列方式
串結構:按記錄形成的時間順序序列排序。記錄順序與關鍵字無關;
順序結構:按關鍵字排序。
檢索方法:
從頭檢索,順序查詢要找的記錄,定長的計算相對快。
順序結構,可用折半查詢、插值查詢、跳步查詢等演算法提高效率

順序結構記錄按關鍵字排序,可按關鍵字檢索
定長:結合折半查詢演算法等提高檢索速度

變長:從第1個記錄開始順序掃描,直到掃描到要檢索的關鍵字標識的記錄(例如:資料庫、檔案系統的基於檔名排序的目錄檢索)
順序檔案的優缺點:
不方便隨機存取某條記錄,但適用批量存取的場合。
適合磁帶等特殊介質。
單記錄的查詢、修改等互動性差;增減不方便(改進辦法:把增刪改的記錄登記在一個事務檔案中,在某段時間間隔後再與原檔案合併更新)。

②索引檔案
為了方便單個記錄的隨機存取,為檔案建立一個索引表,記錄每項記錄在檔案的邏輯地址及記錄長度;該索引表按關鍵字排序,。
索引表內容:
索引號、長度、記錄地址指標
檢索效率
索引表本身即是個按記錄鍵排序的定長順序檔案,所以能利用演算法提高索引表檢索速度

一個索引檔案可以有多個索引表
為方便使用者根據不同記錄屬性檢索記錄,為順序檔案建立多個索引表,每種能成為檢索條件的域都配備一張索引表。
索引檔案的優缺點
適用於變長記錄,可提高檢索速度,實現直接存取
索引表增加了儲存開銷

③索引順序檔案(為了節省計算機的儲存空間的開銷)
既要方便,又要降低開銷
本方式是最常見的一種邏輯檔案形式。
將順序檔案的所有記錄分組
還是建立索引表,但每個表項記錄的是每組第1條記錄的鍵值和地址。
組內記錄仍按順序方式檢索和使用。
檢索一條記錄的過程:
先計算記錄是在第幾組,然後再檢索索引確定組在哪裡後,在組內順序查詢。
可利用多級索引,進一步提高檢索效率。

④直接檔案
給定鍵值(如學號)不需順序檢索直接得到記錄的實體地址
在這裡插入圖片描述
對應檔案的物理結構

3、外存分配方式

目標:有效利用外存空間,提高檔案訪問速度
常用三種方式:
連續分配
連結分配(不連續)
索引分配
通常一個系統中僅採用一種方式
採用的磁碟分配方式決定了檔案的“物理結構”
順序結構;連結式結構;索引式結構。
注意與邏輯結構名類似但不是一回事。

1)連續分配
在這裡插入圖片描述
缺點:
會產生外存碎片。可緊湊法彌補,但需要額外的空間,和記憶體緊湊相比更花時間。
建立檔案時要給出檔案大小;儲存空間利用率不高,不利於檔案的動態增加和修改;
適用於變化不大順序訪問的檔案,在流行的UNIX系統中仍保留了連續檔案結構。如對換區

2)連結分配
可以為每一個檔案分配一組不相鄰的盤塊。
設定連結指標,將同屬於一個檔案的多個離散盤塊連結成一個連結串列,這樣形成的檔案稱為連結檔案。會有連結成本。
優點:
離散分配,消除外部碎片,提高利用率
同時適用於檔案的動態增長;修改容易

連結有兩種形式:
在這裡插入圖片描述
顯式連結(FAT–file allocationtable)
連結資訊以資訊表的形式顯示存放
在這裡插入圖片描述

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)
由上述公式,若容量為200M的磁碟,盤塊仍為512B,FAT表大小如何?

FAT表表項有200K≈218 (個)
表項需20位,即28+4,2.5位元組
FAT表需記憶體大小為200
2.5=500KB

在這裡插入圖片描述
磁碟組織
以簇為單位分配回收、但不規定盤塊大小
磁碟格式化時確定卷的簇大小(物理磁碟扇區的整數倍),512M以內的小磁碟預設簇大小為512B,1G的預設大小為1KB。。。大多數情況是4KB
捲上簇編號為LCN,使用者用到的簇順序編成使用者虛擬簇號VCN,NTFS可進行VCN到LCN的對映

檔案組織
以卷為單位,將卷的所有檔案資訊、目錄資訊、可用未分配空間記錄在主控檔案表MFT中。
每個檔案的資訊對應一行,固定大小1KB,稱為元資料
檔案屬性資訊、檔案資料較少時就直接寫在MFT中;較多超出1KB時,記錄存放這些資訊的簇地址指標。
相容性上也有不足

3)索引分配
連結的不足
順序檢索的時間成本:不能支援高效的盤塊直接存取。要對一個檔案進行直接存取,仍需在FAT中順序的查詢許多盤塊號。
連結資訊的空間成本:FAT需佔用較大的記憶體空間。當磁碟容量較大時,FAT可能要佔用數MB以上的記憶體空間。這是令人難以忍受的
改進:
系統執行時只涉及部分檔案,FAT表無需全部調入記憶體
每個檔案單獨建索引表(物理盤塊索引),記錄所有分配給它的盤塊號;
建立檔案時,便分配一定的外存空間用於存放檔案盤塊索引表資訊;

①單級索引分配
在這裡插入圖片描述
②多級索引
在這裡插入圖片描述
若檔案較大,存放索引表也需要多個盤塊(索引盤塊)。
索引盤塊亦需要按順序管理起來
若索引盤塊數量較少用指標連結的方式即可;
若索引盤塊較多,需對索引盤塊也採用索引方式管理,形成多級索引。

在這裡插入圖片描述
多級索引下的檔案大小
若兩級索引,盤塊1KB,盤塊號佔4位元組
一個盤塊可存放的盤塊號數有多少個
1KB/4B = 210/4 = 28 = 256(個)
二級索引下的檔案可分配的最大盤塊數
256 * 256 =26×210=64 K(個)
檔案最大長度為
64K(個)1KB=64MB
若盤塊大小為4KB,單級索引允許檔案最大長度為4MB(4K/4
4KB),二級索引則檔案最大可達4GB(1K1K4KB)。

③混合組織索引(增量式索引組織方式)
多種索引方式相結合,以UNIX system V的索引結點為例:
一個索引結點定義為13個地址項:iaddr(0)~iaddr(12),總的來說分為兩種:直接地址、間接地址
iaddr(0)~iaddr(9)存放直接地址,即存檔案資料的盤塊號;
iaddr(10)存放單級索引的索引盤塊號;
剩餘的用於檔案較大時存放多級索引資料。
iaddr(11)存放二級索引的主索引盤塊號
iaddr(12)存放三級索引的主索引盤塊號

在這裡插入圖片描述
索引檔案在順序訪問或隨機訪問中都比較靈活,是一種比較 好的檔案物理結構,但也是需要一定的用於索引表的空間開銷和檢索檔案索引的時間開銷的。
UNIX系統是使用索引結構成功的例子。

顯式連結方式
FCB中得到檔案首盤號c0。
FAT中檢索c0,找到c0項記錄的c1,繼續找
找到c3後,在C3盤塊中偏移428B。
索引方式
FCB中找到盤塊索引表的地址d(存放索引表的盤塊)
索引表的d+3*4B處即直接檢索到物理塊設結果為e,在e盤塊中偏移428B。

根據外存空間空閒情況分配給檔案需要的磁碟空間
管理空閒空間
記錄已分配的空間

4、儲存空間的管理
為實現儲存空間分配,系統需要:
記住空閒儲存空間使用情況;為空間設定相應的資料結構;
提供對儲存空間分配、回收的操作手段。
典型的管理方法:
1)空閒表和空閒連結串列法
2)位示圖法
3)成組連結法

1)空閒表法和空閒連結串列法
空閒表法
常用於連續分配管理方式
資料結構
系統為外存上的所有空閒區建立一張空閒表
每個空閒區對應一個空閒表項
(表項包括序號、空閒區的第一個盤塊號、空閒盤塊數等。)
將所有空閒區按其起始盤塊號遞增的次序排列,如右圖。

在這裡插入圖片描述
儲存空間的分配與回收操作
與記憶體的動態分配類似,同樣可採用首次適應演算法、迴圈首次適應演算法等。
回收主要解決對資料結構的資料修改。
應該說明,雖然很少採用連續分配方式,然而在外存的管理中,由於它具有較高的分配速度,可減少訪問磁碟的I/O頻率,故它在諸多分配方式中仍佔有一席之地。(如實現虛擬用的部分外存就是連續分配方式)
空閒連結串列法
將所有空閒盤區拉成一條空閒鏈。
資料結構:鏈
根據構成鏈所用基本元素的不同,可把連結串列分成兩種形式:
空閒盤塊鏈
空閒盤區鏈

空閒盤塊鏈
將磁碟上的所有空閒空間,以盤塊為單位拉成一條鏈。
因建立檔案而請求分配空間時,系統從鏈首依次摘下適當數目的空閒盤塊分配給使用者。
因刪除檔案而釋放儲存空間時,系統將回收的盤塊依次插入空閒盤塊鏈的末尾。
優點:分配和回收一個盤塊的過程非常簡單,但為一個檔案分配盤塊時,可能要重複操作多次

在這裡插入圖片描述
空閒盤區鏈

將所有空閒盤區拉成一條鏈。每個盤區上含有:
指示下一空閒盤區的指標、本盤區大小等資訊
分配通常採用首次適應演算法。回收盤區時,將回收區與相鄰的空閒盤區相合並。
為提高檢索速度,可以採用顯式方法,為空閒盤區建立一張連結串列放在記憶體中。
分配、回收操作涉及的鏈式資料結構的處理方便
在這裡插入圖片描述

空閒盤塊鏈
分配回收簡單。連結串列長,大量分配時需要操作的指標多
空閒盤區鏈
連結串列長度不定,分配時操作的指標數量相對較少,但分配回收操作相對複雜。

2)位示圖法——位示圖
利用二進位制的一位來表示一個盤塊的使用情況。
值為0表示對應的盤塊空閒,為1表示已分配。有的系統則相反。
磁碟上的所有盤塊都有一個二進位制位與之對應,這樣由所有盤塊所對應的位構成一個集合,稱為位示圖。
總塊數=mn。可用mn個位數來構成位示圖,可看成是二維陣列(資料結構)。

在這裡插入圖片描述

盤塊的分配與回收
根據位示圖進行盤塊分配:
順序掃描位示圖。找到為0的二進位制位。
將所找到的一個或一組二進位制位,轉換成與之對應的盤塊號。進行分配操作。
盤塊號計算公式為:盤塊號 = 列總數*(i-1)+ j;
(注意下標i,j從1開始)
修改位示圖。
根據位示圖進行盤塊回收:
將回收盤塊的盤塊號轉換成位示圖中的行號和列號。轉換公式為:i=(盤塊號-1)div列數+1;j=(盤塊號-1)mod列數+1
Div 求商,mod 取餘,公式中的i、j都是從1開始的
(如12號盤塊轉換後為1,12)
修改位示圖。

優點:從位示圖中很容易找到一個或一組相鄰接的空閒盤塊。
但限於容量問題,常用於微型機和小型機中。

3)成組連結法

大型檔案系統,空閒表或空閒連結串列太長不方便管理操作。
UNIX系統中採用成組連結法,這是將兩種方法結合而形成的一種空閒盤塊管理方法。
中心思想:
所有盤塊按規定大小劃分為組;
組間建立連結;
組內的盤塊藉助一個系統棧可快速處理,且支援離散分配回收。

在這裡插入圖片描述

成組連結法
連結串列長度上限固定
組內的盤塊藉助一個系統棧可快速處理,且分配回收比較簡單。
支援離散分配回收。

空閒盤塊的組織
空閒盤塊號棧。
用來存放當前可用的一組空閒盤塊的盤塊號(最多含100個號)
棧中尚有的空閒盤塊號數N。
(N兼具棧頂指標用。棧底為S.free(0),棧滿時棧頂到達S.free(99),N=100,表示有100個盤塊供使用。
連結
每一組的第一個盤塊記錄下一組的盤塊號,形成了一條鏈。
總將鏈的第一組盤塊總數和所有的盤塊號,記入棧,作為當前可供分配的空閒盤塊號

空閒盤塊的分配與回收
分配盤塊時,須呼叫分配過程來完成。
先檢查空閒盤塊號棧是否上鎖,如沒有,便從棧頂取出一空閒盤塊號,將與之對應的盤塊分配給使用者,然後將棧頂指標下移一格。
若該盤塊號已是棧底,即S.free(0),到達當前棧中最後一個可供分配的盤塊號。
讀取該盤塊號所對應的盤塊中的資訊:即下一組可用的盤塊號入棧。
原棧底盤塊分配出去。修改棧中的空閒盤塊數。
回收
回收盤塊號記入棧頂,空閒數N加1
N達到100時,若再回收一塊,則將該100條資訊填寫入新回收塊。