導航:首頁 > 編程系統 > linux中的物理地址和虛擬地址

linux中的物理地址和虛擬地址

發布時間:2025-01-11 14:16:29

linux 虛擬地址,到底怎麼理解

不是僅僅 Linux 是這么設計的,整個現代流行的操作系統都是這么設計的。
應用程序被讀入內存後,為了保證系統的統一性,所有的程序都有同樣的一套定址規范。這個定址就是虛擬地址。這個虛擬地址是系統提供轉換的,不是程序的工作。

如果系統不提供這個功能,那麼應用程序就需要自己去尋找沒有被使用的內存,以及還要自己去處理內存容量的問題,而且如果程序調用外部的一些函數庫,這些函數庫也需要分配內存,這會導致應用程序的設計難度非常大,每個應用程序實際上就是一個操作系統了。多個程序共同運行導致內存使用混亂也很容易出現。
應用程序申請內存,使用的是操作系統的內存分配功能。這樣操作系統可以根據實際情況給應用程序內存,程序不需要考慮因為內存位置不同而必須不同編寫的難度。而且操作系統還可以提供虛擬內存等等各種方式來擴充內存,這樣的內存對於應用程序來說是不需要考慮的,一切都有系統打理。

使用虛擬地址後,對於應用程序來說,他的內存使用不需要考慮其他的程序佔用,也不需要考慮內存容量的問題,也不需要考慮內存塊位置,函數庫的調用也都扔給操作系統打理。這使得應用程序不需要考慮具體如何管理內存,只需要考慮作為應用程序的應用部分。

而且,因為內存是虛擬的,應用程序一些函數調用,操作系統可以把多個應用程序的調用都用同一套數據來處理,這樣,既可以節約內存使用(就是啟動100個應用程序,也只需要內存里有一套函數庫而已),也可以做到外部函數庫和應用程序沒有直接關聯,純粹是由系統做虛擬地址過渡。

至於為什麼 4G ,這是傳統+一些兼容的考慮。
以前沒有這個技術時,每個程序都可以完全使用整個系統,整個空間是連續的。到了這種虛擬地址的方式後,每個程序還是有自己「獨立」的一整套內存地址。但每個程序內存使用量肯定不一樣。那麼多少內存空間才完全夠用呢?當時因為正好使用了 32 位系統。那麼就把整個 32 位環境支持的 4G 內存容量作為這個極限。
不過因為內存地址是虛擬的。實際應用程序要用內存,是需要先申請的,所以只有程序申請後,真實內存才會被佔用。這個 4G 只是在演算法上作為極限。

不過因為 4G 也是硬體極限。所以 4G 以外的地址都是不能使用的,這就導致另一個問題,一些硬體有存儲器,有些硬體需要存儲空間做交互(比如 PCI ,比如各種硬體,比如 AGP 顯卡)。這些存儲區域怎麼處理?
所以,Windows Vista 的 32 位版在 4G 內存的機器上曾經報出只有 3.5G (有的機器甚至只有 3.25G 可以用)。就是這個問題的解決辦法導致的:把硬體的內存用虛擬地址的方式,放到虛擬地址的最後面。這樣應用程序調用硬體存儲時,可以直接按照內存的方式讀寫。這樣應用程序就很好的統一了存儲界面:只有 4G 的內存范圍,不存在其他方式的存儲調用方式(硬碟需要用讀寫功能讀取到內存後才能處理,而不是直接進行處理)。這樣應用程序的開發就很簡單,而且整個內存的使用每個程序都一樣。不存在各種硬體的原因而不同導致的需要重新設計內存管理演算法。操作系統也能根據實際應用程序的需要隨時分配數據,也可以根據每個程序的運行情況,區別的提供物理內存或者虛擬的內存。

這么設計最大的一個好處是,硬體環境和應用程序是無關的,中間由操作系統做轉換。而且應用程序互相之間也沒有影響,就好象整個內存都由他自己一個程序使用一樣。

PS:說了半天,我發現我自己也說不清楚其中的緣由……

② 「線性地址,邏輯地址,虛擬地址,物理地址」分別是什麼意思

