色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

對MMU和頁表工作機(jī)制的簡單評析

Linux閱碼場 ? 2018-02-02 14:08 ? 次閱讀

由于很多童鞋大學(xué)的時候?qū)W《微機(jī)原理》都是打醬油,當(dāng)老師是蒼蠅在講臺上發(fā)噪音,導(dǎo)致MMU這些基本知識都沒有搞清楚,所以對計算機(jī)的認(rèn)識一塌糊涂,Linux也無法學(xué)通。然后我經(jīng)常被問到各種奇葩到讓人吐血的內(nèi)存管理問題,這些問題顯示出這些童鞋對最基本的MMU和頁表工作機(jī)制不清楚。我覺得我不得不寫點什么東西,讓這些打醬油的童鞋,把基本的馬步扎穩(wěn),當(dāng)然這不是為了別人,也不是為了無私奉獻(xiàn),純粹是為了避免無數(shù)次被問到吐血,遲早有一天吐血而亡。為了能夠活地久一點,特作此文。

假設(shè)頁表只有一級

對于一個有MMU的CPU而言,MMU開啟后,CPU是這樣尋址的:CPU任何時候,一切時候,發(fā)出的地址都是虛擬地址,這個虛擬地址發(fā)給MMU后,MMU通過頁表來在頁表里面查出來這個虛擬地址對應(yīng)的物理地址是什么,從而去訪問外面的內(nèi)存條。MMU里面的頁表地址寄存器,記錄了頁表本身的存放位置。

對MMU和頁表工作機(jī)制的簡單評析

現(xiàn)在我們假設(shè)每一頁的大小是4KB,而且假設(shè)頁表只有一級,這個頁表長成下面這個樣子,頁表的每一行是32個bit。

當(dāng)CPU訪問虛擬地址0的時候,MMU會去查上面頁表的第0行,發(fā)現(xiàn)第0行沒有命中,于是無論以何種形式(R讀,W寫,X執(zhí)行)訪問,MMU都會給CPU發(fā)出page fault,CPU自動跳到fault的代碼去處理fault。

當(dāng)CPU訪問虛擬地址4KB的時候,MMU會去查上面頁表的第1行(4KB/4KB=1),發(fā)現(xiàn)第1行命中,如果這個時候

用戶是執(zhí)行讀或者執(zhí)行,則MMU去訪問內(nèi)存條的6MB這個地址,因為頁表里面記錄該頁的權(quán)限是RX;

用戶是去寫4KB,由于頁表里面第1行記錄的權(quán)限是RX,沒有記錄你有寫的權(quán)限,MMU會給CPU發(fā)出page fault,CPU自動跳到fault的代碼去處理fault。

當(dāng)CPU訪問虛擬地址8KB+16的時候,MMU會去查上面頁表的第2行(8KB/4KB=2),發(fā)現(xiàn)第2行命中了物理地址8M,這個時候,MMU會訪問內(nèi)存條的8MB+16這個物理地址。當(dāng)然,權(quán)限檢查也是需要的。

當(dāng)CPU訪問虛擬地址3GB的時候,MMU會去查上面頁表的第3GB/4KB行,表中記錄命中了,查到虛擬地址3GB對應(yīng)的物理地址是0,于是MMU去訪問內(nèi)存條上的地址0。但是,這個訪問分成2種情況:

CPU在執(zhí)行用戶態(tài)程序的時候,去訪問3GB,由于頁表里面記錄的U+K權(quán)限只有K,所以U是沒權(quán)限的,MMU會給CPU發(fā)出page fault,CPU自動跳到fault的代碼去處理fault;

CPU在執(zhí)行內(nèi)核態(tài)程序的時候,去訪問3GB,由于頁表里面記錄的U+K權(quán)限只有K,所以K是有權(quán)限的,MMU不會給CPU發(fā)出page fault,程序正常執(zhí)行。

由此可以得知,如果頁表只有1級,每4KB的虛擬地址空間就需要頁表里面的一行(32bit),那么CPU要覆蓋到整個4GB的內(nèi)存,就需要這個頁表的大小是:

4GB/4KB *4 = 4MB。

