chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

開(kāi)啟MMU會(huì)出現(xiàn)的問(wèn)題及解決方案

Linux閱碼場(chǎng) ? 來(lái)源:Linux閱碼場(chǎng) ? 作者: baron ? 2022-06-15 08:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者簡(jiǎn)介:

Baron (csdn:代碼改變世界ctw),九年手機(jī)安全/SOC底層安全開(kāi)發(fā)經(jīng)驗(yàn)。擅長(zhǎng)trustzone/tee安全產(chǎn)品的設(shè)計(jì)和開(kāi)發(fā)

注:說(shuō)明本文的介紹都是基于armv8-aarch64或armv9硬件架構(gòu)

在mmu未開(kāi)啟階段,PC操作的都是物理地址執(zhí)行程序,這樣看起來(lái)一切正常,沒(méi)啥問(wèn)題。

例如:取指(到物理地址0x4000處取指)、譯碼、執(zhí)行取指(物理地址0x4004處取指)、譯碼、執(zhí)行取指(物理地址0x4008處取指)、譯碼、執(zhí)行取指(物理地址0x400C處取指)、譯碼、執(zhí)行

但是呢,假如程序在執(zhí)行的過(guò)程中,你突然打開(kāi)了MMU,那么會(huì)發(fā)生什么呢?比如在前面的示例中,就會(huì)出現(xiàn),程序本來(lái)執(zhí)行在0X4000、0x4004處好好的,而0x4004切好是enable_mmu指令,那么接下來(lái)PC將取值0x4008處地址的指令,由于此時(shí)MMU已經(jīng)被打開(kāi)了,那么0x4008會(huì)被當(dāng)作虛擬地址,經(jīng)過(guò)MMU翻譯...

經(jīng)過(guò)MMU,那么就可能出現(xiàn)了兩種問(wèn)題:一是虛擬地址0x4008所對(duì)應(yīng)的頁(yè)表沒(méi)有建立,此時(shí)會(huì)產(chǎn)生prefetch abort;二是虛擬地址0x4008所對(duì)應(yīng)的頁(yè)表已經(jīng)建立了(例如指向物理0x9004處),那么此時(shí)cpu期望訪問(wèn)物理地址0x4008處的,就被突然變成了訪問(wèn)物理地址0x9004處了。

取指(到到物理地址0x4000處取指)、譯碼、執(zhí)行取指(物理地址0x4004處取指)、譯碼、執(zhí)行 -- 這條指令是開(kāi)啟MMU取指(到虛擬地址0x4008處取指,經(jīng)MMU單元后,要么是invalid,要么是0x9004)、譯碼、執(zhí)行......

d490aaa8-ec3f-11ec-ba43-dac502259ad0.png

為了解決上述描述的問(wèn)題,下面給出了兩種解決方案:第一種方案:在開(kāi)啟MMU之前,我先對(duì)正在執(zhí)行的這一小塊代碼建立個(gè)頁(yè)表(一一映射),那么此時(shí)的邏輯就變成了:

取指(到到物理地址0x4000處取指)、譯碼、執(zhí)行取指(物理地址0x4004處取指)、譯碼、執(zhí)行 -- 這條指令是開(kāi)啟MMU取指(到虛擬地址0x4008處取指,經(jīng)MMU單元后,物理地址依然是是0x4008)、譯碼、執(zhí)行 -- 程序沒(méi)有跑飛......

d4a2db1a-ec3f-11ec-ba43-dac502259ad0.png

第二種方案:在開(kāi)啟MMU之前,我確實(shí)建立個(gè)頁(yè)表(不是一一映射哦,這是正常業(yè)務(wù)的頁(yè)表),此時(shí)的邏輯如下:

取指(到到物理地址0x4000處取指)、譯碼、執(zhí)行取指(物理地址0x4004處取指)、譯碼、執(zhí)行 -- 這條指令是開(kāi)啟MMU取指,到虛擬地址0x4008處取指,經(jīng)MMU單元時(shí)在頁(yè)表是找不到0x4008這個(gè)虛擬地址的(因?yàn)闆](méi)做map),所以會(huì)產(chǎn)生prefetch abort異常、而在異常代碼ERET返回時(shí),正好返回到0xXXXX地址處,該地址是虛擬地址,正好MAP到0x4008物理地址,程序得到繼續(xù)執(zhí)行,譯碼、執(zhí)行 -- 程序很順利哦......

d4b714f4-ec3f-11ec-ba43-dac502259ad0.png

