日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

內(nèi)存管理可以說(shuō)是一個(gè)比較難學(xué)的模塊,之所以比較難學(xué)。一是內(nèi)存管理涉及到硬件的實(shí)現(xiàn)原理和軟件的復(fù)雜算法,二是網(wǎng)上關(guān)于內(nèi)存管理的解釋有太多錯(cuò)誤的解釋。希望可以做個(gè)內(nèi)存管理的系列,從硬件實(shí)現(xiàn)到底層內(nèi)存分配算法,再?gòu)膬?nèi)核分配算法到應(yīng)用程序內(nèi)存劃分,一直到內(nèi)存和硬盤(pán)如何交互等,徹底理解內(nèi)存管理的整個(gè)脈絡(luò)框架。本節(jié)主要講解硬件原理和分頁(yè)管理。

 

CPU通過(guò)MMU訪問(wèn)內(nèi)存

我們先來(lái)看一張圖:

CPU是如何訪問(wèn)內(nèi)存的?

從圖中可以清晰地看出,CPU、MMU、DDR 這三部分在硬件上是如何分布的。首先 CPU 在訪問(wèn)內(nèi)存的時(shí)候都需要通過(guò) MMU 把虛擬地址轉(zhuǎn)化為物理地址,然后通過(guò)總線訪問(wèn)內(nèi)存。MMU 開(kāi)啟后 CPU 看到的所有地址都是虛擬地址,CPU 把這個(gè)虛擬地址發(fā)給 MMU 后,MMU 會(huì)通過(guò)頁(yè)表在頁(yè)表里查出這個(gè)虛擬地址對(duì)應(yīng)的物理地址是什么,從而去訪問(wèn)外面的 DDR(內(nèi)存條)。

所以搞懂了 MMU 如何把虛擬地址轉(zhuǎn)化為物理地址也就明白了 CPU 是如何通過(guò) MMU 來(lái)訪問(wèn)內(nèi)存的。

MMU 是通過(guò)頁(yè)表把虛擬地址轉(zhuǎn)換成物理地址,頁(yè)表是一種特殊的數(shù)據(jù)結(jié)構(gòu),放在系統(tǒng)空間的頁(yè)表區(qū)存放邏輯頁(yè)與物理頁(yè)幀的對(duì)應(yīng)關(guān)系,每一個(gè)進(jìn)程都有一個(gè)自己的頁(yè)表。

CPU 訪問(wèn)的虛擬地址可以分為:p(頁(yè)號(hào)),用來(lái)作為頁(yè)表的索引;d(頁(yè)偏移),該頁(yè)內(nèi)的地址偏移。現(xiàn)在我們假設(shè)每一頁(yè)的大小是 4KB,而且頁(yè)表只有一級(jí),那么頁(yè)表長(zhǎng)成下面這個(gè)樣子(頁(yè)表的每一行是32個(gè) bit,前20 bit 表示頁(yè)號(hào) p,后面12 bit 表示頁(yè)偏移 d):

CPU是如何訪問(wèn)內(nèi)存的?

CPU,虛擬地址,頁(yè)表和物理地址的關(guān)系如下圖:

CPU是如何訪問(wèn)內(nèi)存的?

頁(yè)表包含每頁(yè)所在物理內(nèi)存的基地址,這些基地址與頁(yè)偏移的組合形成物理地址,就可送交物理單元。

上面我們發(fā)現(xiàn),如果采用一級(jí)頁(yè)表的話,每個(gè)進(jìn)程都需要1個(gè)4MB的頁(yè)表(假如虛擬地址空間為32位(即4GB)、每個(gè)頁(yè)面映射4KB以及每條頁(yè)表項(xiàng)占4B,則進(jìn)程需要1M個(gè)頁(yè)表項(xiàng)(4GB / 4KB = 1M),即頁(yè)表(每個(gè)進(jìn)程都有一個(gè)頁(yè)表)占用4MB(1M * 4B = 4MB)的內(nèi)存空間)。然而對(duì)于大多數(shù)程序來(lái)說(shuō),其使用到的空間遠(yuǎn)未達(dá)到4GB,何必去映射不可能用到的空間呢?也就是說(shuō),一級(jí)頁(yè)表覆蓋了整個(gè)4GB虛擬地址空間,但如果某個(gè)一級(jí)頁(yè)表的頁(yè)表項(xiàng)沒(méi)有被用到,也就不需要?jiǎng)?chuàng)建這個(gè)頁(yè)表項(xiàng)對(duì)應(yīng)的二級(jí)頁(yè)表了,即可以在需要時(shí)才創(chuàng)建二級(jí)頁(yè)表。做個(gè)簡(jiǎn)單的計(jì)算,假設(shè)只有20%的一級(jí)頁(yè)表項(xiàng)被用到了,那么頁(yè)表占用的內(nèi)存空間就只有0.804MB(1K * 4B + 0.2 * 1K * 1K * 4B = 0.804MB)。除了在需要的時(shí)候創(chuàng)建二級(jí)頁(yè)表外,還可以通過(guò)將此頁(yè)面從磁盤(pán)調(diào)入到內(nèi)存,只有一級(jí)頁(yè)表在內(nèi)存中,二級(jí)頁(yè)表僅有一個(gè)在內(nèi)存中,其余全在磁盤(pán)中(雖然這樣效率非常低),則此時(shí)頁(yè)表占用了8KB(1K * 4B + 1 * 1K * 4B = 8KB),對(duì)比上一步的0.804MB,占用空間又縮小了好多倍!總而言之,采用多級(jí)頁(yè)表可以節(jié)省內(nèi)存。

二級(jí)頁(yè)表就是將頁(yè)表再分頁(yè)。仍以之前的32位系統(tǒng)為例,一個(gè)邏輯地址被分為20位的頁(yè)碼和12位的頁(yè)偏移d。因?yàn)橐獙?duì)頁(yè)表進(jìn)行再分頁(yè),該頁(yè)號(hào)可分為10位的頁(yè)碼p1和10位的頁(yè)偏移p2。其中p1用來(lái)訪問(wèn)外部頁(yè)表的索引,而p2是是外部頁(yè)表的頁(yè)偏移。

CPU是如何訪問(wèn)內(nèi)存的?

CPU是如何訪問(wèn)內(nèi)存的?
 

分享到:
標(biāo)簽:CPU
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定