国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 3499|回復(fù): 0
打印 上一主題 下一主題

帶你走進(jìn)嵌入式ARM MMU神秘的內(nèi)部世界

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2017-8-22 12:00:46 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
關(guān)鍵詞: ARM
ARM MMU頁(yè)表框架
file:///C:\Users\郭曉娟\AppData\Local\Temp\ksohtml\wpsF282.tmp.png
先上一張arm mmu的頁(yè)表結(jié)構(gòu)的通用框圖(以下的論述都由該圖來(lái)逐漸展開):
file:///C:\Users\郭曉娟\AppData\Local\Temp\ksohtml\wpsF293.tmp.jpgfile:///C:\Users\郭曉娟\AppData\Local\Temp\ksohtml\wpsF2A3.tmp.png
以上是arm的頁(yè)表框圖的典型結(jié)構(gòu):即是二級(jí)頁(yè)表結(jié)構(gòu):
其中第一級(jí)頁(yè)表(L1)是由虛擬地址的高12bit(bits[31:20])組成,所以第一級(jí)頁(yè)表有4096個(gè)item,每個(gè)item占4個(gè)字節(jié),所以一級(jí)頁(yè)表的大小為16KB,而在第一級(jí)頁(yè)表中的每個(gè)entry的最低2bit可以用來(lái)區(qū)分具體是什么種類的頁(yè)表項(xiàng),2bit可以區(qū)分4種頁(yè)表項(xiàng),具體每種頁(yè)表項(xiàng)的結(jié)構(gòu)如下:
file:///C:\Users\郭曉娟\AppData\Local\Temp\ksohtml\wpsF2B4.tmp.jpg
簡(jiǎn)而言之L1頁(yè)表的頁(yè)表項(xiàng)主要有兩大類:
第一大類是指向第二級(jí)頁(yè)表(L2頁(yè)表)的基地址;
第二類直接指向1MB的物理內(nèi)存。
L1頁(yè)表中每個(gè)表項(xiàng)可以覆蓋1MB的內(nèi)存,由于有4096K個(gè)選項(xiàng)(item),所以總計(jì)可以覆蓋4096K*1MB=4GB的內(nèi)存空間。
具體對(duì)應(yīng)到Linux,由于linux的軟件架構(gòu)是支持3級(jí)頁(yè)表結(jié)構(gòu),而arm架構(gòu)實(shí)際只有2級(jí)的頁(yè)表結(jié)構(gòu),所以linux代碼中的中間級(jí)頁(yè)表的實(shí)現(xiàn)是空的。在linux代碼中,第一級(jí)的頁(yè)表的頁(yè)目錄表項(xiàng)用pgd表示,中間級(jí)的頁(yè)表的頁(yè)目錄表項(xiàng)用pud表示(arm架構(gòu)其實(shí)不需要),第三級(jí)的頁(yè)表的頁(yè)目錄表項(xiàng)用pmd表示(由于中間pud是空的,所以pgd=pmd),另外目前arm體系的移動(dòng)設(shè)備中RAM的page大小一般都是4KB/page,所以L1頁(yè)表中的頁(yè)表項(xiàng)都是指向fine page table的信盈達(dá)嵌入式企鵝要妖氣嗚嗚吧就零久要
但在linux內(nèi)核啟動(dòng)的初始化階段,臨時(shí)建立頁(yè)表(initial page tables)以供linux內(nèi)核初始化提供執(zhí)行環(huán)境,這時(shí)L1的頁(yè)表項(xiàng)使用的就是第二種頁(yè)表項(xiàng)(section enty),他直接映射的是1M的內(nèi)存空間。具體的可以參考arch/arm/kernel/head.S中的__create_page_tables函數(shù),限于篇幅,這里就不展開說(shuō)了。
針對(duì)這種section page translation,mmu硬件執(zhí)行虛擬地址轉(zhuǎn)物理地址的過(guò)程如下:
file:///C:\Users\郭曉娟\AppData\Local\Temp\ksohtml\wpsF2C5.tmp.jpg
以上在初始化過(guò)程使用的臨時(shí)頁(yè)表(initial page tables),在內(nèi)核啟動(dòng)的后期會(huì)被覆蓋掉,即在paging_init--->map_lowmem函數(shù)中會(huì)重新建立頁(yè)表,該函數(shù)為物理內(nèi)存從0地址到低端內(nèi)存(lowmem_limit)建立一個(gè)一一映射的映射表。所謂的一一映射就是物理地址和虛擬地址就差一個(gè)固定的偏移量,該偏移量一般就是0xc0000000(呵呵,為什么是0xc0000000?)
說(shuō)到這里引入一個(gè)重要的概念,就是與低端內(nèi)存相對(duì)的高端內(nèi)存,什么是高端內(nèi)存?為什么需要高端內(nèi)存?為了解析這個(gè)問(wèn)題,我們假設(shè)我們使用的物理內(nèi)存有2GB大小,另外由于我們內(nèi)核空間的地址范圍是從3G-4G的空間,并且前面也說(shuō)到了,linux內(nèi)核的低端內(nèi)存空間都是一一映射的,如果不引入高端內(nèi)存這個(gè)概念,全部都使用一一映射的方式,那內(nèi)核只能訪問(wèn)到1GB的物理內(nèi)存,但實(shí)際上,我們是需要內(nèi)核在內(nèi)核空間能夠訪問(wèn)所有的4GB的內(nèi)存大小的,那怎么做到呢?
方法就是我們不讓3G-4G的空間都使用一一映射,而是將物理地址的[0x00,fix_addr](fix_addr<1GB)映射到內(nèi)核空間虛擬地址[0x00+3G,fix_addr+3G],然后將[fix_addr+3G,4G]這段空間保留下來(lái)用于動(dòng)態(tài)映射,這樣我們可以通過(guò)這段虛擬地址來(lái)訪問(wèn)從fix_addr到4GB的物理內(nèi)存空間。怎么做到的呢?
譬如我們想要訪問(wèn)物理地址[fix_addr,4GB]這段區(qū)間中的任何一段,我就用寶貴的內(nèi)核虛擬地址[fix_addr+3G,4G]的一段去映射他,建立好mmu硬件使用的頁(yè)表,訪問(wèn)完后,將映射清除,將內(nèi)核的這段虛擬地址釋放,以供下次訪問(wèn)其他的物理內(nèi)存使用。這樣就可以達(dá)到訪問(wèn)所有4GB的物理內(nèi)存的目的。

