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

查看: 3454|回復: 0
打印 上一主題 下一主題

帶你走進嵌入式ARM MMU神秘的內部世界

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

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费视频精品一区二区三区 | 男女做羞羞高清视频免费 | 国产欧美精品三区 | 武侠古典第7页色综合 | 国产人成精品午夜在线观看 | 青青草a国产免费观看 | 亚洲欧美中文日韩在线v日本 | 国产福利一区二区精品免费 | 欧美国产伦久久久久 | 中文字幕在线观看91 | 黄页视频在线观看免费 | 久久精品国产免费看久久精品 | 久热精品在线视频 | 久久这里只有精品久久 | 亚洲成人在线免费 | 国产欧美日韩一区二区三区在线 | 成人av在线播放 | 久久er视频 | 亚色在线 | 九色官网| 在线国产日韩 | 亚洲国产高清在线精品一区 | 欧美一区二区三区在线 | 国产高清a| 天天摸夜夜添夜夜添国产 | 国产欧美日韩图片一区二区 | 在线免费观看a视频 | 毛片在线高清免费观看 | 欧美大片在线 | fc2久久| 日韩欧美视频一区二区在线观看 | 护土与老板在办公室bd中文版 | 最新91 | 韩国毛片免费 | 国产精品老女人精品视 | 日本亚洲色图 | 欧美日韩精品一区二区三区 | 精品国产免费久久久久久婷婷 | 国产青草视频在线观看免费影院 | 亚洲男人的天堂在线视频 | 99久久中文字幕伊人情人 |