1. 程式人生 > >evsqiezi

evsqiezi

本文分一下幾塊:磁碟簡介,磁碟排程,檔案儲存,儲存的資料結構,常見磁碟型別,磁碟問題。

磁碟簡介

   

如上圖所示,是一個活動頭盤的示意圖,當磁碟驅動器執行讀/寫功能時。碟片裝在一個主軸上,並繞主軸高速旋轉,當磁軌在讀/寫頭(又叫磁頭)下通過時,就可以進行資料的讀 /寫了。以下介紹一個相關概念。

固定頭盤:固定頭盤的每一個磁軌上都有獨立的磁頭,它是固定不動的,專門負責這一磁軌上資料的讀/寫。

活動頭盤: (如上圖)的磁頭是可移動的。每一個盤面上只有一個磁頭(磁頭是雙向的,因此正反盤面都能讀寫)。它可以從該面的一個磁軌移動到另一個磁軌。所有磁頭都裝在同一個動臂上,因此不同盤面上的所有磁頭都是同時移動的

(行動整齊劃一)

磁軌當磁碟旋轉時,磁頭若保持在一個位置上,則每個磁頭都會在磁碟表面劃出一個圓形軌跡,這些圓形軌跡就叫做磁軌。

磁軌密度:碟片同心圓半徑區域,每英寸所含的磁軌數。

扇區:磁碟上的每個磁軌被等分為若干個弧段,這些弧段便是磁碟的扇區。
柱面:硬碟通常由重疊的一組碟片構成,每個盤面都被劃分為數目相等的磁軌,並從外緣的“0”開始編號,具有相同編號的磁軌形成一個圓柱,稱之為磁碟的柱面。

壞扇區:在硬碟中無法被正常訪問或不能被正確讀寫的扇區都稱為Badsector。一個扇區能儲存512Bytes的資料,如果在某個扇區中有任何一個位元組不能被正確讀寫,則這個扇區為Badsector。除了儲存512Bytes外,每個扇區還有數十個Bytes資訊,包括標識(ID)、校驗值和其它資訊。這些資訊任何一個位元組出錯都會導致該扇區變“Bad”。