本版積分規(guī)則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本无遮挡吸乳视频看看 | 一级特黄特色的免费大片视频 | 亚洲人和日本人jzz护士 | 亚洲影院国产 | 国产美女福利在线 | 两个人的视频全免费观看在线 | 欧美曰韩 | 婷婷综合国产激情在线 | 老鸭窝欧美一级一区二区 | 久久婷五月综合 | 国产在线视频在线观看 | 蜜柚视频在线 | 国产一区二区三区欧美精品 | 国产大片91精品免费观看不卡 | 精品日韩一区 | 久久嫩草影院免费看夜色 | 国产成人精品2021欧美日韩 | 久久国产精品国产自线拍免费 | 免费毛片视频网站 | 99热成人精品国产免男男 | 日韩在线免费视频 | 蜜柚视频 在线 | 亚洲欧美综合日韩字幕v在线 | 中文字幕日韩在线一区国内 | 蜜臀国产在线 | 亚洲精品v欧美精品动漫精品 | 草莓视频免费下载观看丝瓜 | 99国产情在线视频 | 91免费在线看 | 日本污视频网站 | www.四虎com| 亚洲精品亚洲人成毛片不卡 | 成人精品网 | 亚洲精品毛片久久久久久久 | 亚洲激情中文字幕 | 国产一区二区三区毛片 | 高清国产一区二区 | av短片 | 四虎影院永久网站 | 精品视频香蕉尹人在线 | 九色视频网 |