自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

鴻蒙輕內(nèi)核A核源碼分析系列之虛實(shí)映射(4)虛實(shí)映射查詢

開發(fā) 前端
虛實(shí)映射其實(shí)就是一個(gè)建立頁表的過程。MMU支持多級頁表,LiteOS-A內(nèi)核采用二級頁表描述進(jìn)程空間。首先介紹下一級頁表和二級頁表。

[[438478]]

想了解更多內(nèi)容,請?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

4、虛實(shí)映射查詢函數(shù)LOS_ArchMmuQuery

給定一個(gè)虛擬內(nèi)存地址,可以查詢其映射到的物理內(nèi)存地址,還可以查詢映射標(biāo)簽屬性信息,函數(shù)LOS_ArchMmuQuery負(fù)責(zé)完成這些信息的查詢。

4.1 函數(shù)LOS_ArchMmuQuery

函數(shù)LOS_ArchMmuQuery用于獲取進(jìn)程空間虛擬地址對應(yīng)的物理地址以及映射標(biāo)簽屬性,其中輸入?yún)?shù)為虛擬內(nèi)存地址vaddr,輸出參數(shù)為物理內(nèi)存地址*paddr和標(biāo)簽屬性*flags。⑴處獲取虛擬地址對應(yīng)的頁表項(xiàng)。⑵處如果虛擬地址對應(yīng)的頁表項(xiàng)描述符類型無效,返回錯(cuò)誤碼。⑶處如果頁表項(xiàng)描述符類型為L1頁表Section類型映射,則執(zhí)行⑷獲取映射的物理地址,其中MMU_DESCRIPTOR_L1_SECTION_ADDR(l1Entry)為L1頁表項(xiàng)的高12位,(vaddr & (MMU_DESCRIPTOR_L1_SMALL_SIZE - 1))為虛擬地址的低20位,即頁內(nèi)偏移值??梢院蜕衔牧私獾降闹R(shí)相對應(yīng),物理內(nèi)存地址的計(jì)算方式為頁表項(xiàng)的高12位加上虛擬內(nèi)存地址的低20位,如下圖所示。⑸處獲取映射的標(biāo)簽屬性,把MMU標(biāo)簽轉(zhuǎn)換為內(nèi)存區(qū)域標(biāo)簽。

鴻蒙輕內(nèi)核A核源碼分析系列五 虛實(shí)映射(4)虛實(shí)映射查詢-鴻蒙HarmonyOS技術(shù)社區(qū)

如果虛擬地址對應(yīng)的頁表項(xiàng)描述符類型為頁表Page Table,則執(zhí)行⑹調(diào)用內(nèi)聯(lián)函數(shù)OsGetPte2BasePtr()計(jì)算L2頁表項(xiàng)基地址,計(jì)算方法為:取L1頁表項(xiàng)的高22位,低10位置0,得到L2頁表項(xiàng)物理內(nèi)存基地址,然后轉(zhuǎn)化為L2頁表項(xiàng)虛擬內(nèi)存基地址。⑺處計(jì)算虛擬地址對應(yīng)的L2頁表項(xiàng)數(shù)值,從上文可知,L2頁表項(xiàng)的指針地址在頁表項(xiàng)基地址加上虛擬內(nèi)存地址的高20位,取該地址的數(shù)據(jù)即為L2頁表項(xiàng)數(shù)據(jù)。如果L2頁表項(xiàng)描述符類型為小頁,則執(zhí)行⑻計(jì)算物理內(nèi)存地址,其中MMU_DESCRIPTOR_L2_SMALL_PAGE_ADDR(l2Entry)為L2頁表項(xiàng)的高20位;vaddr & (MMU_DESCRIPTOR_L2_SMALL_SIZE - 1)為虛擬地址的低12位,如下圖所示。然后計(jì)算相應(yīng)的標(biāo)簽值。⑼處表示當(dāng)前輕內(nèi)核還不支持大頁類型。

