存儲系統三

4.存儲系統三,虛擬存儲器,磁盤陣列技術
(1)虛擬存儲器
虛擬存儲器又稱爲虛擬存儲系統,由主存儲器和輔助存儲器共同組成。它把輔助存儲器作爲主存儲器的擴充,對應用程序員來說,好像微機系統有一個容量很大的主存。
計算機在運行程序時,需將代碼加載入內存中,CPU讀取內存中的代碼並執行。
早期的計算機在沒有引入 虛擬存儲器之前,需將整個待運行的程序加載到內存中,因爲內存空間有限,當待加載的程序過大時就會出現問題(多進程,則需要佔用更多的內存空間)。現代計算機引入虛擬存儲器的概念,通過將對內存進行抽象,將其作爲存儲在硬盤上數據的高速緩存,只將當前進程部分代碼緩存到主存中(當前進程的程序較少時,可以全部緩存在主存中),從而提高了主存的利用率,使其同時可以容納更多的進程同時運行。
1.地址空間及地址
  CPU只能執行已裝入主存的那一部分程序塊,與此同時,爲了提高主存的空間利用率,還應及時釋放已不使用的信息所佔用的空間,以便裝入其他有用的信息。這樣,隨着程序的運行,各種信息就會在主存與輔存之間不斷地調入、調出。
在虛擬存儲器中要注意如下三個概念。
  ① 虛擬地址空間。又稱爲虛存地址空間,是應用程序員用來編寫程序的地址空間,與此相對應的地址稱爲虛擬地址或邏輯地址。
  ② 主存(內存)地址空間。又稱爲實存地址空間,是存儲、運行程序的空間,其相應的地址稱爲主存物理地址或實地址。
  ③ 輔存(外存)地址空間也就是磁盤存儲器的地址空間,是用來存放程序的空間,相應的地址稱爲輔存地址或磁盤地址。
  不難看出,主存與輔存的關係極類似於主存與高速緩存的關係,但主存—cache體系和主存—輔存體系還有一些差別。
  ① 主存—cache體系的目的是滿足程序對速度的要求,而主存—輔存體系是爲了滿足容量的要求。所以前者容量小,傳送信息塊的長度短,讀/寫速度快;而後一種體系容量大,傳送數據塊的長度長,讀/寫速度相對較慢。
  ② 在主存—cache體系中,CPU可以直接訪問cache和主存;而在主存—輔存體系結構中,CPU不可以直接訪問輔存。
  ③ 爲了保證速度,主存—cache體系的存取信息過程、地址變換和替換策略全部採用硬件來實現,而主存—輔存體系基本上由操作系統的存儲管理軟件輔助一些硬件進行數據塊的劃分來實現主存—輔存之間的調度,所以需要設計存儲管理軟件來實現這些功能。
2.工作原理
  虛擬存儲器的工作原理是:在執行程序時,允許將程序的一部分調入主存,其他部分保留在輔存。即由操作系統的存儲管理軟件先將當前要執行的程序段(如主程序)從輔存調入主存,暫時不執行的程序段(如子程序)仍保留在輔存,當需要執行存放在輔存的某個程序段時,由CPU執行某種程序調度算法將它們調入主存。
  虛擬存儲器由硬件和軟件(操作系統)自動實現對存儲信息的調度和管理,其工作過程如圖所示。
