磁盤的邏輯組織
一個物理磁盤在邏輯上可分為幾個區域,分區信息存放在主引導塊分區表中。分區表中保存磁盤各種分區起始和終止的磁頭、柱面、扇區、總的扇區數等信息。在主引導塊中有三種類型分區:主分區、擴展區和邏輯分區。主分區是常用的,加載一個操作系統所需文件安裝其上,操作系統必須從主分區上引導,一個硬盤上只能有四個主分區。為了突破四個分區的限制,就要在四個分區中創建立一個擴展分區。擴展分區其實是一個邏輯盤,它不能格式化,也不能分配盤符。但可在擴展分區中創建一個或多個邏輯分區,或稱邏輯驅動器、卷(volume)。每個邏輯分區分配一個盤符,可以格式化成一個特定的文件系統。
為了實現存儲空間的分配和回收,系統應為存儲空間設置相應的結構以記住存儲空間的使用情況,並配以相應算法方便地對存儲空間進行分配和回收,下面介紹幾種常用的文件存儲空間管理方法。
1. 空閑表法
空閑表法屬於連讀分配方法,它為外存上所有空閑區建立一張空閑表,每個空閑區對應一個空閑表項,其中包括序號、該空閑區的第一盤塊號,該區的空閑盤塊數等信息,再將所有空閑區按起始盤塊號遞增的次序排列。UNIX S V操作系統盤對換區空間管理采用空閑表法,它與內存系統頁表管理采用同樣的數據結構和分配回收算法,這在第二章已作介紹。空閑表法的缺點是盤利用率不高,需要專用盤區來存放空閑表,在文件系統中較少采用連續分配。
2. 位示圖法
位示圖是利用二進制的一位來表示磁盤中一個塊的作用情況,當其值為0 時表示對應盤塊空閑;值為1時盤塊已分配。磁盤上所有盤塊都有一個二進制位與之對應,這樣,由所有盤塊所對應的位形成了一個集合稱為位示圖,位示圖用磁盤塊存放,稱為位圖塊。例如:SCO UNIX 操作系統盤塊大小為1KB,每個位圖塊有8192位,即每個位圖塊能管理8MB磁盤空間,要管理大的磁盤空間就需要多個位圖塊,這就需增設位圖索引塊,每個位圖塊塊號用4B記錄,這樣一個位圖索引塊可管理256個位圖塊,總共管理2GB大小磁盤空間。位圖塊在管理的8192塊盤塊的最前面,位圖塊中第i個字節(i=0,1,……1023)的第j位(j=0,1……7)管理的塊在該圖塊后塊數為N=i*8+j。 Windows2000、Linux等操作系統的盤塊管理都采用位示圖法。
3. 空閑塊鏈接法
空閑塊鏈接法是將磁盤上所有空閑盤區鏈接在一個隊列中,稱為空閑塊鏈。請求分配時從鏈頭依次摘下適當數目的空閑盤塊來分配,回收時將回收空閑盤塊鏈入空閑塊鏈尾部。空閑塊鏈接法的優點是不需專用塊存放管理信息,它的缺點是連續分配回收多塊空閑塊時需增加盤I/O操作。
4、鏈接索引塊
將空閑的物理存儲塊分組,每組通過指針鏈接起來,每組設置頭指針指向下一組空閑物理存儲塊。此鏈表稱為連接索引塊。鏈表的頭指針存放在特殊的塊中。一般頭指針存放在每一組的第一表目中,因此分配空閑分塊時應該從每一組的表尾開始查詢,直到表頭。當到表頭時,將表頭的內容賦值到特殊塊中,此時特殊塊中指向下一組空閑存儲組進行分配。
回收時,將空閑塊加到鏈表頭指針所指向的空閑組后就行,將空閑組加到鏈表表尾的空閑組后即可。
由於文件系統安裝后,磁盤專用塊拷入內存系統緩沖區,即空閑塊棧和空閑塊棧指針在內存緩沖區,所以成組鏈接法分配和回收操作大部分情況只與內存進行讀寫,所以速度較快。
--------------------------------------------------------------------------------------
文件存儲空間分配有三種方法:連續分配、鏈表分配、索引分配。
連續分配:針對物理存儲結構為連續存儲的文件,在FAT表中對連續文件的記錄是文件名、文件存儲的起始塊、文件存儲的長度。
連續分配的優點是查找速度快,但是不適合文件的動態增長和減少的情況。
索引分配:對每一個文件存儲空間分配一個索引塊存儲文件存儲塊索引表,索引表中可以使存儲塊標號,或者是存儲塊起始標號和長度。這樣文件就可以不連續的存儲在存儲介質中,有利於文件的動態變化。但是缺點是,要為索引塊單獨分配存儲塊,當索引塊較大時浪費存儲空間。
鏈表分配:解決了上述兩種方法的缺點,FAT中記錄了文件存儲塊的起始位置和長度,而實際中每一個存儲塊之間用指針鏈接,該方法最大的優點就是有利於消除碎片,有效的利用零散的存儲空間,但是缺點是查找搜索時間將會較長,而且在存儲塊中指針要占用一定的空間。