鴻蒙輕內(nèi)核A核源碼分析系列五 虛實(shí)映射(4)虛實(shí)映射查詢-鴻蒙HarmonyOS技術(shù)社區(qū)
  1. STATUS_T LOS_ArchMmuQuery(const LosArchMmu *archMmu, VADDR_T vaddr, PADDR_T *paddr, UINT32 *flags) 
  2. ⑴  PTE_T l1Entry = OsGetPte1(archMmu->virtTtb, vaddr); 
  3.     PTE_T l2Entry; 
  4.     PTE_T* l2Base = NULL
  5.  
  6. ⑵  if (OsIsPte1Invalid(l1Entry)) { 
  7.         return LOS_ERRNO_VM_NOT_FOUND; 
  8. ⑶  } else if (OsIsPte1Section(l1Entry)) { 
  9.         if (paddr != NULL) { 
  10. ⑷          *paddr = MMU_DESCRIPTOR_L1_SECTION_ADDR(l1Entry) + (vaddr & (MMU_DESCRIPTOR_L1_SMALL_SIZE - 1)); 
  11.         } 
  12.  
  13.         if (flags != NULL) { 
  14. ⑸          OsCvtSecAttsToFlags(l1Entry, flags); 
  15.         } 
  16.     } else if (OsIsPte1PageTable(l1Entry)) { 
  17. ⑹      l2Base = OsGetPte2BasePtr(l1Entry); 
  18.         if (l2Base == NULL) { 
  19.             return LOS_ERRNO_VM_NOT_FOUND; 
  20.         } 
  21. ⑺      l2Entry = OsGetPte2(l2Base, vaddr); 
  22.         if (OsIsPte2SmallPage(l2Entry) || OsIsPte2SmallPageXN(l2Entry)) { 
  23.             if (paddr != NULL) { 
  24. ⑻               *paddr = MMU_DESCRIPTOR_L2_SMALL_PAGE_ADDR(l2Entry) + (vaddr & (MMU_DESCRIPTOR_L2_SMALL_SIZE - 1)); 
  25.             } 
  26.  
  27.             if (flags != NULL) { 
  28.                 OsCvtPte2AttsToFlags(l1Entry, l2Entry, flags); 
  29.             } 
  30. ⑼      } else if (OsIsPte2LargePage(l2Entry)) { 
  31.             LOS_Panic("%s %d, large page unimplemented\n", __FUNCTION__, __LINE__); 
  32.         } else { 
  33.             return LOS_ERRNO_VM_NOT_FOUND; 
  34.         } 
  35.     } 
  36.  
  37.     return LOS_OK; 

想了解更多內(nèi)容,請?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2021-12-02 15:08:23

鴻蒙HarmonyOS應(yīng)用

2021-12-03 16:20:26

鴻蒙HarmonyOS應(yīng)用

2021-12-01 15:59:22

鴻蒙HarmonyOS應(yīng)用

2022-03-11 20:23:14

鴻蒙源碼分析進(jìn)程管理

2022-01-10 15:31:44

鴻蒙HarmonyOS應(yīng)用

2022-01-12 10:50:23

鴻蒙HarmonyOS應(yīng)用

2022-03-03 18:28:28

Harmony進(jìn)程任務(wù)管理模塊

2022-04-13 11:02:12

鴻蒙事件模塊事件Event

2021-06-04 09:57:49

鴻蒙HarmonyOS應(yīng)用

2021-05-17 09:28:59

鴻蒙HarmonyOS應(yīng)用

2021-11-05 15:00:33

鴻蒙HarmonyOS應(yīng)用

2021-11-08 15:06:15

鴻蒙HarmonyOS應(yīng)用

2021-06-04 14:15:10

鴻蒙HarmonyOS應(yīng)用

2021-05-08 15:14:50

鴻蒙HarmonyOS應(yīng)用

2021-05-25 09:28:34

鴻蒙HarmonyOS應(yīng)用

2021-10-20 16:08:57

鴻蒙HarmonyOS應(yīng)用

2022-04-13 11:12:43

鴻蒙輕內(nèi)核信號量模塊操作系統(tǒng)

2022-01-14 08:39:47

鴻蒙HarmonyOS應(yīng)用

2021-05-31 20:30:55

鴻蒙HarmonyOS應(yīng)用

2021-06-17 09:36:07

鴻蒙HarmonyOS應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號