作業系統之磁碟管理
磁碟儲存器具有容量大、存取速度快、支援隨機存取的特點,因此被廣泛應用於計算機系統中。對於作業系統來說,管理好磁碟的三大要求和目標是:
(1)合理有效利用磁碟:採用合理的檔案儲存空間分配演算法,儘量減少磁碟碎片,提高硬碟的利用率;
(2)提高磁碟的I/O速度:採用快取等技術,提供訪問速度;
(3)提高磁碟可靠性:採用冗餘和糾錯檢錯等技術,保證磁碟的資料不會被破壞。
外存的組織方式
檔案是存放在磁碟上的,而磁碟是以盤塊為基本的分配單位的,那麼一個檔案是怎麼存放在磁碟上的呢,這就是外存的組織方式,主要有以下三種:
(1)連續組織方式:要求為每一個檔案分配一組相鄰接的盤塊。就好像分配一個連續的陣列給檔案使用一樣,不過陣列元素是磁碟的盤塊。它的優點在於順序訪問容易,訪問速度快,因為都放在相鄰磁軌上,尋道時間很小。缺點為容易產生外部碎片,難以知道檔案長度,難以為其分配空間,不利於刪除和插入記錄。
(2)連結組織方式:為每個檔案分配不連續的磁碟空間,通過連結指標將一個檔案的所有盤塊連結在一起,由此形成鏈式檔案結構。這種方式可以克服連續組織方式的缺點,分為隱式連結和顯示連結兩種形式。
其中隱式連結的目錄項需要包含檔案的第一個盤塊和最後一個盤塊號,每一個盤塊都有一個指向下一塊盤塊的指標(最後一個盤塊除外)。但是這樣只能順序查詢,速度慢。
而現實連結指用於連結檔案的各物理塊的指標顯式地存放在記憶體的一張連結表中,該表在整個磁碟中僅設定一張。而檔案第一個盤塊號作為檔案的實體地址存放在FCB(檔案控制塊中,詳情見
那麼查詢的時候,將會把該表拷貝至記憶體中,大大減少訪問磁碟速度,提高了檢索的速度。
(3)索引組織方式:連結組織方式雖然克服了連續組織方式的弊端,但是仔細一看,我們可以發現,FAT技術並沒有解決掉查詢檔案必須要順序訪問的問題,同時為了查詢一個檔案,必須將整個FAT載入到記憶體中,因此是需要佔用記憶體空間的。
其實,在開啟一個檔案時,只需要把該檔案佔用的盤塊編號調入記憶體即可,而不是整個FAT,因此,我們可以將分配給一個檔案的所有盤塊號集中在一起,按順序放入一個磁碟塊中(稱為索引塊),這就是索引組織方式。
索引組織方式中,分直接索引分配和多級索引分配,直接索引分配中索引盤塊號就是檔案內容:
二級索引中,一級索引中的盤塊仍然存放索引資訊,第二級索引的盤塊才是真正存放檔案內容:
直接索引的缺點在於不能夠存放大檔案的資訊,而多級索引大大加快大型檔案的查詢速度,但是啟動磁碟的次數也增多,對於小檔案也是如此。在Unix系統中,通常採用直接索引和多級索引混合的方式,以適應不同大小檔案的空間需求。
磁碟空閒盤塊的管理
在上面的外存組織方式中,為一個檔案分配空閒盤塊,就需要知道哪些盤塊是空閒的,記錄磁碟有哪些空閒盤塊有以下方法:
(1)空閒表法:為外存上所有區域建立一張空閒表,每個空閒區對應於一個空閒表項,空閒表項裡面有表項的序號、空閒區的第一個盤塊號、空閒盤塊數等資訊:
對於空閒表法的空間分配和回收跟記憶體空間的動態分割槽分配類似,同樣可以採用首次適應、最佳適應等演算法,回收時,也會考慮回收區間相鄰的空間,進行適當的拼接。
(2)空閒連結串列法:將所有空閒盤塊區拉成一條空閒鏈。這種方法對分配和回收比較簡單,但是空閒盤塊鏈可能會很長。
(3)位示圖法:利用磁碟空間的每一位來表示磁碟一個盤塊是否空閒:
位示圖法的分配和回收就是把相應的位置為0或者1,這種方法佔用的空間小,適合儲存在記憶體中,就不需要每次都訪問磁碟。
(4)成組連結法:參見這篇文章:成組連結法。
提高磁碟I/O速度-磁碟快取記憶體
磁碟的讀取速度跟記憶體的讀取速度相差4~6個數量級,為了提高磁碟訪問速度,我們可以在記憶體中為磁碟盤塊設定一個緩衝區,稱為磁碟快取記憶體,在緩衝區中儲存一些盤塊的副本,當有一個磁碟請求時,先在緩衝區裡面查詢是否有該盤塊,若有,直接從緩衝區獲取資料;如果沒有再啟動磁碟讀入,並將內容送至緩衝區,以便下次訪問。
廉價磁碟冗餘陣列(RAID)
設定多臺磁碟儲存器,並行地讀取磁碟內容,加快I/O速度,同時採用容錯技術提高可靠性。