這裏寫圖片描述
當應用程序訪問虛擬存儲器時,必須給出邏輯地址(虛擬地址)。首先進行內部地址轉換(過程①),如果要訪問的數據在主存中(也就是內部地址轉換成功),則根據轉換所得到的物理地址訪問主存儲器(過程②);如果內部地址轉換失敗,則要根據邏輯地址進行外部地址轉換(過程③),得到輔存地址。與此同時,還需檢查主存中是否有空閒區(過程③),如果沒有,就要根據替換算法,把主存中暫時不用的某塊數據通過I/O機構調出,送往輔存(過程④),再把由過程③得到的輔存地址中的塊通過I/O機構送往主存(過程⑤);如果主存中有空閒區域,則直接把輔存中有關的塊通過I/O機構送往主存(過程⑤)。
塊是主存與輔存之間數據傳送的基本單位。根據對虛擬存儲器不同的管理方式,塊可以具體化爲段、頁和段頁三種形式,可相應地形成段式存儲器、頁式存儲器和段頁式存儲器。
分段存儲管理:
分段存儲管理的基本原理是:按程序的邏輯結構,以段爲單位劃分,各個段的長度因程序而異。爲了說明邏輯段的各種屬性,系統爲每一個段建立一個段表(駐留在內存),記錄段的若干信息,如段號、段起點、段長度和段裝入情況等。CPU通過訪問段表,判斷該段是否已調入主存,並完成邏輯地址與物理地址之間的轉換。分段地址轉換如圖5.34所示。
邏輯地址由段號S和段內地址W組成,段號S相當於邏輯段的段名,它表示該邏輯段的起始地址。在進行地址轉換時,操作系統用S檢索段表,段表中記錄的信息1表明該段已調入主存,b是S段裝入主存的起始地址,因此該邏輯地址對應的物理地址爲b+W。
在分段存儲管理方式中,由於段的分界與程序的自然分界相對應,所以具有邏輯獨立性,易於程序的編譯、管理、修改和保護,也便於多道程序共享。但是,因爲段的長度參差不齊,起點和終點不定,給主存空間分配帶來了麻煩,容易在段間留下不能利用的“零頭”,造成浪費。
這裏寫圖片描述
分頁存儲管理
分頁存儲管理的基本原理是:將主存空間和輔存空間分別等分爲大小相等的若干頁,頁的大小爲個字節,如(1KB),(2KB),(4KB)等,並且爲每個頁按順序指定一個頁號,即0頁、1頁、2頁、…。爲了敘述方便,把主存的頁(物理頁或絕對頁)稱爲頁面。例如,若主存空間爲8KB,輔存空間爲16KB,頁的大小爲1KB,則主存空間可分爲8個頁面,其頁面號爲0~7;輔存空間可分爲16個頁,其頁號爲0~15,如圖5.35所示。當程序運行時,以“頁”爲單位進行地址映射,即操作系統以頁爲單位把邏輯頁從輔存調入主存,存放在物理頁面上,供CPU執行。在分頁存儲管理機制中,把邏輯頁對應的邏輯地址稱爲線性地址。
這裏寫圖片描述
在分頁存儲管理中,需要解決的關鍵問題是:選擇哪一個物理頁存放調入的邏輯頁?如何將線性地址轉換爲物理地址?爲了解決這些問題,系統爲每一個頁建立一個頁表,保存在主存中,存放頁的若干信息,如頁號、容量、是否裝入主存、存放在主存的哪一個頁面上等。
CPU訪問某頁時,首先要查找頁表,判斷要訪問的頁是否在主存,若在主存爲命中,否則爲未命中。然後將未命中的頁按照某種調度算法由輔存調入主存,並根據邏輯頁號和存放的物理頁面號的對應關係,將線性地址轉換爲物理地址。分頁存儲管理的地址轉換如圖5.36所示。
這裏寫圖片描述
頁表在存儲器中的位置由頁表地址寄存器定位。圖5.36的頁表中記錄的狀態信息爲:第1項頁號指示邏輯頁;第2項特徵位記錄該邏輯頁是否裝入主存,“0”表示未裝入,“1”表示已裝入;第3項記錄該邏輯頁裝入主存所存放的物理頁的頁面號,即1號邏輯頁從輔存調入主存後,存放在第7號物理頁面上。
存儲單元的物理地址由頁面號和頁內地址兩部分組成,如圖5.37(a)所示。8KB主存的頁內地址由地址線A9~A0提供,可尋址1KB的頁內存儲空間,地址範圍爲0~1 023;頁面號由高3位地址線A12~A10提供,8個頁面的頁面號爲0~7。由此可以看出,頁面存儲單元的物理地址爲
  物理地址=頁的大小×頁面號+頁內地址
  線性地址的確定方法與物理地址的確定方法完全相同,也是由頁號和頁內地址兩部分組成,如圖5.37(b)所示。16KB輔存空間可分爲16頁,頁內地址由地址線A9~A0提供,其頁號0~15由高4位地址線A13~A10提供。
這裏寫圖片描述
在進行地址轉換時,由於邏輯頁和物理頁的大小相等,它們的頁內地址是相同的,所不同的是頁號,只要將線性地址的頁號轉換爲物理地址的頁面號即可。在圖5.36中,給出1號邏輯頁中某條指令訪問數據的邏輯地址爲1024×1+452=1 476,它存入主存7頁面上所對應的物理地址爲 1 024×7+452=7 620。
段頁存儲管理:
分頁存儲管理的主要特點是主存利用率高且對輔存管理容易,但模塊化性能差;分段存儲管理的主要特點是模塊化性能好,但主存利用率不高且對輔存的管理比較困難。段頁存儲管理是將分段存儲管理和分頁存儲管理結合起來的一種折中方案。它首先將程序按其邏輯結構劃分爲若干個大小不等的邏輯段,然後再將每個邏輯段劃分爲若干個大小相等的邏輯頁。主存空間也劃分爲若干個同樣大小的物理頁。輔存和主存之間的信息調度以頁爲基本傳送單位,每個程序段對應一個段表,每頁對應一個頁表。CPU訪問時,段表指示每段對應的頁表地址,每一段的頁表確定頁所在的主存空間的位置,最後與頁表內地址拼接,確定CPU要訪問單元的物理地址。段頁地址轉換如圖5.38所示
這裏寫圖片描述
段頁存儲管理方式綜合了段式管理和頁式管理的優點,但需要經過兩級查表才能完成地址轉換,消耗時間多。
(2)磁盤陣列技術
磁盤陣列(DiscArray)是由許多臺磁盤機或光盤機按一定的規則,如分條(Striping)、分塊(Declustering)、交叉存取(Interleaving)等組成一個快速,超大容量的外存儲器子系統。
RAID(Redundant Array of Inexpensive Disks)稱爲廉價磁盤冗餘陣列。RAID 的基本原理是把多個便宜的小磁盤組合到一起,成爲一個磁盤組,使性能達到或超過一個容量巨大、價格昂貴的磁盤。用RAID的好處簡單的說就是:安全性高,速度快,數據容量超大。 某些級別的RAID技術可以把速度提高到單個硬盤驅動器的400%。磁盤陣列把多個硬盤驅動器連接在一起協同工作,大大提高了速度,同時把硬盤系統的可靠性提高到接近無錯的境界。這些“容錯”系統速度極快,同時可靠性極高。
目前 RAID技術大致分爲兩種:基於硬件的RAID技術和基於軟件的RAID技術。
RAID級別
一般常用的RAID階層,分別是RAID 0、RAID1、RAID 2、RAID 3、RAID 4以及RAID 5,再加上二合一型 RAID 0+1﹝或稱RAID 10﹞。我們先把這些RAID級別的優、缺點做個比較:
RAID 0 存取速度最快 沒有容錯
也稱爲條帶模式(striped),即把連續的數據分散到多個磁盤上存取,如圖所示。當系統有數據請求就可以被多個磁盤並行的執行,每個磁盤執行屬於它自己的那部分數據請求。這種數據上的並行操作可以充分利用總線的帶寬,顯著提高磁盤整體存取性能。因爲讀取和寫入是在設備上並行完成的,讀取和寫入性能將會增加,這通常是運行 RAID 0 的主要原因。但RAID 0沒有數據冗餘,如果驅動器出現故障,那麼將無法恢復任何數據。
這裏寫圖片描述這裏寫圖片描述
要實現RAID0必須要有兩個以上硬盤驅動器,RAID0實現了帶區組,數據並不是保存在一個硬盤上,而是分成數據塊保存在不同驅動器上。因爲將數據分佈在不同驅動器上,所以數據吞吐率大大提高,驅動器的負載也比較平衡。如果剛好所需要的數據在不同的驅動器上效率最好。它不需要計算校驗碼,實現容易。它的缺點是它沒有數據差錯控制,如果一個驅動器中的數據發生錯誤,即使其它盤上的數據正確也無濟於事了。不應該將它用於對數據穩定性要求高的場合。如果用戶進行圖象(包括動畫)編輯和其它要求傳輸比較大的場合使用RAID0比較合適。同時,RAID可以提高數據傳輸速率,比如所需讀取的文件分佈在兩個硬盤上,這兩個硬盤可以同時讀取。那麼原來讀取同樣文件的時間被縮短爲1/2。在所有的級別中,RAID 0的速度是最快的。但是RAID 0沒有冗餘功能的,如果一個磁盤(物理)損壞,則所有的數據都無法使用。
RAID 1 完全容錯 成本高
RAID 1 又稱爲鏡像(Mirroring),一個具有全冗餘的模式,如圖所示。RAID 1可以用於兩個或2xN個磁盤,並使用0塊或更多的備用磁盤,每次寫數據時會同時寫入鏡像盤。這種陣列可靠性很高,但其有效容量減小到總容量的一半,同時這些磁盤的大小應該相等,否則總容量只具有最小磁盤的大小。
這裏寫圖片描述這裏寫圖片描述
對於使用這種RAID1結構的設備來說,RAID控制器必須能夠同時對兩個盤進行讀操作和對兩個鏡象盤進行寫操作。通過下面的結構圖您也可以看到必須有兩個驅動器。因爲是鏡象結構在一組盤出現問題時,可以使用鏡象,提高系統的容錯能力。它比較容易設計和實現。每讀一次盤只能讀出一塊數據,也就是說數據塊傳送速率與單獨的盤的讀取速率相同。因爲RAID1的校驗十分完備,因此對系統的處理能力有很大的影響,通常的RAID功能由軟件實現,而這樣的實現方法在服務器負載比較重的時候會大大影響服務器效率。當您的系統需要極高的可靠性時,如進行數據統計,那麼使用RAID1比較合適。而且RAID1技術支持”熱替換”,即不斷電的情況下對故障磁盤進行更換,更換完畢只要從鏡像盤上恢復數據即可。當主硬盤損壞時,鏡像硬盤就可以代替主硬盤工作。鏡像硬盤相當於一個備份盤,可想而知,這種硬盤模式的安全性是非常高的,RAID 1的數據安全性在所有的RAID級別上來說是最好的。但是其磁盤的利用率卻只有50%,是所有RAID級別中最低的。
RAID 2 帶海明碼校驗,數據冗餘多,速度慢
從概念上講,RAID 2 同RAID 3類似, 兩者都是將數據條塊化分佈於不同的硬盤上, 條塊單位爲位或字節。然而RAID 2 使用一定的編碼技術來提供錯誤檢查及恢復。這種編碼技術需要多個磁盤存放檢查及恢復信息,使得RAID 2技術實施更復雜。因此,在商業環境中很少使用。下圖左邊的各個磁盤上是數據的各個位,由一個數據不同的位運算得到的海明校驗碼可以保存另一組磁盤上,具體情況請見下圖。由於海明碼的特點,它可以在數據發生錯誤的情況下將錯誤校正,以保證輸出的正確。它的數據傳送速率相當高,如果希望達到比較理想的速度,那最好提高保存校驗碼ECC碼的硬盤,對於控制器的設計來說,它又比RAID3,4或5要簡單。沒有免費的午餐,這裏也一樣,要利用海明碼,必須要付出數據冗餘的代價。輸出數據的速率與驅動器組中速度最慢的相等。
這裏寫圖片描述
RAID 3 寫入性能最好 沒有多任務功能
RAID 3 是將數據先做XOR 運算,產生Parity Data後,在將數據和Parity Data 以並行存取模式寫入成員磁盤驅動器中,因此具備並行存取模式的優點和缺點。進一步來說,RAID 3每一筆數據傳輸,都更新整個Stripe﹝即每一個成員磁盤驅動器相對位置的數據都一起更新﹞,因此不會發生需要把部分磁盤驅動器現有的數據讀出來,與新數據作XOR運算,再寫入的情況發生﹝這個情況在 RAID 4和RAID 5會發生,一般稱之爲Read、Modify、Write Process,我們姑且譯爲爲讀、改、寫過程﹞。因此,在所有 RAID級別中,RAID 3的寫入性能是最好的。
RAID 3 的 Parity Data 一般都是存放在一個專屬的Parity Disk,但是由於每筆數據都更新整個Stripe,因此,RAID 3的 Parity Disk 並不會如RAID 4的 Parity Disk,會造成存取的瓶頸。
RAID 3 的並行存取模式,需要RAID 控制器特別功能的支持,才能達到磁盤驅動器同步控制,而且上述寫入性能的優點,以目前的Caching 技術,都可以將之取代,因此一般認爲RAID 3的應用,將逐漸淡出市場。
RAID 3 以其優越的寫入性能,特別適合用在大型、連續性檔案寫入爲主的應用,例如繪圖、影像、視訊編輯、多媒體、數據倉儲、高速數據擷取等等。
這裏寫圖片描述
這種校驗碼與RAID2不同,只能查錯不能糾錯。它訪問數據時一次處理一個帶區,這樣可以提高讀取和寫入速度,它像RAID 0一樣以並行的方式來存放數據,但速度沒有RAID 0快。校驗碼在寫入數據時產生並保存在另一個磁盤上。需要實現時用戶必須要有三個以上的驅動器,寫入速率與讀出速率都很高,因爲校驗位比較少,因此計算時間相對而言比較少。用軟件實現RAID控制將是十分困難的,控制器的實現也不是很容易。它主要用於圖形(包括動畫)等要求吞吐率比較高的場合。不同於RAID 2,RAID 3使用單塊磁盤存放奇偶校驗信息。如果一塊磁盤失效,奇偶盤及其他數據盤可以重新產生數據。 如果奇偶盤失效,則不影響數據使用。RAID 3對於大量的連續數據可提供很好的傳輸率,但對於隨機數據,奇偶盤會成爲寫操作的瓶頸。 利用單獨的校驗盤來保護數據雖然沒有鏡像的安全性高,但是硬盤利用率得到了很大的提高,爲n-1。
RAID 4 具備多任務及容錯功能 Parity 磁盤驅動器造成性能瓶頸
創建RAID 4需要三塊或更多的磁盤,它在一個驅動器上保存校驗信息,並以RAID 0方式將數據寫入其它磁盤,如圖所示。因爲一塊磁盤是爲校驗信息保留的,所以陣列的大小是(N-l)*S,其中S是陣列中最小驅動器的大小。就像在 RAID 1中那樣,磁盤的大小應該相等。
如果一個驅動器出現故障,那麼可以使用校驗信息來重建所有數據。如果兩個驅動器出現故障,那麼所有數據都將丟失。不經常使用這個級別的原因是校驗信息存儲在一個驅動器上。每次寫入其它磁盤時,都必須更新這些信息。因此,在大量寫入數據時很容易造成校驗磁盤的瓶頸,所以目前這個級別的RAID很少使用了。
RAID 4 是採取獨立存取模式,同時以單一專屬的Parity Disk 來存放Parity Data。RAID 4的每一筆傳輸﹝Strip﹞資料較長,而且可以執行Overlapped I/O,因此其讀取的性能很好。
但是由於使用單一專屬的Parity Disk 來存放Parity Data,因此在寫入時,就會造成很大的瓶頸。因此,RAID 4並沒有被廣泛地應用。
這裏寫圖片描述這裏寫圖片描述
RAID4和RAID3很象,不同的是,它對數據的訪問是按數據塊進行的,也就是按磁盤進行的,每次是一個盤。在圖上可以這麼看,RAID3是一次一橫條,而RAID4一次一豎條。它的特點的RAID3也挺象,不過在失敗恢復時,它的難度可要比RAID3大得多了,控制器的設計難度也要大許多,而且訪問數據的效率不怎麼好。
RAID 5 具備多任務及容錯功能 寫入時有overhead
在希望結合大量物理磁盤並且仍然保留一些冗餘時,RAID 5 可能是最有用的 RAID 模式。RAID 5可以用在三塊或更多的磁盤上,並使用0塊或更多的備用磁盤。就像 RAID 4一樣,得到的 RAID5 設備的大小是(N-1)*S。
RAID5 與 RAID4 之間最大的區別就是校驗信息均勻分佈在各個驅動器上,如圖4所示,這樣就避免了RAID 4中出現的瓶頸問題。如果其中一塊磁盤出現故障,那麼由於有校驗信息,所以所有數據仍然可以保持不變。如果可以使用備用磁盤,那麼在設備出現故障之後,將立即開始同步數據。如果兩塊磁盤同時出現故障,那麼所有數據都會丟失。RAID5 可以經受一塊磁盤故障,但不能經受兩塊或多塊磁盤故障。
RAID 5也是採取獨立存取模式,但是其Parity Data 則是分散寫入到各個成員磁盤驅動器,因此,除了具備Overlapped I/O 多任務性能之外,同時也脫離如RAID 4單一專屬Parity Disk的寫入瓶頸。但是,RAI?D 5在座資料寫入時,仍然稍微受到”讀、改、寫過程”的拖累。
由於RAID 5 可以執行Overlapped I/O 多任務,因此當RAID 5的成員磁盤驅動器數目越多,其性能也就越高,因爲一個磁盤驅動器再一個時間只能執行一個 Thread,所以磁盤驅動器越多,可以Overlapped 的Thread 就越多,當然性能就越高。但是反過來說,磁盤驅動器越多,數組中可能有磁盤驅動器故障的機率就越高,整個數組的可靠度,或MTDL (Mean Time to Data Loss) 就會降低。
由於RAID 5將Parity Data 分散存在各個磁盤驅動器,因此很符合XOR技術的特性。例如,當同時有好幾個寫入要求發生時,這些要寫入的數據以及Parity Data 可能都分散在不同的成員磁盤驅動器,因此RAID 控制器可以充分利用Overlapped I/O,同時讓好幾個磁盤驅動器分別作存取工作,如此,數組的整體性能就會提高很多。
基本上來說,多人多任務的環境,存取頻繁,數據量不是很大的應用,都適合選用RAID 5 架構,例如企業檔案服務器、WEB 服務器、在線交易系統、電子商務等應用,都是數據量小,存取頻繁的應用。
RAID5是一種旋轉奇偶校驗獨立存取的陣列。它和RAID1、2、3、4各盤陣列的不同點,是它沒有固定的校驗盤,而是按某種規則把其冗餘的奇偶校驗信息均勻地分佈在陣列所屬的所有磁盤上。於是在同一臺磁盤機上既有數據信息也有校驗信息。這一改變解決了爭用校驗盤的問題,因此DAID5內允許在同一組內併發進行多個寫操作。所以RAID5即適於大數據量的操作,也適於各種事務處理。它是一種快速,大容量和容錯分佈合理的磁盤陣列。
這裏寫圖片描述這裏寫圖片描述