注意頁表是無縫全覆蓋!!!你頁表不覆蓋全,CPU訪問虛擬地址的時候,MMU都不知道查哪里了....

所以,這個頁表的大小是4MB,覆蓋了整個0-4GB的虛擬地址空間,任何一個虛擬地址,都可以用地址的高20位(由于一頁是4KB,低12位就是葉內(nèi)偏移了),作為頁表這個表的行號去讀對應(yīng)的頁表項。

這個查水表的過程,由MMU硬件自動完成。

現(xiàn)在我們假設(shè)在Linux里面有2個進(jìn)程,一個是QQ,一個是Firefox,他們的頁表分別如下:

對MMU和頁表工作機(jī)制的簡單評析

當(dāng)CPU在執(zhí)行QQ的時候,Linux會把QQ的頁表的物理地址255MB,填入MMU的頁表地址寄存器,于是這個時候,QQ的頁表生效。根據(jù)頁表內(nèi)容,CPU如果訪問4KB這個虛擬地址的話,MMU訪問內(nèi)存條的6MB物理地址;CPU如果訪問8KB這個虛擬地址的話,MMU訪問內(nèi)存條的8MB物理地址;CPU如果訪問3GB這個虛擬地址的話,MMU訪問內(nèi)存條的0MB物理地址;

當(dāng)CPU在執(zhí)行Firefox的時候,Linux會把Firefox的頁表的物理地址280MB,填入MMU的頁表地址寄存器,于是這個時候,F(xiàn)irefox的頁表生效,QQ的頁表淡出江湖。根據(jù)頁表內(nèi)容,CPU如果訪問4KB這個虛擬地址的話,MMU訪問內(nèi)存條的100MB物理地址;CPU如果訪問8KB這個虛擬地址的話,MMU訪問內(nèi)存條的200MB物理地址;CPU如果訪問3GB這個虛擬地址的話,MMU訪問內(nèi)存條的0MB物理地址。

上面我們發(fā)現(xiàn)一個共同點,QQ和Firefox去訪問3GB虛擬地址的時候,最終MMU訪問的都是0MB這個物理地址,具體原因非常簡單,QQ和Firefox,這2張頁表里面,3GB/4KB這一行,里面填的是完全一樣的東東。

多級頁表:真實的存在在

上面我們發(fā)現(xiàn),如果采用一級頁表的話,每個進(jìn)程都需要1個4MB的頁表,這個空間浪費還是很大,于是我們可以采用二級或者三級頁表。舉例如下,假設(shè)我們用地址的高10位作為一級頁表的索引,中間10位作為2級頁表的索引。CPU訪問虛擬地址16,這個地址如果分解為10/10/12位的話,就是這個樣子:

那么MMU會用0這個下標(biāo)去訪問一級頁表(一級頁表的地址填入MMU的頁表地址寄存器)的第0行,第0行的內(nèi)容寫的是2MB(此處不再是最終的物理地址,而是二級頁表的物理地址),證明二級頁表的地址在2MB,于是MMU自動去以中間的10位作為下標(biāo),去查詢位置在2MB的二級頁表,在2級頁表里面,最終查到第0頁(地址范圍0x00000000~0x00000FFF)這個虛擬地址的物理地址是1GB,于是MMU去訪問內(nèi)存條的1GB+16這個物理地址。

對MMU和頁表工作機(jī)制的簡單評析

據(jù)以上分析,1級頁表占據(jù)的內(nèi)存是2的10次方,再乘以4,即4KB。而每個二級頁表,也是2的10次方,再乘以4,即4KB。分級機(jī)制的主要好處是,二級頁表不是一定存在了,比如一級頁表的第2行不命中,也即如下地址都無效的話:

那么這一行對應(yīng)的二級頁表,就整個都不需要了,于是就省掉了這段區(qū)間4KB二級頁表的內(nèi)存占用。頁表當(dāng)然還有是三級甚至更多。

