❶ 高分求高手解決計算機操作系統問題!!
虛擬內存的出發點是因為內存很貴,硬碟很便宜,所以用硬碟來「虛擬」內存。
信號量實際是防止CPU流水線執行指令造成資源沖突。
❷ 儲存池是什麼Win8系統存儲池使用技巧
當我們的電腦有多個磁碟驅動器時,可能會同時創建出多個磁碟分區,管理起來非常繁雜。而在Win8系統中解決了這個問題,我們可以通過創建存儲池,將多餘的空間整合在一起並自定義設置。下面系統之家小編為大家介紹一下Win8系統存儲池使用技巧。
1.要想在Win8系統中創建存儲池,我們首先要打開控制面板—所有控制面板項—存儲空間;接著點擊"創建新的池和存儲空間"
2.在新的窗口中,我們可以勾選多個驅動器,將其添加進存儲池中,就可以實現統一、靈活管理磁碟分區的目的;
3.此外,我們還可以創建一個存儲空間,設置"名稱、驅動器號、系統文件類型"等,如果我們同時添加了多個驅動器可以選擇雙向、三向鏡像,這樣在使用時會自動生成文件備份,以防止某個驅動器損壞爾導致文件丟人哦~
4.關於Win8存儲池的創建以及使用設置就介紹到這里了,大家試試吧!
本文來自於【系統之家】
www.xp85.com
❸ 簡述存儲池的概念
存儲池是一種技術,它可以使一組存儲設備連接在一起,共同構成一個內存空間,這樣,用戶可以更有效地使用存儲設備,提高存儲設備的性能和可用性。
存儲池的
拓展:存儲池可以提高存儲設備的容量,可以提供更高的可用性,可以提高存儲設備的性能,可以改善管理結構,減少成本,支持數據的恢復,提高系統的可用性。此外,存儲池還可以支持虛擬存儲技術,可以將多個實體存儲設備組合成一個虛擬存儲池。
❹ 如何實現用戶自己的數據文件的分類存放策略
1 虛擬存儲技術的產生
虛擬化技術並不是一件很新的技術,它的發展,應該說是隨著計算機技術的發展而發展起來的,最早是始於70年代.由於當時的存儲容量,特別是內存容量成本非常高,容量也很小,對於大型應用程序或多程序應用就受到了很大的限制.為了克服這樣的限制,人們就採用了虛擬存儲的技術,最典型的應用就是虛擬內存技術.隨著計算機技術以及相關信息處理技術的不斷發展,人們對存儲的需求越來越大.這樣的需求刺激了各種新技術的出現,比如磁碟性能越來越好,容量越來越大.但是在大量的大中型信息處理系統中,單個磁碟是不能滿足需要,這樣的情況下存儲虛擬化技術就發展起來了.在這個發展過程中也由幾個階段和幾種應用.首先是磁碟條帶集(RAID,可帶容錯)技術,將多個物理磁碟通過一定的邏輯關系集合起來,成為一個大容量的虛擬磁碟.而隨著數據量不斷增加和對數據可用性要求的不斷提高,又一種新的存儲技術應運而生,那就是存儲區域網路(SAN)技術.SAN的廣域化則旨在將存儲設備實現成為一種公用設施,任何人員,任何主機都可以隨時隨地獲取各自想要的數據.目前討論比較多的包括iSCSI,FC Over IP 等技術,由於一些相關的標准還沒有最終確定,但是存儲設備公用化,存儲網路廣域化是一個不可逆轉的潮流.
2 虛擬存儲的概念
所謂虛擬存儲,就是把多個存儲介質模塊(如硬碟,RAID)通過一定的手段集中管理起來,所有的存儲模塊在一個存儲池(Storage Pool)中得到統一管理,從主機和工作站的角度,看到就不是多個硬碟,而是一個分區或者卷,就好象是一個超大容量(如1T以上)的硬碟.這種可以將多種,多個存儲設備統一管理起來,為使用者提供大容量,高數據傳輸性能的存儲系統,就稱之為虛擬存儲.
虛擬存儲的分類
目前虛擬存儲的發展尚無統一標准,從虛擬化存儲的拓撲結構來講主要有兩種方式:即對稱式與非對稱式.對稱式虛擬存儲技術是指虛擬存儲控制設備與存儲軟體系統,交換設備集成為一個整體,內嵌在網路數據傳輸路徑中;非對稱式虛擬存儲技術是指虛擬存儲控制設備獨立於數據傳輸路徑之外.從虛擬化存儲的實現原理來講也有兩種方式;即數據塊虛擬與虛擬文件系統.具體如下:
A.對稱式虛擬存儲
圖1
圖1對稱式虛擬存儲解決方案的示意圖
在圖1所示的對稱式虛擬存儲結構圖中,存儲控制設備 High Speed Traffic Directors(HSTD)與存儲池子系統Storage Pool集成在一起,組成SAN Appliance.可以看到在該方案中存儲控制設備HSTD在主機與存儲池數據交換的過程中起到核心作用.該方案的虛擬存儲過程是這樣的:由HSTD內嵌的存儲管理系統將存儲池中的物理硬碟虛擬為邏輯存儲單元(LUN),並進行埠映射(指定某一個LUN能被哪些埠所見),主機端將各可見的存儲單元映射為操作系統可識別的盤符.當主機向SAN Appliance寫入數據時,用戶只需要將數據寫入位置指定為自己映射的盤符(LUN),數據經過HSTD的高速並行埠,先寫入高速緩存,HSTD中的存儲管理系統自動完成目標位置由LUN到物理硬碟的轉換,在此過程中用戶見到的只是虛擬邏輯單元,而不關心每個LUN的具體物理組織結構.該方案具有以下主要特點:
(1)採用大容量高速緩存,顯著提高數據傳輸速度.
緩存是存儲系統中廣泛採用的位於主機與存儲設備之間的I/O路徑上的中間介質.當主機從存儲設備中讀取數據時,會把與當前數據存儲位置相連的數據讀到緩存中,並把多次調用的數據保留在緩存中;當主機讀數據時,在很大幾率上能夠從緩存中找到所需要的數據.直接從緩存上讀出.而從緩存讀取數據時的速度只受到電信號傳播速度的影響(等於光速),因此大大高於從硬碟讀數據時碟片機械轉動的速度.當主機向存儲設備寫入數據時,先把數據寫入緩存中,待主機端寫入動作停止,再從緩存中將數據寫入硬碟,同樣高於直接寫入硬碟的速度
(2)多埠並行技術,消除了I/O瓶頸.
傳統的FC存儲設備中控制埠與邏輯盤之間是固定關系,訪問一塊硬碟只能通過控制它的控制器埠.在對稱式虛擬存儲設備中,SAN Appliance的存儲埠與LUN的關系是虛擬的,也就是說多台主機可以通過多個存儲埠(最多8個)並發訪問同一個LUN;在光纖通道100MB/帶寬的大前提下,並行工作的埠數量越多,數據帶寬就越高.
(3)邏輯存儲單元提供了高速的磁碟訪問速度.
在視頻應用環境中,應用程序讀寫數據時以固定大小的數據塊為單位(從512byte到1MB之間).而存儲系統為了保證應用程序的帶寬需求,往往設計為傳輸512byte以上的數據塊大小時才能達到其最佳I/O性能.在傳統SAN結構中,當容量需求增大時,唯一的解決辦法是多塊磁碟(物理或邏輯的)綁定為帶區集,實現大容量LUN.在對稱式虛擬存儲系統中,為主機提供真正的超大容量,高性能LUN,而不是用帶區集方式實現的性能較差的邏輯卷.與帶區集相比,Power LUN具有很多優勢,如大塊的I/O block會真正被存儲系統所接受,有效提高數據傳輸速度;並且由於沒有帶區集的處理過程,主機CPU可以解除很大負擔,提高了主機的性能.
(4)成對的HSTD系統的容錯性能.
在對稱式虛擬存儲系統中,HSTD是數據I/O的必經之地,存儲池是數據存放地.由於存儲池中的數據具有容錯機制保障安全,因此用戶自然會想到HSTD是否有容錯保護.象許多大型存儲系統一樣,在成熟的對稱式虛擬存儲系統中,HSTD是成對配製的,每對HSTD之間是通過SAN Appliance內嵌的網路管理服務實現緩存數據一致和相互通信的.
(5)在SAN Appliance之上可方便的連接交換設備,實現超大規模Fabric結構的SAN.
因為系統保持了標準的SAN結構,為系統的擴展和互連提供了技術保障,所以在SAN Appliance之上可方便的連接交換設備,實現超大規模Fabric結構的SAN.
B.非對稱式虛擬存儲系統
圖2
圖2非對稱式虛擬存儲系統示意圖
在圖2所示的非對稱式虛擬存儲系統結構圖中,網路中的每一台主機和虛擬存儲管理設備均連接到磁碟陣列,其中主機的數據路徑通過FC交換設備到達磁碟陣列;虛擬存儲設備對網路上連接的磁碟陣列進行虛擬化操作,將各存儲陣列中的LUN虛擬為邏輯帶區集(Strip),並對網路上的每一台主機指定對每一個Strip的訪問許可權(可寫,可讀,禁止訪問).當主機要訪問某個Strip時,首先要訪問虛擬存儲設備,讀取Strip信息和訪問許可權,然後再通過交換設備訪問實際的Strip中的數據.在此過程中,主機只會識別到邏輯的strip,而不會直接識別到物理硬碟.這種方案具有如下特點:
(1)將不同物理硬碟陣列中的容量進行邏輯組合,實現虛擬的帶區集,將多個陣列控制器埠綁定,在一定程度上提高了系統的可用帶寬.
(2)在交換機埠數量足夠的情況下,可在一個網路內安裝兩台虛擬存儲設備,實現Strip信息和訪問許可權的冗餘.
但是該方案存在如下一些不足:
(1)該方案本質上是帶區集——磁碟陣列結構,一旦帶區集中的某個磁碟陣列控制器損壞,或者這個陣列到交換機路徑上的銅纜,GBIC損壞,都會導致一個虛擬的LUN離線,而帶區集本身是沒有容錯能力的,一個LUN的損壞就意味著整個Strip裡面數據的丟失.
(2)由於該方案的帶寬提高是通過陣列埠綁定來實現的,而普通光纖通道陣列控制器的有效帶寬僅在40MB/S左右,因此要達到幾百兆的帶寬就意味著要調用十幾台陣列,這樣就會佔用幾十個交換機埠,在只有一兩台交換機的中小型網路中,這是不可實現的.
(3)由於各種品牌,型號的磁碟陣列其性能不完全相同,如果出於虛擬化的目的將不同品牌,型號的陣列進行綁定,會帶來一個問題:即數據寫入或讀出時各並發數據流的速度不同,這就意味著原來的數據包順序在傳輸完畢後被打亂,系統需要佔用時間和資源去重新進行數據包排序整理,這會嚴重影響系統性能.
4 數據塊虛擬與虛擬文件系統
以上從拓撲結構角度分析了對稱式與非對稱式虛擬存儲方案的異同,實際從虛擬化存儲的實現原理來講也有兩種方式;即數據塊虛擬與虛擬文件系統.
數據塊虛擬存儲方案著重解決數據傳輸過程中的沖突和延時問題.在多交換機組成的大型Fabric結構的SAN中,由於多台主機通過多個交換機埠訪問存儲設備,延時和數據塊沖突問題非常嚴重.數據塊虛擬存儲方案利用虛擬的多埠並行技術,為多台客戶機提供了極高的帶寬,最大限度上減少了延時與沖突的發生,在實際應用中,數據塊虛擬存儲方案以對稱式拓撲結構為表現形式.
虛擬文件系統存儲方案著重解決大規模網路中文件共享的安全機制問題.通過對不同的站點指定不同的訪問許可權,保證網路文件的安全.在實際應用中,虛擬文件系統存儲方案以非對稱式拓撲結構為表現形式.
虛擬存儲技術和這門課的結合點
本學期的這門課中,所涉及的虛擬存儲技術,實際上是虛擬存儲技術的一個方面,特指以CPU時間和外存空間換取昂貴內存空間的操作系統中的資源轉換技術
基本思想:程序,數據,堆棧的大小可以超過內存的大小,操作系統把程序當前使用的部分保留在內存,而把其他部分保存在磁碟上,並在需要時在內存和磁碟之間動態交換,虛擬存儲器支持多道程序設計技術
目的:提高內存利用率
管理方式
A 請求式分頁存儲管理
在進程開始運行之前,不是裝入全部頁面,而是裝入一個或零個頁面,之後根據進程運行的需要,動態裝入其他頁面;當內存空間已滿,而又需要裝入新的頁面時,則根據某種演算法淘汰某個頁面,以便裝入新的頁面
B 請求式分段存儲管理
為了能實現虛擬存儲,段式邏輯地址空間中的程序段在運行時並不全部裝入內存,而是如同請求式分頁存儲管理,首先調入一個或若干個程序段運行,在運行過程中調用到哪段時,就根據該段長度在內存分配一個連續的分區給它使用.若內存中沒有足夠大的空閑分區,則考慮進行段的緊湊或將某段或某些段淘汰出去,這種存儲管理技術稱為請求式分段存儲管理
現在團IDC網上有45元/年美國空間的團購,便宜有口碑
1 虛擬存儲技術的產生
虛擬化技術並不是一件很新的技術,它的發展,應該說是隨著計算機技術的發展而發展起來的,最早是始於70年代.由於當時的存儲容量,特別是內存容量成本非常高,容量也很小,對於大型應用程序或多程序應用就受到了很大的限制.為了克服這樣的限制,人們就採用了虛擬存儲的技術,最典型的應用就是虛擬內存技術.隨著計算機技術以及相關信息處理技術的不斷發展,人們對存儲的需求越來越大.這樣的需求刺激了各種新技術的出現,比如磁碟性能越來越好,容量越來越大.但是在大量的大中型信息處理系統中,單個磁碟是不能滿足需要,這樣的情況下存儲虛擬化技術就發展起來了.在這個發展過程中也由幾個階段和幾種應用.首先是磁碟條帶集(RAID,可帶容錯)技術,將多個物理磁碟通過一定的邏輯關系集合起來,成為一個大容量的虛擬磁碟.而隨著數據量不斷增加和對數據可用性要求的不斷提高,又一種新的存儲技術應運而生,那就是存儲區域網路(SAN)技術.SAN的廣域化則旨在將存儲設備實現成為一種公用設施,任何人員,任何主機都可以隨時隨地獲取各自想要的數據.目前討論比較多的包括iSCSI,FC Over IP 等技術,由於一些相關的標准還沒有最終確定,但是存儲設備公用化,存儲網路廣域化是一個不可逆轉的潮流.
2 虛擬存儲的概念
所謂虛擬存儲,就是把多個存儲介質模塊(如硬碟,RAID)通過一定的手段集中管理起來,所有的存儲模塊在一個存儲池(Storage Pool)中得到統一管理,從主機和工作站的角度,看到就不是多個硬碟,而是一個分區或者卷,就好象是一個超大容量(如1T以上)的硬碟.這種可以將多種,多個存儲設備統一管理起來,為使用者提供大容量,高數據傳輸性能的存儲系統,就稱之為虛擬存儲.
虛擬存儲的分類
目前虛擬存儲的發展尚無統一標准,從虛擬化存儲的拓撲結構來講主要有兩種方式:即對稱式與非對稱式.對稱式虛擬存儲技術是指虛擬存儲控制設備與存儲軟體系統,交換設備集成為一個整體,內嵌在網路數據傳輸路徑中;非對稱式虛擬存儲技術是指虛擬存儲控制設備獨立於數據傳輸路徑之外.從虛擬化存儲的實現原理來講也有兩種方式;即數據塊虛擬與虛擬文件系統.具體如下:
A.對稱式虛擬存儲
圖1
圖1對稱式虛擬存儲解決方案的示意圖
在圖1所示的對稱式虛擬存儲結構圖中,存儲控制設備 High Speed Traffic Directors(HSTD)與存儲池子系統Storage Pool集成在一起,組成SAN Appliance.可以看到在該方案中存儲控制設備HSTD在主機與存儲池數據交換的過程中起到核心作用.該方案的虛擬存儲過程是這樣的:由HSTD內嵌的存儲管理系統將存儲池中的物理硬碟虛擬為邏輯存儲單元(LUN),並進行埠映射(指定某一個LUN能被哪些埠所見),主機端將各可見的存儲單元映射為操作系統可識別的盤符.當主機向SAN Appliance寫入數據時,用戶只需要將數據寫入位置指定為自己映射的盤符(LUN),數據經過HSTD的高速並行埠,先寫入高速緩存,HSTD中的存儲管理系統自動完成目標位置由LUN到物理硬碟的轉換,在此過程中用戶見到的只是虛擬邏輯單元,而不關心每個LUN的具體物理組織結構.該方案具有以下主要特點:
(1)採用大容量高速緩存,顯著提高數據傳輸速度.
緩存是存儲系統中廣泛採用的位於主機與存儲設備之間的I/O路徑上的中間介質.當主機從存儲設備中讀取數據時,會把與當前數據存儲位置相連的數據讀到緩存中,並把多次調用的數據保留在緩存中;當主機讀數據時,在很大幾率上能夠從緩存中找到所需要的數據.直接從緩存上讀出.而從緩存讀取數據時的速度只受到電信號傳播速度的影響(等於光速),因此大大高於從硬碟讀數據時碟片機械轉動的速度.當主機向存儲設備寫入數據時,先把數據寫入緩存中,待主機端寫入動作停止,再從緩存中將數據寫入硬碟,同樣高於直接寫入硬碟的速度
(2)多埠並行技術,消除了I/O瓶頸.
傳統的FC存儲設備中控制埠與邏輯盤之間是固定關系,訪問一塊硬碟只能通過控制它的控制器埠.在對稱式虛擬存儲設備中,SAN Appliance的存儲埠與LUN的關系是虛擬的,也就是說多台主機可以通過多個存儲埠(最多8個)並發訪問同一個LUN;在光纖通道100MB/帶寬的大前提下,並行工作的埠數量越多,數據帶寬就越高.
(3)邏輯存儲單元提供了高速的磁碟訪問速度.
在視頻應用環境中,應用程序讀寫數據時以固定大小的數據塊為單位(從512byte到1MB之間).而存儲系統為了保證應用程序的帶寬需求,往往設計為傳輸512byte以上的數據塊大小時才能達到其最佳I/O性能.在傳統SAN結構中,當容量需求增大時,唯一的解決辦法是多塊磁碟(物理或邏輯的)綁定為帶區集,實現大容量LUN.在對稱式虛擬存儲系統中,為主機提供真正的超大容量,高性能LUN,而不是用帶區集方式實現的性能較差的邏輯卷.與帶區集相比,Power LUN具有很多優勢,如大塊的I/O block會真正被存儲系統所接受,有效提高數據傳輸速度;並且由於沒有帶區集的處理過程,主機CPU可以解除很大負擔,提高了主機的性能.
(4)成對的HSTD系統的容錯性能.
在對稱式虛擬存儲系統中,HSTD是數據I/O的必經之地,存儲池是數據存放地.由於存儲池中的數據具有容錯機制保障安全,因此用戶自然會想到HSTD是否有容錯保護.象許多大型存儲系統一樣,在成熟的對稱式虛擬存儲系統中,HSTD是成對配製的,每對HSTD之間是通過SAN Appliance內嵌的網路管理服務實現緩存數據一致和相互通信的.
(5)在SAN Appliance之上可方便的連接交換設備,實現超大規模Fabric結構的SAN.
因為系統保持了標準的SAN結構,為系統的擴展和互連提供了技術保障,所以在SAN Appliance之上可方便的連接交換設備,實現超大規模Fabric結構的SAN.
B.非對稱式虛擬存儲系統
圖2
圖2非對稱式虛擬存儲系統示意圖
在圖2所示的非對稱式虛擬存儲系統結構圖中,網路中的每一台主機和虛擬存儲管理設備均連接到磁碟陣列,其中主機的數據路徑通過FC交換設備到達磁碟陣列;虛擬存儲設備對網路上連接的磁碟陣列進行虛擬化操作,將各存儲陣列中的LUN虛擬為邏輯帶區集(Strip),並對網路上的每一台主機指定對每一個Strip的訪問許可權(可寫,可讀,禁止訪問).當主機要訪問某個Strip時,首先要訪問虛擬存儲設備,讀取Strip信息和訪問許可權,然後再通過交換設備訪問實際的Strip中的數據.在此過程中,主機只會識別到邏輯的strip,而不會直接識別到物理硬碟.這種方案具有如下特點:
(1)將不同物理硬碟陣列中的容量進行邏輯組合,實現虛擬的帶區集,將多個陣列控制器埠綁定,在一定程度上提高了系統的可用帶寬.
(2)在交換機埠數量足夠的情況下,可在一個網路內安裝兩台虛擬存儲設備,實現Strip信息和訪問許可權的冗餘.
但是該方案存在如下一些不足:
(1)該方案本質上是帶區集——磁碟陣列結構,一旦帶區集中的某個磁碟陣列控制器損壞,或者這個陣列到交換機路徑上的銅纜,GBIC損壞,都會導致一個虛擬的LUN離線,而帶區集本身是沒有容錯能力的,一個LUN的損壞就意味著整個Strip裡面數據的丟失.
(2)由於該方案的帶寬提高是通過陣列埠綁定來實現的,而普通光纖通道陣列控制器的有效帶寬僅在40MB/S左右,因此要達到幾百兆的帶寬就意味著要調用十幾台陣列,這樣就會佔用幾十個交換機埠,在只有一兩台交換機的中小型網路中,這是不可實現的.
(3)由於各種品牌,型號的磁碟陣列其性能不完全相同,如果出於虛擬化的目的將不同品牌,型號的陣列進行綁定,會帶來一個問題:即數據寫入或讀出時各並發數據流的速度不同,這就意味著原來的數據包順序在傳輸完畢後被打亂,系統需要佔用時間和資源去重新進行數據包排序整理,這會嚴重影響系統性能.
4 數據塊虛擬與虛擬文件系統
以上從拓撲結構角度分析了對稱式與非對稱式虛擬存儲方案的異同,實際從虛擬化存儲的實現原理來講也有兩種方式;即數據塊虛擬與虛擬文件系統.
數據塊虛擬存儲方案著重解決數據傳輸過程中的沖突和延時問題.在多交換機組成的大型Fabric結構的SAN中,由於多台主機通過多個交換機埠訪問存儲設備,延時和數據塊沖突問題非常嚴重.數據塊虛擬存儲方案利用虛擬的多埠並行技術,為多台客戶機提供了極高的帶寬,最大限度上減少了延時與沖突的發生,在實際應用中,數據塊虛擬存儲方案以對稱式拓撲結構為表現形式.
虛擬文件系統存儲方案著重解決大規模網路中文件共享的安全機制問題.通過對不同的站點指定不同的訪問許可權,保證網路文件的安全.在實際應用中,虛擬文件系統存儲方案以非對稱式拓撲結構為表現形式.
虛擬存儲技術和這門課的結合點
本學期的這門課中,所涉及的虛擬存儲技術,實際上是虛擬存儲技術的一個方面,特指以CPU時間和外存空間換取昂貴內存空間的操作系統中的資源轉換技術
基本思想:程序,數據,堆棧的大小可以超過內存的大小,操作系統把程序當前使用的部分保留在內存,而把其他部分保存在磁碟上,並在需要時在內存和磁碟之間動態交換,虛擬存儲器支持多道程序設計技術
目的:提高內存利用率
管理方式
A 請求式分頁存儲管理
在進程開始運行之前,不是裝入全部頁面,而是裝入一個或零個頁面,之後根據進程運行的需要,動態裝入其他頁面;當內存空間已滿,而又需要裝入新的頁面時,則根據某種演算法淘汰某個頁面,以便裝入新的頁面
B 請求式分段存儲管理
為了能實現虛擬存儲,段式邏輯地址空間中的程序段在運行時並不全部裝入內存,而是如同請求式分頁存儲管理,首先調入一個或若干個程序段運行,在運行過程中調用到哪段時,就根據該段長度在內存分配一個連續的分區給它使用.若內存中沒有足夠大的空閑分區,則考慮進行段的緊湊或將某段或某些段淘汰出去,這種存儲管理技術稱為請求式分段存儲管理
現在團IDC網上有45元/年美國空間的團購,便宜有口碑
❺ linux中使用了什麼內存管理方法,為什麼
「事實勝於雄辯」,我們用一個小例子(原形取自《User-Level Memory Management》)來展示上面所講的各種內存區的差別與位置。
進程的地址空間對應的描述結構是「內存描述符結構」,它表示進程的全部地址空間,——包含了和進程地址空間有關的全部信息,其中當然包含進程的內存區域。
進程內存的分配與回收
創建進程fork()、程序載入execve()、映射文件mmap()、動態內存分配malloc()/brk()等進程相關操作都需要分配內存給進程。不過這時進程申請和獲得的還不是實際內存,而是虛擬內存,准確的說是「內存區域」。進程對內存區域的分配最終都會歸結到do_mmap()函數上來(brk調用被單獨以系統調用實現,不用do_mmap()),
內核使用do_mmap()函數創建一個新的線性地址區間。但是說該函數創建了一個新VMA並不非常准確,因為如果創建的地址區間和一個已經存在的地址區間相鄰,並且它們具有相同的訪問許可權的話,那麼兩個區間將合並為一個。如果不能合並,那麼就確實需要創建一個新的VMA了。但無論哪種情況,do_mmap()函數都會將一個地址區間加入到進程的地址空間中--無論是擴展已存在的內存區域還是創建一個新的區域。
同樣,釋放一個內存區域應使用函數do_ummap(),它會銷毀對應的內存區域。
如何由虛變實!
從上面已經看到進程所能直接操作的地址都為虛擬地址。當進程需要內存時,從內核獲得的僅僅是虛擬的內存區域,而不是實際的物理地址,進程並沒有獲得物理內存(物理頁面——頁的概念請大家參考硬體基礎一章),獲得的僅僅是對一個新的線性地址區間的使用權。實際的物理內存只有當進程真的去訪問新獲取的虛擬地址時,才會由「請求頁機制」產生「缺頁」異常,從而進入分配實際頁面的常式。
該異常是虛擬內存機制賴以存在的基本保證——它會告訴內核去真正為進程分配物理頁,並建立對應的頁表,這之後虛擬地址才實實在在地映射到了系統的物理內存上。(當然,如果頁被換出到磁碟,也會產生缺頁異常,不過這時不用再建立頁表了)
這種請求頁機制把頁面的分配推遲到不能再推遲為止,並不急於把所有的事情都一次做完(這種思想有點像設計模式中的代理模式(proxy))。之所以能這么做是利用了內存訪問的「局部性原理」,請求頁帶來的好處是節約了空閑內存,提高了系統的吞吐率。要想更清楚地了解請求頁機制,可以看看《深入理解linux內核》一書。
這里我們需要說明在內存區域結構上的nopage操作。當訪問的進程虛擬內存並未真正分配頁面時,該操作便被調用來分配實際的物理頁,並為該頁建立頁表項。在最後的例子中我們會演示如何使用該方法。
系統物理內存管理
雖然應用程序操作的對象是映射到物理內存之上的虛擬內存,但是處理器直接操作的卻是物理內存。所以當應用程序訪問一個虛擬地址時,首先必須將虛擬地址轉化成物理地址,然後處理器才能解析地址訪問請求。地址的轉換工作需要通過查詢頁表才能完成,概括地講,地址轉換需要將虛擬地址分段,使每段虛地址都作為一個索引指向頁表,而頁表項則指向下一級別的頁表或者指向最終的物理頁面。
每個進程都有自己的頁表。進程描述符的pgd域指向的就是進程的頁全局目錄。下面我們借用《linux設備驅動程序》中的一幅圖大致看看進程地址空間到物理頁之間的轉換關系。
上面的過程說起來簡單,做起來難呀。因為在虛擬地址映射到頁之前必須先分配物理頁——也就是說必須先從內核中獲取空閑頁,並建立頁表。下面我們介紹一下內核管理物理內存的機制。
物理內存管理(頁管理)
Linux內核管理物理內存是通過分頁機制實現的,它將整個內存劃分成無數個4k(在i386體系結構中)大小的頁,從而分配和回收內存的基本單位便是內存頁了。利用分頁管理有助於靈活分配內存地址,因為分配時不必要求必須有大塊的連續內存[3],系統可以東一頁、西一頁的湊出所需要的內存供進程使用。雖然如此,但是實際上系統使用內存時還是傾向於分配連續的內存塊,因為分配連續內存時,頁表不需要更改,因此能降低TLB的刷新率(頻繁刷新會在很大程度上降低訪問速度)。
鑒於上述需求,內核分配物理頁面時為了盡量減少不連續情況,採用了「夥伴」關系來管理空閑頁面。夥伴關系分配演算法大家應該不陌生——幾乎所有操作系統方面的書都會提到,我們不去詳細說它了,如果不明白可以參看有關資料。這里只需要大家明白Linux中空閑頁面的組織和管理利用了夥伴關系,因此空閑頁面分配時也需要遵循夥伴關系,最小單位只能是2的冪倍頁面大小。內核中分配空閑頁面的基本函數是get_free_page/get_free_pages,它們或是分配單頁或是分配指定的頁面(2、4、8…512頁)。
注意:get_free_page是在內核中分配內存,不同於malloc在用戶空間中分配,malloc利用堆動態分配,實際上是調用brk()系統調用,該調用的作用是擴大或縮小進程堆空間(它會修改進程的brk域)。如果現有的內存區域不夠容納堆空間,則會以頁面大小的倍數為單位,擴張或收縮對應的內存區域,但brk值並非以頁面大小為倍數修改,而是按實際請求修改。因此Malloc在用戶空間分配內存可以以位元組為單位分配,但內核在內部仍然會是以頁為單位分配的。
另外,需要提及的是,物理頁在系統中由頁結構structpage描述,系統中所有的頁面都存儲在數組mem_map[]中,可以通過該數組找到系統中的每一頁(空閑或非空閑)。而其中的空閑頁面則可由上述提到的以夥伴關系組織的空閑頁鏈表(free_area[MAX_ORDER])來索引。
內核內存使用
Slab
所謂尺有所長,寸有所短。以頁為最小單位分配內存對於內核管理系統中的物理內存來說的確比較方便,但內核自身最常使用的內存卻往往是很小(遠遠小於一頁)的內存塊——比如存放文件描述符、進程描述符、虛擬內存區域描述符等行為所需的內存都不足一頁。這些用來存放描述符的內存相比頁面而言,就好比是麵包屑與麵包。一個整頁中可以聚集多個這些小塊內存;而且這些小塊內存塊也和麵包屑一樣頻繁地生成/銷毀。
為了滿足內核對這種小內存塊的需要,Linux系統採用了一種被稱為slab分配器的技術。Slab分配器的實現相當復雜,但原理不難,其核心思想就是「存儲池[4]」的運用。內存片段(小塊內存)被看作對象,當被使用完後,並不直接釋放而是被緩存到「存儲池」里,留做下次使用,這無疑避免了頻繁創建與銷毀對象所帶來的額外負載。
Slab技術不但避免了內存內部分片(下文將解釋)帶來的不便(引入Slab分配器的主要目的是為了減少對夥伴系統分配演算法的調用次數——頻繁分配和回收必然會導致內存碎片——難以找到大塊連續的可用內存),而且可以很好地利用硬體緩存提高訪問速度。
Slab並非是脫離夥伴關系而獨立存在的一種內存分配方式,slab仍然是建立在頁面基礎之上,換句話說,Slab將頁面(來自於夥伴關系管理的空閑頁面鏈表)撕碎成眾多小內存塊以供分配,slab中的對象分配和銷毀使用kmem_cache_alloc與kmem_cache_free。
Kmalloc
Slab分配器不僅僅只用來存放內核專用的結構體,它還被用來處理內核對小塊內存的請求。當然鑒於Slab分配器的特點,一般來說內核程序中對小於一頁的小塊內存的請求才通過Slab分配器提供的介面Kmalloc來完成(雖然它可分配32到131072位元組的內存)。從內核內存分配的角度來講,kmalloc可被看成是get_free_page(s)的一個有效補充,內存分配粒度更靈活了。
有興趣的話,可以到/proc/slabinfo中找到內核執行現場使用的各種slab信息統計,其中你會看到系統中所有slab的使用信息。從信息中可以看到系統中除了專用結構體使用的slab外,還存在大量為Kmalloc而准備的Slab(其中有些為dma准備的)。
內核非連續內存分配(Vmalloc)
夥伴關系也好、slab技術也好,從內存管理理論角度而言目的基本是一致的,它們都是為了防止「分片」,不過分片又分為外部分片和內部分片之說,所謂內部分片是說系統為了滿足一小段內存區(連續)的需要,不得不分配了一大區域連續內存給它,從而造成了空間浪費;外部分片是指系統雖有足夠的內存,但卻是分散的碎片,無法滿足對大塊「連續內存」的需求。無論何種分片都是系統有效利用內存的障礙。slab分配器使得一個頁面內包含的眾多小塊內存可獨立被分配使用,避免了內部分片,節約了空閑內存。夥伴關系把內存塊按大小分組管理,一定程度上減輕了外部分片的危害,因為頁框分配不在盲目,而是按照大小依次有序進行,不過夥伴關系只是減輕了外部分片,但並未徹底消除。你自己比劃一下多次分配頁面後,空閑內存的剩餘情況吧。
所以避免外部分片的最終思路還是落到了如何利用不連續的內存塊組合成「看起來很大的內存塊」——這里的情況很類似於用戶空間分配虛擬內存,內存邏輯上連續,其實映射到並不一定連續的物理內存上。Linux內核借用了這個技術,允許內核程序在內核地址空間中分配虛擬地址,同樣也利用頁表(內核頁表)將虛擬地址映射到分散的內存頁上。以此完美地解決了內核內存使用中的外部分片問題。內核提供vmalloc函數分配內核虛擬內存,該函數不同於kmalloc,它可以分配較Kmalloc大得多的內存空間(可遠大於128K,但必須是頁大小的倍數),但相比Kmalloc來說,Vmalloc需要對內核虛擬地址進行重映射,必須更新內核頁表,因此分配效率上要低一些(用空間換時間)
與用戶進程相似,內核也有一個名為init_mm的mm_strcut結構來描述內核地址空間,其中頁表項pdg=swapper_pg_dir包含了系統內核空間(3G-4G)的映射關系。因此vmalloc分配內核虛擬地址必須更新內核頁表,而kmalloc或get_free_page由於分配的連續內存,所以不需要更新內核頁表。
vmalloc分配的內核虛擬內存與kmalloc/get_free_page分配的內核虛擬內存位於不同的區間,不會重疊。因為內核虛擬空間被分區管理,各司其職。進程空間地址分布從0到3G(其實是到PAGE_OFFSET,在0x86中它等於0xC0000000),從3G到vmalloc_start這段地址是物理內存映射區域(該區域中包含了內核鏡像、物理頁面表mem_map等等)比如我使用的系統內存是64M(可以用free看到),那麼(3G——3G+64M)這片內存就應該映射到物理內存,而vmalloc_start位置應在3G+64M附近(說"附近"因為是在物理內存映射區與vmalloc_start期間還會存在一個8M大小的gap來防止躍界),vmalloc_end的位置接近4G(說"接近"是因為最後位置系統會保留一片128k大小的區域用於專用頁面映射,還有可能會有高端內存映射區,這些都是細節,這里我們不做糾纏)。
上圖是內存分布的模糊輪廓
由get_free_page或Kmalloc函數所分配的連續內存都陷於物理映射區域,所以它們返回的內核虛擬地址和實際物理地址僅僅是相差一個偏移量(PAGE_OFFSET),你可以很方便的將其轉化為物理內存地址,同時內核也提供了virt_to_phys()函數將內核虛擬空間中的物理映射區地址轉化為物理地址。要知道,物理內存映射區中的地址與內核頁表是有序對應的,系統中的每個物理頁面都可以找到它對應的內核虛擬地址(在物理內存映射區中的)。
而vmalloc分配的地址則限於vmalloc_start與vmalloc_end之間。每一塊vmalloc分配的內核虛擬內存都對應一個vm_struct結構體(可別和vm_area_struct搞混,那可是進程虛擬內存區域的結構),不同的內核虛擬地址被4k大小的空閑區間隔,以防止越界——見下圖)。與進程虛擬地址的特性一樣,這些虛擬地址與物理內存沒有簡單的位移關系,必須通過內核頁表才可轉換為物理地址或物理頁。它們有可能尚未被映射,在發生缺頁時才真正分配物理頁面。
這里給出一個小程序幫助大家認清上面幾種分配函數所對應的區域。
#include<linux/mole.h>
#include<linux/slab.h>
#include<linux/vmalloc.h>
unsignedchar*pagemem;
unsignedchar*kmallocmem;
unsignedchar*vmallocmem;
intinit_mole(void)
{
pagemem = get_free_page(0);
printk("<1>pagemem=%s",pagemem);
kmallocmem = kmalloc(100,0);
printk("<1>kmallocmem=%s",kmallocmem);
vmallocmem = vmalloc(1000000);
printk("<1>vmallocmem=%s",vmallocmem);
}
voidcleanup_mole(void)
{
free_page(pagemem);
kfree(kmallocmem);
vfree(vmallocmem);
}
實例
內存映射(mmap)是Linux操作系統的一個很大特色,它可以將系統內存映射到一個文件(設備)上,以便可以通過訪問文件內容來達到訪問內存的目的。這樣做的最大好處是提高了內存訪問速度,並且可以利用文件系統的介面編程(設備在Linux中作為特殊文件處理)訪問內存,降低了開發難度。許多設備驅動程序便是利用內存映射功能將用戶空間的一段地址關聯到設備內存上,無論何時,只要內存在分配的地址范圍內進行讀寫,實際上就是對設備內存的訪問。同時對設備文件的訪問也等同於對內存區域的訪問,也就是說,通過文件操作介面可以訪問內存。Linux中的X伺服器就是一個利用內存映射達到直接高速訪問視頻卡內存的例子。
熟悉文件操作的朋友一定會知道file_operations結構中有mmap方法,在用戶執行mmap系統調用時,便會調用該方法來通過文件訪問內存——不過在調用文件系統mmap方法前,內核還需要處理分配內存區域(vma_struct)、建立頁表等工作。對於具體映射細節不作介紹了,需要強調的是,建立頁表可以採用remap_page_range方法一次建立起所有映射區的頁表,或利用vma_struct的nopage方法在缺頁時現場一頁一頁的建立頁表。第一種方法相比第二種方法簡單方便、速度快,但是靈活性不高。一次調用所有頁表便定型了,不適用於那些需要現場建立頁表的場合——比如映射區需要擴展或下面我們例子中的情況。
我們這里的實例希望利用內存映射,將系統內核中的一部分虛擬內存映射到用戶空間,以供應用程序讀取——你可利用它進行內核空間到用戶空間的大規模信息傳輸。因此我們將試圖寫一個虛擬字元設備驅動程序,通過它將系統內核空間映射到用戶空間——將內核虛擬內存映射到用戶虛擬地址。從上一節已經看到Linux內核空間中包含兩種虛擬地址:一種是物理和邏輯都連續的物理內存映射虛擬地址;另一種是邏輯連續但非物理連續的vmalloc分配的內存虛擬地址。我們的例子程序將演示把vmalloc分配的內核虛擬地址映射到用戶地址空間的全過程。
程序里主要應解決兩個問題:
第一是如何將vmalloc分配的內核虛擬內存正確地轉化成物理地址?
因為內存映射先要獲得被映射的物理地址,然後才能將其映射到要求的用戶虛擬地址上。我們已經看到內核物理內存映射區域中的地址可以被內核函數virt_to_phys轉換成實際的物理內存地址,但對於vmalloc分配的內核虛擬地址無法直接轉化成物理地址,所以我們必須對這部分虛擬內存格外「照顧」——先將其轉化成內核物理內存映射區域中的地址,然後在用virt_to_phys變為物理地址。
轉化工作需要進行如下步驟:
找到vmalloc虛擬內存對應的頁表,並尋找到對應的頁表項。
獲取頁表項對應的頁面指針
通過頁面得到對應的內核物理內存映射區域地址。
如下圖所示:
第二是當訪問vmalloc分配區時,如果發現虛擬內存尚未被映射到物理頁,則需要處理「缺頁異常」。因此需要我們實現內存區域中的nopaga操作,以能返回被映射的物理頁面指針,在我們的實例中就是返回上面過程中的內核物理內存映射區域中的地址。由於vmalloc分配的虛擬地址與物理地址的對應關系並非分配時就可確定,必須在缺頁現場建立頁表,因此這里不能使用remap_page_range方法,只能用vma的nopage方法一頁一頁的建立。
程序組成
map_driver.c,它是以模塊形式載入的虛擬字元驅動程序。該驅動負責將一定長的內核虛擬地址(vmalloc分配的)映射到設備文件上。其中主要的函數有——vaddress_to_kaddress()負責對vmalloc分配的地址進行頁表解析,以找到對應的內核物理映射地址(kmalloc分配的地址);map_nopage()負責在進程訪問一個當前並不存在的VMA頁時,尋找該地址對應的物理頁,並返回該頁的指針。
test.c它利用上述驅動模塊對應的設備文件在用戶空間讀取讀取內核內存。結果可以看到內核虛擬地址的內容(ok!),被顯示在了屏幕上。
執行步驟
編譯map_driver.c為map_driver.o模塊,具體參數見Makefile
載入模塊:insmodmap_driver.o
生成對應的設備文件
1在/proc/devices下找到map_driver對應的設備命和設備號:grepmapdrv/proc/devices
2建立設備文件mknodmapfilec 254 0(在我的系統里設備號為254)
利用maptest讀取mapfile文件,將取自內核的信息列印到屏幕上。
❻ (操作系統) 編寫代碼對存儲管理部件的工作過程進行模擬
採用分頁存儲器允許把一個作業存放到若干不相鄰的分區中,既可免去移動信息的工作,又可盡量減少主存的碎片。分頁式存儲管理的基本原理如下:
1、 頁框:物理地址分成大小相等的許多區,每個區稱為一塊;
2、址分成大小相等的區,區的大小與塊的大小相等,每個稱一個頁面。
3、 邏輯地址形式:與此對應,分頁存儲器的邏輯地址由兩部分組成,頁號和單元號。邏輯地址格式為 頁號 單元號(頁內地址) 採用分頁式存儲管理時,邏輯地址是連續的。所以,用戶在編製程序時仍只須使用順序的地址,而不必考慮如何去分頁。
4、頁表和地址轉換:如何保證程序正確執行呢?
採用的辦法是動態重定位技術,讓程序的指令執行時作地址變換,由於程序段以頁為單位,所以,我們給每個頁設立一個重定位寄存器,這些重定位寄存器的集合便稱頁表。頁表是操作系統為每個用戶作業建立的,用來記錄程序頁面和主存對應頁框的對照表,頁表中的每一欄指明了程序中的一個頁面和分得的頁框的對應關系。絕對地址=塊號*塊長+單元號 以上從拓撲結構角度分析了對稱式與非對稱式虛擬存儲方案的異同,實際從虛擬化存儲的實現原理來講也有兩種方式;即數據塊虛擬與虛擬文件系統. 數據塊虛擬存儲方案著重解決數據傳輸過程中的沖突和延時問題.在多交換機組成的大型Fabric結構的SAN中,由於多台主機通過多個交換機埠訪問存儲設備,延時和數據塊沖突問題非常嚴重.數據塊虛擬存儲方案利用虛擬的多埠並行技術,為多台客戶機提供了極高的帶寬,最大限度上減少了延時與沖突的發生,在實際應用中,數據塊虛擬存儲方案以對稱式拓撲結構為表現形式. 虛擬文件系統存儲方案著重解決大規模網路中文件共享的安全機制問題.通過對不同的站點指定不同的訪問許可權,保證網路文件的安全.在實際應用中,虛擬文件系統存儲方案以非對稱式拓撲結構為表現形式. 虛擬存儲技術,實際上是虛擬存儲技術的一個方面,特指以CPU時間和外存空間換取昂貴內存空間的操作系統中的資源轉換技術 基本思想:程序,數據,堆棧的大小可以超過內存的大小,操作系統把程序當前使用的部分保留在內存,而把其他部分保存在磁碟上,並在需要時在內存和磁碟之間動態交換,虛擬存儲器支持多道程序設計技術 目的:提高內存利用率 管理方式
A 請求式分頁存儲管理 在進程開始運行之前,不是裝入全部頁面,而是裝入一個或零個頁面,之後根據進程運行的需要,動態裝入其他頁面;當內存空間已滿,而又需要裝入新的頁面時,則根據某種演算法淘汰某個頁面,以便裝入新的頁面
B 請求式分段存儲管理 為了能實現虛擬存儲,段式邏輯地址空間中的程序段在運行時並不全部裝入內存,而是如同請求式分頁存儲管理,首先調入一個或若干個程序段運行,在運行過程中調用到哪段時,就根據該段長度在內存分配一個連續的分區給它使用.若內存中沒有足夠大的空閑分區,則考慮進行段的緊湊或將某段或某些段淘汰出去,這種存儲管理技術稱為請求式分段存儲管理
你好,希望採納!
❼ 存儲裡面,存儲池到底是怎麼樣一個概念呢一直比較困惑~~
存儲池是 Data Protection Manager (DPM) 伺服器在其中存儲副本、卷影副本和傳輸日誌的一組磁碟。您必須向存儲池添加至少一個磁碟才可開始保護數據。添加到存儲池的磁碟應是空的。為了准備數據保護,DPM 重新格式化磁碟並擦除磁碟上的任何數據。DPM 伺服器必須安裝至少兩個磁碟,_一個專用於啟動、系統和 DPM 安裝文件,而另一個專用於存儲池。在 DPM
環境中,"磁碟"是指在 Windows 磁碟管理工具中顯示為磁碟的任何磁碟設備。DPM 不會將含有啟動文件、系統文件或 DPM
安裝的任何組件的任何磁碟添加到存儲池。
❽ 分頁緩沖池佔用高
你好,當然了,虛擬內存只是再硬碟上一塊分區用來存儲最緩慢的分頁文件,如果不開那就直接使用物理內存做緩存啊。望採納,歡迎追問
❾ 關閉了虛擬內存為什麼任務管理器性能中仍顯示佔用分頁緩沖池
你好,當然了,虛擬內存只是再硬碟上一塊分區用來存儲最緩慢的分頁文件,如果不開那就直接使用物理內存做緩存啊。
望採納,歡迎追問
❿ 請問win7 64位系統,進程管理器裡面的提交大小和分頁池(頁面緩沖池)
Google來的:內存 - 提交大小為某進程使用而保留的虛擬內存的數量。內存 - 分頁池由內核或驅動程序代表進程分配的可分頁內核內存的數量。可分頁內存是可寫入其他存儲媒體(例如硬碟)的內存。分頁池是所有程序的核心模式組件使用到的內存部分。具體的是,分頁池上的可以保存到磁碟上,當程序需要這些頁面的時候,再讀到內存裡面來。在win7以前,Win32為系統中的每一個應用程序或者進程提供一個獨立的2GB的用戶地址空間,但是當時具體的大小是沒有確定的。或者說是沒有那麼大。假設某個應用程序要求的內存比可用的內存更多時,Win32是這樣滿足這種要求的:它從這個獨立的2GB用戶地址空間或其他的進程把非關鍵內存分頁到一個頁文件,並且釋放這些物理內存頁。進程開始時,所有地址的都是自由的,意味著它們都是自由空間並且可以被提交到內存,或者為將來使用而保留起來,但是它們不能存取。在任何自由的地址能夠被使用前,它必須首先被分配為保留的或已提交的。當內存被提交時,內存物理頁被分配,並且該段空間被保留在在一個頁文件中。也就是說,已提交的內存頁總是以物理內存頁或者在已經被分頁的磁碟上的頁文件的形式存在。當提交一個大塊內存時,在初始階段,其部分或者全部內存沒有駐留在物理內存中也是有可能的。某些內存頁一開始駐留在頁文件中,直到它被訪問。在系統中,一旦內存頁已提交,虛擬內存管理器象對待所有其它的內存頁一樣對待它們。 按照上面的分析我認為,內存提交大小為實際內存頁和虛擬內存頁所提交的共同大小。