【操做系統】磁盤

4.9 磁盤的結構

磁盤(Disk)是由表面塗有磁性物質的金屬或塑料構成的圓形盤片經過一個稱爲磁頭的導體線圈從磁盤中存取數據。在讀/寫操做期間,磁頭固定,磁盤在下面高速旋轉。如圖 4-23所示,磁盤的盤面上的數據存儲在一組同心圓中,稱爲磁道。每一個磁道與磁頭同樣寬, 一個盤面有上千個磁道。磁道又劃分爲幾百個扇區,每一個扇區固定存儲大小(一般爲512B), 一個扇區稱爲一個盤塊。相鄰磁道及相鄰扇區間經過必定的間隙分隔開,以免精度錯誤。

注意,因爲扇區按固定圓心角度劃分,因此密度從最外道向裏道增長,磁盤的存儲能力受限於最內道的最大記錄密度

磁盤安裝在一個磁盤驅動器中,它由磁頭臂、用於旋轉磁盤的主軸和用於數據輸入/輸 出的電子設備組成。如圖4-24所示,多個盤片垂直堆疊,組成磁盤組,每一個盤面對應一個 磁頭,全部磁頭固定在一塊兒,與磁盤中心的距離相同且一塊兒移動。全部盤片上相對位置相同 的磁道組成柱面。按照這種物理結構組織,扇區就是磁盤可尋址的最小存儲單位,磁盤地址 用「柱面號 • 盤面號 • 扇區號(或塊號)」表示。


磁盤按不一樣方式能夠分爲若干類型:磁頭相對於盤片的徑向方向固定的稱爲固定頭磁盤,每一個磁道一個磁頭;磁頭可移動的稱爲活動頭磁盤,磁頭臂能夠來回伸縮定位磁道。磁 盤永久固定在磁盤驅動器內的稱爲固定盤磁盤;可移動和替換的稱爲可換盤磁盤。

4.10 磁盤調度算法

一次磁盤讀寫操做的時間由尋找(尋道)時間、延遲時間和傳輸時間決定:

1) 尋找時間Ts:活動頭磁盤在讀寫信息前,將磁頭移動到指定磁道所須要的時間。這個時間除跨越n條磁道的時間外,還包括啓動磁臂的時間s,即:
式中,m是與磁盤驅動器速度有關的常數,約爲0.2ms,磁臂的啓動時間約爲2ms。

2)延遲時間Tr磁頭定位到某一磁道的扇區(塊號)所須要的時間,設磁盤的旋轉速度爲r,則:
對於硬盤,典型的旋轉速度爲5400r/m,至關於一週11.1ms,則Tr爲5.55ms;對於軟盤,其旋轉速度在300~600r/m之間,則Tr爲50~100ms。

3) 傳輸時間Tt:從磁盤讀出或向磁盤寫入數據所經歷的時間,這個時間取決於每次所讀/寫的字節數b和磁盤的旋轉速度:
式中,r爲磁盤每秒鐘的轉數;N爲一個磁道上的字節數。

在磁盤存取時間的計算中,尋道時間與磁盤調度算法相關,下面將會介紹分析幾種算法,而延遲時間和傳輸時間都與磁盤旋轉速度相關,且爲線性相關,因此在硬件上,轉速是磁盤性能的一個很是重要的參數。

總平均存取時間Ta能夠表示爲:

雖然這裏給出了總平均存取時間的公式,可是這個平均值是沒有太大實際意義的,由於在實際的磁盤I/O操做中,存取時間與磁盤調度算法密切相關。調度算法直接決定尋找時間,從而決定了總的存取時間。

目前經常使用的磁盤調度算法有如下幾種:

1) 先來先服務(First Come First Served, FCFS)算法

FCFS算法根據進程請求訪問磁盤的前後順序進行調度,這是一種最簡單的調度算法,如圖4-25所示。該算法的優勢是具備公平性。若是隻有少許進程須要訪問,且大部分請求都是訪問簇聚的文件扇區,則有望達到較好的性能;但若是有大量進程競爭使用磁盤,那麼這種算法在性能上每每接近於隨機調度。因此,實際磁盤調度中考慮一些更爲複雜的調度算法。


圖4-25 FCFS磁盤調度算法

例如,磁盤請求隊列中的請求順序分別爲5五、5八、3九、1八、90、160、150、3八、184,磁頭初始位置是100磁道,釆用FCFS算法磁頭的運動過程如圖4-25所示。磁頭共移動了 (45+3+19+21+72+70+10+112+146)=498 個磁道,平均尋找長度=498/9=55.3。

2) 最短尋找時間優先(Shortest  Seek  Time  First, SSTF)算法

SSTF算法選擇調度處理的磁道是與當前磁頭所在磁道距離最近的磁道,以使每次的尋找時間最短。固然,老是選擇最小尋找時間並不能保證平均尋找時間最小,可是能提供比 FCFS算法更好的性能。這種算法會產生「飢餓」現象。如圖4-26所示,若某時刻磁頭正在 18號磁道,而在18號磁道附近頻繁地增長新的請求,那麼SSTF算法使得磁頭長時間在18 號磁道附近工做,將使184號磁道的訪問被無限期地延遲,即被「餓死」。