至于有多級頁表的時候,其實MMU也只需要知道一級頁表的基地址即可。每次切換進(jìn)程的時候,把一級頁表的地址重新填入MMU,把新的進(jìn)程的頁表激活即可。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11019

    瀏覽量

    215523
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11436

    瀏覽量

    212533
  • MMU
    MMU
    +關(guān)注

    關(guān)注

    0

    文章

    92

    瀏覽量

    18599

原文標(biāo)題:宋寶華: CPU是如何訪問到內(nèi)存的?--MMU最基本原理

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 2人收藏
  • 锦88881
  • xinzhuang1

評論

相關(guān)推薦
熱點推薦

關(guān)于MMU的一級表為什么必須是16K對齊

哪位仁兄知道:MMU的一級表為什么必須是16K對齊,最好有計算公式~~~謝謝!!!
發(fā)表于 02-14 23:46

關(guān)于表和MMU的問題

剛開始學(xué),好多東西都云里霧里的TT為什么在bootloader里要進(jìn)行表初始化然后開啟MMU,然后在進(jìn)入內(nèi)核后還要創(chuàng)建表開啟MMU?這兩個有什么不一樣么?s3c2410,bootl
發(fā)表于 05-06 17:25

ARM MMU 理解(基于ARM 920T)

被用戶應(yīng)用程序所訪問的。通過MMU可以控制地址空間的訪問權(quán)限,從而保護(hù)這些代碼不被破壞。MMU的實現(xiàn)過程,實際上就是一個查表映射的過程。建立表(translate table)是實現(xiàn)MMU
發(fā)表于 08-29 11:10

MMU的產(chǎn)生及MMU工作過程詳解

號為2,框2的物理地址范圍是8192~12287,故MMU將虛擬地址1026映射為物理地址9218(框首地址+偏移量=8192+1026=9218)。以上就是MMU
發(fā)表于 07-03 08:19

裸機(jī)加強(qiáng)版MMU章節(jié)表創(chuàng)建,地址映射相同

ARM裸機(jī)1期加強(qiáng)版 024_mmu_cache_021\002_mmu_021_004\mmu.c 文件/* 2.3 for 64M sdram */創(chuàng)建表 SDRAM 64M 虛
發(fā)表于 04-18 07:45

如何配置MMU page table walk的訪問屬性

眾所周知,MMU表是由軟件建立在外部內(nèi)存中的。實際上有兩條硬件路徑需要訪問這個表:1 MMU硬件進(jìn)行page table walk時,它會讀取查找這個
發(fā)表于 10-24 15:45

各工控儀表工作原理動態(tài)圖匯總

溫度儀表工作原理圖、壓力儀表工作原理圖、流量儀表工作原理圖、液位儀表工作原理圖、控制閥門工作原理圖、控制
的頭像 發(fā)表于 02-05 10:37 ?1.1w次閱讀
各工控儀<b class='flag-5'>表工作</b>原理動態(tài)圖匯總

MMU工作原理梳理

本文從內(nèi)存管理的發(fā)展歷程角度層層遞進(jìn),介紹 MMU 的誕生背景,工作機(jī)制。而忽略了具體處理器的具體實現(xiàn)細(xì)節(jié),將 MMU工作原理從概念上比
的頭像 發(fā)表于 12-17 16:13 ?1.4w次閱讀
<b class='flag-5'>MMU</b>的<b class='flag-5'>工作</b>原理梳理

ADM1278設(shè)計工作表工

ADM1278設(shè)計工作表工
發(fā)表于 03-23 10:49 ?9次下載
ADM1278設(shè)計<b class='flag-5'>工作</b><b class='flag-5'>表工</b>具

MMU如何知道表在內(nèi)存中的具體地址

MMU怎么知道這個表在內(nèi)存中的具體地址呢? 通常CPU會提供一個表基址寄存器給操作系統(tǒng)使用,用于給MMU指示表的基地址。不同處理器架構(gòu)
的頭像 發(fā)表于 10-08 11:52 ?1671次閱讀
<b class='flag-5'>MMU</b>如何知道<b class='flag-5'>頁</b>表在內(nèi)存中的具體地址

嵌入式Linux運行一定需要MMU嗎?為什么需要MMU