磁碟簇:扇區是磁碟最小的物理儲存單元,但由於作業系統無法對數目眾多的扇區進行定址,所以作業系統就將相鄰的扇區組合在一起,形成一個簇,然後再對簇進行管理。每個簇可以包括2、4、8、16、32或64個扇區。顯然,簇是作業系統所使用的邏輯概念,而非磁碟的物理特性。(簇(CLUST)的本意就是“一群”、“一組”,即一組扇區(一個磁軌可以分割成若干個大小相等的圓弧,叫扇區)的意思。

磁碟碟片:是將磁粉附著在鋁合金(新材料也有用玻璃)圓碟片的表面上,這些磁粉被劃分成稱為磁軌的若干個同心圓,在每個同心圓的磁軌上就好像有無數的任意排列的小磁鐵,它們分別代表著0和1的狀態.當這些小磁鐵受到來自磁頭的磁力影響時,其排列的方向會隨之改變。利用磁頭的磁力控制指定的一些小磁鐵方向,使每個小磁鐵都可以用來儲存資訊。

位密度:單位長度的位數。

磁碟容量:磁軌數*扇區數*扇區內位元組數*面數*片數。

磁頭:硬碟的磁頭是用線圈纏繞在磁芯上製成的,最初的磁頭是讀寫合一的,通過電流變化去感應訊號的幅度。對於大多數計算機來說,在與硬碟交換資料的過程中,讀操作遠遠快於寫操作,而且讀/寫是兩種不同特性的操作,這樣就促使硬碟廠商開發一種讀/寫分離磁頭。

磁碟碎片:其實磁碟碎片應該稱為檔案碎片,是因為檔案被分散儲存到整個磁碟的不同地方,而不是連續地儲存在磁碟連續的簇中形成的。 當應用程式所需的實體記憶體不足時,一般作業系統會在硬碟中產生臨時交換檔案,用該檔案所佔用的硬碟空間虛擬成記憶體。虛擬記憶體管理程式會對硬碟頻繁讀寫,產生大量的碎片,這是產生硬碟碎片的主要原因。 其他如IE瀏覽器瀏覽資訊時生成的臨時檔案或臨時檔案目錄的設定也會造成系統中形成大量的碎片。
磁碟分割槽:計算機中存放資訊的主要的儲存裝置就是硬碟,但是硬碟不能直接使用,必須對硬碟進行分割,分割成的一塊一塊的硬碟區域就是磁碟分割槽。在傳統的磁碟管理中,將一個硬碟分為兩大類分割槽:主分割槽和擴充套件分割槽。主分割槽是能夠安裝作業系統,能夠進行計算機啟動的分割槽,這樣的分割槽可以直接格式化,然後安裝系統,直接存放檔案。

平均尋道時間:它是指硬碟在接收到系統指令後,磁頭從開始移動到移動至資料所在的磁軌所花費時間的平均值,它一定程度上體現硬碟讀取資料的能力,是影響硬碟內部資料傳輸率的重要引數,單位為毫秒(ms)。不同品牌、不同型號的產品其平均尋道時間也不一樣,但這個時間越低,則產品越好,現今主流的硬碟產品平均尋道時間都在在9ms左右。

平均旋轉延遲:首先,讀寫頭沿徑向移動,移到要讀取的扇區所在磁軌的上方,這段時間稱為尋道時間(seek time)。讀寫頭起始位置與目標位置之間的距離不同,尋道時間也不同,一般為2--30毫秒,平均約為10毫秒。然後,通過碟片的旋轉,使得要讀取的扇區轉到讀寫頭的下方,這段時間稱為旋轉延遲時間(rotational latency time)。一個7200(轉 /每分鐘)的硬碟,每旋轉一週所需時間為60×1000÷7200=8.33毫秒,則平均旋轉延遲時間為8.33÷2=4.17毫秒(平均情況下,需要旋 轉半圈)。按照同樣的計算方法,一個5400(轉/每分鐘)的硬碟,平均旋轉延遲時間為60×1000÷5400÷2=5.56毫秒。

平均存取時間:平均尋道時間與平均旋轉延遲時間之和。

 轉速:是硬碟內電機主軸的旋轉速度,也就是硬碟碟片在一分鐘內所能完成的最大轉數。轉速的快慢是標示硬碟檔次的重要引數之一,它是決定硬碟內部傳輸率的關鍵因素之一,在很大程度上直接影響到硬碟的速度。硬碟的轉速越快,硬碟尋找檔案的速度也就越快,相對的硬碟的傳輸速度也就得到了提高。硬碟轉速以每分鐘多少轉來表示,單位表示為RPM,RPM是Revolutions Perminute的縮寫,是轉/每分鐘。

舉例:
假設一個有3個碟片的硬碟,共有4個記錄面,轉速為7200/分鐘,盤面有效記錄區域的外直徑為30CM,內直徑為10CM,記錄位密度為250位/MM,磁軌密度為8道/mm,每個磁軌分16扇區,每扇區512位元組。
總磁軌數:Ct=m*(de-di)/2*磁軌密度=4*(30-10)*10/2*8=3200。
非格式化容量:Cuf=總磁軌數*內徑磁軌周長*位密度=3200*3.14*10*10*250/8=29.95M。
格式化容量:Cf=總磁軌數×每扇區數×每扇區位元組數=4*=25M。
平均資料傳輸速率:Cg=每磁軌扇區數×每扇區位元組數×轉速/60=983040=960KB/S。

磁碟排程

當有多個程序訪問磁碟,應採用一種最佳的排程演算法,以使各程序對磁碟的平均訪問時間最小。由於在訪問磁碟的時間中,最主要是尋道時間,因此,磁碟排程目標,是使磁碟的平均尋道時間最小。常用的方法有:

1先來先服務(FCFS)。

2最短尋道時間優先(SSTF)。

該演算法選擇這樣的程序,其要求訪問的磁軌,與當前磁頭所在的磁軌距離最近,以使每次的定址時間最短,但這種演算法不能保證平均定址時間最短。

3掃描演算法(SCAN) 。

SSTF算飯會導致某些程序“飢餓“,該演算法不僅考慮到欲訪問的磁軌與當前磁軌間的距離,更優先考慮的是磁頭當前的移動方向。SCAN演算法所考慮的下一個訪問物件,應是其欲訪問的磁軌,既在當前磁軌之外,又是距離最近的。這樣自裡向外地訪問,直至再無更外的磁軌需要訪問時,才將磁臂換向自外向裡移動。此方法廣泛用於大,中,小型機器和網路中的磁碟排程。

4迴圈掃描(CSCAN)

CSCAN演算法規定磁頭單向移動,例如,只是自裡向外移動,當磁頭移動到最外的磁頭並方位後,磁頭立即返回到最裡的欲訪問磁軌,即將最小磁軌緊接著最大磁軌號構成迴圈,進行迴圈掃描。

5 N-STep-SCAN演算法。

將磁碟請求佇列分成若干個長度為N的子佇列,按FCFS演算法依次處理這些子佇列,而每處理一個佇列時又是按SCAN演算法。

6FSCAN演算法。

將磁碟請求佇列分成2個子佇列,一個是當前所有請求磁碟I/O的程序行程的佇列,由磁碟排程按SCAN演算法進處理,在掃描期間,將新出現的所有請求磁碟I/O的程序,放入另一個等待處理的請求佇列。這樣所有的請求都將被推遲到下次掃描時處理。

檔案的儲存

資料項:最低階的資料組織形式,分為基本資料項,組合資料項。

FCB:

設定原因--為了便於對檔案進行控制和管理,在檔案系統內部,給每個檔案惟一地設定一個檔案控制塊,這種資料結構通常由下列資訊項組成:
檔名——符號檔名,如 files,mydata,ml.c等。
檔案型別——指明檔案的屬性,是普通檔案,還是目錄檔案,特別檔案,是系統檔案還是使用者檔案等。
位置——指標,它指向存放該檔案的裝置和該檔案在裝置上的位置,如哪臺裝置的哪些盤塊上。
大小——當前檔案的大小(以位元組、字或塊為單位)和允許的最大值。
保護資訊——對檔案讀、寫及執行等操作的控制權限標誌。
使用計數——表示當前有多少個程序在使用(打開了)該檔案。
時間——日期和程序標誌,這個資訊反映出檔案有關建立、最後修改、最後使用等情況,可用於對檔案實施保護和監控等。
做什麼--核心利用這種結構對檔案實施各種管理。例如,按名存取檔案時,先要找到對應的控制塊,驗證許可權。僅當存取合法時,才能取得存放檔案資訊的盤塊地址。

檔案型別:

按用途分為:系統檔案,使用者檔案,庫檔案。按檔案中資料的形式分為:原始檔,目標檔案,可執行檔案。按存取控制屬性分為:只讀檔案,只寫檔案,只執行檔案。

檔案操作:建立,刪除,讀,寫,截斷。

檔案的邏輯結構:有結構檔案(又稱記錄式檔案),無結構檔案(又稱流式檔案)。

有結構檔案:

記錄的長度分為定長和不定長。儲存方式有:順序檔案,索引檔案,索引順序檔案。

磁碟儲存的資料結構

資料在磁碟上的儲存涉及的B樹,B+樹,B*樹等結構體。

B樹的概念

B樹的型別和節點定義如下圖所示:

檔案查詢的具體過程(涉及磁碟IO操作)

為了簡單,這裡用少量資料構造一棵3叉樹的形式,實際應用中的B樹結點中關鍵字很多的。上面的圖中比如根結點,其中17表示一個磁碟檔案的檔名;小紅方塊表示這個17檔案內容在硬碟中的儲存位置;p1表示指向17左子樹的指標。

其結構可以簡單定義為:

typedef struct {

    /*檔案數*/

    int  file_num;

    /*檔名(key)*/

    char * file_name[max_file_num];

    /*指向子節點的指標*/

     BTNode * BTptr[max_file_num+1];

     /*檔案在硬碟中的儲存位置*/

     FILE_HARD_ADDR offset[max_file_num];

}BTNode;

假如每個盤塊可以正好存放一個B樹的結點(正好存放2個檔名)。那麼一個BTNODE結點就代表一個盤塊,而子樹指標就是存放另外一個盤塊的地址。

下面,咱們來模擬下查詢檔案29的過程:

  1. 根據根結點指標找到檔案目錄的根磁碟塊1,將其中的資訊匯入記憶體。【磁碟IO操作 1次】
  2. 此時記憶體中有兩個檔名17、35和三個儲存其他磁碟頁面地址的資料。根據演算法我們發現:17<29<35,因此我們找到指標p2
  3. 根據p2指標,我們定位到磁碟塊3,並將其中的資訊匯入記憶體。【磁碟IO操作 2次】
  4. 此時記憶體中有兩個檔名26,30和三個儲存其他磁碟頁面地址的資料。根據演算法我們發現:26<29<30,因此我們找到指標p2
  5. 根據p2指標,我們定位到磁碟塊8,並將其中的資訊匯入記憶體。【磁碟IO操作 3次】
  6. 此時記憶體中有兩個檔名28,29。根據演算法我們查詢到檔名29,並定位了該檔案記憶體的磁碟地址。

分析上面的過程,發現需要3次磁碟IO操作和3次記憶體查詢操作。關於記憶體中的檔名查詢,由於是一個有序表結構,可以利用折半查詢提高效率。至於IO操作是影響整個B樹查詢效率的決定因素。

當然,如果我們使用平衡二叉樹的磁碟儲存結構來進行查詢,磁碟4次,最多5次,而且檔案越多,B樹比平衡二叉樹所用的磁碟IO操作次數將越少,效率也越高

B+是應檔案系統所需而產生的一種B樹的變形樹。

一棵m階的B+樹和m階的B樹的差異在於:

1.n棵子樹的結點中含有n個關鍵字; (而B 樹n棵子樹有n-1個關鍵字)

2.所有的葉子結點中包含了全部關鍵字的資訊,及指向含有這些關鍵字記錄的指標,且葉子結點本身依關鍵字的大小自小而大的順序連結。 (而B 樹的葉子節點並沒有包括全部需要查詢的資訊)

3.所有的非終端結點可以看成是索引部分,結點中僅含有其子樹根結點中最大(或最小)關鍵字。 (而B 樹的非終節點也包含需要查詢的有效資訊)

為什麼說B+比B 樹更適合實際應用中作業系統的檔案索引和資料庫索引?

1) B+-tree的磁碟讀寫代價更低

