作業系統還負責磁碟管理的其他幾個方面。本節討論磁碟初始化、磁碟引導、壞塊恢復等。
磁碟格式化
一個新的磁碟是一個空白盤,它只是一個磁性記錄材料的盤子。在磁碟可以儲存資料之前,它必須分成磁區,以便磁碟控制器能夠讀寫,這個過程稱為
低階格式化或
物理格式化。
低階格式化為每個磁區使用特殊的資料結構,填充磁碟。每個磁區的資料結構通常由頭部、資料區域(通常為 512 位元組大小)和尾部組成。頭部和尾部包含了一些磁碟控制器的使用資訊,如磁區號和糾錯程式碼(ECC)。
當控制器通過正常 I/O 寫入一個磁區的資料時,ECC 採用根據資料區域所有位元組而計算的新值來加以更新。在讀取一個磁區時,ECC 值會重新計算,並與原來儲存的值相比較,如果儲存和計算的數值不一樣,則表示磁區資料區已損壞,並且磁碟磁區可能已壞。
ECC 是糾錯程式碼,因為它有足夠的資訊,以便在只有少數資料損壞時,控制器能夠識別哪些位已經改變,並且計算它們的正確值應該是什麼。然後它會報告可恢復的軟錯誤。當讀或寫一個磁區時,控制器自動進行 ECC 處理。
大多數磁碟在工廠時作為製造過程的一部分就已低階格式化。這種格式化能讓製造商測試磁碟,並且初始化邏輯塊號到無失真磁碟磁區的對映。對於許多磁碟,當磁碟控制器低階格式化磁碟時,還能指定在頭部和尾部之間留下多長的資料區。通常有幾個選擇,如 256、512 和 1024 位元組等。採用較大磁區來低階格式化磁碟,意味著每個磁軌的磁區數會更少,但也意味著每個磁軌的頭部和尾部資訊會更少,使用者資料的可用空間會更多。有的作業系統只能處理 512 位元組的磁區大小。
在可以使用磁碟儲存檔案之前,作業系統仍然需要將自己的資料結構記錄在磁碟上。這分為兩步:
-
第一步是將磁碟分為由柱面組成的多個分割區。作業系統可以將每個分割區作為一個單獨磁碟。例如,一個分割區可以儲存作業系統的可執行程式碼,而另一個分割區儲存使用者資料;
-
第二步是邏輯格式化,或建立檔案系統。在這一步,作業系統將初始的檔案系統資料結構儲存到磁碟上。這些資料結構包括空閒和已分配的空間和一個初始為空的目錄。
為了提高效率,大多數作業系統將塊組合在一起變成更大的塊,經常稱為簇。磁碟 I/O 按塊完成,而檔案系統 I/O 按簇完成,有效確保了 I/O 具有更多的順序存取和更少的隨機存取的特點。
有些作業系統允許特殊程式將磁碟分割區作為邏輯塊的一個大的有序陣列,而沒有任何檔案系統資料結構。這個陣列有時稱為原始磁碟,這個陣列的 I/O 稱為
原始 I/O。例如,有些資料庫系統喜歡使用原始 I/O,因為能夠允許它們控制每條資料庫記錄儲存的精確磁碟位置。原始 I/O 繞過所有檔案系統服務,如緩衝區快取、檔案鎖定、預取、空間分配、檔名和目錄等。雖然某些應用程式可以通過原始分割區來實現自己特殊的更為高效的儲存服務,但是大多數應用程式在使用常規檔案系統服務時會執行的更好。
引導塊
為了開始執行計算機,如開啟電源或重新啟動時,它必須有一個初始程式來執行。這個初始自舉程式往往很簡單。它初始化系統的所有部分,從 CPU 暫存器到裝置控制器和記憶體,接著啟動作業系統。為此,自舉程式找到磁碟上的作業系統核心,載入到記憶體,並轉到起始地址以便幵始作業系統的執行。
對於大多數計算機,自舉程式處在唯讀記憶體(ROM)中。這個位置非常方便,因為 ROM 不需要初始化而且位於固定位置,這便於處理器在上電或復位時開始執行。並且,由於 ROM 是唯讀的,不會受到計算機病毒的影響。它的問題是,改變這種自舉程式碼需要改變 ROM 硬體晶片。
因此,大多數系統儲存一個極小的自舉程式在啟動 ROM 中,它的作用是從磁碟上調入完整的載入程式。這個完整的載入程式可以輕鬆改變:可以簡單地將新的版本寫到磁碟。完整的載入程式儲存在磁碟固定位置上的“啟動塊”。具有啟動分割區的磁碟稱為啟動磁碟或系統磁碟。
引導 ROM 內的程式碼指示磁碟控制器將引導塊讀到記憶體(這時不載入裝置驅動程式),然後開始執行程式碼。完整的自舉程式比引導 ROM 的自舉程式更加複雜。它可以從非固定的磁碟位置處載入整個作業系統,並且開始執行作業系統。即使如此,完整的自舉程式可能很小。
圖 1 Windows的磁碟引導