[arm-linux學習-(MMU內存管理單元)]

什么是MMU

MMU(Memory Management Unit)主要用來管理虛擬存儲器、物理存儲器的控制線路隔盛,同時也負責虛擬地址映射為物理地址摄狱,以及提供硬件機制的內存訪問授權而咆、多任務多進程操作系統(tǒng)。(來自百度百科烟零,對其幾個點不熟悉瘪松,因此可以只考慮加粗部分

發(fā)展歷史

注意:學習一個知識點咸作,很重要的一步是了解其為什么而存在?它的存在是為了解決什么問題宵睦?然后记罚,在學習的過程中帶著這些問題去理解、去思考壳嚎。

在許多年以前桐智,還是使用DOS或一些古老的操作系統(tǒng)時,內存很小烟馅,同時说庭,應用程序也很小,將程序存儲在內存中基本能夠滿足需要郑趁。隨著科技的發(fā)展刊驴,圖形界面及一些其他更復雜的應用出現(xiàn),內存已經(jīng)無法存儲這些應用程序了寡润,通常的解決辦法是將程序分割成很多個覆蓋塊捆憎,覆蓋塊0最先運行,運行結束之后梭纹,就調用另一個覆蓋塊躲惰,雖然這些操作由OS來完成,但是栗柒,需要程序員對程序進行分割礁扮,這非常不高效;因此瞬沦,人們想出了一個虛擬存儲器(virtual memory)的方法太伊。虛擬存儲器的基本思想是:程序、數(shù)據(jù)逛钻、堆棧的總大小可以超過內存空間的大小僚焦,操作系統(tǒng)將當前運行的部分保存在內存中,未使用的部分保存在磁盤中曙痘。比如一個16MB的程序和一個內存只有4MB的機器芳悲,操作系統(tǒng)通過選擇可以決定哪部分4MB的程序內容保存在內存中,并在需要時边坤,在內存與磁盤中交換程序代碼名扛,這樣16MB的代碼就可以運行在4MB的機器中了。注意:這里面包含了虛擬地址和物理地址的概念

相關概念

地址范圍茧痒、虛擬地址映射成物理地址以及分頁機制

  • 地址范圍: 指處理器能夠產(chǎn)生的地址集合肮韧,如一個32bit的處理器ARM9,其能產(chǎn)生的地址集合是0x0000 0000 ~ 0xffff ffff(4G),這個地址范圍也稱為虛擬地址空間弄企,其中對應的地址為虛擬地址超燃。
  • 虛擬地址與物理地址: 與虛擬地址空間和虛擬地址相對應的是物理地址空間和物理地址;物理地址空間只是虛擬地址空間的一個子集拘领。如一臺內存為256MB的32bit X86主機意乓,其虛擬地址空間是0 ~ 0xffffffff(4GB),物理地址空間范圍是0 ~ 0x0fff ffff(256M)
  • 分頁機制
    • 如果處理器沒有MMU约素,或者有MMU但沒有啟用届良,CPU執(zhí)行單元發(fā)出的內存地址將直接傳到芯片引腳上,被內存芯片(以下稱為物理內存业汰,以便與虛擬內存區(qū)分)接收伙窃,這稱為物理地址(Physical Address,以下簡稱PA)样漆,如下圖3-1-1所示为障;

      圖3-1-1 未使用MMU.png

      如果處理器啟用了MMU,CPU執(zhí)行單元發(fā)出的內存地址將被MMU截獲放祟,從CPU到MMU的地址稱為虛擬地址(Virtual Address鳍怨,以下簡稱VA),而MMU將這個地址翻譯成另一個地址發(fā)到CPU芯片的外部地址引腳上跪妥,也就是將VA映射成PA鞋喇,,如下圖3-1-2眉撵。
      圖3-1-2 使用了MMU.png

    • 大多數(shù)使用MMU的機器都采用分頁機制侦香。虛擬地址空間以為單位進行劃分,而相應的物理地址空間也被劃分纽疟,其使用的單位稱為頁幀罐韩,頁幀和頁必須保持相同,因為內存與外部存儲器之間的傳輸是以頁為單位進行傳輸?shù)?/strong>污朽。例如散吵,MMU可以通過一個映射項將VA的一頁0xb70010000xb7001fff映射到PA的一頁0x20000x2fff,如果CPU執(zhí)行單元要訪問虛擬地址0xb7001008蟆肆,則實際訪問到的物理地址是0x2008矾睦。

