儲存系統是有層次的,從快到慢依次是:cpu暫存器、靜態sram、動態dram、磁碟。如下圖:
如 inter core i7 儲存結構如下:
i7的儲存架構支援48-bit虛擬位址,52-bit實體地址. page size啟動時可配置 4kb or 4mb, linux使用4kb,4-level page table hierarchy。
在cpu保護模式下,程序使用虛擬位址,這也給每個程序乙個大的、一致的私有的位址空間。虛擬位址也簡化了程式的鏈結與載入,**段、資料段、共享庫總是從相同的虛擬位址開始,執行程式時,execve()呼叫會使核心分配virtual pages給程序,按page從磁碟拷貝**段資料段到記憶體。
位址翻譯分段與分頁相結合,linux更加關注的是分頁機制。linux分段機制使用的很有限,risc架構的cpu就不支援分段機制,並且分段機制也沒有分頁機制更靈活。
邏輯位址linux使用分頁機制,每個程序都有自己的頁表,任務切換就會有頁表切換,x86下通過修改控制暫存器cr3完成,cr3控制暫存器是pdbr(page-directory base address register),載入程序頁表通過拷貝-->
[segmentation]-->
線性位址(虛擬位址)-->
[paging]-->
實體地址linux分段機制使用的很有限,邏輯位址與線性位址是一致的。
linux下分段機制使用的很有限,僅僅有四種段:使用者**段、使用者資料段、核心**段、核心資料段。相應的段描述符由巨集
__user_cs
,__user_ds
,__kernel_cs
,和__kernel_ds
分別定義,且所有段都從0x00000000開始。
mm_stuct->pgd
到cr3
暫存器完成。
頁表可以把虛擬位址頁對映為實體地址頁,x86 32位系統的機制大致如下(mit xv6):
為了加快速度,位址翻譯有專門的硬體mmu(memory management unit),mmu中包含了乙個小的pte(page table entry)快取tlb(translation lookaside buffer), 大致工作原理如下圖:
舉個多級頁表的例子,inter i7頁表翻譯,採用了4級頁表,如下圖:
從作業系統的實現看:
還有很多有意思的細節可以看後面的參考資料。
operating systems: three easy pieces
xv6, a ****** unix-like teaching operating system
professional linux kernel architecture
understanding the linux® virtual memory manager
computer systems organization
Tomcat虛擬位址
當不想把jsp程式 網頁等編寫的程式檔案部署在tomcat的根目錄下時,虛擬目錄是最好的選擇。虛擬目錄實際上是在伺服器上做乙個對映,把某個名稱命名的目錄指向另外乙個事實上存在的目錄,這樣可以增強安全性,訪問者並不清楚伺服器是否確實有無目錄,當伺服器某個盤中的空間不夠時,可以把程式部署到另乙個盤中做虛...
虛擬位址空間
當處理器讀或寫入記憶體位置時,它會使用虛擬位址。作為讀或寫操作的一部分,處理器將虛擬位址轉換為實體地址。通過虛擬位址訪問記憶體有以下優勢 程序可用的虛擬位址範圍稱為該程序的 虛擬位址空間 每個使用者模式程序都有其各自的專用虛擬位址空間。對於 32 位程序,虛擬位址空間通常為 2 gb,範圍從 0x0...
虛擬位址空間
14 共 14 對本文的評價是有幫助 評價此主題 程序可用的虛擬位址範圍稱為該程序的 虛擬位址空間 每個使用者模式程序都有其各自的專用虛擬位址空間。對於 32 位程序,虛擬位址空間通常為 2 gb,範圍從 0x00000000 至 0x7fffffff。對於 64 位程序,虛擬位址空間為 8 tb,...