操作系統還負責磁盤管理的其他幾個方面。本節讨論磁盤初始化、磁盤引導、壞塊恢複等。
磁盤格式化一個新的磁盤是一個空白盤,它隻是一個磁性記錄材料的盤子。在磁盤可以存儲數據之前,它必須分成扇區,以便磁盤控制器能夠讀寫,這個過程稱為低級格式化或物理格式化。低級格式化為每個扇區使用特殊的數據結構,填充磁盤。每個扇區的數據結構通常由頭部、數據區域(通常為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的自舉程序更加複雜。它可以從非固定的磁盤位置處加載整個操作系統,并且開始運行操作系統。即使如此,完整的自舉程序可能很小。
Windows的磁盤引導
下面以Windows為例,分析引導過程。首先,請注意,Windows允許将磁盤分為多個分區:
因為磁盤具有移動部件并且容錯差(請記住,磁頭恰好飛行在磁盤表面上方),容易出現故障。有時,故障是徹底的,在這種情況下,需要更換磁盤,并且從備份介質上将其内容恢複到新的磁盤。更為常見的是,一個或多個扇區壞掉。大多數磁盤出廠時就有壞塊。這些壞塊的處理多種多樣,取決于使用的磁盤和控制器。對于簡單磁盤,如采用IDE控制器的磁盤,可以手動處理壞塊。一種策略是,在格式化磁盤時掃描磁盤以便發現壞塊。發現的任何壞塊,标記為不可用,以便文件系統不再分配它們。如果在正常操作時塊變壞了,則必須人工運行特殊程序(如Linux命令 badlocks),以便搜索壞塊并鎖定它們。壞塊中的數據通常會丢失。更為複雜的磁盤在恢複壞塊時更為智能。它的控制器維護磁盤内的壞塊列表。這個列表在出廠低級格式化時初始化,并且在磁盤使用壽命内更新。低級格式化将一些塊放在一邊作為備用,操作系統看不到這些塊。控制器可以采用備用塊來邏輯地替代壞塊。這種方案稱為扇區備用或扇區轉寄。典型的壞扇區事務可能如下:
請注意,控制器的這種重定向可能會使操作系統的磁盤調度算法失效。為此,大多數磁盤在格式化時為每個柱面保留了少量的備用塊,還保留了一個備用柱面。當需要重新映射壞塊時,控制器盡可能地使用同一柱面的備用扇區。作為扇區備用的替代方案,有些控制器可以采用扇區滑動來替換壞塊。這裡有一個例子,假定邏輯塊17變壞,并且第一個可用的備用塊在扇區202之後。然後,扇區滑動重新映射從17到202的所有扇區,将它們全部下移一個扇區。也就是說,扇區202複制到備用扇區,扇區201到 202,200到 201,依次類推,直到扇區18複制到扇區19。按這種方式滑動扇區釋放扇區18的空間,以使扇區17 能夠映射到它。壞塊的更換一般不是全自動的,因為壞塊的數據通常會丟失。一些軟錯誤可能觸發一個進程,以便複制塊數據和備份或滑動塊。然而,不可恢複的硬錯誤導緻數據丢失。因此,任何使用壞塊的文件必須修複(如從備份磁帶中恢複),而且通常需要人工幹預。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!