4.11 磁盤的管理:磁盤初始化、引導塊、壞塊
磁盤初始化
一個新的磁盤只是一個含有磁性記錄材料的空白盤。在磁盤能存儲數據以前,它必須分紅扇區以便磁盤控制器能進行讀和寫操做,這個過程稱爲低級格式化(物理分區)。低級格式化爲磁盤的每一個扇區釆用特別的數據結構。每一個扇區的數據結構一般由頭、數據區域(一般爲512B大小)和尾部組成。頭部和尾部包含了一些磁盤控制器所使用的信息。
爲了使用磁盤存儲文件,操做系統還須要將本身的數據結構記錄在磁盤上:第一步將磁盤分爲由一個或多個柱面組成的分區(即咱們熟悉的C盤、D盤等形式的分區);第二步對物理分區進行邏輯格式化(建立文件系統),操做系統將初始的文件系統數據結構存儲到磁盤上,這些數據結構包括空閒和已分配的空間以及一個初始爲空的目錄。
引導塊
計算機啓動時須要運行一個初始化程序(自舉程序),它初始化CPU、寄存器、設備控制器和內存等,接着啓動操做系統。爲此,該自舉程序應找到磁盤上的操做系統內核,裝入內存,並轉到起始地址,從而開始操做系統的運行。
自舉程序一般保存在ROM中,爲了不改變自舉代碼須要改變ROM硬件的問題,故只在ROM中保留很小的自舉裝入程序,將完整功能的自舉程序保存在磁盤的啓動塊上,啓動塊位於磁盤的固定位。擁有啓動分區的磁盤稱爲啓動磁盤或者系統磁盤。
壞塊
因爲磁盤有移動部件且容錯能力弱,因此容易致使一個或多個扇區損壞。部分磁盤甚至從出廠時就有壞扇區。根據所使用的磁盤和控制器,對這些塊有多種處理方式。
對於簡單磁盤,如電子集成驅動器(IDE)。壞扇區可手工處理,如MS-DOS的Format 命令執行邏輯格式化時便會掃描磁盤以檢查壞扇區。壞扇區在FAT表上會標明,所以程序不會使用。
對於複雜的磁盤,如小型計算機系統接口(SCSI),其控制器維護一個磁盤壞塊鏈表。該鏈表在出廠前進行低級格式化時就初始化了,並在磁盤的整個使用過程當中不斷更新。低級格式化將一些塊保留做爲備用,對操做系統透明。控制器能夠用備用塊來邏輯地替代壞塊,這種方案稱爲扇區備用。
4.12 文件系統知識點總結
磁盤結構
引導控制塊(Boot Control Block)包括系統從該分區引導操做系統所須要的信息。若是磁盤沒有操做系統,那麼這塊的內容爲空。它一般爲分區的第一塊。UFS稱之爲引導塊(Boot Block); NTFS 稱之爲分區引導扇區(Partition Boot Sector)。
分區控制塊(Partition Control Block)包括分區詳細信息,如分區的塊數、塊的大小、 空閒塊的數量和指計、空閒FCB的數量和指針等。UPS稱之爲超級塊(Superblock);而NTFS 稱之爲主控文件表(Master File Table)。
內存結構
內存分區表包含全部安裝分區的信息。
內存目錄結構用來保存近來訪問過的目錄信息。對安裝分區的目錄,能夠包括一個指向分區表的指針。
系統範圍的打開文件表,包括每一個打開文件的FCB複製和其餘信息。
單個進程的打開文件表,包括一個指向系統範圍內已打開文件表中合適條目和其餘信息的指針。
文件系統實現概述
爲了建立一個文件,應用程序調用邏輯文件系統。邏輯文件系統知道目錄結構形式,它將分配一個新的FCB 給文件,把相應目錄讀入內存,用新的文件名更新該目錄和FCB,並將結果寫回到磁盤。圖4-32顯示了一個典型 的 FCB。
圖4-32 典型的FCB
一旦文件被建立,它就能用於I/O,不過首先要打開文件。調用open將文件名傳給文件系統,文件系統根據給定文件名搜索目錄結構。部分目錄結構一般緩存在內存中以加快目錄操做。找到文件後,其FCB複製到系統範圍的打開文件表。該表不但存儲FCB,也有打開該文件的進程數量的條目。
而後,單個進程的打開文件表中會增長一個條目,並經過指針將系統範圍的打開文件表的條目同其餘域(文件當前位置的指針和文件打開模式等)相連。調用open返回的是一個 指向單個進程的打開文件表中合適條目的指針。因此文件操做都是經過該指針進行。
文件名沒必要是打開文件表的一部分,由於一旦完成對FCB在磁盤上的定位,系統就不 再使用文件名了。對於訪問打開文件表的索引,UNIX稱之爲文件描述符(File Descriptor);而Windows 2000稱之爲文件句柄(File Handle)。所以,只要文件沒有被關閉,全部文件操 做經過打開文件表來進行。
當一個進程關閉文件,就刪除一個相應的單個進程打開文件表的條目即目錄項,系統範 圍內打開文件表的打開數也會遞減。當打開文件的全部用戶都關閉了一個文件時,更新的文 件信息會複製到磁盤的目錄結構中,系統範圍的打開文件表的條目也將刪除。
在實際中,系統調用open會首先搜索系統範圍的打開文件表以肯定某文件是否已被其 他進程所使用。若是是,就在單個進程的打開文件表中建立一項,並指向現有系統範圍的打 開文件表的相應條目。該算法在文件已打開時,能節省大量開銷。
混合索引分配的實現
混合索引分配已在UNIX系統中釆用。在UNK SystemV的索引結點中,共設置了 13 個地址項,即iaddr(O)~iaddr(12),如圖4-33所示。在BSD UNIX的索引結點中,共設置了 13個地址項,它們都把全部的地址項分紅兩類,即直接地址和間接地址。
圖4-33 UNIX系統的inode結構示意圖
1) 直接地址
爲了提升對文件的檢索速度,在索引結點中可設置10個直接地址項,即用iaddr(O)~iaddr(9)來存放直接地址。換言之,在這裏的每項中所存放的是該文件數據所在盤塊的盤塊號。假如每一個盤塊的大小爲4KB,當文件不大於40KB時,即可直接從索引結點中讀出該文 件的所有盤塊號。
2) 一次間接地址
對於大、中型文件,只釆用直接地址並不現實。可再利用索引結點中的地址項iaddr(lO) 來提供一次間接地址。這種方式的實質就是一級索引分配方式。圖中的一次間址塊也就是索 引塊,系統將分配給文件的多個盤塊號記入其中。在一次間址塊中可存放1024個盤塊號, 於是容許文件長達4MB。
3) 屢次間接地址
當文件長度大於4MB+40KB(—次間址與10個直接地址項)時,系統還須釆用二次間 址分配方式。這時,用地址項iaddr(11)提供二次間接地址。該方式的實質是兩級索引分配方 式。系統此時是在二次間址塊中記入全部一次間址塊的盤號。在釆用二次間址方式時,文件 最大長度可達4GB。同理,地址項iaddr(12)做爲三次間接地址,其所容許的文件最大長度可 達 4TB。