虛擬存儲映射表
❶ 內存映射是怎麼回事
內存映射文件是由一個文件到一塊內存的映射,使進程虛擬地址空間的某個區域與磁碟上某個文件的部分或全部內容的建立映射。
建立映射後,通過該區域可以直接對被映射的磁碟文件進行訪問.而不必執行文件I/O操作也無需對文件內容進行緩沖處理。
就好像整個被映射的文件都載入到了內存一樣,因此內存文件映射非常適合於用來管理大文件。
內存映射文件對程序的提速,只在處理大文件或非常頻繁的文件讀寫操作時效果才明顯。
通過內存映射,相當於將磁碟上的文件所在空間建立成一塊虛擬內存,程序訪問時可按內存的方式進行,省去了普通io方式的一些環節,其實真正要讀寫操作時,會進行換頁,將這些個「虛擬內存」讀到物理內存中。
總之,內存映射文件是應用虛擬內存的技術來達到加速處理的
❷ 如何解決伺服器虛擬化中遇到的存儲問題
但也因為虛擬化的特性,為承載環境中不斷增長的虛擬機,需要擴容存儲以滿足性能與容量的使用需求。IT經理們已經發現,那些因伺服器虛擬化所節省的資金都逐漸投入存儲購買的方案上了。 伺服器虛擬化因虛擬機蔓延、虛擬機中用於備份與災難恢復軟體配置的問題,讓許多組織徹底改變了原有的數據備份與災難恢復策略。一些廠商致力於伺服器虛擬化存儲問題,提供包括存儲虛擬化、重復數據刪除與自動化精簡配置等解決方案。 伺服器虛擬化存儲問題出現在數據中心虛擬化環境中傳統的物理存儲技術。導致虛擬伺服器蔓延的部分原因,在於虛擬伺服器可能比物理伺服器多消耗約30%左右的磁碟空間。還可能存在虛擬機「I/O 攪拌機」問題:傳統存儲架構無法有效管虛擬機產生的混雜模式隨機I/O。虛擬化環境下的虛擬存儲管理遠比傳統環境復雜——管理虛擬機就意味著管理存儲空間。 解決伺服器虛擬化存儲問題 作為一名IT經理,你擁有解決此類伺服器虛擬化存儲問題的幾個選項,我們從一些實用性較低的方案開始介紹。其中一項便是以更慢的速度部署虛擬機。你可以在每台宿主上運行更少的虛擬機,降低「I/O混合器」問題出現的可能性。另外一個方法則是提供額外存儲,但價格不菲。 一個更好的選擇是在采購存儲設備時,選擇更智能的型號並引入諸如存儲虛擬化,重復數據刪除與自動化精簡配置技術。採用這一戰略意味著新技術的應用,建立與新產商的合作關系。 將存儲虛擬化作為解決方案 許多分析師與存儲提供商推薦存儲虛擬化,作為伺服器虛擬化存儲問題的解決方案。即使沒有出現問題,存儲虛擬化也可以減少數據中心開支,提高商業靈活性並成為任何私有雲的重要組件之一。 概念上來說,存儲虛擬化類似伺服器虛擬化。將物理存儲系統抽象,隱藏復雜的物理存儲設備。存儲虛擬化將來自於多個網路存儲設備的資源整合為資源池,對外部來說,相當於單個存儲設備,連同虛擬化的磁碟、塊、磁帶系統與文件系統。存儲虛擬化的一個優勢便是該技術可以幫助存儲管理員管理存儲設備,提高執行諸如備份/恢復與歸檔任務的效率。 存儲虛擬化架構維護著一份虛擬磁碟與其他物理存儲的映射表。虛擬存儲軟體層(邏輯抽象層)介於物理存儲系統與運行的虛擬伺服器之間。當虛擬伺服器需要訪問數據時,虛擬存儲抽象層提供虛擬磁碟與物理存儲設備之間的映射,並在主機與物理存儲間傳輸數據。 只要理解了伺服器虛擬化技術,存儲虛擬化的區別僅在於採用怎樣的技術來實現。容易混淆的主要還是在於存儲提供商用於實現存儲虛擬化的不同方式,可能直接通過存儲控制器也可能通過SAN應用程序。
❸ 虛擬存儲的實現方式
目前實現虛擬存儲主要分為如下幾種: 伺服器廠商會在伺服器端實施虛擬存儲。同樣,軟體廠商也會在伺服器平台上實施虛擬存儲。這些虛擬存儲的實施都是通過伺服器端將鏡像映射到外圍存儲設備上,除了分配數據外,對外圍存儲設備沒有任何控制。伺服器端一般是通過邏輯卷管理來實現虛擬存儲技術。邏輯卷管理為從物理存儲映射到邏輯上的卷提供了一個虛擬層。伺服器只需要處理邏輯卷,而不用管理存儲設備的物理參數。
用這種構建虛擬存儲系統,伺服器端是一性能瓶頸,因此在多媒體處理領域幾乎很少採用。 另一種實施虛擬的地方是存儲設備本身。這種虛擬存儲一般是存儲廠商實施的,但是很可能使用廠商獨家的存儲產品。為避免這種不兼容性,廠商也許會和伺服器、軟體或網路廠商進行合作。當虛擬存儲實施在設備端時,邏輯(虛擬)環境和物理設備同在一個控制范圍中,這樣做的益處在於:虛擬磁碟高度有效地使用磁碟容量,虛擬磁帶高度有效地使用磁帶介質。
在存儲子系統端的虛擬存儲設備主要通過大規模的RAID子系統和多個I/O通道連接到伺服器上,智能控制器提供LUN訪問控制、緩存和其他如數據復制等的管理功能。這種方式的優點在於存儲設備管理員對設備有完全的控制權,而且通過與伺服器系統分開,可以將存儲的管理與多種伺服器操作系統隔離,並且可以很容易地調整硬體參數。
網路廠商會在網路設備端實施虛擬存儲,通過網路將邏輯鏡像映射到外圍存儲設備,除了分配數據外,對外圍存儲設備沒有任何控制。在網路端實施虛擬存儲具有其合理性,因為它的實施既不是在伺服器端,也不是在存儲設備端,而是介於兩個環境之間,可能是最「開放」的虛擬實施環境,最有可能支持任何的伺服器、操作系統、應用和存儲設備。從技術上講,在網路端實施虛擬存儲的結構形式有以下兩種:即對稱式與非對稱式虛擬存儲。
從目前的虛擬存儲技術和產品的實際情況來看,基於主機和基於存儲的方法對於初期的採用者來說魅力最大,因為他們不需要任何附加硬體,但對於異構存儲系統和操作系統而言,系統的運行效果並不是很好。基於互聯設備的方法處於兩者之間,它迴避了一些安全性問題,存儲虛擬化的功能較強,能減輕單一主機的負載,同時可獲得很好的可擴充性。
不管採用何種虛擬存儲技術,其目的都使為了提供一個高性能、安全、穩定、可靠、可擴展的存儲網路平台,滿足節目製作網路系統的苛刻要求。根據綜合的性能價格比來說,一般情況下,在基於主機和基於存儲設備的虛擬存儲技術能夠保證系統的數據處理能力要求時,優先考慮,因為這兩種虛擬存儲技術構架方便、管理簡單、維護容易、產品相對成熟、性能價格比高。在單純的基於存儲設備的虛擬存儲技術無法保證存儲系統性能要求的情況下,我們可以考慮採用基於互連設備的虛擬存儲技術。
❹ 如何解決伺服器虛擬化中的存儲問題
但也因為虛擬化的特性,為承載環境中不斷增長的虛擬機,需要擴容存儲以滿足性能與容量的使用需求。IT經理們已經發現,那些因伺服器虛擬化所節省的資金都逐漸投入存儲購買的方案上了。 伺服器虛擬化因虛擬機蔓延、虛擬機中用於備份與災難恢復軟體配置的問題,讓許多組織徹底改變了原有的數據備份與災難恢復策略。EMC、Hitachi Data System、IBM、NetApp和Dell等都致力於伺服器虛擬化存儲問題,提供包括存儲虛擬化、重復數據刪除與自動化精簡配置等解決方案。 伺服器虛擬化存儲問題出現在數據中心虛擬化環境中傳統的物理存儲技術。導致虛擬伺服器蔓延的部分原因,在於虛擬伺服器可能比物理伺服器多消耗約30%左右的磁碟空間。還可能存在虛擬機「I/O 攪拌機」問題:傳統存儲架構無法有效管虛擬機產生的混雜模式隨機I/O。虛擬化環境下的虛擬存儲管理遠比傳統環境復雜——管理虛擬機就意味著管理存儲空間。解決伺服器虛擬化存儲問題 作為一名IT經理,你擁有解決此類伺服器虛擬化存儲問題的幾個選項,我們從一些實用性較低的方案開始介紹。其中一項便是以更慢的速度部署虛擬機。你可以在每台宿主上運行更少的虛擬機,降低「I/O混合器」問題出現的可能性。另外一個方法則是提供額外存儲,但價格不菲。 一個更好的選擇是在采購存儲設備時,選擇更智能的型號並引入諸如存儲虛擬化,重復數據刪除與自動化精簡配置技術。採用這一戰略意味著新技術的應用,建立與新產商的合作關系,例如Vistor、DataCore與FalconStor。將存儲虛擬化作為解決方案 許多分析師與存儲提供商推薦存儲虛擬化,作為伺服器虛擬化存儲問題的解決方案。即使沒有出現問題,存儲虛擬化也可以減少數據中心開支,提高商業靈活性並成為任何私有雲的重要組件之一。 概念上來說,存儲虛擬化類似伺服器虛擬化。將物理存儲系統抽象,隱藏復雜的物理存儲設備。存儲虛擬化將來自於多個網路存儲設備的資源整合為資源池,對外部來說,相當於單個存儲設備,連同虛擬化的磁碟、塊、磁帶系統與文件系統。存儲虛擬化的一個優勢便是該技術可以幫助存儲管理員管理存儲設備,提高執行諸如備份/恢復與歸檔任務的效率。 存儲虛擬化架構維護著一份虛擬磁碟與其他物理存儲的映射表。虛擬存儲軟體層(邏輯抽象層)介於物理存儲系統與運行的虛擬伺服器之間。當虛擬伺服器需要訪問數據時,虛擬存儲抽象層提供虛擬磁碟與物理存儲設備之間的映射,並在主機與物理存儲間傳輸數據。 只要理解了伺服器虛擬化技術,存儲虛擬化的區別僅在於採用怎樣的技術來實現。容易混淆的主要還是在於存儲提供商用於實現存儲虛擬化的不同方式,可能直接通過存儲控制器也可能通過SAN應用程序。同樣的,某些部署存儲虛擬化將命令和數據一起存放(in-band)而其他可能將命令與數據路徑分離(out-of-band)。 存儲虛擬化通過許多技術實現,可以是基於軟體、主機、應用或基於網路的。基於主機的技術提供了一個虛擬化層,並扮演為應用程序提供單獨存儲驅動分區的角色。基於軟體的技術管理著基於存儲網路的硬體設施。基於網路的技術與基於軟體的技術類似,但工作於網路交換層。 存儲虛擬化技術也有一些缺陷。實現基於主機的存儲虛擬化工具實際上就是卷管理器,而且已經流傳了好多年。伺服器上的卷管理器用於配置多個磁碟並將其作為單一資源管理,可以在需要的時候按需分割,但這樣的配置需要在每台伺服器上配置。此解決方式最適合小型系統使用。 基於軟體的技術,每台主機僅需要通過應用軟體查詢是否有存儲單元可用,而軟體將主機需求重定向至存儲單元。因為基於軟體的應用通過同樣的鏈路寫入塊數據與控制信息(metadata),所以可能存有潛在瓶頸,影響主機數據傳輸的速度。為了降低延遲,應用程序通常需要維護用於讀取與寫入操作的緩存,這也增加了其應用的價格。伺服器虛擬化存儲創新:自動化精簡配置與重復數據刪除 存儲技術的兩個創新,自動化精簡配置與重復數據刪除,同樣是減少伺服器虛擬化環境對存儲容量需求的解決方案。這兩項革新可以與存儲虛擬化結合,以提供牢固可靠的存儲容量控制保障。 自動精簡配置讓存儲「走的更遠」,可減少已分配但沒有使用的容量。其功能在於對數據塊按需分配,而不是對所有容量需求進行預先分配。此方法可以減少幾乎所有空白空間,幫助避免利用率低下的情況出現,通常可以降低10%的磁碟開銷,避免出現分配大量存儲空間給某些獨立伺服器,卻一直沒有使用的情況。 在許多伺服器部署需求中,精簡配置可通過普通存儲資源池提供應用所需的存儲空間。在這樣的條件下,精簡配置可以與存儲虛擬化綜合應用。 重復數據刪除從整體上檢測與刪除位於存儲介質或文件系統中的重復數據。檢測重復數據可在文件、位元組或塊級別進行。重復數據刪除技術通過確定相同的數據段,並通過一份簡單的拷貝替代那些重復數據。例如,文件系統中有一份相同的文檔,在50個文件夾(文件)中,可以通過一份單獨的拷貝與49個鏈接來替代原文件。 重復數據刪除可以應用與伺服器虛擬化環境中以減少存儲需求。每個虛擬伺服器包含在一個文件中,有時文件會變得很大。虛擬伺服器的一個功能便是,系統管理員可以在某些時候停下虛擬機,復制並備份。其可以在之後重啟,恢復上線。這些備份文件存儲於文件伺服器的某處,通常在文件中會有重復數據。沒有重復數據刪除技術支持,很容易使得備份所需的存儲空間急劇增長。改變購買存儲設備的觀念 即使通過存儲虛擬化,重復數據刪除與精簡配置可以緩解存儲數容量增長的速度,組織也可能需要改變其存儲解決方案購買標准。例如,如果你購買的存儲支持重復數據刪除,你可能不再需要配置原先規劃中那麼多的存儲容量。支持自動化精簡配置,存儲容量利用率可以自動提高並接近100%,而不需要管理員費心操作維護。 傳統存儲購買之前,需要評估滿足負載所需的存儲能力基線、三年時間存儲潛在增長率、存儲擴展能力與解決存儲配置文件,還有擬定相關的采購合同。以存儲虛擬化與雲計算的優勢,購買更大容量的傳統存儲將越來越不實際,尤其在預算仍是購買存儲最大的限制的情況下。以下是一些簡單的存儲購買指導: 除非設計中明確說明,不要購買僅能解決單一問題的存儲方案。這樣的做法將導致購買的存儲架構無法與其他系統共享使用。 ·關注那些支持多協議並提供更高靈活性的存儲解決方案。 ·考慮存儲解決方案所能支持的應用/負載范圍。 ·了解能夠解決存儲問題的技術與方案,例如重復數據刪除與自動化精簡配置等。 ·了解可以降低系統管理成本的存儲管理軟體與自動化工具。 許多組織都已經在內部環境中多少實施了伺服器虛擬化,並考慮如何在現有存儲硬體與伺服器上實現私有雲。存儲預算應用於購買合適的硬體或軟體,這點十分重要。不要將僅將注意力集中在低價格上。相反,以業務問題為出發點,提供解決問題最有價值的存儲解決方案才是王道。
❺ linux虛擬地址,地址映射表,物理內存與虛擬內存的關系
內存是一種存儲設備,現在一般是DDR SDRAM,地址是用來標記內存的數據的。在操作系統中物理內存指實際的DDR SDRAM,而虛擬內存指的是在硬碟中的緩存,windows中是頁面文件,linux中是swap分區。cpu產生的地址是虛擬地址也可以稱作有效地址,而在cpu外地址線上的信號稱作實際地址或物理地址。這2類地址有某種對應關系,由操作系統管理。如果是x86架構的話,物理地址和虛擬地址中間還有線性地址的概念。
❻ 虛擬內存映射是怎麼回事塊映射和分頁哪個好
樓主說的塊映射
我不太明白..
就windows虛擬內存來說...使用虛擬內存可以提高系統性能,緩存經常需要讀取的內容
引用:
http://wiki.ccw.com.cn/%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98
如果執行的程序很大或很多,就會導致內存消耗殆盡。為了解決這個問題,Windows中運用了虛擬內存技術,即拿出一部分硬碟空間來充當內存使用,當內存佔用完時,電腦就會自動調用硬碟來充當內存,以緩解內存的緊張。
❼ linux為什麼主要採用分頁機制來實現虛擬存儲管理
1 分頁機制
在虛擬內存中,頁表是個映射表的概念, 即從進程能理解的線性地址(linear address)映射到存儲器上的物理地址(phisical address).
很顯然,這個頁表是需要常駐內存的東西, 以應對頻繁的查詢映射需要(實際上,現代支持VM的處理器都有一個叫TLB的硬體級頁表緩存部件,本文不討論)。
1.1 為什麼使用多級頁表來完成映射
但是為什麼要使用多級頁表來完成映射呢?
用來將虛擬地址映射到物理地址的數據結構稱為頁表, 實現兩個地址空間的關聯最容易的方式是使用數組, 對虛擬地址空間中的每一頁, 都分配一個數組項. 該數組指向與之關聯的頁幀, 但這會引發一個問題, 例如, IA-32體系結構使用4KB大小的頁, 在虛擬地址空間為4GB的前提下, 則需要包含100萬項的頁表. 這個問題在64位體系結構下, 情況會更加糟糕. 而每個進程都需要自身的頁表, 這回導致系統中大量的所有內存都用來保存頁表.
設想一個典型的32位的X86系統,它的虛擬內存用戶空間(user space)大小為3G, 並且典型的一個頁表項(page table entry, pte)大小為4 bytes,每一個頁(page)大小為4k bytes。那麼這3G空間一共有(3G/4k=)786432個頁面,每個頁面需要一個pte來保存映射信息,這樣一共需要786432個pte!
如何存儲這些信息呢?一個直觀的做法是用數組來存儲,這樣每個頁能存儲(4k/4=)1K個,這樣一共需要(786432/1k=)768個連續的物理頁面(phsical page)。而且,這只是一個進程,如果要存放所有N個進程,這個數目還要乘上N! 這是個巨大的數目,哪怕內存能提供這樣數量的空間,要找到連續768個連續的物理頁面在系統運行一段時間後碎片化的情況下,也是不現實的。
為減少頁表的大小並容許忽略不需要的區域, 計算機體系結構的涉及會將虛擬地址分成多個部分. 同時虛擬地址空間的大部分們區域都沒有使用, 因而頁沒有關聯到頁幀, 那麼就可以使用功能相同但內存用量少的多的模型: 多級頁表
但是新的問題來了, 到底採用幾級頁表合適呢?
1.2 32位系統中2級頁表
從80386開始, intel處理器的分頁單元是4KB的頁, 32位的地址空間被分為3部分
單元
描述
頁目錄表Directory 最高10位
頁中間表Table 中間10位
頁內偏移 最低12位
即頁表被劃分為頁目錄表Directory和頁中間表Tabl兩個部分
此種情況下, 線性地址的轉換分為兩步完成.
第一步, 基於兩級轉換表(頁目錄表和頁中間表), 最終查找到地址所在的頁幀
第二步, 基於偏移, 在所在的頁幀中查找到對應偏移的物理地址
使用這種二級頁表可以有效的減少每個進程頁表所需的RAM的數量. 如果使用簡單的一級頁表, 那將需要高達220個頁表, 假設每項4B, 則共需要佔用220?4B=4MB的RAM來表示每個進程的頁表. 當然我們並不需要映射所有的線性地址空間(32位機器上線性地址空間為4GB), 內核通常只為進程實際使用的那些虛擬內存區請求頁表來減少內存使用量.
1.3 64位系統中的分頁
正常來說, 對於32位的系統兩級頁表已經足夠了, 但是對於64位系統的計算機, 這遠遠不夠.
首先假設一個大小為4KB的標准頁. 因為1KB覆蓋210個地址的范圍, 4KB覆蓋212個地址, 所以offset欄位需要12位.
這樣線性地址空間就剩下64-12=52位分配給頁中間表Table和頁目錄表Directory. 如果我們現在決定僅僅使用64位中的48位來定址(這個限制其實已經足夠了, 2^48=256TB, 即可達到256TB的定址空間). 剩下的48-12=36位被分配給Table和Directory欄位. 即使我們現在決定位兩個欄位各預留18位, 那麼每個進程的頁目錄和頁表都包含218個項, 即超過256000個項.
基於這個原因, 所有64位處理器的硬體分頁系統都使用了額外的分頁級別. 使用的級別取決於處理器的類型
平台名稱
頁大小
定址所使用的位數
分頁級別數
線性地址分級
alpha 8KB 43 3 10 + 10 + 10 + 13
ia64 4KB 39 3 9 + 9 + 9 + 12
ppc64 4KB 41 3 10 + 10 + 9 + 12
sh64 4KB 41 3 10 + 10 + 9 + 12
x86_64 4KB 48 4 9 + 9 + 9 + 9 + 12
❽ 什麼是虛擬存儲器它的原理是是什麼
虛擬內存是計算機系統內存管理的一種技術。它使得應用程序認為它擁有連續的可用的內存(一個連續完整的地址空間),而實際上,它通常是被分隔成多個物理內存碎片,還有部分暫時存儲在外部磁碟存儲器上,在需要時進行數據交換。
原理:
①中央處理器訪問主存的邏輯地址分解成組號a和組內地址b,並對組號a進行地址變換,即將邏輯組號a作為索引,查地址變換表,以確定該組信息是否存放在主存內。
②如該組號已在主存內,則轉而執行;如果該組號不在主存內,則檢查主存中是否有空閑區,如果沒有,便將某個暫時不用的組調出送往輔存,以便將這組信息調入主存。
③從輔存讀出所要的組,並送到主存空閑區,然後將那個空閑的物理組號a和邏輯組號a登錄在地址變換表中。
④從地址變換表讀出與邏輯組號a對應的物理組號a。
⑤從物理組號a和組內位元組地址b得到物理地址。
⑥根據物理地址從主存中存取必要的信息。
(8)虛擬存儲映射表擴展閱讀:
虛擬內存的關鍵問題:
(1)調度問題:決定哪些程序和數據應被調入主存。
(2)地址映射問題:在訪問主存時把虛地址變為主存物理地址(這一過程稱為內地址變換);在訪問輔存時把虛地址變成輔存的物理地址(這一過程稱為外地址變換),以便換頁。此外還要解決主存分配、存儲保護與程序再定位等問題。
(3)替換問題:決定哪些程序和數據應被調出主存。
(4)更新問題:確保主存與輔存的一致性。
在操作系統的控制下,硬體和系統軟體為用戶解決了上述問題,從而使應用程序的編程大大簡化。
❾ 虛擬內存的地址映射
映射虛擬地址的形式可以分成靜態虛擬地址映射和動態虛擬地址映射.所謂靜態,就是在OEMAddressTable中定義映射關系或者是OS啟動後調用CreateStaticMapping和NKCreateStaticMapping來實現從虛擬地址到物理地址的映射;動態則是通過VirtualAlloc和VirtualCopy(或者調用MmmapIoSpace函數).這兩種映射虛擬地址的形式區別在於靜態虛擬地址只能由內核使用,用於ISR訪問外設存儲.而動態虛擬地址可以在應用程序里訪問物理地址(比如在驅動中操作寄存器).
在X86和ARM體系的CPU里,有一個數據結構對於地址映射技術尤其重要:OEMAddressTable.這個數組定義了外設從4G的虛擬地址到512M物理地址的映射關系.它位於public\common\oak\csp\x86\oal目錄下的oeminit.asm中,格式為Virtual Address, Physical Address, Size
在X86下大小必須是4M的倍數,ARM下為1M的倍數.內核建立了兩個范圍的虛擬地址:從0x80000000到0x9FFFFFFF是帶緩存的物理地址映射,而0xA0000000 到 0xBFFFFFFF 是不帶緩存的物理地址映射.驅動訪問外設時,應該用不帶緩存段的虛擬地址. 要注意的一點是,如果改動了OEMAddressTable,相應要改動config.bib.
1.如果是在bootloader中訪問設備寄存器,可以直接操作物理地址。
2.wince啟動後,硬體上ARM和X86體系的處理器啟動了MMU,操作系統只能訪問到虛擬地址,不能直接操作物理內存了。但是如果是X86的CPU,由於它的外設I/O埠和存儲器空間分開編址,可以直接嵌入匯編或者使用宏read_port_xxx,write_port_xxx來讀寫設備寄存器的物理地址。
3.wince軟體結構里對應MMU的是一個名為OEMAddressTable的數據結構(源文件oeminit.asm中),其中建立了物理地址和虛擬地址的靜態映射關系,也可以在其中改動系統所能識別物理內存的大小,以支持大內存。
4.我們也可以在wince啟動後調用CreateStaticMapping和NKCreateStaticMapping來實現OEMAddressTable中的這種物理地址和虛擬地址的靜態映射關系。
5.建立了靜態映射關系的虛擬地址只能由內核模式下的程序來操作,例如 ISR。除非你在定製系統時,選擇了full kernal mode,使所有程序都運行在完全內核模式下,這將導致系統不穩定。
6.如果要在驅動程序中訪問設備寄存器,必須建立動態虛擬地址映射,可以調用MmmapIoSpace函數來實現,或者通過VirtualAlloc和VirtualCopy函數來實現。其實MmmapIoSpace內部就調用了後者。
7.在驅動中訪問虛擬地址時,必須是非緩存段(位於0xA0000000 到 0xBFFFFFFF )。
8.使用VirtualCopy函數映射物理地址時,其lpvSrc參數必須右移8位,且相應的fdwProtect參數必須帶page_physical。
9.如果是ARM體系的處理器,訪問掛在系統匯流排上的設備寄存器前,必須先把匯流排地址轉化成CPU的地址,通過HalTranslateBusAddress實現兩種物理地址的變換,然後再調用MmmapIoSpace函數作虛實地址的轉換。
也可以使用 TransBusAddrToVirtual ()直接把匯流排上的地址轉化成系統的虛擬地址。 在一般的應用程序中訪問 I/O 是訪問它的緩存段虛擬地址,而驅動中必須訪問無緩存段虛擬地址。簡單來說無緩存段虛擬地址 = 緩存段虛擬地址 +0x20000000 。
全是供參考。不知道合不合你用呢!!!
❿ 虛擬內存向物理內存映射是根據什麼機理
從操作系統的角度講,虛擬內存是屬於虛擬存儲器的范疇。有的作業很大,無法全部被裝入內存,或者有大量的作業要求運行,但內存不足以容納,所以只能將少量作業裝入內存,將其他作業留在外存上等待。
基於局部性原理,應用程序在運行之前,僅需要把把當前運行部分頁面或段裝如內存,其餘留在盤上。程序在運行的時候,如果它所要訪問的頁已經調入,便可繼續執行下去;但是如果程序所要訪問的頁沒有調入內存,此時程序利用OS提供的請求調頁功能,將他們調入。如果此時內存已經滿了,則還需要利用頁的置換功能,將內存中暫時不用的頁調到盤上,騰出足夠內存空間。如此這樣,便可以使一個大的用戶程序能在較小的內存空間上運行,也可以在內存中同時裝入更多的進程使它們並發運行。對用戶而言,大的內存容量只是一中感覺,故稱為虛擬存儲器。