邏輯地址(Logical Address) 是指由程式產生的和段相關的偏移地址部分。例如,你在進行C語言指針編程中,能讀取指針變數本身值(&操作),實際上這個值就是邏輯地址,他是相對於你當前進程數據段的地址,不和絕對物理地址相干。只有在Intel實模式下,邏輯地址才和物理地址相等(因為實模式沒有分段或分頁機制,Cpu不進行自動地址轉換);

邏輯也就是在Intel保護模式下程式執行代碼段限長內的偏移地址(假定代碼段、數據段如果完全相同)。應用程式員僅需和邏輯地址打交道,而分段和分頁機制對你來說是完全透明的,僅由系統編程人員涉及。應用程式員雖然自己能直接操作內存,那也只能在操作系統給你分配的內存段操作。

③ Linux 的虛擬內存管理有幾個關鍵概念

Linux 的虛擬內存管理有幾個關鍵概念:
1、每個進程都有獨立的虛擬地址版空間,進程訪問權的虛擬地址並不是真正的物理地址;
2、虛擬地址可通過每個進程上的頁表(在每個進程的內核虛擬地址空間)與物理地址進行映射,獲得真正物理地址;
3、如果虛擬地址對應物理地址不在物理內存中,則產生缺頁中斷,真正分配物理地址,同時更新進程的頁表;如果此時物理內存已耗盡,則根據內存替換演算法淘汰部分頁面至物理磁碟中。

④ linux內存虛擬化(內存地址轉換)

Linux內存虛擬化的核心在於內存地址轉換,它在操作系統復雜的內存管理中發揮關鍵作用。虛擬內存不僅擴展了進程可用的」內存空間「,還為每個進程提供了私有的、隔離的地址空間。在虛擬機環境中,對虛擬內存的處理涉及到虛擬化技術,區別於操作系統自身的內存管理。

Linux中的地址轉換通常涉及虛擬地址通過MMU(內存管理單元)和頁表映射為物理地址。MMU是處理器中的硬體組件,由TLB(快表)和table walk unit組成。TLB作為頁表的高速緩存,能快速查找虛擬地址與物理地址的對應關系,顯著提高定址性能。table walk unit則負責根據頁表信息進行多次物理內存訪問,實現地址轉換。

頁表是進程獨有的,存儲在主存中。訪問頁表耗時,因此設計了TLB進行加速。當TLB未命中時,需通過table walk unit在軟體層面查找頁表,這是CISC架構處理器的處理方式。相反,RISC架構如Alpha則採用軟體TLB miss handling,靈活性更高。對於虛擬機中的地址轉換,如運行在虛擬機上的Linux,需要經過VMM的兩次轉換,與傳統IA32架構一次轉換有所不同。

為了支持虛擬地址的兩次轉換,軟體層面引入了影子頁表。然而,這種純軟體方法的開銷較大,為此,硬體輔助的內存虛擬化技術如Intel的EPT和AMD的NPT應運而生,它們能直接支持GPA到HPA的轉換。EPT/NPT MMU通過查找gPT和nPT頁表,實現了內存虛擬化的高效處理,減少了內存開銷和CPU負擔。

優化EPT/NPT MMU時,關鍵在於增大TLB容量、減少頁表級別,以減少內存訪問次數。總的來說,虛擬內存地址轉換的核心機制與虛擬內存本身緊密相關,理解和掌握這一過程對於深入理解操作系統內存管理至關重要。

閱讀全文

與linux中的物理地址和虛擬地址相關的資料

熱點內容
vc修改文件名 瀏覽:149
linux65從域 瀏覽:321
用什麼東西壓縮文件 瀏覽:406
怎麼刪除ipad隱藏的APP 瀏覽:981
編程如何佔用大量內存 瀏覽:116
多個excel表格文件如何組合 瀏覽:918
ubuntu內核升級命令 瀏覽:679
pgp文件夾 瀏覽:894
一鍵還原的文件是什麼格式 瀏覽:581
女漢子微信名霸氣十足 瀏覽:65
win10手機藍屏修復 瀏覽:419
windows2008激活工具 瀏覽:259
g71的編程應注意什麼 瀏覽:572
文件路徑不符合是什麼意思 瀏覽:543
qq如何換綁微信綁定 瀏覽:67
文件包下載的安裝包在哪裡 瀏覽:811
90版本升級不送 瀏覽:186
工具箱英文 瀏覽:382
南翔嘉定編程課哪裡好 瀏覽:853
win10改變文件格式 瀏覽:475

友情鏈接