虛擬內存的哪個頁面映射到物理內存的哪個頁幀是通過頁表(Page Table)來描述的,頁表保存在物理內存中炎功,MMU會查找頁表來確定一個VA應該映射到什么PA枚冗。

功能

執(zhí)行過程

操作系統(tǒng)和MMU是這樣配合的:

  1. 操作系統(tǒng)在初始化或分配、釋放內存時會執(zhí)行一些指令在物理內存中填寫頁表蛇损,然后用指令設置MMU官紫,告訴MMU頁表在物理內存中的什么位置肛宋。

  2. 設置好之后州藕,CPU每次執(zhí)行訪問內存的指令都會自動引發(fā)MMU做查表和地址轉換操作束世,地址轉換操作由硬件自動完成,不需要用指令控制MMU去做床玻。

重要:我們在程序中使用的變量和函數(shù)都有各自的地址毁涉,在程序被編譯后,這些地址就成了指令中的地址锈死,指令中的地址就成了CPU執(zhí)行單元發(fā)出的內存地址贫堰,所以在啟用MMU的情況下, 程序中使用的地址均是虛擬內存地址待牵,都會引發(fā)MMU進行查表和地址轉換操作其屏。(注意理解這句話)

內存保護機制

處理器一般有用戶模式(User Mode)特權模式(privileged Mode)之分。操作系統(tǒng)可以在頁表中設置每個頁表訪問權限缨该,有些頁表不可以訪問偎行,有些頁表只能在特權模式下訪問,有些頁表在用戶模式和特權模式下都可以訪問贰拿,同時蛤袒,訪問權限又分為可讀可寫可執(zhí)行三種膨更。這樣設定之后妙真,當CPU要訪問一個VA(Virtual Address)時,MMU會檢查CPU當前處于用戶模式還是特權模式荚守,訪問內存的目的是讀數(shù)據(jù)珍德、寫數(shù)據(jù)還是取指令執(zhí)行,如果與操作系統(tǒng)設定的權限相符矗漾,則允許訪問锈候,把VA轉換成PA,否則不允許執(zhí)行缩功,產(chǎn)生異常(Exception)晴及。

異常與中斷:異常與中斷的處理機制類似,不同的是中斷由外部設備產(chǎn)生嫡锌,而 異常由CPU內部產(chǎn)生的虑稼;中斷產(chǎn)生與CPU當前執(zhí)行的指令無關,而異常是由于當前執(zhí)行的指令出現(xiàn)問題導致的

通常操作系統(tǒng)會將虛擬地址空間劃分為用戶空間內核空間势木。例如x86平臺的linux系統(tǒng)的虛擬地址空間范圍是0x0000 0000 ~ 0xffff ffff蛛倦,前3G的空間為用戶空間,后1G的空間為內核空間啦桌。用戶程序加載到用戶空間溯壶,內核程序加載到內核空間及皂,用戶程序不能訪問內核中的數(shù)據(jù),也不能跳轉到內核空間執(zhí)行且改。這樣可以保護內核验烧,如果一個進程訪問了非法地址,頂多就是這個進程崩潰又跛,而不會影響到內核和系統(tǒng)的穩(wěn)定性碍拆。在系統(tǒng)發(fā)生中斷或異常時,不僅會跳轉到中斷或異常服務函數(shù)中執(zhí)行慨蓝,而且還會從用戶模式切換到特權模式感混,從中斷或異常服務程序跳轉到內核代碼中執(zhí)行。總結一下:在正常情況下處理器在用戶模式執(zhí)行用戶程序礼烈,在中斷或異常情況下處理器切換到特權模式執(zhí)行內核程序弧满,處理完中斷或異常之后再返回用戶模式繼續(xù)執(zhí)行用戶程序。

