1. virtual address space 虛擬位址空間
乙個應用程式能夠訪問的最大的記憶體位址空間, 32位的機器上面最大的就是4gb 但是 並不是所有的記憶體都放到主存裡面, 可能放到pagefile裡面
windows和linux對作業系統的管理都有核心態和使用者態, 針對的虛擬位址位置也是不同的.
2. phiscal memory 物理記憶體
實際記憶體, 物理記憶體. 一般情況下物理記憶體越大的機器效能越好一些.記憶體的延遲一般是100ns左右 磁碟的是10ms左右 相差10萬倍
3. reserved memory 保留記憶體
應用程式呼叫win32 api 申請到的一塊虛擬記憶體空間, 只是保留出來的一塊位址空間,並不是真正的實體地址空間, 如果空間已經被其他程式使用還去訪問的話 會出現 access violation錯誤提示.
4. committed memory
提交記憶體 將預先保留的 reserved的記憶體頁面正式提交commit使用.提交的頁面在訪問時最終轉換到了物理記憶體上面去.提交記憶體是正式在物理記憶體中申請一段空間,向頁面寫入資料.
5.shared memory
共享記憶體 windows 提供了在程序和作業系統間共享記憶體的機制, 共享記憶體 可以定義為對乙個以上的程序都可見的記憶體. copy on write 應該也是使用類似的技術來實現 乙個程序中的文字區 可以作為共享使用, 資料區域是私有的.(後面一段是自己的理解)
6. private memory
某個程序 已經committed memory中 非共享的部分
7. working set 工作集
某個程序中的記憶體 存放到物理記憶體中的一部分 理解的應該是commit過後的那部分reserved記憶體.
8. page fault 頁面錯誤
有soft 和hard 兩種頁面錯誤,
hard fault 只是的是 vas裡面的位址空間不存在物理記憶體中,而是放到了pagefile裡面去, 需要通過乙個物理io將硬碟上面的內容讀入到記憶體中name就是乙個硬錯誤
如果想要訪問的記憶體位址在物理記憶體中 只是沒有放到working set中 需要做一次重定向 定位到正確的記憶體位置
因為記憶體比硬碟快數萬倍,所以應該主要關注 hard fault 如果經常出現 這樣的錯誤 會導致cpu佔用率較高 並且響應變慢
因為io是核心態操作, 需要使用者態和核心態切換, 上下文切換和物理io都是非常高的成本
9. system workting set
這是windows系統需要使用的物理記憶體
主要分類:
system cache 系統快取記憶體
使用者對映系統快取記憶體開啟的檔案頁面,用於提高磁碟的io速度 效能監視器中的 memory cache resident bytes 來監控
non paged pool 非頁交換區
保證一直存在於物理記憶體中, 並且可以通過 memory: pool nopaged bytes來監控
應該是被所有的程序共享, 存放物件指標等
paged pool 頁交換區
系統空間中能夠換入換出到磁碟上面的工作集虛擬位址空間
stack
每個執行緒有兩個棧,乙個給核心模式,乙個給使用者模式,每個棧都是一快記憶體區域,用於存放執行緒執行的過程或函式的呼叫位址,以及所有的引數值( 這個是完全抄的 跟之前的理解不一樣)
in process
執行在同乙個程序的位址空間裡, 比如將dll 載入到記憶體 好處是速度快不需要進行context switch, 壞處是容易出現錯誤 影響安全性
out of process
執行在不通的程序位址空間裡,比如驅動或者w3wp 執行在單獨的程序空間
memory leak
記憶體洩露 一直不斷的保留reserver 或者是提交commit記憶體資源,哪怕他們不再使用,也不釋放給其他使用者使用.
windows記憶體管理
32位平台下,cpu的定址能力為4gb,pc中有些裝置 如顯示卡 都提供自己的裝置記憶體,這部分記憶體會對映到pc的物理記憶體上,也就是讀寫這段物理記憶體位址,其實是在讀寫裝置記憶體位址,而不會讀寫物理記憶體位址。雖然提供了4gb的定址能力,但是實際可能沒有這麼大的物理記憶體,這樣就引入了虛擬記憶體...
Windows 記憶體管理
windows 2000 使用基於分頁機制的虛擬記憶體。每個程序有4gb的虛擬位址空間。基於分頁機制,這4gb位址空間的一些部分被映 物理記憶體,一些部分對映硬碟上的交換檔案,一些部分什麼也沒有對映。程式中使用的都是4gb位址空間中的虛擬位址。而訪問物理記憶體,需要使用實體地址。下面我們看看什麼是實...
Windows記憶體管理
虛擬位址空間 程序可用的虛擬位址範圍稱為該程序的 虛擬位址空間 每個使用者模式程序都有其各自的專用虛擬位址空間。對於 32 位程序,虛擬位址空間通常為 2 gb,範圍從 0x00000000 至 0x7fffffff。那麼什麼又是使用者模式?使用者模式與核心模式 這同樣是cpu的概念。cpu就有這兩...