理解CPU記憶體管理

2022-09-12 05:12:14 字數 1813 閱讀 5060

概述:從設計層面理解cpu的記憶體模式,包括段式記憶體管理、頁式記憶體管理以及虛擬化擴充套件記憶體管理。實際上,硬體支援與軟體實現從來就不是能分開講的,比如,intel cpu架構師在選擇cpu的硬體特性時,必然會站在軟體的角度審視該特性。目前,硬體實現的許多特性完全可以由軟體方式實現,但為何非要設計成硬體實現方式,其原因或許是因為硬體實現有助於系統整體的效能提高,亦或許受研究者的個體偏好等非技術性因素影響,本文不做深究。

cpu處理器的記憶體管理提供了段式記憶體管理和頁式記憶體管理兩種技術,os在借助該記憶體管理技術實現了系統底層的記憶體管理功能。

我們知道,由於記憶體(ram,主存,半導體材料)的訪問速度遠遠超過硬碟儲存介質(磁性材料),所以記憶體負責與cpu直接互動,程式執行之前其資料和**需要被載入到記憶體之中。那麼問題來了,「上帝」將待執行的程式載入到記憶體之中就ok了,為什麼還要通過段/頁式記憶體管理方式管理記憶體呢?要知道段頁式記憶體管理技術會將乙個給定的「記憶體位址」變來變去,非常繁瑣,導致"當前程式「理解的記憶體位址與實際的物理記憶體位址的對應關係並不直觀,為什麼cpu/os要採用這類記憶體管理方式呢?

如果」當前程式「理解的記憶體位址為a,對應的物理記憶體也是a,世界該是多麼的直白……

我在學習作業系統之初就思考過這個問題,後來閱遍經卷、參悟cpu架構、自己開始實現乙個os核心之後才對這個問題理解得越來越深刻。

首先要知道一點,os實現段/頁式記憶體管理的說法存在一定的誤導性,更準確的說法應該是,現代cpu架構設計支援了段頁式記憶體管理設計,os作為乙個純軟體實體,如果想基於cpu提供的技術支援正常執行,就必須對段頁式記憶體管理技術做出表態:用還是不用。實際上,段式管理是必須要有的,頁式管理是可選的。

那麼,為什麼cpu架構要支援該類記憶體管理技術?這個問題的理解又要轉到」軟實體「的角度。

打個比方,我作為土豪一枚,我的機器配置了50g物理記憶體,os欲將待執行的程式載入到這50g記憶體裡面,該載入到記憶體的哪部分,或如何利用50g記憶體呢?

方式一:將整個程式全部加在到記憶體中,這50g記憶體都是該程式自己的,隨便用!

這種記憶體管理方式最大的缺點就是,os不能實現我們所說的」多工「,即很難」同時「執行多個程式。如果用這種記憶體管理方式實現多工支援,只能這樣:os引導程式a,a執行了0.1s後被暫停,os將a的當前狀態儲存到磁碟,然後引導程式b,b執行0.1s後被暫停並被儲存狀態到磁碟,os載入a,恢復a的執行狀態並執行a 0.1s...

作為一種原始的記憶體使用和多工方式,該方案粗暴、低效、資源浪費……你想怎麼批評它就怎麼批評它!

但是,這種方案確實有些進步,因為這種記憶體管理方式可以簡單滿足多工需求了,而且,對比現代記憶體管理技術,該方案可以稱之為」硬體級固定長度的段式記憶體管理「了。

方式三:現在,需要解決方式二的缺點,實現任意多工和記憶體訪問保護。

cpu架構師這樣考慮(我猜的)的:

如果我把記憶體不按照定長分割,而是根據待載入的程式的大小,使用智慧型演算法決定為它分配多大記憶體,這不就可以更好的實現多工了嘛!

理論上只要物理記憶體足夠大,就可以支援同時執行任意數量的任務。

程式間的記憶體保護(最起碼任務程式不能越界訪問其他任務的記憶體)該如何實現呢?

cpu架構師這樣考慮(我猜的)的:

cpu在引導程式後,當前程式的記憶體首位址(基址)和記憶體長度儲存到一張表裡面,此時程式所理解得記憶體位址在cpu看來永遠是乙個相對於當前基址的偏移位址。

這樣,程式訪問記憶體是提供的記憶體位址緊緊是個cpu眼中的偏移而已,cpu就可以查表檢查該偏移是否超過記憶體長度。

如果偏移合法,基址加偏移就可以得到真實的實體地址,然後取得資料;如果偏移不合法,cpu拒絕訪問資料,並丟擲異常。

如果你讀過其他資料已經對段式記憶體管理有所了解,那麼你應該會看出,方式三正是段式記憶體管理技術的雛形,cpu用到的表就是gdt/ldt。

待續。。。

CPU,記憶體理解

計算機的系統框圖,嵌入式裝置也一樣。控制單元和算術運算單元組成cup,圖中的主記憶體也就是我們常講的記憶體,這個記憶體就是記憶體條。cpu 為乙個具有特定功能的晶元,裡頭含有微指令集 如果你想要讓主機進行什麼特異的功能,就得要參考這顆 cpu 是否有相關內建的微指令集才可以。上面所述的微指令集 精簡...

CPU 記憶體操作的理解

數電課本上有很多基礎數位電路設計,例如移位暫存器,位址選擇的儲存器等,這些都是構成cpu,mcu等龐大積體電路的基礎。我理解的晶元記憶體上定址,資料儲存都是與或非門的集合,這點fpga中體現的非常明顯。我們在學習任何一款晶元時,學習到暫存器操作外設,外設的暫存器是一段具有特殊功能的記憶體單元,意思就...

CPU對記憶體管理二

說的是頁定址機制,是上節mmu裡如何將線性位址轉化為實體地址的 32位作業系統管理的記憶體是4g,4g的大小是2的32次方得來的 將32位前10位分割,中間10位分割,後面12位再為乙份 前面的10位成為一級頁表,2的10次方,從0開始,一級頁表中有元素1024個,每個元素為二級頁表的首位址,意思是...