圖4-26  SSTF磁盤調度算法

例如,磁盤請求隊列中的請求順序分別爲5五、5八、3九、1八、90、160、150、3八、184,磁頭初始位置是100磁道,釆用SSTF算法磁頭的運動過程如圖4-26所示。磁頭共移動了 (10+32+3+16+1+20+132+10+24)=248 個磁道,平均尋找長度=248/9=27.5。

3) 掃描(SCAN)算法(又稱電梯算法)

SCAN算法在磁頭當前移動方向上選擇與當前磁頭所在磁道距離最近的請求做爲下一次服務的對象,如圖4-27所示。因爲磁頭移動規律與電梯運行類似,故又稱爲電梯調度算法。SCAN算法對最近掃描過的區域不公平,所以,它在訪問局部性方面不如FCFS算法和 SSTF算法好。


圖4-27  SCAN磁盤調度算法

例如,磁盤請求隊列中的請求順序分別爲5五、5八、3九、1八、90、160、150、3八、184,磁頭初始位置是100 磁道。釆用SCAN算法時,不但要知道磁頭的當前位置,還要知道磁頭的移動方向,假設磁頭沿磁道號增大的順序移動,則磁頭的運動過程如圖4-27所示。磁頭共移動了(50+10+24+94+32+3+16+1+20)=250 個磁道,平均尋找長度=250/9=27.8。

4) 循環掃描(Circulair SCAN, C-SCAN)算法

在掃描算法的基礎上規定磁頭單向移動來提供服務,回返時直接快速移動至起始端而不服務任何請求。因爲SCAN算法偏向於處理那些接近最裏或最外的磁道的訪問請求,因此使用改進型的C-SCAN算法來避免這個問題。

釆用SCAN算法和C-SCAN算法時磁頭老是嚴格地遵循從盤面的一端到另外一端,顯然,在實際使用時還能夠改進,即磁頭移動只須要到達最遠端的一個請求便可返回,不須要到達磁盤端點。這種形式的SCAN算法和C-SCAN算法稱爲LOOK和C-LOOK調度。這是由於它們在朝一個給定方向移動前會查看是否有請求。注意,若無特別說明,也能夠默認SCAN 算法和C-SCAN算法爲LOOK和C-LOOK調度。


圖4-28  C-SCAN磁盤調度算法

例如,磁盤請求隊列中的請求順序分別爲5五、5八、3九、1八、90、160、150、3八、184,磁頭初始位置是100磁道。釆用C-SCAN算法時,假設磁頭沿磁道號增大的順序移動,則磁頭的運動過程如圖4-28所示。磁頭共移動了(50+10+24+166+20+1+16+3+32)=322個磁道,平均尋道長度=322/9=35.8。

對比以上幾種磁盤調度算法,FCFS算法太過簡單,性能較差,僅在請求隊列長度接近於1時才較爲理想;SSTF算法較爲通用和天然;SCAN算法和C-SCAN算法在磁盤負載較大時比較佔優點。它們之間的比較見表4-4。

表4-4  磁盤調度算法比較

優  點 缺  點
FCFS算法 公平、簡單 平均尋道距離大,僅應用在磁盤I/O較少的場合
SSTF算法 性能比「先來先服務」好 不能保證平均尋道時間最短,可能出現「飢餓」現象
SCAN算法 尋道性能較好,可避免「飢餓」現象 不利於遠離磁頭一端的訪問請求
C-SCAN算法 消除了對兩端磁道請求的不公平 --

除減小尋找時間外,減小延遲時間也是提升磁盤傳輸效率的重要因素。能夠對盤面扇區進行交替編號,對磁盤片組中的不一樣盤面錯位命名。假設每一個盤面有8個扇區,磁盤片組共 8個盤面,則能夠釆用如圖4-29所示的編號。


圖4-29磁盤片組扇區編號

磁盤是連續自轉設備,磁頭讀/寫一個物理塊後,須要通過短暫的處理時間才能開始讀/ 寫下一塊。假設邏輯記錄數據連續存放在磁盤空間中,若在盤面上按扇區交替編號連續存放,則連續讀/寫多個記錄時能減小磁頭的延遲時間;同柱面不一樣盤面的扇區若能錯位編號,連續讀/寫相鄰兩個盤面的邏輯記錄時也能減小磁頭延遲時間。

因爲傳輸時間由磁盤轉速決定,因此沒法經過其餘方法減小傳輸時間。以圖4-29爲例,在隨機扇區訪問狀況下,定位磁道中的一個扇區平均須要轉過4個扇區,這時,延遲時間是傳輸時間的4倍,這是一種很是低效的存取方式。理想化的狀況是不須要定位而直接連續讀取扇區,沒有延遲時間,這樣磁盤數據存取效率能夠成倍提升。可是因爲讀取扇區的順序是不可預測的,因此延遲時間不可避免。圖4-29中的編號方式是讀取連續編號扇區時的一種方法。

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。
相關文章
相關標籤/搜索