RAID 0+1/RAID 10 速度快、完全容錯 成本高
RAID 0+1/RAID 10,綜合了RAID 0 和 RAID 1的優點,適合用在速度需求高,又要完全容錯,當然經費也很多的應用。 RAID 0和RAID 1的原理很簡單,合起來之後還是很簡單,我們不打算詳細介紹,倒是要談談,RAID 0+1到底應該是 RAID 0 over RAID 1,還是RAID 1 over RAID 0,也就是說,是把多個RAID 1 做成RAID 0,還是把多個 RAID 0 做成RAID 1?
RAID 0 over RAID 1
假設我們有四臺磁盤驅動器,每兩臺磁盤驅動器先做成RAID 1,再把兩個RAID 1做成RAID 0,這就是RAID 0 over RAID 1:
(RAID 1) A = Drive A1 + Drive A2 (Mirrored)
(RAID 1) B = Drive B1 + Drive B2 (Mirrored)
RAID 0 = (RAID 1) A + (RAID 1) B (Striped)
RAID 1 over RAID 0
假設我們有四臺磁盤驅動器,每兩臺磁盤驅動器先做成RAID 0,再把兩個RAID 0做成RAID 1,這就是RAID 1 over RAID 0:
(RAID 0) A = Drive A1 + Drive A2 (Striped)
(RAID 0) B = Drive B1 + Drive B2 (Striped)
RAID 1 = (RAID 1) A + (RAID 1) B (Mirrored)
在這種架構之下,如果 (RAID 0) A有一臺磁盤驅動器故障,(RAID 0) A就算毀了,當然RAID 1仍然可以正常工作;如果這時 (RAID 0) B也有一臺磁盤驅動器故障,(RAID 0) B也就算毀了,此時RAID 1的兩磁盤驅動器都算故障,整個RAID 1資料就毀了。
因此,RAID 0 OVER RAID 1應該比RAID 1 OVER RAID 0具備比較高的可靠度。所以我們建議,當採用RAID 0+1/RAID 10架構時,要先作RAID 1,再把數個RAID 1做成RAID 0。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章