B+的內部結點並沒有指向關鍵字具體資訊的指標。因此其內部結點相對B 樹更小。如果把所有同一內部結點的關鍵字存放在同一盤塊中,那麼盤塊所能容納的關鍵字數量也越多。一次性讀入記憶體中的需要查詢的關鍵字也就越多。相對來說IO讀寫次數也就降低了。

舉個例子,假設磁碟中的一個盤塊容納16bytes,而一個關鍵字2bytes,一個關鍵字具體資訊指標2bytes。一棵9階B樹(一個結點最多8個關鍵字)的內部結點需要2個盤快。而B+樹內部結點只需要1個盤快。當需要把內部結點讀入記憶體中的時候,B 樹就比B+樹多一次盤塊查詢時間(在磁碟中就是碟片旋轉的時間)

2) B+-tree的查詢效率更加穩定

由於非終結點並不是最終指向檔案內容的結點,而只是葉子結點中關鍵字的索引。所以任何關鍵字的查詢必須走一條從根結點到葉子結點的路。所有關鍵字查詢的路徑長度相同,導致每一個數據的查詢效率相當。

B*-tree

B*-treeB+-tree的變體,在B+樹非根和非葉子結點再增加指向兄弟的指標;B*樹定義了非葉子結點關鍵字個數至少為(2/3)*M,即塊的最低使用率為2/3(代替B+樹的1/2)。給出了一個簡單例項,如下圖所示:

B+樹的分裂:當一個結點滿時,分配一個新的結點,並將原結點中1/2的資料複製到新結點,最後在父結點中增加新結點的指標;B+樹的分裂隻影響原結點和父結點,而不會影響兄弟結點,所以它不需要指向兄弟的指標。

B*樹的分裂:當一個結點滿時,如果它的下一個兄弟結點未滿,那麼將一部分資料移到兄弟結點中,再在原結點插入關鍵字,最後修改父結點中兄弟結點的關鍵字(因為兄弟結點的關鍵字範圍改變了);如果兄弟也滿了,則在原結點與兄弟結點之間增加新結點,並各複製1/3的資料到新結點,最後在父結點增加新結點的指標。

所以,B*樹分配新結點的概率比B+樹要低,空間使用率更高;

常見磁碟型別

常見磁碟型別有SATA,IDE,下面講講SATA跟IDE的對比。

SATA硬碟採用新的設計結構,資料傳輸快,節省空間,相對於IDE硬碟具有很多優勢:   
1 .SATA硬碟比IDE硬碟傳輸速度高。目前SATA可以提供150MB/s的高峰傳輸速率。今後將達到300 MB/s和600 MB/s。到時我們將得到比IDE硬碟快近10倍的傳輸速率。   
2. 相對於IDE硬碟的PATA40針的資料線,SATA的線纜少而細,傳輸距離遠,可延伸至1米,使得安裝裝置和機內佈線更加容易。聯結器的體積小,
這種線纜有效的改進了計算機內部的空氣流動,也改善了機箱內的散熱。   
3. 相對於IDE硬碟系統功耗有所減少。SATA硬碟使用500毫伏的電壓就可以工作。   
4. SATA可以通過使用多用途的晶片組或序列——並行轉換器來向後相容PATA裝置。由於SATA和PATA可使用同樣的驅動器,不需要對作業系統進行升級或其他改變。   
5. SATA不需要設定主從盤跳線。BIOS會為它按照1、2、3順序編號。這取決於驅動器接在哪個SATA聯結器上(安裝方便)。而IDE硬碟需要設定通過跳線來設定主從盤。   
6. SATA還支援熱插拔,可以象U盤一樣使用。而IDE硬碟不支援熱插拔。
網路儲存伺服器

NAS:Network Attached Storage

IP-SAN的發展 其實是由 NAS 和SAN 發展過來的。
NAS SAN IP-SAN 從應用的角度來看,其實不難看出 SAN 應用於大型的資料中心(比如銀行 保險業)IP-SAN 應用於中型的企業(在一個整體的大型的資料中心 IP-SAN是無法和SAN相比

的。畢竟一條專用的儲存區域網要比再IP網路中,在速率上要快很多。但成本就比SAN要低很多了)NAS應用於小型企業(無法實現資料庫的備份。只工作在檔案級的應用上)

磁碟問題

1磁碟容錯?

2磁碟上,刪除的資料如何恢復?