《程式設計師的自我修養》第一章14頁對這部分講的就很清楚,建議有需要的去看一下,我這裡簡單做下總結和筆記:
引用一句大佬的話:
「電腦科學領域的任何問題都可以通過增加乙個間接的中間層來解決」
那麼直接用實體地址出現了什麼問題?而怎加了虛擬位址這個中介軟體為什麼可以解決它們?
實體地址是連續的,直接使用實體地址,所有程式使用的內存在乙個空間內,當乙個程式記憶體溢位,很容易影響其他程式的正常執行,導致其他程式崩潰。
2.記憶體使用效率低:
假設計算機有129m記憶體,已經有兩個程式在執行,程式a需要10m,程式b需要100m,當程式c需要20m,執行時,調入記憶體,由於程式需要的空間是連續的,所以直接換出a可能釋放空間不夠,只能換出b,過程中有大量資料在記憶體和磁碟間互動,效率並不高。
3.程式執行位址不確定:
程式編寫時,很多時候訪問資料和指令跳轉的目標位址是固定的,而直接使用實體地址,不能保證每次裝入都放在同一塊區域,就給程式編寫帶來了一定的麻煩。
針對問題1:
以程式a為例,虛擬空間總是0到100m的連續空間,可以以分段的形式一對一的對映到物理空間上一段100m的空間內,這樣即使每次分配的物理空間不固定,但程式看到的虛擬空間位址是固定的,大大方便了程式設計。
針對問題2:
解決效率的方法,是分頁,我們把程序的虛擬空間按頁分割,叫虛擬頁,常用的裝載到記憶體中,不常用的**和資料儲存到磁碟裡,需要的時候再讀入,相應的物理記憶體分頁叫物理頁,兩者對映,可以大大增加記憶體的使用效率。
ps:cpu發出的和,程式看到的都是虛擬位址,需要乙個叫mmu(在cpu內部)的部件做對映,轉化成實體地址。
為什麼要有虛擬記憶體
1.早先計算機只有物理記憶體有什麼缺點 1.1 連續的物理記憶體,造成程序之間資料可能相互混合,造成資料安全問題 1.2 當物理記憶體不夠的時候,會用到磁碟,這樣磁碟到記憶體間切換,造成訪問效率問題 2 虛擬記憶體概念 頁 4kb 葉匡 4kb 頁表 頁 頁是虛擬記憶體上分段的最小單位4kb 葉匡 ...
什麼是虛擬記憶體
在windows 9x時代,例如windows 98,用於實現虛擬記憶體的檔案存放在系統分割槽的根目錄下。通常是系統分割槽根目錄下的win386.swp 具有隱藏 系統屬性 有關虛擬記憶體設定則存放在系統目錄中的system.ini中,其中形似 pagingdrive c win386.swp 的一...
什麼是虛擬記憶體?伺服器虛擬記憶體怎麼設定最好?
一 什麼是虛擬記憶體?虛擬 記憶體有什麼用處 作業系統中所執行所有的程式全部都是經過記憶體提交給cpu然後才執行的,不過若是執行的程式占用記憶體很多或很大 則會導致記憶體消耗殆盡 為解決內在消耗殆盡的問題 windows作業系統運用了虛擬記憶體技術 簡單的說就是把一部分硬碟空間充當記憶體使用,雖然硬...