最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

淺談二進(jìn)制翻譯軟件架構(gòu)

2023-04-06 00:04 作者:范文捷  | 我要投稿

國(guó)產(chǎn)指令集架構(gòu)處理器要想獲得足量的軟件資源,通過(guò)二進(jìn)制翻譯挖 Wintel 聯(lián)盟軟件生態(tài)的墻角不失為一條可行之策。


二進(jìn)制翻譯的目標(biāo)

目前二進(jìn)制翻譯有 2 種方案:以完整的硬件體系系統(tǒng)為目標(biāo)的模擬,以某種指令架構(gòu)操作系統(tǒng)應(yīng)用接口為目標(biāo)的模擬。前者的代表有 Qemu 完全系統(tǒng)模式、Bochs 等,后者的代表有 exagear、Qemu 用戶模式等。由于前者主要用于操作系統(tǒng)內(nèi)核驗(yàn)證等操作,且性能損耗相對(duì)較大,因此不在本文討論之列。本文主要就后者的軟件架構(gòu)進(jìn)行討論。目前業(yè)界的主流做法是,先通過(guò)二進(jìn)制翻譯模擬目標(biāo)指令架構(gòu) x86 的 Linux 系統(tǒng),再通過(guò) Wine 的方式兼容 Wintel 應(yīng)用,然而這種架構(gòu)雖然簡(jiǎn)單明了,但并非最優(yōu)。

在討論此問(wèn)題之前,要首先確定目標(biāo)是什么,以目標(biāo)為指引高屋建瓴的看待此問(wèn)題,而非單純的逐個(gè)擊破各個(gè)模塊所遇到的問(wèn)題。以目標(biāo)導(dǎo)向而非任務(wù)導(dǎo)向去解決此問(wèn)題。問(wèn)題是什么?模擬 Wintel 軟件運(yùn)行的環(huán)境!既然如此,為什么要先模擬目標(biāo)指令架構(gòu) x86 的 Linux 系統(tǒng),而不直接一步到位模擬 x86 的 Win32 系統(tǒng)呢?


二進(jìn)制翻譯的架構(gòu)

對(duì)于軟件架構(gòu)而言,越是底層的架構(gòu)層級(jí),對(duì)性能損耗的要求越是嚴(yán)格,比如處于最底層的 Linux 內(nèi)核,就需要通過(guò)匯編等手段優(yōu)化性能到極致。對(duì)于整個(gè)軟件的單位任務(wù)運(yùn)行時(shí)間,可用下列公式描述。

其中 t 是某一層執(zhí)行單位任務(wù)所需時(shí)間。k 是某一層的執(zhí)行時(shí)間損耗比,是一個(gè)大于 1 的常數(shù)。

目前主流的二進(jìn)制翻譯架構(gòu),從下到上依次是

Linux (Host) -> ISA Translator -> API Translator -> Emulated App

然而這樣的架構(gòu)存在不足,就是指令翻譯層(ISA Translator)的執(zhí)行時(shí)間損耗比太大,導(dǎo)致在其上的各層需要承擔(dān)其帶來(lái)的時(shí)間損耗。因此,以下架構(gòu)要明顯優(yōu)于上述架構(gòu)。

Linux (Host) -> API Translator -> ISA Translator -> Emulated App

也就是通過(guò)透?jìng)鲗⒈荒M應(yīng)用的 API 調(diào)用透?jìng)鞯奖緳C(jī)代碼執(zhí)行。


架構(gòu)的具體細(xì)節(jié)設(shè)計(jì)

若針對(duì)二進(jìn)制翻譯進(jìn)行業(yè)務(wù)側(cè)性能分析,其所耗費(fèi)的時(shí)間可以用以下公式表示?

其中 k 表示時(shí)間損耗比,是模擬速率的倒數(shù)。λ 是模擬比,表示被模擬應(yīng)用單位任務(wù)中,需要通過(guò)指令翻譯層的執(zhí)行代碼的比例。

比如,若采用全模擬,則 λ 為 0,指令翻譯模擬速率若為 0.5,單位任務(wù)耗費(fèi)的單位時(shí)間數(shù)為 2。若采用透?jìng)鲗⒛M比降至 0.3,哪怕模擬速率只有前者的一半 0.25,單位耗費(fèi)的單位時(shí)間數(shù)為 1.9,明顯優(yōu)于前者,這也是為什么選擇合適的接口進(jìn)行透?jìng)骺梢赃_(dá)到事半功倍的效果。。

模擬比在具體實(shí)現(xiàn)上,與透?jìng)髡{(diào)用的 API 相關(guān)。倘若按照常規(guī)架構(gòu),那么能透?jìng)鞯挠?libc 等 Linux 相對(duì)底層的 API,而由于 Linux 的 API 設(shè)計(jì)以追求開(kāi)發(fā)者自由為原則,導(dǎo)致多為細(xì)粒度接口,針對(duì)細(xì)粒度接口的透?jìng)鲙?lái)的收益與透?jìng)魉鶐?lái)的損耗相比,收益并不明顯。

那么如何降低模擬比?還是回到最初的問(wèn)題,要高屋建瓴的看待整個(gè)任務(wù)目標(biāo),而非針對(duì)獨(dú)立任務(wù)各個(gè)擊破。既然任務(wù)目標(biāo)是高性能模擬 Wintel 應(yīng)用,那么可以選擇合適的 Win32 接口進(jìn)行透?jìng)?。由?Win32 接口的實(shí)現(xiàn)粒度相比 Linux 的明顯粗,因此透?jìng)?Win32 接口帶來(lái)的收益對(duì)模擬比的降低明顯高于透?jìng)?Linux 接口。

盡管如此,要想大幅降低模擬比,還是要對(duì)被模擬的系統(tǒng)做深度分析。由于 Win32 應(yīng)用大多為有圖形界面的應(yīng)用,因此從 Win32 圖形界面入手,可以快速尋求出解決方案。Win32 圖形界面為消息回調(diào)機(jī)制,看似是應(yīng)用端通過(guò)循環(huán)輪詢消息,實(shí)際則是 Nt 內(nèi)核將消息反饋給應(yīng)用端進(jìn)行處理,應(yīng)用端圖形界面相關(guān)繪制操作,會(huì)根據(jù)特定數(shù)據(jù)結(jié)構(gòu)序列化為數(shù)據(jù),交由 Nt 內(nèi)核異步執(zhí)行。同樣在 Linux 平臺(tái),X11 協(xié)議也是將消息序列化為數(shù)據(jù),傳遞給下一層異步執(zhí)行。也就是說(shuō),完全可以做到應(yīng)用端與底層的解耦,從而降低模擬比。不同于 API 直接調(diào)用,消息序列化數(shù)據(jù)與指令無(wú)關(guān),也就是說(shuō),被模擬的 x86 應(yīng)用序列化的消息,交由 RISC-V 指令實(shí)現(xiàn)的內(nèi)核依然可以正確繪制。同理,針對(duì)圖形底層渲染接口亦是如此。

由此舉一反三,在設(shè)計(jì)二進(jìn)制翻譯軟件的時(shí)候,被模擬應(yīng)用、二進(jìn)制翻譯器、本機(jī)庫(kù)之間也可通過(guò)消息序列化傳遞交互。并且 3 個(gè)部分位于同一線程的 3 個(gè)不同協(xié)程內(nèi),通過(guò)協(xié)程切換與消息傳遞交互。這便是二進(jìn)制翻譯領(lǐng)域革命性的架構(gòu) —— 奇美拉架構(gòu)。


淺談二進(jìn)制翻譯軟件架構(gòu)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
漯河市| 黑龙江省| 南靖县| 大安市| 志丹县| 武义县| 和林格尔县| 临漳县| 茌平县| 阜阳市| 沂水县| 磐石市| 江都市| 宜兴市| 大丰市| 建昌县| 曲阜市| 禹城市| 福泉市| 岫岩| 长岛县| 桑植县| 岗巴县| 金坛市| 张家川| 湘西| 忻城县| 湘乡市| 石狮市| 岳阳市| 通山县| 贺州市| 江阴市| 论坛| 玛纳斯县| 青铜峡市| 日喀则市| 济南市| 赣州市| 于都县| 高安市|