提到MMU就要提到一個(gè)概念,虛擬地址(Virtual Address)。前面的文章中反復(fù)提到過(guò)虛擬地址的概念。
使用虛擬地址的好處是它允許管理軟件,例如操作系統(tǒng)(OS)來(lái)控制呈現(xiàn)給軟件的內(nèi)存視圖。操作系統(tǒng)可以控制哪些內(nèi)存是可見(jiàn)的,哪些內(nèi)存是可見(jiàn)的,哪些訪問(wèn)是允許的。應(yīng)用程序知道它是由操作系統(tǒng)和硬件協(xié)同工作來(lái)執(zhí)行地址轉(zhuǎn)換的。實(shí)際上,每個(gè)應(yīng)用程序都可以使用自己的一組虛擬地址,這些地址將映射到物理系統(tǒng)中的不同位置。當(dāng)操作系統(tǒng)在不同的應(yīng)用程序之間切換時(shí),它會(huì)重新編程映射。這意味著當(dāng)前應(yīng)用程序的虛擬地址將映射到內(nèi)存中正確的物理位置。
使用虛擬地址的另一個(gè)好處是操作系統(tǒng)可以將內(nèi)存的多個(gè)碎片物理區(qū)域作為單個(gè)、連續(xù)的虛擬地址空間呈現(xiàn)給應(yīng)用程序。虛擬地址也有利于軟件開(kāi)發(fā)人員,他們?cè)诰帉?xiě)應(yīng)用程序時(shí)不知道系統(tǒng)的確切內(nèi)存地址。使用虛擬地址,軟件開(kāi)發(fā)人員不需要關(guān)心物理內(nèi)存。
虛擬地址和物理地址之間的映射存儲(chǔ)在轉(zhuǎn)換表(translation tables)中:
轉(zhuǎn)換表在內(nèi)存中,由軟件(通常是操作系統(tǒng)或管理程序)管理。地址轉(zhuǎn)換表是動(dòng)態(tài)的,可以根據(jù)軟件的需要進(jìn)行更新。負(fù)責(zé)虛擬地址到物理地址轉(zhuǎn)換的部件就是MMU。MMU由兩部分組成:
表遍歷單元(Table Walk Unit),包含從內(nèi)存中讀取地址轉(zhuǎn)換表的邏輯。
TLB(Translation Lookaside Buffer),緩存最近使用的地址轉(zhuǎn)換。
軟件發(fā)出的所有內(nèi)存地址都是虛擬的。這些內(nèi)存地址被傳遞給MMU,MMU檢查T(mén)LB中最近使用的緩存地址轉(zhuǎn)換。如果MMU沒(méi)有找到最近緩存的地址轉(zhuǎn)換,表遍歷單元(TWU)將從內(nèi)存中讀取相應(yīng)的表?xiàng)l目。
轉(zhuǎn)換表的工作原理是將虛擬地址空間劃分為大小相等的塊,并在每個(gè)塊的表中提供一個(gè)條目。
當(dāng)轉(zhuǎn)換發(fā)生時(shí),由軟件發(fā)出的虛擬地址將一分為二。在下圖中被標(biāo)記為“which entry”的高位告訴您要查找哪個(gè)塊條目,并將它們用作表的索引。此輸入塊包含虛擬地址的物理地址。低階位在圖中被標(biāo)記為“offset in blocks”,是該塊中的偏移量,不會(huì)因轉(zhuǎn)換而改變。
多級(jí)查找更為復(fù)雜。以下圖為例,第一個(gè)表將虛擬地址空間劃分為大的塊。這個(gè)表中的每個(gè)條目可以指向一個(gè)大小相等的物理內(nèi)存塊,也可以指向另一個(gè)將塊細(xì)分為更小塊的表。我們稱這種類型的表為“多級(jí)表”。在ARMv8-A中,最多可以支持四級(jí)查找。多級(jí)查找為虛擬化技術(shù)提供了支持。
這種多級(jí)查找方法允許描述較大的內(nèi)存塊和較小的內(nèi)存塊。大/小塊體的特點(diǎn)如下:
大內(nèi)存塊比小內(nèi)存塊需要更少的讀取級(jí)別。另外,大內(nèi)存塊在TLB中的緩存效率更高。
小內(nèi)存塊為軟件提供了對(duì)內(nèi)存分配的細(xì)粒度控制。但是,小內(nèi)存塊在TLB中的緩存效率較低。緩存效率較低,因?yàn)樾?nèi)存塊需要多次讀取級(jí)別才能轉(zhuǎn)換。
處理器在開(kāi)始表查找時(shí)不知道轉(zhuǎn)換的大小。處理器通過(guò)執(zhí)行表遍歷計(jì)算出正在轉(zhuǎn)換的塊的大小。
在ARMv8-A中有三個(gè)獨(dú)立的虛擬地址空間,分別是:
NS.EL0 and NS.EL1 (Non-secure EL0/EL1).
NS.EL2 (Non-secure EL2).
EL3.
在虛擬化中,我們將操作系統(tǒng)控制的地址轉(zhuǎn)換集稱為stage 1。Stage 1表將虛擬地址轉(zhuǎn)換為中間物理地址(IPA)。在Stage 1,操作系統(tǒng)認(rèn)為IPA是物理地址空間。然而,hypervisor控制第二組轉(zhuǎn)換,我們稱之為Stage 2。Stage2 將IPA轉(zhuǎn)換為物理地址。前面介紹ARM虛擬化的文章中有介紹,不再贅述。
Armv8-A是一個(gè)64位體系結(jié)構(gòu),但這并不意味著所有的地址都是64位的。虛擬地址以64位格式存儲(chǔ)。因此,LDR指令和STR指令中的地址始終在X寄存器中指定。但是,并非X寄存器中的所有地址都有效。在Armv8.0-A中,物理地址的最多是48位。在Armv8.2-A中擴(kuò)展到52位。
許多現(xiàn)代操作系統(tǒng)的所有應(yīng)用程序似乎都運(yùn)行在同一個(gè)地址區(qū)域,這就是我們所說(shuō)的用戶空間。實(shí)際上,不同的應(yīng)用程序需要不同的映射。
理想情況下,我們希望不同應(yīng)用程序的地址轉(zhuǎn)換在TLB中共存,以防止TLB在上下文切換時(shí)失效。但是處理器如何知道要使用哪個(gè)版本的地址轉(zhuǎn)換呢?在Armv8-A中,答案是地址空間標(biāo)識(shí)符(Address SpaceIdentifiers,ASID)。
對(duì)于EL0/EL1虛擬地址空間,可以使用轉(zhuǎn)換表項(xiàng)的屬性字段中的nG位將轉(zhuǎn)換標(biāo)記為全局(G)或非全局(nG)。例如,內(nèi)核映射是全局轉(zhuǎn)換,而應(yīng)用程序映射是非全局轉(zhuǎn)換。全局轉(zhuǎn)換應(yīng)用于當(dāng)前正在運(yùn)行的應(yīng)用程序。非全局地址轉(zhuǎn)換僅適用于特定應(yīng)用程序。
非全局映射在TLB中用ASID標(biāo)記。在TLB查找中,TLB條目中的ASID將與當(dāng)前選定的ASID進(jìn)行比較。如果它們不匹配,則不使用TLB條目。下圖顯示了內(nèi)核空間中沒(méi)有ASID標(biāo)記的全局映射,以及具有ASID標(biāo)記的用戶空間中的非全局映射。該圖顯示,允許多個(gè)應(yīng)用程序的TLB條目在緩存中共存,ASID決定使用哪個(gè)條目。
EL0/EL1轉(zhuǎn)換也可以使用虛擬機(jī)標(biāo)識(shí)符(Virtual MachineIdentifier,VMID)進(jìn)行標(biāo)記。VMID允許來(lái)自不同VM的轉(zhuǎn)換在緩存中共存。這與ASID處理來(lái)自不同應(yīng)用程序的地址轉(zhuǎn)換的方式類似。在實(shí)踐中,這意味著一些轉(zhuǎn)換將同時(shí)使用VMID和ASID進(jìn)行標(biāo)記,并且兩者都必須與要使用的TLB條目相匹配。
如果一個(gè)系統(tǒng)包含多個(gè)處理器,那么在一個(gè)處理器上使用的ASID和VMID在其他處理器上的含義是否相同?對(duì)于Armv8.0-A來(lái)說(shuō),答案是它們的意思并不一定相同。軟件不需要以相同的方式在多個(gè)處理器間使用給定的ASID。例如,ASID 5可能被一個(gè)處理器上的計(jì)算器和另一個(gè)處理器上的web瀏覽器使用。這意味著一個(gè)處理器創(chuàng)建的TLB條目不能被另一個(gè)處理器使用。
實(shí)際上,軟件不太可能在處理器之間使用不同的ASID。軟件在給定系統(tǒng)中的所有處理器上以相同的方式使用ASID和VMID更為常見(jiàn)。因此,Armv8.2-A在轉(zhuǎn)換表基寄存器(TTBR)中引入了公共非私有(Common not Private,CnP)位。當(dāng)設(shè)置了CnP位時(shí),軟件承諾在所有處理器上以相同的方式使用ASID和VMID,這允許一個(gè)處理器創(chuàng)建的TLB條目被另一個(gè)處理器使用。
轉(zhuǎn)化粒度是可以描述的最小的存儲(chǔ)塊。Armv8-A支持三種不同的粒度:4KB、16KB和64KB。處理器支持的顆粒大小由實(shí)現(xiàn)定義,并由ID_AA64MMFR0_EL1報(bào)告。所有Arm Cortex-A處理器支持4KB和64KB。
當(dāng)MMU被禁用時(shí),所有地址都是平面映射的。也就是說(shuō),輸入和輸出地址是相同的。
關(guān)于安芯教育
安芯教育是聚焦AIoT(人工智能+物聯(lián)網(wǎng))的創(chuàng)新教育平臺(tái),提供從中小學(xué)到高等院校的貫通式AIoT教育解決方案。
安芯教育依托Arm技術(shù),開(kāi)發(fā)了ASC(Arm智能互聯(lián))課程及人才培養(yǎng)體系。已廣泛應(yīng)用于高等院校產(chǎn)學(xué)研合作及中小學(xué)STEM教育,致力于為學(xué)校和企業(yè)培養(yǎng)適應(yīng)時(shí)代需求的智能互聯(lián)領(lǐng)域人才。
原文標(biāo)題:技術(shù)分享 | ARM系列 -- MMU
文章出處:【微信公眾號(hào):安芯教育科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
審核編輯:湯梓紅
-
ARM
+關(guān)注
關(guān)注
134文章
9310瀏覽量
375116 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7095瀏覽量
124968 -
MMU
+關(guān)注
關(guān)注
0文章
92瀏覽量
18641
原文標(biāo)題:技術(shù)分享 | ARM系列 -- MMU
文章出處:【微信號(hào):Ithingedu,微信公眾號(hào):安芯教育科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Allegro正負(fù)片的概念及相關(guān)設(shè)置說(shuō)明
CAD命令:CAD軟件中from命令的相關(guān)概念及應(yīng)用
介紹SRv6獨(dú)有的工作原理和相關(guān)概念
嵌入式系統(tǒng)的概念及特點(diǎn)
電子商務(wù)相關(guān)概念及理論,下載
異步傳輸是什么_異步傳輸概念及工作原理

igbt工作原理視頻
MMU的工作原理梳理

評(píng)論