日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

思考: 什么时候需要disable MMU/i-cache/d-cache?

發布時間:2025/3/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 思考: 什么时候需要disable MMU/i-cache/d-cache? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

快速鏈接:
.
👉👉👉 個人博客筆記導讀目錄(全部) 👈👈👈


在armv8/armv9的aarch64架構下,軟件的啟動流程:
BL1--->BL2--->BL31--->BL32--->BL33....

在不同的BL鏡像切換時,都需要disable MMU/i-cache/d-cache嗎?
我們以BL2到BL31的切換為示例,討論一下場景。

BL2—>BL31

BL2 load BL31到內存,然后跳轉到BL31, 然后有兩種場景需要分析:

bl2 at EL3
  • 如果bl2是EL3,BL31也是EL3,他們使用相同的Transslation Regime,所以在BL2跳轉BL31的時候,需要disable MMU/i-cache,至于d-cache則無需disabled,但是如果你是BL2 load的BL31鏡像,那么在load完鏡像時,就需要flush d-cache
bl2 at S-EL1
  • 如果bl2是aarch64,那么BL2是S-EL1,BL31是EL3,他們有著不同的Transslation Regime, 所以就不需要disable MMU/i-cache了,至于d-cache則無需disabled,但是如果你是BL2 load的BL31鏡像,那么在load完鏡像時,就需要flush d-cache
  • 如果bl2是aarch32, 那么BL2是S-EL1,BL31也是S-EL1,他們使用相同的Transslation Regime,所以在BL2跳轉BL31的時候,需要disable MMU/i-cache,至于d-cache則無需disabled,但是如果你是BL2 load的BL31鏡像,那么在load完鏡像時,就需要flush d-cache

總結:

  • (1)當BL鏡像切換的時候,只需考慮是否disable MMU/i-cache, 無需考慮是否disable d-cache;
  • (2)當BL鏡像切換的時候,如果Transslation Regime發生了變化,則無需disable MMU/i-cache
  • (3)當BL鏡像切換的時候,如果Transslation Regime沒有發生變化,則需要disable MMU/i-cache
  • (4)例如uboot到kernel的切換,滿足步驟(3),所以需要disable MMU/i-cache

繼續思考

在鏡像切換的時候(程序切換的時候),為什么要關閉MMU? 為什么要關閉i-cache?

先回答第一個,為什么要關閉MMU?
因為程序1管理者程序1的頁表,它不可能去管理程序2的頁表。在剛進入程序2的時候,跳轉指向的是物理地址,所以也就要求在進入程序2時,需要disable MMU.

再回答第二個問題,什么也要關閉i-cache呢?
因為如果是僅僅MMU,i-cache依然也可以推測,它緩存的可能是已經過時了的指令。跳轉到程序2后再指向時,可能會崩潰。

總結

以上是生活随笔為你收集整理的思考: 什么时候需要disable MMU/i-cache/d-cache?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。