電子百科
虛擬存儲(chǔ)系統(tǒng)一般具有以下功能:
?。?)具有存儲(chǔ)設(shè)備故障確定及自動(dòng)觸發(fā)故障設(shè)備接替功能。
?。?)具有存儲(chǔ)協(xié)議的自由轉(zhuǎn)換功能,從而能實(shí)現(xiàn)對(duì)不同協(xié)議下的,異構(gòu)的存儲(chǔ)和服務(wù)器環(huán)境的支持;
(3)支持SAN存儲(chǔ)配置,能實(shí)現(xiàn)存儲(chǔ)體的集中式管理和存儲(chǔ)容量擴(kuò)充。
(4)能通過TCP/IP協(xié)議,在網(wǎng)絡(luò)上實(shí)現(xiàn)對(duì)存儲(chǔ)器的各種遠(yuǎn)程同步操作;
?。?)可實(shí)現(xiàn)數(shù)據(jù)高速緩存、定時(shí)自動(dòng)備份和恢復(fù)等。
因此,其在使用時(shí)存儲(chǔ)效率較高,用戶存儲(chǔ)硬件開銷和管理維護(hù)成本可大幅降低,系統(tǒng)安全性得到提升,特別適合具有海量級(jí)信息資源的企業(yè)級(jí)和網(wǎng)絡(luò)環(huán)境下使用。
虛擬存儲(chǔ)系統(tǒng)從體系結(jié)構(gòu)上可分為對(duì)稱式和非對(duì)稱式兩種。
1 對(duì)稱式結(jié)構(gòu)
對(duì)稱式虛擬存儲(chǔ)的控制交換設(shè)備直接存在于服務(wù)器和存儲(chǔ)設(shè)備之間,用運(yùn)行在虛擬存儲(chǔ)控制設(shè)備中的管理軟件來管理和配置所有的存儲(chǔ)設(shè)備,組成一個(gè)大型的存儲(chǔ)池,其中的若干存儲(chǔ)設(shè)備以一個(gè)邏輯分區(qū)的形式被系統(tǒng)中所有的服務(wù)器訪問。其結(jié)構(gòu)如圖1所示。
圖1 對(duì)稱式虛擬存儲(chǔ)系統(tǒng)結(jié)構(gòu)
對(duì)稱式結(jié)構(gòu)的優(yōu)點(diǎn)主要有:
?。?)虛擬存儲(chǔ)控制設(shè)備有多個(gè)數(shù)據(jù)通道與存儲(chǔ)設(shè)備連接,多個(gè)存儲(chǔ)設(shè)備并發(fā)工作,所以系統(tǒng)總的存儲(chǔ)設(shè)備訪問速度可以達(dá)到較高的水平;
(2)設(shè)備集中,因此系統(tǒng)的安裝和管理非常簡便;
?。?)存儲(chǔ)設(shè)備對(duì)主機(jī)是透明的。
缺點(diǎn)主要有:
?。?)所有服務(wù)器對(duì)存儲(chǔ)設(shè)備的訪問都要經(jīng)過控制交換設(shè)備的通道??刂平粨Q設(shè)備容易成為整個(gè)系統(tǒng)的帶寬瓶頸;
?。?)數(shù)據(jù)傳輸和控制設(shè)備在整個(gè)系統(tǒng)中是一個(gè)單點(diǎn)失效點(diǎn),它的故障將導(dǎo)致整個(gè)系統(tǒng)的癱瘓;
?。?)系統(tǒng)擴(kuò)展性相對(duì)較差。
2 非對(duì)稱式結(jié)構(gòu)
非對(duì)稱式虛擬存儲(chǔ)又稱通道外虛擬存儲(chǔ)。其結(jié)構(gòu)如圖2所示。
圖2 非對(duì)稱式虛擬存儲(chǔ)系統(tǒng)
非對(duì)稱式結(jié)構(gòu)的虛擬存儲(chǔ)系統(tǒng)主要通過軟件手段實(shí)現(xiàn)虛擬存儲(chǔ)控制。其虛擬存儲(chǔ)控制器獨(dú)立于數(shù)據(jù)傳輸通道之外,數(shù)據(jù)和控制信息在傳輸通道上分離。虛擬存儲(chǔ)控制器不直接參與數(shù)據(jù)的傳輸,運(yùn)行在其上的虛擬存儲(chǔ)控制軟件對(duì)存儲(chǔ)設(shè)備進(jìn)行統(tǒng)一管理和配置并形成邏輯存儲(chǔ)單元和存儲(chǔ)設(shè)備映射表,任何服務(wù)器在初始化時(shí),均要通過虛擬存儲(chǔ)控制器獲得存儲(chǔ)設(shè)備的映射表并實(shí)現(xiàn)對(duì)虛擬存儲(chǔ)單元的訪問。
非對(duì)稱式結(jié)構(gòu)的優(yōu)點(diǎn)主要有:
?。?)可將不同物理硬盤陣列進(jìn)行邏輯組合以實(shí)現(xiàn)虛擬存儲(chǔ),并可將多個(gè)硬盤陣列控制器端口綁定提高系統(tǒng)的可用帶寬;
?。?)在交換機(jī)端口數(shù)量足夠的情況下,可在一個(gè)網(wǎng)絡(luò)內(nèi)安裝冗余備份的兩臺(tái)虛擬存儲(chǔ)設(shè)備;
(3)系統(tǒng)配置非常靈活,具有較高的開放性和可擴(kuò)展性;
?。?)系統(tǒng)的安全性較高,虛擬存儲(chǔ)控制器位于數(shù)據(jù)傳輸通道之外虛擬存儲(chǔ)控制器出現(xiàn)故障,不會(huì)引起存儲(chǔ)系統(tǒng)的數(shù)據(jù)傳輸通道阻塞;
?。?)由于服務(wù)器通過連接設(shè)備直接訪問存儲(chǔ)設(shè)備,因此存儲(chǔ)虛擬化后不會(huì)帶來任何延遲;
?。?)存儲(chǔ)系統(tǒng)對(duì)于操作系統(tǒng)和應(yīng)用系統(tǒng)都是透明的,因此存儲(chǔ)系統(tǒng)的管理比較方便。
缺點(diǎn)主要有:
?。?)由于虛擬存儲(chǔ)控制器保存有存儲(chǔ)設(shè)備信息映射表,如果虛擬存儲(chǔ)控制器發(fā)生故障,則新加入設(shè)備無法獲得映射表,無法訪問存儲(chǔ)系統(tǒng);
?。?)需要FC光纖通道接口卡來實(shí)現(xiàn)與存儲(chǔ)設(shè)備的數(shù)據(jù)讀寫;
?。?)由于該結(jié)構(gòu)本質(zhì)上屬于磁盤陣列群結(jié)構(gòu),一旦磁盤陣列群中的某個(gè)磁盤陣列控制器損壞,或者這個(gè)陣列到交換機(jī)路徑失效,都會(huì)導(dǎo)致相應(yīng)的虛擬存儲(chǔ)控制器離線并丟失其數(shù)據(jù);
?。?)可用帶寬的提高是通過磁盤陣列端口綁定來實(shí)現(xiàn)的,因此,很難實(shí)現(xiàn)幾百兆以上的可用帶寬;
(5)由于不同品牌或型號(hào)的磁盤陣列的性能不完全相同,出于虛擬化的目的將不同品牌或型號(hào)的陣列進(jìn)行綁定,會(huì)產(chǎn)生以下問題:即數(shù)據(jù)寫入或讀出時(shí)各并發(fā)數(shù)據(jù)流的速度不同,原來的數(shù)據(jù)包順序在傳輸完畢后被打亂,系統(tǒng)需要占用時(shí)間和資源去重新進(jìn)行數(shù)據(jù)包排序整理,這會(huì)嚴(yán)重影響系統(tǒng)性能。
虛擬存儲(chǔ)器是根據(jù)程序的邏輯地址轉(zhuǎn)換來的,也稱線性地址空間。一般每個(gè)進(jìn)程,甚至每個(gè)段都有一個(gè),以32位為例,則每個(gè)最大可達(dá)4G。
而主存目前一般為百M(fèi)。因此程序中所指的存儲(chǔ)單元并不能都放到主存中,也就是并不是每個(gè)程序所用的存儲(chǔ)單元,都有具體的物理的存儲(chǔ)器單元與之對(duì)應(yīng)。
但由于程序的兩個(gè)局部性原理,在一個(gè)時(shí)刻,程序只在一個(gè)比較小的范圍內(nèi)運(yùn)行。所以我們把程序可能用到的整個(gè)存儲(chǔ)空間分成一個(gè)個(gè)相同大小的頁(按頁管理硬件上容易實(shí)現(xiàn)),只把其中的一些頁放在主存中,而其它的頁則等需要時(shí)再建,或放在輔存(磁盤)中。同時(shí)建立一個(gè)頁表,對(duì)應(yīng)于每一頁,如果該頁在主存中,則頁表記錄它在主存中的地址;如果不在主存中,則在頁表上作不在主存的標(biāo)記。
這樣,當(dāng)程序需要調(diào)用某個(gè)存儲(chǔ)單元的內(nèi)容時(shí),先根據(jù)它的線性地址,算出其所在的頁。查頁表,看是不是在主存中?如果在,則直接存取。如果查到頁表上是不在的標(biāo)記,那就是一個(gè)page fault。要把主存中的某一頁(LRU策略)換到磁盤上,把要訪問的那個(gè)單元所在的頁調(diào)入主存,再進(jìn)行存取。
就象一個(gè)預(yù)計(jì)有一萬學(xué)生的學(xué)校,理論上每個(gè)學(xué)生都應(yīng)有一個(gè)位子上課(一萬個(gè)虛擬位子),而學(xué)校只有一千個(gè)(物理)位子。但實(shí)際上,學(xué)校也不會(huì)一萬個(gè)人同時(shí)上課,只要讓上課的同學(xué)有位子(在主存中),而其它同學(xué)只要留下聯(lián)系方法能找到就好。為了降低管理的復(fù)雜性,我們采用按學(xué)號(hào)分班(頁)管理。每個(gè)班要么一起上課(主存),要么一起呆在寢室(磁盤)。而在學(xué)校保留一個(gè)動(dòng)態(tài)表(頁表)表明每個(gè)班在哪兒(物理地址)上課,或者沒上課(不在主存)?,F(xiàn)在假設(shè)我們想按學(xué)號(hào)找一個(gè)同學(xué),而且是女同學(xué),只能在教室說話,呵呵。那么:
先算出來是哪個(gè)班的,查動(dòng)態(tài)表,看該班是否在教室。在,直接按位置找到(hit);不在(page fault),要先找個(gè)不上課的班趕回寢室,把要找女生所在的班調(diào)到教室,再按位置找那個(gè)同學(xué)。
動(dòng)態(tài)表(頁表)的大?。奖眄?xiàng)數(shù)*每個(gè)表項(xiàng)所需的位數(shù)。
表項(xiàng)數(shù)=虛擬班數(shù)=虛擬人數(shù)(虛擬地址空間)/每班人數(shù)(每頁大小)
每個(gè)表項(xiàng)的位數(shù)=Log(教室數(shù))+適當(dāng)控制位數(shù)
教室數(shù)=實(shí)際可以上課的人數(shù)(物理地址空間)/每班人數(shù)(每頁大小)
虛擬地址換算:
TLB miss:
4G(32-bit)的存儲(chǔ)空間,如果按4K分頁,則可分1M頁。每個(gè)頁表項(xiàng)為4B,則一個(gè)頁表大小為4MB。由于頁表太大,只能放在主存中。這樣每次讀內(nèi)存都要讀主存,大大影響讀寫速度。而同樣基于局部性原理,整個(gè)頁表在某一時(shí)刻,所用的也僅僅幾頁而已。所以我們把某段時(shí)間經(jīng)常用的幾個(gè)頁表項(xiàng),即常用的虛擬頁號(hào)和其對(duì)應(yīng)的物理頁地址,存在Cache中,即TLB。
這樣,當(dāng)程序需要調(diào)用某個(gè)存儲(chǔ)單元的內(nèi)容時(shí),先根據(jù)它的線性地址,算出其所在的頁。先查TLB(比較虛擬頁號(hào)),如果有相同的虛擬頁號(hào),則就可以馬上知道其所在的物理地址,根據(jù)物理地址進(jìn)行存取。
如果沒有相同的虛擬頁號(hào),則說明該頁沒有記錄在TLB中,那再去查頁表,按page fault中所說的進(jìn)行。
TLB像我們隨身記錄電話的小紙片,當(dāng)要查一個(gè)電話時(shí),我們先看小紙片。有,我們可以直接打電話。如果沒有,我們?cè)倩丶也樵敿?xì)的電話號(hào)碼簿(頁表),再打電話。虛擬存儲(chǔ)器是根據(jù)程序的邏輯地址轉(zhuǎn)換來的,也稱線性地址空間。一般每個(gè)進(jìn)程,甚至每個(gè)段都有一個(gè),以32位為例,則每個(gè)最大可達(dá)4G。
而主存目前一般為百M(fèi)。因此程序中所指的存儲(chǔ)單元并不能都放到主存中,也就是并不是每個(gè)程序所用的存儲(chǔ)單元,都有具體的物理的存儲(chǔ)器單元與之對(duì)應(yīng)。
但由于程序的兩個(gè)局部性原理,在一個(gè)時(shí)刻,程序只在一個(gè)比較小的范圍內(nèi)運(yùn)行。所以我們把程序可能用到的整個(gè)存儲(chǔ)空間分成一個(gè)個(gè)相同大小的頁(按頁管理硬件上容易實(shí)現(xiàn)),只把其中的一些頁放在主存中,而其它的頁則等需要時(shí)再建,或放在輔存(磁盤)中。同時(shí)建立一個(gè)頁表,對(duì)應(yīng)于每一頁,如果該頁在主存中,則頁表記錄它在主存中的地址;如果不在主存中,則在頁表上作不在主存的標(biāo)記。
這樣,當(dāng)程序需要調(diào)用某個(gè)存儲(chǔ)單元的內(nèi)容時(shí),先根據(jù)它的線性地址,算出其所在的頁。查頁表,看是不是在主存中?如果在,則直接存取。如果查到頁表上是不在的標(biāo)記,那就是一個(gè)page fault。要把主存中的某一頁(LRU策略)換到磁盤上,把要訪問的那個(gè)單元所在的頁調(diào)入主存,再進(jìn)行存取。
就象一個(gè)預(yù)計(jì)有一萬學(xué)生的學(xué)校,理論上每個(gè)學(xué)生都應(yīng)有一個(gè)位子上課(一萬個(gè)虛擬位子),而學(xué)校只有一千個(gè)(物理)位子。但實(shí)際上,學(xué)校也不會(huì)一萬個(gè)人同時(shí)上課,只要讓上課的同學(xué)有位子(在主存中),而其它同學(xué)只要留下聯(lián)系方法能找到就好。為了降低管理的復(fù)雜性,我們采用按學(xué)號(hào)分班(頁)管理。每個(gè)班要么一起上課(主存),要么一起呆在寢室(磁盤)。而在學(xué)校保留一個(gè)動(dòng)態(tài)表(頁表)表明每個(gè)班在哪兒(物理地址)上課,或者沒上課(不在主存)?,F(xiàn)在假設(shè)我們想按學(xué)號(hào)找一個(gè)同學(xué),而且是女同學(xué),只能在教室說話,呵呵。那么:
先算出來是哪個(gè)班的,查動(dòng)態(tài)表,看該班是否在教室。在,直接按位置找到(hit);不在(page fault),要先找個(gè)不上課的班趕回寢室,把要找女生所在的班調(diào)到教室,再按位置找那個(gè)同學(xué)。
動(dòng)態(tài)表(頁表)的大?。奖眄?xiàng)數(shù)*每個(gè)表項(xiàng)所需的位數(shù)。
表項(xiàng)數(shù)=虛擬班數(shù)=虛擬人數(shù)(虛擬地址空間)/每班人數(shù)(每頁大小)
每個(gè)表項(xiàng)的位數(shù)=Log(教室數(shù))+適當(dāng)控制位數(shù)
教室數(shù)=實(shí)際可以上課的人數(shù)(物理地址空間)/每班人數(shù)(每頁大小)
虛擬地址換算:
TLB miss:
4G(32-bit)的存儲(chǔ)空間,如果按4K分頁,則可分1M頁。每個(gè)頁表項(xiàng)為4B,則一個(gè)頁表大小為4MB。由于頁表太大,只能放在主存中。這樣每次讀內(nèi)存都要讀主存,大大影響讀寫速度。而同樣基于局部性原理,整個(gè)頁表在某一時(shí)刻,所用的也僅僅幾頁而已。所以我們把某段時(shí)間經(jīng)常用的幾個(gè)頁表項(xiàng),即常用的虛擬頁號(hào)和其對(duì)應(yīng)的物理頁地址,存在Cache中,即TLB。
這樣,當(dāng)程序需要調(diào)用某個(gè)存儲(chǔ)單元的內(nèi)容時(shí),先根據(jù)它的線性地址,算出其所在的頁。先查TLB(比較虛擬頁號(hào)),如果有相同的虛擬頁號(hào),則就可以馬上知道其所在的物理地址,根據(jù)物理地址進(jìn)行存取。
如果沒有相同的虛擬頁號(hào),則說明該頁沒有記錄在TLB中,那再去查頁表,按page fault中所說的進(jìn)行。
TLB像我們隨身記錄電話的小紙片,當(dāng)要查一個(gè)電話時(shí),我們先看小紙片。有,我們可以直接打電話。如果沒有,我們?cè)倩丶也樵敿?xì)的電話號(hào)碼簿(頁表),再打電話。