如果看到此處,您沒(méi)有看懂,沒(méi)關(guān)系,請(qǐng)看下列代碼示例:

d4caa3a2-ec3f-11ec-ba43-dac502259ad0.png

程序在(1)處將 mmu_on_addr鏈接地址(虛擬地址)寫入到了X30寄存器中程序在(2)處enable MMU,此時(shí)下一條指令取指,將被當(dāng)作成虛擬地址,經(jīng)過(guò)MMU翻譯,而對(duì)應(yīng)的頁(yè)表中自然是沒(méi)有這個(gè)地址(物理地址被當(dāng)作成的虛擬地址),所以此時(shí)將產(chǎn)生sync abort...程序在(3)處不會(huì)被執(zhí)行,因?yàn)樯厦嬉呀?jīng)sync abort了

跳轉(zhuǎn)到sync abort后,代碼如下方所示,什么都沒(méi)干,直接ret返回了。


	
  1. vector_entry sync_exception_sp_elx

  2. ret

ret指令返回的,PC自然是自動(dòng)指向X30地址處,即 mmu_on_addr鏈接地址(虛擬地址),程序繼續(xù)跑,一切步入正常流程...

原文標(biāo)題:Baron:程序運(yùn)行過(guò)程中突然打開(kāi)MMU會(huì)怎么樣?

文章出處:【微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 指令
    +關(guān)注

    關(guān)注

    1

    文章

    623

    瀏覽量

    37545
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3846

    瀏覽量

    85256
  • MMU
    MMU
    +關(guān)注

    關(guān)注

    0

    文章

    92

    瀏覽量

    19230

原文標(biāo)題:Baron:程序運(yùn)行過(guò)程中突然打開(kāi)MMU會(huì)怎么樣?