段錯誤我們已經(jīng)遇到過很多次了此熬,它是這樣產(chǎn)生的:

  1. 用戶程序要訪問的一個VA庭呜,經(jīng)MMU檢查無權訪問。
  2. MMU產(chǎn)生一個異常摹迷,CPU從用戶模式切換到特權模式疟赊,跳轉到內核代碼中執(zhí)行異常服務程序。
  3. 內核把這個異常解釋為段錯誤峡碉,把引發(fā)異常的進程終止掉近哟。

S3C2440/S3C2410 中的MMU

S3C2440/S3C2410 MMU概述

  1. S3C2440的MMU使用頁表來實現(xiàn)虛擬地址到物理地址的轉換;頁表存儲在內存中鲫寄,頁表中的每一行對應于虛擬存儲空間的一個頁吉执,該行包含了該虛擬內存頁對應的物理內存頁的地址、該頁的方位權限和該頁的緩沖特性等地来。這里頁表中的每一行稱為一個地址變換條目(entry)也稱為“描述符”戳玫。描述符有:段描述符、大頁描述符未斑、小頁描述符咕宿、極小頁描述符——他們保存段、大頁蜡秽、小頁或極小頁的起始物理地址府阀;粗頁表描述符、細頁表描述符——它們保存二級頁表的物理地址芽突。

  2. 頁表的存儲:頁表存放在內存中试浙,系統(tǒng)通常有一個寄存器來保存頁表的基地址。在ARM中系統(tǒng)控制協(xié)處理器CP15的寄存器C2用來保存頁表的基地址寞蚌。

  3. TLB:因為從虛擬地址到物理地址的變換過程是通過查詢頁表完成的田巴,而頁表又存儲在內存中钠糊,如果每次程序執(zhí)行時去讀取內存中的數(shù)據(jù)獲取物理地址,代價很大壹哺。而程序在執(zhí)行過程中可能只對頁表中的少數(shù)幾個單元進行訪問抄伍,根據(jù)這一特點,采用一個容量更卸孵铩(通常為8~16個字)逝慧、訪問速度和CPU中通用寄存器相當?shù)拇鎯ζ骷泶娣女斍霸L問需要的地址變換條目。這個小容量的頁表稱為TLB(Translation Lookaside buffer)啄糙。

  4. S3C2440/S3C2410中的頁表
    在S32440/S3C2410中最多會使用兩級頁表:以段(Section 1MB)的方式進行轉換時只用到一級頁表,以頁(Page)的方式進行轉換時用到二級頁表云稚。

  5. CPU訪問內存的過程
    a . 當CPU需要訪問內存時隧饼,先在TLB中查詢需要的地址變換條目。如果該條目不存在静陈,CPU從位于內存中的頁表中查詢燕雁,并把相應的結果添加到TLB中。這樣鲸拥,當CPU下一次又需要該地址變換條目時拐格,可以從TLB中直接得到,從而使地址變換的速度大大加快刑赶。
    b. 當內存中的頁表內容改變捏浊,或者通過修改系統(tǒng)控制協(xié)處理器CP15的寄存器C2使用新的頁表時,TLB中的內容需要全部清除撞叨。系統(tǒng)控制協(xié)處理器CP15的寄存器C8用來控制清除TLB內容的相關操作金踪。
    c. MMU可以將某些地址變換條目鎖定在TLB中,從而使得獲取該地址變換條目的速度保持很快牵敷。在CP15中的C10用于控制TLB內容的鎖定胡岔。
    d. MMU 可以將整個存儲空間分為最多16個域,每個域對應一定的內存區(qū)域枷餐,該區(qū)域具有相同的訪問控制屬性靶瘸。MMU中寄存器C3用于控制與域相關的屬性的配置
    e. 當存儲訪問失效時毛肋,MMU提供了相應的機制用于處理這種情況怨咪。在MMU中寄存器C5和寄存器C6用于支持這些機制