虛擬內(nèi)存功能和保護(hù)機(jī)制的重要角色。 MMU(Memory Management Unit)是一種硬件機(jī)制,它為CPU提供了一種虛擬內(nèi)存映射的功能,可以將物理地址映射到虛擬地址上。在實際應(yīng)用中,使用
的頭像 發(fā)表于 10-29 16:28 ?1070次閱讀

MMU原理:CPU是如何訪問到內(nèi)存的?

當(dāng)CPU訪問虛擬地址0的時候,MMU會去查上面表的第0行,發(fā)現(xiàn)第0行沒有命中,于是無論以何種形式(R讀,W寫,X執(zhí)行)訪問,MMU都會給CPU發(fā)出page fault,CPU自動跳到fault的代碼去處理fault。
發(fā)表于 11-09 12:30 ?1447次閱讀
<b class='flag-5'>MMU</b>原理:CPU是如何訪問到內(nèi)存的?

MMU包含兩個模塊是什么

的物理地址也有兩部分:PFN和offset,PFN( Physical frame number)是物理框number,offset和上面虛擬地址的offset相同,是內(nèi)偏移。 2-MMU包含兩個
的頭像 發(fā)表于 11-26 15:40 ?873次閱讀
<b class='flag-5'>MMU</b>包含兩個模塊是什么

MMU中的命中、缺頁介紹

命中、缺頁 (1)命中 ? a) 處理器要對虛擬地址VA進(jìn)行訪問。 ? b) MMU的TLB沒有命中,通過TWU遍歷主存表中的PTEA(PTE地址)。 ? c) 主存向
的頭像 發(fā)表于 11-26 16:19 ?1404次閱讀
<b class='flag-5'>MMU</b>中的<b class='flag-5'>頁</b>命中、缺頁介紹

MMU多級表映射過程

空間,也有相應(yīng)的表負(fù)責(zé)虛擬地址到物理地址之間的轉(zhuǎn)換。MMU查詢的過程中,用戶進(jìn)程的一級表的基址存放在TTBR0。操作系統(tǒng)的內(nèi)核空間公用一塊地址空間,MMU查詢的過程中,內(nèi)核空間的一
的頭像 發(fā)表于 11-26 16:28 ?1206次閱讀
<b class='flag-5'>MMU</b>多級<b class='flag-5'>頁</b>表映射過程
主站蜘蛛池模板: 伊人久久精品99热超碰 | 国产成人免费a在线视频app | 97人妻在线公开视频在线观看 | 欧美特级午夜一区二区三区 | 国产三区在线成人AV | 99影视久久电影网久久看影院 | 夜夜骑夜夜欢 | 亚洲伊人久久一次 | 亚洲欧美一区二区三区四区 | 色色激情网 | 97精品国产自产在线观看永久 | 亚洲人美女肛交真人全程 | 牢记永久免费网址 | 首页_亚洲AV色老汉影院 | 久久久性色精品国产免费观看 | 在教室伦流澡到高潮H女攻视频 | 久久久伊人影院 | 亚洲精品一区国产欧美 | 99香蕉精品视频在线观看 | 一本道无码字幕在线看 | 麻豆精品一卡2卡三卡4卡免费观看 | 90后美女乳沟 | 全球真实小U女视频合集 | 無码一区中文字幕少妇熟女网站 | 99成人在线 | 国产人成精品综合欧美成人 | 国内精品七七久久影院 | 性插图动态图无遮挡 | 久久精品亚洲 | 九色PORNY丨视频入口 | 美女被触手注入精子强制受孕漫画 | 亚洲青青草 | 在线看片成人免费视频 | 欧美成a人片免费看久久 | 中文字幕亚洲无线码高清不卡 | 欧美不卡一区二区三区 | 忘忧草研究所 麻豆 | 亚洲第一色网站 | BL文高H强交 | 色噜噜狠狠色综合欧洲 | 大陆极品少妇内射AAAAAA |

電子發(fā)燒友

中國電子工程師最喜歡的網(wǎng)站

  • 2931785位工程師會員交流學(xué)習(xí)
  • 獲取您個性化的科技前沿技術(shù)信息
  • 參加活動獲取豐厚的禮品