深入淺出計算機組成原理學習筆記: 第九講


一、程序裝載面臨的挑戰

1、裝載需要滿足的條件

1、可執行程序加載后占用的內存空間應該是連續的

2、我們需要同時加載很多個程序,並且不能讓程序自己規定在內存中加載的位置

2、如何解決以上問題

1、放到內存里

2、我們只關心虛擬內存地址就行了

1、什么是虛擬內存地址

我們把指令里用到的內存地址叫做虛擬地址

2、什么是物理內存地址

實際在內存硬件里面的空間地址、我們叫物理內存地址

二、內存分段

1、什么是內存分段

這種找出一段連續的物理內存和虛擬內存地址進行映射的方法,我們叫分段,這里的段,就是指系統分配出來的那個連續的內存空間

2、內存分段的好處和存在的問題

分段的的辦法很好,解決了程序本身不需要關心具體的物理內存地址的問題,但它也有一些不足之處,第一個就是內存碎片的問題

 

三、內存交換

當然,這個我們也有解決辦法。解決的辦法叫內存交換

1、解決內存碎片過多的問題

2、內存交換的優缺點

1、優點

虛擬內存、分段、再加上內存交換,看起來視乎已經解決了計算機同時裝載運行很多個程序的問題

2、存在的問題

不過,你千萬不要大意,我們都需要把一大段連續的內存數據寫到應哦按上,所以、如果內存交換的時候,交換的是一個很占內存空間的程序這樣整個機器都會顯得卡頓

四、內存分頁

1、內存分頁解決了什么問題

2、少出現內存碎片的解決辦法

3、從磁盤裝載的數據更少一點解決辦法

更進一步地,分頁的方式使得我們在加載程序的時候,不載需要一次性把程序記載到物理內存中,我們完全可以進行虛擬內存和物理內存的頁之間的映射之后,並不真的把頁加載到物理內存里面去

4、缺頁錯誤

實際上,我們的操作系統,的確是這么做的,當要讀取特定的頁,卻發現數據並沒有加載到物理內存里的時候,就會觸發一個來自CPU的缺頁錯誤、我們的操作系統會捕捉到這個錯誤,

然后將對應的頁,從存放在硬盤上的虛擬內存里讀取出來,加載到物理內存里,這種方式,使得我們可以運行那些大於我們實際物理內存的程序,同時,這樣一來,

任何程序都不需要一次性加載完所有指令和數據,只需要加載當前需要用到的就可行了


通過虛擬內存、內存交換和內存分頁這三個技術的組合,我們最終的到了一個程序不需要考慮實際的物理內存地址,大小和當前分配的解決方案

這些技術和方法,對於我們程序編寫、編譯和鏈接過程都是透明的,這也是我們在計算機的軟硬件開發中常用的一種方法,這就是加入一個間接層

 

通過引入虛擬內存、頁映射和內存交換,我們的程序本身,就不再考慮對應的真實的內存地址、程序加載、內存管理等問題了,任何一個程序、都主要把內存當成一塊完成而連續的空間來直接使用

五、總結延伸

現在回到開頭我問你的問題,我們的電腦只有640k內存就夠了嗎?很顯然、現在看來,比爾蓋茨的這個判斷是不合理的,那為什么他會這么認為呢?因為他也是一個很優秀的程序員啊!

 

在虛擬內存、內存交換和內存分頁這三者結合之下,你會發現,其實要運行一個程序“必須”的內存是很少的。CPU只需要執行其當前的指令,極限情況下,內存頁只需要加載一頁就好了,

再大的程序,頁可以分成一頁。每次,只在需要用到對應的數據和指令的時候,從應哦按上交換到內存里目前來就好了,以現在4k內存一頁的大小,640k內存頁能放下足足160頁呢,

頁無怪乎在比爾蓋茨會說“640K ought to be enough for anyone這”樣的話


不過呢,硬盤的訪問速度比內存慢很多,所以我們現在的計算機,沒有幾個G的內存都不好意思和人打招呼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM