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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[思考]-32位的应用程序为什么不能跑64位的应用程序

發(fā)布時間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [思考]-32位的应用程序为什么不能跑64位的应用程序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在ARM文檔中,可以找到如下兩句話:

  • When the processor moves from a higher to a lower Exception level, the Execution state can stay the same, or it can switch from AArch64 to AArch32.
  • When moving from a lower to a higher Exception level, the Execution state can stay the same or switch from AArch32 to AArch64
    翻譯之后就是:
  • 如果從高的異常級別切換到低的異常級別,執(zhí)行狀態(tài)可以保持不變,也可以從aarch64切換到aarch32;
    例如從linux kernel切換到app,如果linux kernel是aarch64,那么app可以是aarch64或aarch32,如果linux kernel是aarch32,那么app只能是aarch32;
  • 如果從低的異常級別切換到高的異常級別,執(zhí)行狀態(tài)可以保持不變,也可以從aarch32切換到aarch64;
    例如從app切換到linux kernel,如果app是aarch64,那么linux kernel可以是aarch64或aarch32,如果app是aarch32,那么linux kernel可以是aarch64或aarch32;

其實(shí)也可以這樣總結(jié):高的異常級別的執(zhí)行狀態(tài),一定要大于等于低的異常級別的執(zhí)行狀態(tài); 即EL1的執(zhí)行狀態(tài)要大于等于EL0的執(zhí)行狀態(tài)…

那么ARM為什么會有這種設(shè)計(jì)或約束呢?
我們以linux kernel和app(EL1 <—> EL0)為例來看:
如果linux kernel是aarch64的,那么在linux kernel啟動和運(yùn)行時修改的ARM系統(tǒng)寄存器(如SCTLR\TTBLRx等),都是以aarch64修改的,這些寄存器的修改當(dāng)然也會map到aarch32上。
在系統(tǒng)切換app之后,linux kernel中修改的這些寄存器的屬性對aarch32/aarch64依然都生效。 故如果EL1是aarch64,那么EL0可以是aarch64或aarch32;

如果linux kernel是aarch32的,那么在linux kernel啟動和運(yùn)行時修改的ARM系統(tǒng)寄存器(如SCTLR\TTBLRx等),都是以aarch32修改的,這些寄存器的修改不會map到aarch64上。
在系統(tǒng)切換app之后,linux kernel中修改的這些寄存器的屬性僅對aarch32生效。 故如果EL1是aarch32,那么EL0只能是aarch32;

總結(jié)

以上是生活随笔為你收集整理的[思考]-32位的应用程序为什么不能跑64位的应用程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。