禁止/使能MMU時應注意的問題(重要)

應注意如下幾點:

  • 在使能MMU之前村生,要在內存中建立頁表惊暴,同時,CP15中的各相關寄存器必須完成初始化趁桃。
  • 如果使用的不是平板存儲模式(物理地址和虛擬地址相等)辽话,在禁止/使能MMU時肄鸽,虛擬地址和物理地址的對應關系會發(fā)生改變,這時應該清除cache中的當前地址變換條目油啤。

S3C2440/S3C2410中的MMU地址變換

ARM CPU上的地址轉換過程涉及3個概念:虛擬地址(VA)典徘、變換后的虛擬地址(MVA, modified virtrual address)、物理地址(PA)益咬。

沒啟動MMU時逮诲,CPU核、cache幽告、MMU梅鹦、外設等所有部件使用的都是物理地址。

啟動MMU后冗锁,CPU核對外發(fā)出虛擬地址VA齐唆;VA被轉換為MVA供cache、MMU使用冻河,在這里MVA被轉換為PA箍邮,最后使用PA讀寫實際設備。

ARM支持的存儲塊大小有以下幾種:

  • 段(section):是大小為1M的存儲塊叨叙。
  • 大頁(Large Pages):是大小為64KB的存儲塊锭弊。
  • 小頁(Small Pages):是大小為4KB的存儲塊。
  • 極小頁(Tiny Pages):是大小為1KB的存儲塊擂错。
    通過配置訪問控制機制味滞,還可以將大頁分成大小為16KB的子頁;將小頁分成大小為1KB的子頁马昙;極小頁不能再細分桃犬,只能以1KB大小的整頁為單位。

MMU中的域

MMU中的域指的是一些段行楞、大頁或者小頁的集合攒暇。ARM支持最多16個域,每個域的訪問控制特性由CP15中的寄存器C3中的兩位來控制子房,CP15中的寄存器C3的格式如下所示:


C3寄存器.png

其中每兩位控制一個域的訪問控制特性形用,其編碼及對應的含義如下所示:


Paste_Image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市证杭,隨后出現(xiàn)的幾起案子田度,更是在濱河造成了極大的恐慌,老刑警劉巖解愤,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镇饺,死亡現(xiàn)場離奇詭異,居然都是意外死亡送讲,警方通過查閱死者的電腦和手機奸笤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門惋啃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人监右,你說我怎么就攤上這事边灭。” “怎么了健盒?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵绒瘦,是天一觀的道長。 經(jīng)常有香客問我扣癣,道長惰帽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任搏色,我火速辦了婚禮善茎,結果婚禮上,老公的妹妹穿的比我還像新娘频轿。我一直安慰自己,他們只是感情好烁焙,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布航邢。 她就那樣靜靜地躺著,像睡著了一般骄蝇。 火紅的嫁衣襯著肌膚如雪膳殷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天九火,我揣著相機與錄音赚窃,去河邊找鬼。 笑死岔激,一個胖子當著我的面吹牛勒极,可吹牛的內容都是我干的。 我是一名探鬼主播虑鼎,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼辱匿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了炫彩?” 一聲冷哼從身側響起匾七,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎江兢,沒想到半個月后昨忆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡杉允,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年邑贴,在試婚紗的時候發(fā)現(xiàn)自己被綠了席里。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡痢缎,死狀恐怖胁勺,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情独旷,我是刑警寧澤署穗,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站嵌洼,受9級特大地震影響案疲,放射性物質發(fā)生泄漏。R本人自食惡果不足惜麻养,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一褐啡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鳖昌,春花似錦备畦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至糕档,卻和暖如春莉恼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背速那。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工俐银, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人端仰。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓捶惜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親榆俺。 傳聞我的和親對象是個殘疾皇子售躁,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容