文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    TLE9879開(kāi)啟看門狗后不喂狗也不會(huì)出現(xiàn)復(fù)位的現(xiàn)象是為什么?

    開(kāi)啟看門狗后不喂狗也不會(huì)出現(xiàn)復(fù)位的現(xiàn)象,用官方例程也是一樣的效果,有人遇到過(guò)這個(gè)情況嗎?
    發(fā)表于 02-19 07:06

    uart串口和mqtt同時(shí)啟用,開(kāi)啟藍(lán)牙掃描就會(huì)出現(xiàn)wifi連接超時(shí)和mqtt心跳包收不到的情況,為什么?

    uart串口和mqtt同時(shí)啟用,這時(shí)候開(kāi)啟藍(lán)牙掃描就會(huì)出現(xiàn)wifi連接超時(shí)和mqtt心跳包收不到的情況。 也可以是我藍(lán)牙掃描和mqtt在共存時(shí),這時(shí)加上一個(gè)uart就會(huì)出現(xiàn)wifi超時(shí),mqtt
    發(fā)表于 06-05 06:06

    立體智慧倉(cāng)儲(chǔ)解決方案.#云計(jì)算

    解決方案智能設(shè)備
    學(xué)習(xí)電子知識(shí)
    發(fā)布于 :2022年10月06日 19:45:47

    關(guān)于頁(yè)表和MMU的問(wèn)題

    剛開(kāi)始學(xué),好多東西都云里霧里的TT為什么在bootloader里要進(jìn)行頁(yè)表初始化然后開(kāi)啟MMU,然后在進(jìn)入內(nèi)核后還要?jiǎng)?chuàng)建頁(yè)表開(kāi)啟MMU?這兩個(gè)有什么不一樣么?s3c2410,bootl
    發(fā)表于 05-06 17:25

    有對(duì)MMU比較了解的嗎?

    我最近在寫一個(gè)MMU的裸機(jī)程序,但是無(wú)論怎么映射都不行,一旦開(kāi)啟MMU,程序就會(huì)卡住。我想問(wèn)的是寫MMU的程序?qū)︽溄幽_本和程序本身有什么特別的要求嗎?我的映射代碼如下(0~0x6000
    發(fā)表于 01-10 21:43

    裸機(jī)MMU實(shí)驗(yàn)出現(xiàn)以下問(wèn)題該怎么辦?

    剛接觸裸板程序,自己編mmu,make出問(wèn)題,然后用韋老師MMU實(shí)驗(yàn)代碼,make也出現(xiàn)問(wèn)題如圖,
    發(fā)表于 08-28 22:42

    為什么筆記本會(huì)出現(xiàn)暗屏

    為什么筆記本會(huì)出現(xiàn)暗屏   您好,為什么筆記本會(huì)出現(xiàn)暗屏呢? 屏暗是怎樣產(chǎn)生呢?普遍有以下4種情況:第一種是燈管出
    發(fā)表于 01-21 11:27 ?925次閱讀

    對(duì)MMU和頁(yè)表工作機(jī)制的簡(jiǎn)單評(píng)析

    對(duì)于一個(gè)有MMU的CPU而言,MMU開(kāi)啟后,CPU是這樣尋址的:CPU任何時(shí)候,一切時(shí)候,發(fā)出的地址都是虛擬地址,這個(gè)虛擬地址發(fā)給MMU后,MMU
    的頭像 發(fā)表于 02-02 14:08 ?1.2w次閱讀
    對(duì)<b class='flag-5'>MMU</b>和頁(yè)表工作機(jī)制的簡(jiǎn)單評(píng)析

    MacBook Air會(huì)出現(xiàn)防反射涂層問(wèn)題

    蘋果本周在與蘋果授權(quán)服務(wù)提供商共享的備忘錄中指出,配備Retina顯示屏的MacBook Air型號(hào)可能會(huì)出現(xiàn)防反射涂層問(wèn)題。備忘錄指出:“某些MacBook,MacBook Air和MacBook Pro電腦上的視網(wǎng)膜顯示屏可能會(huì)出現(xiàn)防反射涂層問(wèn)題?!?/div>
    的頭像 發(fā)表于 03-27 14:39 ?3630次閱讀

    內(nèi)存條壞了電腦會(huì)出現(xiàn)什么現(xiàn)象

    內(nèi)存條壞了電腦會(huì)出現(xiàn)什么狀況呢,下面我們來(lái)告訴你吧。內(nèi)存條壞了電腦會(huì)出現(xiàn)以下?tīng)顩r:
    發(fā)表于 06-17 10:33 ?3.9w次閱讀

    減速機(jī)軸承位置磨損會(huì)出現(xiàn)什么后果?怎么處理?

    減速機(jī)軸承位置磨損會(huì)出現(xiàn)什么后果?怎么處理?
    發(fā)表于 04-06 16:39 ?15次下載

    為什么要用MMU?為什么要用虛擬地址?

    既然MMU開(kāi)啟后,硬件會(huì)自動(dòng)的將虛擬地址轉(zhuǎn)換成物理地址,那么還需要我們軟件做什么事情呢?即創(chuàng)建一個(gè)頁(yè)表翻譯都需要做哪些事情呢?或者說(shuō)啟用一個(gè)MMU需要軟件做什么事情呢?
    的頭像 發(fā)表于 04-26 14:37 ?6151次閱讀

    Wi-Fi 6 開(kāi)啟物聯(lián)網(wǎng)解決方案

    新技術(shù)星期二:Wi-Fi 6 開(kāi)啟物聯(lián)網(wǎng)解決方案
    的頭像 發(fā)表于 12-30 09:40 ?1486次閱讀

    為什么我的電源會(huì)出現(xiàn)振鈴和過(guò)熱?

    重點(diǎn)分析 電感問(wèn)題。設(shè)計(jì)人員為了獲得各種優(yōu)勢(shì),例如減少輸出紋波和盡量縮減解決方案尺寸,往往會(huì)選擇超出推薦范圍的電感值。然而,選擇電感值過(guò)大或過(guò)小的元件都會(huì)導(dǎo)致意想不到 的后果,可能會(huì)造成芯片嚴(yán)重?fù)p壞
    的頭像 發(fā)表于 05-22 12:52 ?1280次閱讀
    為什么我的電源<b class='flag-5'>會(huì)出現(xiàn)</b>振鈴和過(guò)熱?

    伺服電機(jī)慣量不足會(huì)出現(xiàn)什么現(xiàn)象

    伺服電機(jī)是現(xiàn)代工業(yè)自動(dòng)化領(lǐng)域中非常重要的一種驅(qū)動(dòng)設(shè)備,它具有高精度、高響應(yīng)速度、高穩(wěn)定性等特點(diǎn)。然而,伺服電機(jī)在實(shí)際應(yīng)用過(guò)程中,由于各種原因,可能會(huì)出現(xiàn)慣量不足的問(wèn)題。本文將詳細(xì)分析伺服電機(jī)慣量不足
    的頭像 發(fā)表于 06-14 10:47 ?2962次閱讀