記憶體管理的發展歷程
dos時代-同一時間只能有乙個程序在執行(也有一些特殊演算法可以支援多程序)
windows9x-多個程序裝入記憶體,會產生兩個問題1:記憶體不夠用2:相互打擾 如下圖所示
1.分頁(記憶體不夠用),記憶體中分成固定大小的頁框(4k),把程式(硬碟上)分成4k大小的塊,用到哪一塊,載入哪一塊,載入的過程中,如果記憶體已經滿了,會把不常用的一塊放到swap分割槽,把最新的一塊載入進來。這個就是著名的lru演算法。
2.虛擬記憶體(解決相互打擾問題)
1.dos win31... 記憶體相互乾掉
2.為了保證程序互不影響---讓程序工作在虛擬空間,程式中用到的空間位址不再是直接的實體地址,而是虛擬的位址,這樣,a進行永遠不可能訪問到b程序的空間。
3.虛擬空間多大呢?定址空間---64位系統2^64,比物理空間大很多。單位是byte
4.站在虛擬的角度,程序是獨享整個系統+cpu
6.線性位址通過os + mmu(硬體 memory management unit)---實體地址
3.缺頁中斷:
1.需要用到的頁面記憶體中沒有,產生缺頁中斷,由核心處理並載入
採用的演算法是colored pointer
gc 資訊記錄在指標上,不是記錄在頭部,好處:immediate memory use
42位指標 定址空間4t jdk13 -> 16t 目前為止最大16t 2^44
cpu如何區分乙個立即數和一條指令
作業系統記憶體對映
簡單地說可訪問記憶體總數是由cpu 北橋 記憶體控制器 主機板佈線 如果js偷工減料的話 的位址匯流排寬度和作業系統來決定的。奔騰以後的cpu至少有36條位址匯流排,所以奔騰以上的32位cpu至少在64g是沒問題的 但由於暫存器是32位的,所以可線性訪問的只有4g,其他的需要通過頁面切換 pae 才...
作業系統之記憶體管理
記憶體管理的功能有 1 空間分配與 2 位址轉換 3 空間擴充 4 儲存保護 將資料與程式裝入記憶體分以下步驟 1 編譯成模組 2 鏈結模組 分靜態 裝入時動態 執行時動態鏈結 3 將模組裝入記憶體 分絕對裝入 可重定位裝入 執行時動態裝入 邏輯位址與實體地址 訪問資料時是使用實體地址獲取資料,多個...
作業系統之記憶體管理
位址對映和重定位是乙個概念 適應於請求段的記憶體分配方法是最佳適應和可變分割槽 可重入 reentrant code 又稱為 純 purecode 是一種允許多個程序同時訪問的 為使各個程序所執行的 完全相同,絕對不允許可重入 在執行中有任何改變。目的 擴充主存容量 最基本的特徵 多次性 最主要的技...