欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種多核環(huán)境下的補(bǔ)丁方法與補(bǔ)丁裝置的制作方法

文檔序號(hào):6578572閱讀:312來源:國(guó)知局
專利名稱:一種多核環(huán)境下的補(bǔ)丁方法與補(bǔ)丁裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及通信技術(shù)領(lǐng)域,特別涉及一種多核環(huán)境下的補(bǔ)丁方法與補(bǔ)丁 裝置。
背景技術(shù)
多核技術(shù)已經(jīng)成為處理器技術(shù)發(fā)展的新方向,目前主流處理器廠商的路
標(biāo)都是多核處理器。如RAZA公司推出的MIPS (Microprocessor Without Interlocked Pipeline Stages:無互鎖管線階段的處理器)架構(gòu)的XLR732處理器 有8個(gè)核,每個(gè)核包含4個(gè)硬件線程(虛擬CPU, VCPU),總共有32個(gè)VCPU, OCETON公司的MIPS架構(gòu)的Cavium5860處理器有16個(gè)核,每個(gè)核包含l個(gè) VCPU。
操作系統(tǒng)在多核處理器硬件平臺(tái)上一般有兩種構(gòu)架, 一種是SMP (Symm etrical Multi-Processing,對(duì)稱多處理)方式,另一種為AMP (Asymmetrical Multi-Processing,非對(duì)稱多處理)方式。SMP架構(gòu)顧名思義就是將多個(gè)內(nèi)核平 等看待,每個(gè)內(nèi)核運(yùn)行的操作系統(tǒng)相同,SMP只運(yùn)行一個(gè)操作系統(tǒng)映像,管 理所有VCPU; AMP架構(gòu)是將多個(gè)內(nèi)核區(qū)別看待,AMP的每個(gè)VCPU上都運(yùn)行 一個(gè)操作系統(tǒng)映像,按照任務(wù)劃分,各負(fù)其責(zé),在AMP模式下,為了節(jié)省內(nèi) 存資源,會(huì)將一些功能相同的VCPU操作系統(tǒng)映像的代碼段虛擬地址空間映射 到相同的物理地址空間上,實(shí)現(xiàn)多個(gè)VCPU共享代碼段。
熱補(bǔ)丁 (下文統(tǒng)稱為補(bǔ)丁)是電信軟件的一般要求,用于在系統(tǒng)運(yùn)行時(shí) 動(dòng)態(tài)修改程序,如進(jìn)行系統(tǒng)測(cè)試或修補(bǔ)軟件的缺陷,而不影響正常業(yè)務(wù)的運(yùn) 行?,F(xiàn)有基于單核環(huán)境下的補(bǔ)丁技術(shù)如下首先將補(bǔ)丁新函數(shù)寫在一個(gè)源文 件中,編譯成一個(gè)目標(biāo)文件,通過補(bǔ)丁制作工具,利用被打補(bǔ)丁原函數(shù)的可 執(zhí)行程序文件、歷史補(bǔ)丁文件,將目標(biāo)文件中的符號(hào)進(jìn)行重定位,生成一個(gè)
6補(bǔ)丁文件,通過加載工具把這個(gè)補(bǔ)丁文件加載到被打補(bǔ)丁原函數(shù)(下文簡(jiǎn)稱 為"補(bǔ)丁原函數(shù)")運(yùn)行的系統(tǒng)地址空間中,最后在補(bǔ)丁激活生效時(shí),將補(bǔ) 丁原函數(shù)的第一條指令修改為無條件跳轉(zhuǎn)指令,跳轉(zhuǎn)到補(bǔ)丁新函數(shù)地址。
在多核AMP共享代碼段環(huán)境下,如在所有的MIPS CPU中,緊跟在跳轉(zhuǎn) 指令后的指令即使跳轉(zhuǎn)指令執(zhí)行成功也會(huì)執(zhí)行,這條指令稱為跳轉(zhuǎn)延遲槽指 令。在補(bǔ)丁激活時(shí),需要將補(bǔ)丁原函數(shù)的第一條指令修改為無條件跳轉(zhuǎn)指令, 跳轉(zhuǎn)到補(bǔ)丁新函數(shù)地址,同時(shí)需要將被打補(bǔ)丁原函數(shù)的第二條指令,也就是 跳轉(zhuǎn)指令的延遲槽指令,修改為空操作指令。即多核AMP共享代碼段環(huán)境下, 補(bǔ)丁操作需要同時(shí)修改兩條指令,而在多核AMP共享代碼段環(huán)境下,對(duì)一個(gè) VCPU上的軟件打補(bǔ)丁,如果剛剛修改完被打補(bǔ)丁原函數(shù)的第一條指令,而這 個(gè)VCPU共享代碼段的其他VCPU剛好開始執(zhí)行補(bǔ)丁函數(shù),這時(shí)其他VCPU執(zhí) 行的補(bǔ)丁函數(shù)的第一條指令是補(bǔ)丁新函數(shù)的,第二條指令卻是補(bǔ)丁原函數(shù)的, 就會(huì)導(dǎo)致軟件邏輯混亂,出現(xiàn)錯(cuò)誤。
所以,在多核AMP共享代碼段環(huán)境下,對(duì)一個(gè)VCPU上的軟件打補(bǔ)丁,會(huì) 影響和這個(gè)VCPU共享代碼段的其它VCPU,如何保證共享代碼段的一組VCP U的補(bǔ)丁同時(shí)生效是多核AMP共享代碼段環(huán)境下補(bǔ)丁技術(shù)需要解決的問題。

發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種多核環(huán)境下的補(bǔ)丁方法與裝置,以實(shí)現(xiàn)多核環(huán)境 下補(bǔ)丁激活時(shí),共享代碼段的所有VCPU補(bǔ)丁同時(shí)生效。
一方面,本發(fā)明實(shí)施例提供了一種多核環(huán)境下的補(bǔ)丁方法,所述方法包 括向共享代碼段目標(biāo)虛擬CPU組中的每個(gè)目標(biāo)虛擬CPU發(fā)送核間不可屏蔽中 斷,使得所述目標(biāo)虛擬CPU響應(yīng)所述核間不可屏蔽中斷,并進(jìn)入補(bǔ)丁同步狀 態(tài);監(jiān)視所述目標(biāo)虛擬CPU的補(bǔ)丁同步狀態(tài),當(dāng)所有目標(biāo)虛擬CPU都進(jìn)入補(bǔ)丁 同步狀態(tài)后,將所述目標(biāo)虛擬CPU的被打補(bǔ)丁原函數(shù)的第一條指令修改為異 常指令,并向所有目標(biāo)虛擬CPU輸出補(bǔ)丁同步狀態(tài)結(jié)束通知,使得在被打補(bǔ) 丁原函數(shù)被執(zhí)行到異常指令所觸發(fā)的異常處理過程中,將被打補(bǔ)丁原函數(shù)跳轉(zhuǎn)到補(bǔ)丁新函數(shù)。
另一方面,本發(fā)明實(shí)施例提供了一種多核環(huán)境下的補(bǔ)丁方法,所述方法 包括根據(jù)接收的核間不可屏蔽中斷,關(guān)閉共享代碼段目標(biāo)虛擬CPU組中對(duì)
應(yīng)目標(biāo)虛擬CPU的中斷,并輸出所述目標(biāo)虛擬CPU已進(jìn)入補(bǔ)丁同步狀態(tài)的通
知;獲得補(bǔ)丁同步狀態(tài)結(jié)束通知后,刷新所述目標(biāo)虛擬CPU的指令緩存使補(bǔ) 丁生效,打開所述目標(biāo)虛擬CPU組中對(duì)應(yīng)目標(biāo)虛擬CPU的中斷;在被打補(bǔ)丁原 函數(shù)被執(zhí)行到異常指令所觸發(fā)的異常處理過程中,將被打補(bǔ)丁原函數(shù)跳轉(zhuǎn)到 補(bǔ)丁新函數(shù)。
又一方面,本發(fā)明實(shí)施例提供了一種多核環(huán)境下的補(bǔ)丁裝置,所述補(bǔ)丁 裝置包括不可屏蔽中斷發(fā)送單元,用于向共享代碼段目標(biāo)虛擬CPU組中的每個(gè) 目標(biāo)虛擬CPU發(fā)送核間不可屏蔽中斷;補(bǔ)丁同步狀態(tài)監(jiān)視單元,用于監(jiān)視所述 目標(biāo)虛擬CPU組中每個(gè)目標(biāo)虛擬CPU的補(bǔ)丁同步狀態(tài);補(bǔ)丁激活單元,用于當(dāng) 所有目標(biāo)虛擬CPU都進(jìn)入補(bǔ)丁同步狀態(tài)后,將所述目標(biāo)虛擬CPU的被打補(bǔ)丁原
函數(shù)的第一條指令修改為異常指令;補(bǔ)丁同步結(jié)束通知單元,用于當(dāng)所述補(bǔ) 丁激活單元完成所有被打補(bǔ)丁原函數(shù)的指令修改后,向所有目標(biāo)虛擬CPU輸
出補(bǔ)丁同步狀態(tài)結(jié)束通知。
再一方面,本發(fā)明實(shí)施例提供了一種多核環(huán)境下的補(bǔ)丁裝置,所述補(bǔ)丁
裝置包括不可屏蔽中斷響應(yīng)單元,用于根據(jù)接收的核間不可屏蔽中斷,關(guān) 閉共享代碼段目標(biāo)虛擬CPU組中對(duì)應(yīng)目標(biāo)虛擬CPU的中斷,輸出所述目標(biāo)虛擬 CPU進(jìn)入補(bǔ)丁同步狀態(tài)的通知;補(bǔ)丁生效單元,用于獲得補(bǔ)丁同步狀態(tài)結(jié)束 通知后,刷新所述目標(biāo)虛擬CPU的指令緩存使補(bǔ)丁生效,打開所述目標(biāo)虛擬
CPU組中對(duì)應(yīng)目標(biāo)虛擬CPU的中斷;異常處理單元,用于在被打補(bǔ)丁原函數(shù)被
執(zhí)行到異常指令所觸發(fā)的異常處理過程中,將被打補(bǔ)丁原函數(shù)跳轉(zhuǎn)到補(bǔ)丁新函數(shù)。
可見,本發(fā)明實(shí)施例的補(bǔ)丁方法與裝置中,通過核間不可屏蔽中斷的同
步方式實(shí)現(xiàn)了共享代碼段虛擬CPU的同步,以及在共享代碼段的所有目標(biāo)虛擬CPU都進(jìn)入補(bǔ)丁同步狀態(tài)后,將所有目標(biāo)虛擬CPU的被打補(bǔ)丁原函數(shù)的第一
條指令修改為異常指令,并在異常處理過程中將被打補(bǔ)丁原函數(shù)跳轉(zhuǎn)到補(bǔ)丁
新函數(shù),從而實(shí)現(xiàn)了多核環(huán)境下補(bǔ)丁激活時(shí),共享代碼段的所有虛擬CPU補(bǔ)
丁同時(shí)生效。并且,本發(fā)明實(shí)施例方案的核間不可屏蔽中斷的方式相對(duì)于現(xiàn) 有的核間同步消息方式,具有補(bǔ)丁激活時(shí)的同步時(shí)間開銷小,可靠性高的效 果。


圖l為本發(fā)明實(shí)施例的一種多核處理器邏輯示意圖2為本發(fā)明實(shí)施例管理VCPU的補(bǔ)丁裝置的原理框圖3為本發(fā)明實(shí)施例目標(biāo)VCPU的補(bǔ)丁裝置的原理框圖4為圖3的異常處理單元303的細(xì)化框圖5為本發(fā)明實(shí)施例的多核環(huán)境下的補(bǔ)丁方法流程示意圖6為本發(fā)明實(shí)施例的多核環(huán)境下的補(bǔ)丁方法流程示意圖7為圖6異常處理過程的細(xì)化流程示意圖8為本發(fā)明實(shí)施例的多核環(huán)境下的補(bǔ)丁方法的一種詳細(xì)實(shí)現(xiàn)流程圖; 圖9為本發(fā)明實(shí)施例一種多核環(huán)境下的補(bǔ)丁裝置進(jìn)行異常處理的一種詳 細(xì)實(shí)現(xiàn)流程圖10為本發(fā)明實(shí)施例一種多核環(huán)境下的補(bǔ)丁裝置進(jìn)行異常處理的另一種 詳細(xì)實(shí)現(xiàn)流程圖。
具體實(shí)施例方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā) 明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述, 顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于 本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲 得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。以下結(jié)合附圖對(duì)本發(fā)明具體實(shí)施方式
進(jìn)行詳細(xì)說明 實(shí)施例l:
本發(fā)明實(shí)施例提供一種多核環(huán)境下的補(bǔ)丁裝置。其中,本發(fā)明實(shí)施例的 補(bǔ)丁裝置應(yīng)用于多核AMP系統(tǒng),圖1為本實(shí)施例的一種多核AMP系統(tǒng)的邏輯示 意圖,如圖1所示,從邏輯層來看,最底層為多核處理器硬件平臺(tái),包括多個(gè)
VCPU,如VCPU0、 VCPU1、 VCPU2和VCPU3;中間層為操作系統(tǒng)層,每個(gè)VC PU上運(yùn)行獨(dú)立的操作系統(tǒng)RTOS;在操作系統(tǒng)層之上為APP應(yīng)用層。
本實(shí)施例的VCPU根據(jù)不同的功能分為管理VCPU和目標(biāo)VCPU,本實(shí)施例 中管理VCPU為VCPUO,共享代碼段的其他VCPU(VCPU1、 VCPU2和VCPU3) 為目標(biāo)VCPU,具有共享代碼段的多個(gè)VCPU形成目標(biāo)VCPU組。
管理VCPU關(guān)聯(lián)的補(bǔ)丁裝置(簡(jiǎn)稱管理VCPU的補(bǔ)丁裝置)對(duì)應(yīng)管理VCPU的 APP層,目標(biāo)VCPU關(guān)聯(lián)的補(bǔ)丁裝置(簡(jiǎn)稱目標(biāo)VCPU的補(bǔ)丁裝置)對(duì)應(yīng)目標(biāo)VCP U的APP層。管理VCPU的補(bǔ)丁裝置通過與目標(biāo)VCPU的補(bǔ)丁裝置進(jìn)行交互,實(shí)現(xiàn) 對(duì)目標(biāo)VCPU的補(bǔ)丁操作,使共享代碼段的所有目標(biāo)VCPU的補(bǔ)丁同步生效。
圖2為本發(fā)明實(shí)施例管理VCPU的補(bǔ)丁裝置的原理框圖。圖2的補(bǔ)丁裝置20包

不可屏蔽中斷發(fā)送單元201 ,用于向共享代碼段目標(biāo)虛擬CPU組中的每個(gè)目 標(biāo)虛擬CPU發(fā)送核間不可屏蔽中斷;應(yīng)當(dāng)理解的是,所述目標(biāo)虛擬CPU組中的每 個(gè)目標(biāo)虛擬CPU可以響應(yīng)所述核間不可屏蔽中斷,并進(jìn)入補(bǔ)丁同步狀態(tài);
補(bǔ)丁同步狀態(tài)監(jiān)視單元202 ,用于監(jiān)視所述目標(biāo)虛擬CPU組中每個(gè)目標(biāo)虛 擬CPU的補(bǔ)丁同步狀態(tài);
補(bǔ)丁激活單元203,用于當(dāng)所有目標(biāo)虛擬CPU都進(jìn)入補(bǔ)丁同步狀態(tài)后,將 所述目標(biāo)虛擬CPU的被打補(bǔ)丁原函數(shù)的第一條指令修改為異常指令;
這里的異常指令可以采用Break指令作為使被打補(bǔ)丁原函數(shù)陷入異常處理 的指令;在一些特定處理器下,也可以選擇一些非法指令(即在特定處理器
10不存在的指令)作為使被打補(bǔ)丁原函數(shù)陷入異常處理的指令。
補(bǔ)丁同步結(jié)束通知單元204,用于當(dāng)所述補(bǔ)丁激活單元完成所有被打補(bǔ)丁 原函數(shù)的指令修改后,向所有目標(biāo)虛擬CPU輸出補(bǔ)丁同步狀態(tài)結(jié)束通知。
應(yīng)當(dāng)理解的是,目標(biāo)虛擬CPU的補(bǔ)丁裝置獲知補(bǔ)丁同步狀態(tài)結(jié)束通知后, 會(huì)結(jié)束補(bǔ)丁同步狀態(tài),在被打補(bǔ)丁原函數(shù)被執(zhí)行到異常指令所觸發(fā)的異常處 理過程中,將被打補(bǔ)丁原函數(shù)跳轉(zhuǎn)到補(bǔ)丁新函數(shù)。換言之,即,在系統(tǒng)調(diào)用 被打補(bǔ)丁原函數(shù)陷入異常時(shí),通過異常處理流程實(shí)現(xiàn)補(bǔ)丁的完全生效。
可選地,本實(shí)施例的補(bǔ)丁裝置20進(jìn)一步包括存儲(chǔ)單元205,用于保存目 標(biāo)虛擬CPU的所有被打補(bǔ)丁原函數(shù)的信息;應(yīng)當(dāng)理解的是,這里的存儲(chǔ)單元 205可以為核間共享內(nèi)存,多核AMP系統(tǒng)中的所有VCPU均可以訪問。
在一種實(shí)現(xiàn)下,所述補(bǔ)丁激活單元203具體用于當(dāng)所有目標(biāo)虛擬CPU都進(jìn) 入補(bǔ)丁同步狀態(tài)后,根據(jù)從所述存儲(chǔ)單元中獲取的所有被打補(bǔ)丁原函數(shù)的信 息,將所有被打補(bǔ)丁原函數(shù)的第一條指令修改為異常指令。
可選地,所述存儲(chǔ)單元205還用于保存有核間同步信息,所述核間同步信 息包括第一共享變量、第二共享變量;
在一種實(shí)現(xiàn)下,所述補(bǔ)丁同步狀態(tài)監(jiān)視單元202具體用于判斷所述第一共 享變量的值是否等于共享代碼段目標(biāo)虛擬VCPU組中的目標(biāo)VCPU數(shù)量,當(dāng)?shù)?于時(shí),確定所有目標(biāo)虛擬VCPU都進(jìn)入補(bǔ)丁同步狀態(tài);
所述補(bǔ)丁同步結(jié)束通知單元204具體用于當(dāng)所述補(bǔ)丁激活單元完成所有 被打補(bǔ)丁原函數(shù)的指令修改后,將第二共享變量的值置位,以通知所有目標(biāo) 虛擬CPU結(jié)束補(bǔ)丁同步狀態(tài)。如果第二共享變量的值初始化為O,這里的置位 可以理解為將第二共享變量的值置為l,應(yīng)當(dāng)理解的是,本發(fā)明實(shí)施例包括但 不限于這種實(shí)現(xiàn)。
可見,本發(fā)明實(shí)施例的管理VCPU的補(bǔ)丁裝置中,通過核間不可屏蔽中斷 的同步方式實(shí)現(xiàn)了共享代碼段虛擬CPU的同步,以及在共享代碼段的所有目 標(biāo)虛擬CPU都進(jìn)入補(bǔ)丁同步狀態(tài)后,將所有目標(biāo)虛擬CPU的被打補(bǔ)丁原函數(shù)的第一條指令修改為異常指令,從而便于目標(biāo)VCPU的補(bǔ)丁裝置在異常處理過程
中將被打補(bǔ)丁原函數(shù)跳轉(zhuǎn)到補(bǔ)丁新函數(shù),從而實(shí)現(xiàn)了多核環(huán)境下補(bǔ)丁激活時(shí),
共享代碼段的所有虛擬CPU補(bǔ)丁同時(shí)生效。并且,本發(fā)明實(shí)施例方案的核間
不可屏蔽中斷的方式相對(duì)于現(xiàn)有的核間同步消息方式,具有補(bǔ)丁激活時(shí)的同 步時(shí)間開銷小,可靠性高的效果。
圖3為本發(fā)明實(shí)施例目標(biāo)VCPU的補(bǔ)丁裝置的原理框圖。圖3的補(bǔ)丁裝置30 包括
不可屏蔽中斷響應(yīng)單元301,用于根據(jù)接收的核間不可屏蔽中斷,關(guān)閉共 享代碼段目標(biāo)虛擬CPU組中對(duì)應(yīng)目標(biāo)虛擬CPU的中斷,輸出所述目標(biāo)虛擬CPU 進(jìn)入補(bǔ)丁同步狀態(tài)的通知;
應(yīng)當(dāng)理解的是,這里進(jìn)入補(bǔ)丁同步狀態(tài)即同步進(jìn)入中斷狀態(tài)。
補(bǔ)丁生效單元302,用于獲得補(bǔ)丁同步狀態(tài)結(jié)束通知后,刷新所述目標(biāo)虛 擬CPU的指令緩存使補(bǔ)丁生效,打開所述目標(biāo)虛擬CPU組中對(duì)應(yīng)目標(biāo)虛擬CPU 的中斷,從而結(jié)束補(bǔ)丁同步狀態(tài);
異常處理單元303,用于在被打補(bǔ)丁原函數(shù)被執(zhí)行到異常指令所觸發(fā)的異 常處理過程中,將被打補(bǔ)丁原函數(shù)跳轉(zhuǎn)到補(bǔ)丁新函數(shù)。
這里的被打補(bǔ)丁原函數(shù)被執(zhí)行到異常指令所觸發(fā)的異常處理過程,可以 理解為在系統(tǒng)調(diào)用被打補(bǔ)丁原函數(shù)陷入異常。
可選地,本實(shí)施例的補(bǔ)丁裝置30還包括存儲(chǔ)單元304,用于保存有核間 同步信息,所述核間同步信息包括第一共享變量、第二共享變量;應(yīng)當(dāng)理解 的是,這里的存儲(chǔ)單元304可以為核間共享內(nèi)存,多核AMP系統(tǒng)中的所有VCPU 均可以訪問。
在一種實(shí)現(xiàn)下,所述不可屏蔽中斷響應(yīng)單元301具體用于根據(jù)接收的核間 不可屏蔽中斷,關(guān)閉共享代碼段目標(biāo)虛擬CPU組中對(duì)應(yīng)目標(biāo)虛擬CPU的中斷, 并將該第一共享變量的值進(jìn)行加一處理,以表示所述目標(biāo)虛擬CPU進(jìn)入補(bǔ)丁 同步狀態(tài)。應(yīng)當(dāng)理解的是,這里的加一處理,僅是一種實(shí)現(xiàn),本發(fā)明實(shí)施例包括但不限于此。其中,如果每個(gè)目標(biāo)虛擬CPU都將該第一共享變量的值進(jìn)
行加一處理,則管理虛擬CPU可以通過判斷所述第一共享變量的值是否等于 共享代碼段目標(biāo)虛擬VCPU組中的目標(biāo)VCPU數(shù)量來確定所有目標(biāo)虛擬VCPU
是否都進(jìn)入補(bǔ)丁同步狀態(tài)。
在一種實(shí)現(xiàn)下,所述補(bǔ)丁生效單元302具體用于當(dāng)檢測(cè)到第二共享變量的 值為一時(shí),刷新所述目標(biāo)虛擬CPU的指令緩存使補(bǔ)丁生效,打開所述目標(biāo)虛 擬CPU組中對(duì)應(yīng)目標(biāo)虛擬CPU的中斷,從而結(jié)束補(bǔ)丁同步狀態(tài)。
圖4為圖3的異常處理單元303的一種細(xì)化框圖。本實(shí)施例的異常處理單元 303包括
調(diào)度判斷單元401 ,用于判斷所述共享代碼段目標(biāo)虛擬CPU組中的所有目 標(biāo)虛擬CPU的所有線程是否被調(diào)度了至少一次;
補(bǔ)丁新函數(shù)生效單元402,用于在所有線程被調(diào)度了至少一次,將補(bǔ)丁原 函數(shù)的第二條指令修改為空操作指令,將補(bǔ)丁原函數(shù)的第一條指令修改為無 條件跳轉(zhuǎn)到補(bǔ)丁新函數(shù)的指令,將異常處理的返回地址修改為補(bǔ)丁新函數(shù)的 地址;或者,用于在所有線程未被調(diào)度至少一次,將異常處理的返回地址修 改為補(bǔ)丁新函數(shù)的地址。
在一種實(shí)現(xiàn)下,調(diào)度判斷單元401為第一調(diào)度判斷單元,用于判斷所述補(bǔ) 丁生效后是否經(jīng)過了一預(yù)定時(shí)長(zhǎng);如果是,則確定所述共享代碼段目標(biāo)虛擬 CPU組中的所有目標(biāo)虛擬CPU的所有線程被調(diào)度了至少一次,如果否,則確定所 述共享代碼段目標(biāo)虛擬CPU組中的所有目標(biāo)虛擬CPU的所有線程未被調(diào)度至少 一次。這里的預(yù)定時(shí)長(zhǎng)可以是稍大于系統(tǒng)任務(wù)餓死時(shí)長(zhǎng)。
在另一種實(shí)現(xiàn)下,調(diào)度判斷單元401為第二調(diào)度判斷單元,用于判斷所述 共享代碼段目標(biāo)虛擬CPU組中的所有目標(biāo)虛擬CPU中最低優(yōu)先級(jí)的線程是否已 經(jīng)被調(diào)度;如果是,則確定所述共享代碼段目標(biāo)虛擬CPU組中的所有目標(biāo)虛 擬CPU的所有線程被調(diào)度了至少一次;如果否,則確定所述共享代碼段目標(biāo)虛擬 CPU組中的所有目標(biāo)虛擬CPU的所有線程未被調(diào)度至少一次??梢?,本發(fā)明實(shí)施例的目標(biāo)VCPU的補(bǔ)丁裝置中,通過核間不可屏蔽中斷 的同步方式實(shí)現(xiàn)了共享代碼段虛擬CPU的同步,以及在異常處理過程中將被
打補(bǔ)丁原函數(shù)跳轉(zhuǎn)到補(bǔ)丁新函數(shù),從而實(shí)現(xiàn)了多核環(huán)境下補(bǔ)丁激活時(shí),共享
代碼段的所有目標(biāo)虛擬CPU補(bǔ)丁同時(shí)生效。并且,本發(fā)明實(shí)施例方案的核間
不可屏蔽中斷的方式相對(duì)于現(xiàn)有的核間同步消息方式,具有補(bǔ)丁激活時(shí)的同 步時(shí)間開銷小,可靠性高的效果。
進(jìn)一步的,具體異常處理過程中,通過超時(shí)機(jī)制來判斷補(bǔ)丁完全生效的 時(shí)機(jī),或者,通過基于優(yōu)先級(jí)來判斷補(bǔ)丁完全生效的時(shí)機(jī),使得共享代碼段
的所有目標(biāo)虛擬CPU補(bǔ)丁同時(shí)生效后,再次調(diào)用被打補(bǔ)丁原函數(shù),不會(huì)陷入
異常,而是直接跳轉(zhuǎn)到補(bǔ)丁新函數(shù)地址開始執(zhí)行。本實(shí)施例的補(bǔ)丁裝置在等 待所有的線程都被調(diào)度了一次之后,再將被打補(bǔ)丁函數(shù)的指令進(jìn)行修改,使
被打補(bǔ)丁原函數(shù)跳轉(zhuǎn)到補(bǔ)丁新函數(shù),這種方式使得當(dāng)目標(biāo)VCPU不會(huì)出現(xiàn)某一
任務(wù)執(zhí)行到被打補(bǔ)丁原函數(shù)的第一條指令和第二條指令之間時(shí)被其他任務(wù)切
換出去的情況,從而解決了MIPS處理器下跳轉(zhuǎn)指令延遲槽對(duì)補(bǔ)丁激活的影響, 本實(shí)施例的補(bǔ)丁裝置可以支持產(chǎn)品在測(cè)試、上網(wǎng)運(yùn)行時(shí)BUG修復(fù)等補(bǔ)丁需求, 提升了產(chǎn)品的可服務(wù)性。
實(shí)施例2:
本實(shí)施例提供一種多核環(huán)境下的補(bǔ)丁方法,該多核環(huán)境的架構(gòu)可以參見 圖l,本實(shí)施例的補(bǔ)丁方法包括應(yīng)用于管理VCPU的補(bǔ)丁裝置的補(bǔ)丁方法以及 應(yīng)用于目標(biāo)VCPU的補(bǔ)丁裝置的補(bǔ)丁方法。本實(shí)施例的方法通過核間同步機(jī) 制,實(shí)現(xiàn)了對(duì)目標(biāo)VCPU的補(bǔ)丁同步激活,并在異常處理中實(shí)現(xiàn)目標(biāo)VCPU的補(bǔ) 丁生效。
圖5為本發(fā)明實(shí)施例的多核環(huán)境下的補(bǔ)丁方法流程示意圖,需要說明的 是,本實(shí)施例的補(bǔ)丁方法可以應(yīng)用于管理VCPU的補(bǔ)丁裝置,如圖5所示 步驟S501 、向共享代碼段目標(biāo)虛擬CPU組中的每個(gè)目標(biāo)虛擬CPU發(fā)送核間擬CPU響應(yīng)所述核間不可屏蔽中斷,并進(jìn)入
補(bǔ)丁同步狀態(tài);需要說明的是,這里的核間不可屏蔽中斷是一種指令,而非 消息。
步驟S502、監(jiān)視所述目標(biāo)虛擬CPU的補(bǔ)丁同步狀態(tài),當(dāng)所有目標(biāo)虛擬CPU 都進(jìn)入補(bǔ)丁同步狀態(tài)后,將所述目標(biāo)虛擬CPU的被打補(bǔ)丁原函數(shù)的第一條指 令修改為異常指令,并向所有目標(biāo)虛擬CPU輸出補(bǔ)丁同步狀態(tài)結(jié)束通知,使 得在被打補(bǔ)丁原函數(shù)被執(zhí)行到異常指令所觸發(fā)的異常處理過程中,將被打補(bǔ) 丁原函數(shù)跳轉(zhuǎn)到補(bǔ)丁新函數(shù)。
這里的異常指令可以采用Break指令作為使被打補(bǔ)丁原函數(shù)陷入異常處理 的指令;在一些特定處理器下,也可以選擇一些非法指令(即在特定處理器 不存在的指令)作為使被打補(bǔ)丁原函數(shù)陷入異常處理的指令。
可選地,該方法還包括獲取所述目標(biāo)虛擬CPU的被打補(bǔ)丁原函數(shù)的信 息,并將所述被打補(bǔ)丁原函數(shù)的信息保存于共享內(nèi)存中,針對(duì)共享內(nèi)存而言, 多核AMP系統(tǒng)中的所有VCPU均可以訪問。
在一種實(shí)現(xiàn)下,步驟S502中所述將所述目標(biāo)虛擬CPU的被打補(bǔ)丁原函數(shù) 的第一條指令修改為異常指令具體包括根據(jù)從所述共享內(nèi)存中獲取的所述 目標(biāo)虛擬CPU的被打補(bǔ)丁原函數(shù)的信息,將所述目標(biāo)虛擬CPU的被打補(bǔ)丁原函 數(shù)的第一條指令修改為異常指令。
可選地,所述共享內(nèi)存還保存有核間同步信息,所述核間同步信息包括 第一共享變量、第二共享變量;
在一種實(shí)現(xiàn)下,步驟S502中所述監(jiān)視所述目標(biāo)虛擬VCPU的補(bǔ)丁同步狀態(tài) 具體包括判斷所述第一共享變量的值是否等于共享代碼段目標(biāo)虛擬VCPU組 中的目標(biāo)VCPU數(shù)量,當(dāng)?shù)扔跁r(shí),確定所有目標(biāo)虛擬VCPU都進(jìn)入補(bǔ)丁同步狀 態(tài);反之,確定所有目標(biāo)虛擬VCPU未都進(jìn)入補(bǔ)丁同步狀態(tài)。
以及,在一種實(shí)現(xiàn)下,步驟S502中所述向所有目標(biāo)虛擬CPU輸出補(bǔ)丁同 步狀態(tài)結(jié)束通知包括將第二共享變量的值置位,以通知所有目標(biāo)虛擬CPU結(jié)束補(bǔ)丁同步狀態(tài)。如果第二共享變量的值初始化為O,這里的置位可以理解 為將第二共享變量的值置為l,應(yīng)當(dāng)理解的是,本發(fā)明實(shí)施例包括但不限于這 種實(shí)現(xiàn)。
可見,本發(fā)明實(shí)施例的補(bǔ)丁方法中,通過核間不可屏蔽中斷的同步方式
實(shí)現(xiàn)了共享代碼段虛擬CPU的同步,以及在共享代碼段的所有目標(biāo)虛擬CPU 都進(jìn)入補(bǔ)丁同步狀態(tài)后,將所有目標(biāo)虛擬CPU的被打補(bǔ)丁原函數(shù)的第一條指 令修改為異常指令,從而便于目標(biāo)VCPU的補(bǔ)丁裝置在異常處理過程中將被打
補(bǔ)丁原函數(shù)跳轉(zhuǎn)到補(bǔ)丁新函數(shù),從而實(shí)現(xiàn)了多核環(huán)境下補(bǔ)丁激活時(shí),共享代
碼段的所有虛擬CPU補(bǔ)丁同時(shí)生效。并且,本發(fā)明實(shí)施例方案的核間不可屏
蔽中斷的方式相對(duì)于現(xiàn)有的核間同步消息方式,具有補(bǔ)丁激活時(shí)的同步時(shí)間 開銷小,可靠性高的效果。
圖6為本發(fā)明實(shí)施例的另一種多核環(huán)境下的補(bǔ)丁方法流程示意圖,需要說 明的是,本實(shí)施例的補(bǔ)丁方法可以應(yīng)用于目標(biāo)VCPU的補(bǔ)丁裝置,如圖6所示, 該方法包括
步驟S601、根據(jù)接收的核間不可屏蔽中斷,關(guān)閉共享代碼段目標(biāo)虛擬CPU 組中對(duì)應(yīng)目標(biāo)虛擬CPU的中斷,并輸出所述目標(biāo)虛擬CPU己進(jìn)入補(bǔ)丁同步狀態(tài) 的通知;
應(yīng)當(dāng)理解的是,這里進(jìn)入補(bǔ)丁同步狀態(tài)即同步進(jìn)入中斷狀態(tài)。
步驟S602、獲得補(bǔ)丁同步狀態(tài)結(jié)束通知后,刷新所述目標(biāo)虛擬CPU的指 令緩存使補(bǔ)丁生效,打開所述目標(biāo)虛擬CPU組中對(duì)應(yīng)目標(biāo)虛擬CPU的中斷,從 而結(jié)束補(bǔ)丁同步狀態(tài);
步驟S603、在被打補(bǔ)丁原函數(shù)被執(zhí)行到異常指令所觸發(fā)的異常處理過程 中,將被打補(bǔ)丁原函數(shù)跳轉(zhuǎn)到補(bǔ)丁新函數(shù)。
這里的被打補(bǔ)丁原函數(shù)被執(zhí)行到異常指令所觸發(fā)的異常處理過程,可以 理解為在系統(tǒng)調(diào)用被打補(bǔ)丁原函數(shù)陷入異常。
在一種實(shí)現(xiàn)下,步驟S603中在異常處理過程中將被打補(bǔ)丁原函數(shù)跳轉(zhuǎn)到補(bǔ)丁新函數(shù),包括-
判斷所述共享代碼段目標(biāo)虛擬CPU組中的所有目標(biāo)虛擬CPU的所有線程 是否被調(diào)度了至少一次;如果所有線程被調(diào)度了至少一次,則將被打補(bǔ)丁原 函數(shù)的第二條指令修改為空操作指令,將被打補(bǔ)丁原函數(shù)的第一條指令修改 為無條件跳轉(zhuǎn)到補(bǔ)丁新函數(shù)的指令,將異常處理的返回地址修改為補(bǔ)丁新函 數(shù)的地址;反之,將異常處理的返回地址修改為補(bǔ)丁新函數(shù)的地址。
其中,判斷所述共享代碼段目標(biāo)虛擬CPU組中的所有目標(biāo)虛擬CPU的所有 線程是否被調(diào)度了至少一次,在一種實(shí)現(xiàn)下,包括-
判斷所述補(bǔ)丁生效后是否經(jīng)過了一預(yù)定時(shí)長(zhǎng);如果是,則確定所述共享 代碼段目標(biāo)虛擬CPU組中的所有虛擬CPU的所有線程被調(diào)度了至少一次,反 之,則確定所述共享代碼段目標(biāo)虛擬CPU組中的所有虛擬CPU的所有線程未被 調(diào)度至少一次。
其中,判斷所述共享代碼段目標(biāo)虛擬CPU組中的所有目標(biāo)虛擬CPU的所有 線程是否被調(diào)度了至少一次,在另一種實(shí)現(xiàn)下,可以包括-
判斷所述共享代碼段目標(biāo)虛擬CPU組中的所有目標(biāo)虛擬CPU中最低優(yōu)先 級(jí)的線程是否已經(jīng)被調(diào)度;如果是,則確定所述共享代碼段目標(biāo)虛擬CPU組 中的所有虛擬目標(biāo)CPU的所有線程被調(diào)度了至少一次;反之,則確定所述共享 代碼段目標(biāo)虛擬CPU組中的所有目標(biāo)虛擬CPU的所有線程未被調(diào)度至少一次。
可選地,申請(qǐng)共享內(nèi)存來保存有核間同步信息,所述核間同步信息包括 第一共享變量、第二共享變量;
步驟S601中所述輸出所述目標(biāo)虛擬CPU已進(jìn)入補(bǔ)丁同步狀態(tài)的通知包 括將第一共享變量的值進(jìn)行加一處理;以表示所述目標(biāo)虛擬CPU進(jìn)入補(bǔ)丁 同步狀態(tài)。應(yīng)當(dāng)理解的是,這里的加一處理,僅是一種實(shí)現(xiàn),本發(fā)明實(shí)施例 包括但不限于此。
步驟S602中所述獲得補(bǔ)丁同步狀態(tài)結(jié)束通知包括當(dāng)檢測(cè)到第二共享變 量的值為一時(shí),確定補(bǔ)丁同步狀態(tài)結(jié)束??梢姡景l(fā)明實(shí)施例的補(bǔ)丁方法中,通過核間不可屏蔽中斷的同步方式 實(shí)現(xiàn)了共享代碼段虛擬CPU的同步,以及在異常處理過程中將被打補(bǔ)丁原函 數(shù)跳轉(zhuǎn)到補(bǔ)丁新函數(shù),從而實(shí)現(xiàn)了多核環(huán)境下補(bǔ)丁激活時(shí),共享代碼段的所
有目標(biāo)虛擬CPU補(bǔ)丁同時(shí)生效。并且,本發(fā)明實(shí)施例方案的核間不可屏蔽中
斷的方式相對(duì)于現(xiàn)有的核間同步消息方式,具有補(bǔ)丁激活時(shí)的同步時(shí)間開銷 小,可靠性高的效果。
進(jìn)一步的,具體異常處理過程中,通過超時(shí)機(jī)制來判斷補(bǔ)丁完全生效的 時(shí)機(jī),或者,通過基于優(yōu)先級(jí)來判斷補(bǔ)丁完全生效的時(shí)機(jī),使得共享代碼段
的所有目標(biāo)虛擬CPU補(bǔ)丁同時(shí)生效后,再次調(diào)用被打補(bǔ)丁原函數(shù),不會(huì)陷入
異常,而是直接跳轉(zhuǎn)到補(bǔ)丁新函數(shù)地址開始執(zhí)行。本實(shí)施例的補(bǔ)丁裝置在等 待所有的線程都被調(diào)度了一次之后,再將被打補(bǔ)丁函數(shù)的指令進(jìn)行修改,使
被打補(bǔ)丁原函數(shù)跳轉(zhuǎn)到補(bǔ)丁新函數(shù),這種方式使得當(dāng)目標(biāo)VCPU不會(huì)出現(xiàn)某一
任務(wù)執(zhí)行到被打補(bǔ)丁原函數(shù)的第一條指令和第二條指令之間時(shí)被其他任務(wù)切
換出去的情況,從而解決了MIPS處理器下跳轉(zhuǎn)指令延遲槽對(duì)補(bǔ)丁激活的影響, 本實(shí)施例的補(bǔ)丁裝置可以支持產(chǎn)品在測(cè)試、上網(wǎng)運(yùn)行時(shí)BUG修復(fù)等補(bǔ)丁需求, 提升了產(chǎn)品的可服務(wù)性。
圖7為圖6異常處理過程的細(xì)化流程圖,本實(shí)施例通過以下步驟實(shí)現(xiàn)異常 處理。如圖7所示,包括
步驟S701、當(dāng)被打補(bǔ)丁原函數(shù)被執(zhí)行時(shí),執(zhí)行Break指令觸發(fā)異常,進(jìn)入 異常處理過程;
步驟S702、判斷目標(biāo)VCPU組中的所有目標(biāo)VCPU內(nèi)的所有線程是否被調(diào) 度了至少一次。
因?yàn)楸淮蜓a(bǔ)丁原函數(shù)的第一條指令己經(jīng)被修改成了Break指令,當(dāng)線程被 調(diào)度時(shí),如果執(zhí)行到被打補(bǔ)丁原函數(shù),則在第一條指令處就進(jìn)入異常處理, 在異常處理返回時(shí)返回到了補(bǔ)丁新函數(shù)地址(參見步驟S704),所以被調(diào)度 的線程不會(huì)停在被打補(bǔ)丁原函數(shù)的第二條指令處的,當(dāng)所有線程都被調(diào)度了一次后,說明所有線程沒有停留在被打補(bǔ)丁原函數(shù)的第二條指令處; 步驟S702的該判斷方法可以包括
(1) 超時(shí)判斷判斷目標(biāo)VCPU在補(bǔ)丁激活后是否經(jīng)過了一預(yù)定時(shí)長(zhǎng),如
果是,則確定目標(biāo)VCPU組中的所有VCPU的所有線程被調(diào)度了至少一次;
(2) 最低優(yōu)先級(jí)判斷判斷目標(biāo)VCPU組中的所有VCPU中最低優(yōu)先級(jí)的 線程是否被調(diào)度;如果是,則確定目標(biāo)VCPU組中的所有VCPU的所有線程被 調(diào)度了至少一次。
步驟S703、如果所有線程都被調(diào)度了至少一次,在異常處理過程中將被 打補(bǔ)丁原函數(shù)的第二條指令修改為空操作指令,將被打補(bǔ)丁原函數(shù)的第一條 指令修改為無條件跳轉(zhuǎn)到補(bǔ)丁新函數(shù)的指令,并進(jìn)入步驟S704;否則,直接 進(jìn)入步驟S704;
步驟S704、將異常處理的返回地址修改為補(bǔ)丁新函數(shù)的地址。
可見,本發(fā)明實(shí)施例的補(bǔ)丁方法通過核間消息機(jī)制保證所有VCPU的補(bǔ)丁 同時(shí)生效;利用異常處理機(jī)制,解決了MIPS環(huán)境下的指令延遲槽引起的問題; 在打補(bǔ)丁時(shí),被打補(bǔ)丁VCPU不需要同步等待,不中斷業(yè)務(wù)運(yùn)行。
圖8為本發(fā)明實(shí)施例的多核環(huán)境下的補(bǔ)丁方法的一種詳細(xì)實(shí)現(xiàn)流程圖,本 實(shí)施例的管理VCPU為VCPUO。如圖8所示
步驟S800、系統(tǒng)初始化。
VCPUO的補(bǔ)丁裝置申請(qǐng)一段核間共享內(nèi)存保存核間同步信息MCPAT一S
YN一INFO,用于在VCPUO和目標(biāo)VCPU組之間進(jìn)行同步。為了共享補(bǔ)丁激活
的信息,本發(fā)明實(shí)施例定義數(shù)據(jù)結(jié)構(gòu)MCPAT1SYN—INFO來保存核間同步信
息,VCPUO的補(bǔ)丁裝置和目標(biāo)VCPU組內(nèi)的目標(biāo)VCPU的補(bǔ)丁裝置都能夠查看
該數(shù)據(jù)結(jié)構(gòu)中共享變量的值,該數(shù)據(jù)結(jié)構(gòu)可以進(jìn)行如下定義 typedef struct tagMCPatSynlnfo
volatile VOSJJINT32 ulStartSynAckFlag; 〃共享變量A,表示進(jìn)入補(bǔ)丁同步狀態(tài)的VCPU的數(shù)目;
volatile VOSJJINT32 u正ndSynFlag; 〃共享變量B,如果置位則表示VC
PUO的補(bǔ)丁裝置完成了補(bǔ)丁激 活,此時(shí)目標(biāo)VCPU的補(bǔ)丁裝置 可以結(jié)束目標(biāo)VCPU的補(bǔ)丁同步 狀態(tài);
}MCPAT_SYN—INFO;
步驟S801 、 VCPUO的補(bǔ)丁裝置開始激活目標(biāo)VCPU的補(bǔ)丁裝置。 為了保證激活操作不被重入(被打斷),首先關(guān)閉VCPUO的中斷,不再
響應(yīng)中斷。
步驟S802、 VCPUO的補(bǔ)丁裝置申請(qǐng)一段共享內(nèi)存,將被打補(bǔ)丁原函數(shù)的 信息存放到該共享內(nèi)存中,使目標(biāo)VCPU的補(bǔ)丁裝置能夠和VCPUO的補(bǔ)丁裝置
一起配合完成補(bǔ)丁同步操作。具體包括以下步驟
(1) 、 VCPUO的補(bǔ)丁裝置獲取目標(biāo)VCPU的補(bǔ)丁裝置中保存的所有被打補(bǔ) 丁原函數(shù)的地址;
(2) 、 VCPUO的補(bǔ)丁裝置申請(qǐng)一段共享內(nèi)存;
(3) 、VCPU0的補(bǔ)丁裝置將所有被打補(bǔ)丁原函數(shù)的信息保存在共享內(nèi)存中, 本發(fā)明實(shí)施例中被打補(bǔ)丁原函數(shù)的信息采用數(shù)據(jù)結(jié)構(gòu)MCPAT一FUNC—NODE 來表示,包括函數(shù)地址、被打補(bǔ)丁原函數(shù)的第一/二條指令值、目標(biāo)VCPU 數(shù)目、當(dāng)前系統(tǒng)TICK值、VCPU狀態(tài)標(biāo)識(shí)初始化。該數(shù)據(jù)結(jié)構(gòu)可以定義如下
typedef struct tagMCPatFuncNode
VOS一UINT32 aulFuncPtr[N]; 〃補(bǔ)丁原函數(shù)地址,N表示一個(gè)補(bǔ)丁單元中
最大的補(bǔ)丁函數(shù)數(shù)目;
VOSJJINT32 aulFuncInsl[N]; 〃補(bǔ)丁原函數(shù)第一條指令,N表示一個(gè)補(bǔ)
丁單元中最大的補(bǔ)丁函數(shù)數(shù)目;
20VOS—UINT32 aulFuncIns2[N]; 〃補(bǔ)丁原函數(shù)第二條指令,N表示一個(gè)補(bǔ)
丁單元中最大的補(bǔ)丁函數(shù)數(shù)目;
VOS一UINT32 ulFlag; 〃補(bǔ)丁函數(shù)狀態(tài)標(biāo)識(shí)為0時(shí)表示可以將補(bǔ)丁原函
數(shù)的第一條指令修改為無條件跳轉(zhuǎn)指令(跳轉(zhuǎn) 至補(bǔ)丁新函數(shù)),將第二條指令修改為填充跳 轉(zhuǎn)指令延遲槽的NOP指令; VOS—UINT32 ulStartTick; 〃補(bǔ)丁函數(shù)激活時(shí)的系統(tǒng)TICK值; VOS—UINT8 aucVCPUFlag[N]; //VCPU狀態(tài)標(biāo)識(shí)N表示系統(tǒng)的VCPU
數(shù)目,每個(gè)字節(jié)表示一個(gè)VCPU,為l表示 對(duì)應(yīng)VCPU已經(jīng)滿足補(bǔ)丁完全生效的條件;
}MCPAT—FUNC—NODE;
(4)、 VCPUO的補(bǔ)丁裝置將共享內(nèi)存的地址保存在目標(biāo)VCPU組的共享指 針變量gjstShareFuncNode[Index]中,Index表示目標(biāo)VCPU組ID;
步驟S803、 VCPUO的補(bǔ)丁裝置將核間同步信息數(shù)據(jù)結(jié)構(gòu)MCPAT一SYN一I NFO中的域ulStartSynAckFlag、 ulEndSynFlag分別置為O,準(zhǔn)備進(jìn)行補(bǔ)丁同步;
步驟S804、 VCPUO的補(bǔ)丁裝置給所有目標(biāo)VCPU的補(bǔ)丁裝置發(fā)送一個(gè)不 可屏蔽中斷,以開始進(jìn)行核間補(bǔ)丁同步;
步驟S805、目標(biāo)VCPU的補(bǔ)丁裝置響應(yīng)VCPUO的補(bǔ)丁裝置發(fā)送的核間不 可屏蔽中斷,進(jìn)入中斷處理流程,關(guān)閉目標(biāo)VCPU的中斷,使目標(biāo)VCPU進(jìn)入 核間補(bǔ)丁同步狀態(tài);
步驟S806、目標(biāo)VCPU的補(bǔ)丁裝置將核間同步信息數(shù)據(jù)結(jié)構(gòu)MCPAT—SYN —INFO中的域ulStartSynAckFlag原子加l,以標(biāo)識(shí)自己己經(jīng)進(jìn)入同步狀態(tài);
步驟S807、 VCPUO的補(bǔ)丁裝置循環(huán)檢測(cè)核間同步信息數(shù)據(jù)結(jié)構(gòu)MCPAT一 SYN—INFO中的域ulStartSynAckFlag的值是否等于目標(biāo)VCPU數(shù)目,如果等于 目標(biāo)VCPU數(shù)目則表示所有目標(biāo)VCPU都已經(jīng)進(jìn)入補(bǔ)丁同步狀態(tài);
步驟S808、 VCPUO的補(bǔ)丁裝置將所有被打補(bǔ)丁原函數(shù)的第一條指令修改為異常指令(如Break斷點(diǎn)指令),以完成補(bǔ)丁激活,使得在被打補(bǔ)丁原函數(shù) 被執(zhí)行到異常指令所觸發(fā)的異常處理流程中實(shí)現(xiàn)將被打補(bǔ)丁原函數(shù)跳轉(zhuǎn)為補(bǔ) 丁新函數(shù);
步驟S809、 VCPUO的補(bǔ)丁裝置將核間同步信息數(shù)據(jù)結(jié)構(gòu)MCPAT—SYN—I NFO中的域ulEndSynFlag置為1 ,以通知所有目標(biāo)VCPU結(jié)束補(bǔ)丁同步操作;
步驟S810、 VCPUO的補(bǔ)丁裝置打開中斷,返回到調(diào)用補(bǔ)丁激活接口的指 令后,以結(jié)束補(bǔ)丁激活操作;
步驟S811 、目標(biāo)VCPU的補(bǔ)丁裝置死循環(huán)判斷核間同步信息數(shù)據(jù)結(jié)構(gòu)MC PAT_SYN—INFO中的域ulEndSynFlag是否等于l ,如果等于l則結(jié)束補(bǔ)丁同步;
步驟S812、目標(biāo)VCPU的補(bǔ)丁裝置刷新本地指令Cache,進(jìn)行補(bǔ)丁生效操
作;
步驟S813、目標(biāo)VCPU的補(bǔ)丁裝置打開目標(biāo)VCPU的中斷,中斷處理返回 至被中斷打斷的指令處,從而結(jié)束補(bǔ)丁同步。現(xiàn)在所有目標(biāo)VCPU的補(bǔ)丁同時(shí) 生效。
可見,本發(fā)明實(shí)施例的補(bǔ)丁方法,設(shè)置共享內(nèi)存保存核間同步信息以及 補(bǔ)丁原函數(shù)的信息,通過核間不可屏蔽中斷實(shí)現(xiàn)了管理VCPU和目標(biāo)VCPU之 間的補(bǔ)丁同步激活操作。
圖9為本發(fā)明實(shí)施例多核環(huán)境下的目標(biāo)VCPU的補(bǔ)丁裝置進(jìn)行異常處理的 一種詳細(xì)實(shí)現(xiàn)流程圖,如圖9所示
步驟S901、當(dāng)目標(biāo)VCPU在執(zhí)行至被打補(bǔ)丁原函數(shù)時(shí),會(huì)陷入Break指令 觸發(fā)異常,進(jìn)入異常處理流程
步驟S卯2、判斷發(fā)生異常的指令地址是否為被打補(bǔ)丁原函數(shù)地址以及發(fā) 生異常的指令是否是Break指令;如果發(fā)生異常的指令地址為被打補(bǔ)丁原函數(shù) 地址并且發(fā)生異常的指令為Break指令,則繼續(xù)進(jìn)入步驟S903進(jìn)行判斷,否則 進(jìn)入步驟S904啟動(dòng)常規(guī)的異常處理流程;
判斷發(fā)生異常的指令地址是否為補(bǔ)丁函數(shù)地址,包括判斷發(fā)生異常的指令地址是否在共享變量gjstShareFuncNode[index] (Index表示當(dāng)前VCPU的 組ID,以下同)指向的補(bǔ)丁信息結(jié)構(gòu)中;
步驟S903、判斷當(dāng)前VCPU中被打補(bǔ)丁函數(shù)從激活到現(xiàn)在是否已經(jīng)超時(shí) 如果己經(jīng)超時(shí),則繼續(xù)進(jìn)行補(bǔ)丁異常處理,將當(dāng)前VCPU標(biāo)記為已經(jīng)進(jìn)入 過超時(shí)處理,具體包括判斷gjstShareFuncNode[index]中的域aucVCPUFlag 中以當(dāng)前VCPU為下標(biāo)的數(shù)組元素的值是否等于O,是則置為l,表示該VCPU 已經(jīng)進(jìn)入過超時(shí)處理,同時(shí),將域ulFlag (ulFlag的初始值置為目標(biāo)VCPU組中 的VCPU數(shù)目)原子減l,表示又有一個(gè)VCPU已經(jīng)超時(shí); 如果未超時(shí),進(jìn)入步驟S908;
應(yīng)當(dāng)理解的是為了確保在修改被打補(bǔ)丁原函數(shù)的第二條指令時(shí),所有 的目標(biāo)VCPU上的所有線程的PC (指令寄存器)沒有停在被打補(bǔ)丁原函數(shù)的第 二條指令處,本實(shí)施例的方法假設(shè)系統(tǒng)在過了一段預(yù)設(shè)的時(shí)間后,所有的線 程都己經(jīng)被操作系統(tǒng)調(diào)度了至少一次,且所有的線程的PC (指令寄存器)沒 有停在補(bǔ)丁原函數(shù)的第二條指令處;
步驟S905、判斷是否目標(biāo)VCPU組內(nèi)的其他VCPU都已經(jīng)超時(shí),具體包括 判斷gjstShareFuncNode[index]中的域ulFlag的值是否等于O;是則進(jìn)入步驟S9 06對(duì)被打補(bǔ)丁原函數(shù)進(jìn)行修改,否則進(jìn)入步驟S908;
步驟S906、獲取gjstShareFuncNode[index]中保存的補(bǔ)丁信息,將補(bǔ)丁原 函數(shù)的第二條指令修改為空操作指令NOP;
步驟S907、將被打補(bǔ)丁原函數(shù)的第一條指令修改為無條件跳轉(zhuǎn)指令(跳 到補(bǔ)丁新函數(shù)地址),將gjpstShareFuncNode[index]所指向的保存補(bǔ)丁函數(shù)信 息的共享內(nèi)存釋放;
步驟S卯8、使補(bǔ)丁新函數(shù)生效將異常處理的返回地址修改為補(bǔ)丁新函 數(shù)的地址,打開中斷,以完成異常處理流程。
可見,本發(fā)明實(shí)施例的方法通過設(shè)置一個(gè)預(yù)定的時(shí)間來判斷所有的線程 是否已經(jīng)被操作系統(tǒng)調(diào)度了至少一次,并根據(jù)不同的情況進(jìn)行不同的異常處理。采用本實(shí)施例的異常處理機(jī)制,補(bǔ)丁會(huì)在設(shè)定的時(shí)長(zhǎng)后完全生效,再次
調(diào)用被打補(bǔ)丁函數(shù),不會(huì)陷入Break異常,而是直接跳轉(zhuǎn)到補(bǔ)丁新函數(shù)地址開 始執(zhí)行。
圖10為發(fā)明實(shí)施例多核環(huán)境下的目標(biāo)VCPU的補(bǔ)丁裝置進(jìn)行異常處理的 另一種詳細(xì)實(shí)現(xiàn)流程圖,如圖10所示
和圖9不同的是,圖9的步驟S903和步驟S905通過超時(shí)機(jī)制來判斷補(bǔ)丁完 全生效的時(shí)機(jī)。圖10的方法就是針對(duì)這種場(chǎng)景,利用嵌入式操作系統(tǒng)基于優(yōu) 先級(jí)的調(diào)度策略,如果最低優(yōu)先級(jí)的線程己經(jīng)被調(diào)度,說明VCPU上的所有線 程己經(jīng)被操作系統(tǒng)調(diào)度了一次。以下僅對(duì)和圖9的區(qū)別部分進(jìn)行描述
步驟S1003、針對(duì)當(dāng)前的目標(biāo)VCPU,判斷自補(bǔ)丁激活完成后,優(yōu)先級(jí)最 低的線程是否已經(jīng)被調(diào)度是則繼續(xù)進(jìn)行補(bǔ)丁異常處理,并將當(dāng)前VCPU標(biāo)記 為優(yōu)先級(jí)最低的線程已經(jīng)被調(diào)度,具體包括判斷gjstShareFuncNode[index] 中的域aucVCPUFlag中以當(dāng)前VCPU為下標(biāo)的數(shù)組元素的值是否等于O,是則 置為l,表示該VCPU最低優(yōu)先級(jí)的線程已經(jīng)被調(diào)度,同時(shí)將域ulFlag原子減l, 表示又有一個(gè)VCPU最低優(yōu)先級(jí)的線程已經(jīng)被調(diào)度;
否則進(jìn)入步驟S卯8;
步驟S1005、判斷目標(biāo)VCPU組內(nèi)的其他目標(biāo)VCPU的優(yōu)先級(jí)最低的線程 是否己經(jīng)被調(diào)度,具體包括判斷gjstShareFuncNode[index]中的域ulFlag的 值是否等于0;是則進(jìn)入步驟S906對(duì)補(bǔ)丁原函數(shù)進(jìn)行修改,否則進(jìn)入步驟S卯8;
可見,本發(fā)明實(shí)施例的方法根據(jù)最低優(yōu)先級(jí)的線程是否被調(diào)用而采用相 應(yīng)的異常處理。采用本實(shí)施例的異常處理機(jī)制能夠使補(bǔ)丁自動(dòng)生效,再次調(diào) 用被打補(bǔ)丁函數(shù),不會(huì)陷入Break異常,而是直接跳轉(zhuǎn)到補(bǔ)丁新函數(shù)地址開始 執(zhí)行。
綜上所述,本發(fā)明實(shí)施例的補(bǔ)丁方法通過核間不可屏蔽中斷的同步方式 解決了多核AMP共享代碼段環(huán)境下的補(bǔ)丁同步問題,通過異常處理機(jī)制解決 了MIPS處理器下跳轉(zhuǎn)指令延遲槽對(duì)補(bǔ)丁激活的影響,該方案使補(bǔ)丁激活時(shí)的同步時(shí)間開銷小,可靠性高,解決了MIPS處理器下跳轉(zhuǎn)指令延遲槽對(duì)補(bǔ)丁激
活的影響,可以支持產(chǎn)品在測(cè)試、上網(wǎng)運(yùn)行時(shí)BUG修復(fù)等補(bǔ)丁需求,提升了產(chǎn)品的可服務(wù)性。
需要說明的是
1、 本發(fā)明實(shí)施例解決了多核共享代碼段補(bǔ)丁的激活問題,同樣適用去激
活流程。區(qū)別在于在步驟S703,將補(bǔ)丁原函數(shù)的第二條指令還原,將補(bǔ)丁原函數(shù)的第一條指令還原;在步驟S卯6,將補(bǔ)丁原函數(shù)的第二條指令還原;在步驟S907,將補(bǔ)丁原函數(shù)的第一條指令還原。
2、 本發(fā)明實(shí)施例采用不可屏蔽中斷實(shí)現(xiàn)多核補(bǔ)丁的核間同步,在嵌入式
多核AMP應(yīng)用中,還可以采用下面的方案核間中斷(IPI)在有些廠商的多
核處理器中都支持,通過在系統(tǒng)中為多核補(bǔ)丁的核間同步保留一個(gè)核間中斷
號(hào),系統(tǒng)的關(guān)中斷接口不關(guān)閉這個(gè)中斷,實(shí)現(xiàn)不可屏蔽中斷的功能,在一些沒有不可屏蔽中斷特性的處理器上可以應(yīng)用。
3、 本發(fā)明實(shí)施例采用Break指令作為使補(bǔ)丁原函數(shù)陷入異常處理的指令,在一些特定處理器下,也可以選擇一些非法指令(在特定處理器不存在的指令)作為使補(bǔ)丁原函數(shù)陷入異常處理的指令,然后在系統(tǒng)調(diào)用補(bǔ)丁原函數(shù)陷入異常時(shí),通過相同的異常處理流程,實(shí)現(xiàn)補(bǔ)丁的完全生效。
4、 本發(fā)明實(shí)施例通過核間不可屏蔽中斷方式實(shí)現(xiàn)多核補(bǔ)丁同步的方案,可以在任何多核AMP模式的系統(tǒng)中應(yīng)用,還可以用于其他非補(bǔ)丁功能的核間同步需求。
5、 本發(fā)明實(shí)施例中通過異常處理機(jī)制解決MIPS處理器延遲槽對(duì)補(bǔ)丁激活的影響的方案,可以解決單核多任務(wù)環(huán)境下的MIPS處理器延遲槽對(duì)補(bǔ)丁激活的影響的問題;也可以解決其他存在跳轉(zhuǎn)指令延遲槽的處理器環(huán)境下補(bǔ)丁激活的問題;還可以用于解決PowerPC等環(huán)境下補(bǔ)丁長(zhǎng)跳轉(zhuǎn)的問題(需要通過兩條指令跳轉(zhuǎn)到更大的地址空間中,和延遲槽的影響類似)。
6、 前面實(shí)施例描述的多核環(huán)境下的補(bǔ)丁裝置,也可以理解為集成有補(bǔ)丁功能的VCPU。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述方法實(shí)施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成,前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),執(zhí)行包括上述方法實(shí)施例的步驟,而前述
的存儲(chǔ)介質(zhì)包括ROM、 RAM、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
最后應(yīng)說明的是以上實(shí)施例僅用以說明本發(fā)明實(shí)施例的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本發(fā)明實(shí)施例進(jìn)行了詳細(xì)的說明,本領(lǐng)
域的普通技術(shù)人員應(yīng)當(dāng)理解其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明實(shí)施例各實(shí)施例技術(shù)方案的精神和范圍。
2權(quán)利要求
1、一種多核環(huán)境下的補(bǔ)丁方法,其特征在于,所述方法包括向共享代碼段目標(biāo)虛擬CPU組中的每個(gè)目標(biāo)虛擬CPU發(fā)送核間不可屏蔽中斷,使得所述目標(biāo)虛擬CPU響應(yīng)所述核間不可屏蔽中斷,并進(jìn)入補(bǔ)丁同步狀態(tài);監(jiān)視所述目標(biāo)虛擬CPU的補(bǔ)丁同步狀態(tài),當(dāng)所有目標(biāo)虛擬CPU都進(jìn)入補(bǔ)丁同步狀態(tài)后,將所述目標(biāo)虛擬CPU的被打補(bǔ)丁原函數(shù)的第一條指令修改為異常指令,并向所有目標(biāo)虛擬CPU輸出補(bǔ)丁同步狀態(tài)結(jié)束通知,使得在被打補(bǔ)丁原函數(shù)被執(zhí)行到異常指令所觸發(fā)的異常處理過程中,將被打補(bǔ)丁原函數(shù)跳轉(zhuǎn)到補(bǔ)丁新函數(shù)。
2、 根據(jù)權(quán)利要求l所述的方法,其特征在于,所述方法還包括-獲取所述目標(biāo)虛擬CPU的被打補(bǔ)丁原函數(shù)的信息,并將所述被打補(bǔ)丁原函數(shù)的信息保存于共享內(nèi)存中;所述將所述目標(biāo)虛擬CPU的被打補(bǔ)丁原函數(shù)的第一條指令修改為異常指令包括-根據(jù)從所述共享內(nèi)存中獲取的所述目標(biāo)虛擬CPU的被打補(bǔ)丁原函數(shù)的信 息,將所述目標(biāo)虛擬CPU的被打補(bǔ)丁原函數(shù)的第一條指令修改為異常指令。
3、 一種多核環(huán)境下的補(bǔ)丁方法,其特征在于,所述方法包括 根據(jù)接收的核間不可屏蔽中斷,關(guān)閉共享代碼段目標(biāo)虛擬CPU組中對(duì)應(yīng)目標(biāo)虛擬CPU的中斷,并輸出所述目標(biāo)虛擬CPU已進(jìn)入補(bǔ)丁同步狀態(tài)的通知; 獲得補(bǔ)丁同步狀態(tài)結(jié)束通知后,刷新所述目標(biāo)虛擬CPU的指令緩存使補(bǔ)丁生效,打開所述目標(biāo)虛擬CPU組中對(duì)應(yīng)目標(biāo)虛擬CPU的中斷;在被打補(bǔ)丁原函數(shù)被執(zhí)行到異常指令所觸發(fā)的異常處理過程中,將被打補(bǔ)丁原函數(shù)跳轉(zhuǎn)到補(bǔ)丁新函數(shù)。
4、 根據(jù)權(quán)利要求3所述的方法,其特征在于,所述在異常處理過程中將 被打補(bǔ)丁原函數(shù)跳轉(zhuǎn)到補(bǔ)丁新函數(shù),包括判斷所述共享代碼段目標(biāo)虛擬CPU組中的所有目標(biāo)虛擬CPU的所有線程 是否被調(diào)度了至少一次;如果所有線程被調(diào)度了至少一次,則將被打補(bǔ)丁原函數(shù)的第二條指令修 改為空操作指令,將被打補(bǔ)丁原函數(shù)的第一條指令修改為無條件跳轉(zhuǎn)到補(bǔ)丁 新函數(shù)的指令,將異常處理的返回地址修改為補(bǔ)丁新函數(shù)的地址;否則,將 異常處理的返回地址修改為補(bǔ)丁新函數(shù)的地址。
5、 根據(jù)權(quán)利要求4所述的方法,其特征在于,判斷所述共享代碼段目標(biāo) 虛擬CPU組中的所有目標(biāo)虛擬CPU的所有線程是否被調(diào)度了至少一次包括判斷所述補(bǔ)丁生效后是否經(jīng)過了一預(yù)定時(shí)長(zhǎng);如果是,則確定所述共享 代碼段目標(biāo)虛擬CPU組中的所有虛擬CPU的所有線程被調(diào)度了至少一次。
6、 根據(jù)權(quán)利要求4所述的方法,其特征在于,判斷所述共享代碼段目標(biāo) 虛擬CPU組中的所有目標(biāo)虛擬CPU的所有線程是否被調(diào)度了至少一次包括判斷所述共享代碼段目標(biāo)虛擬CPU組中的所有目標(biāo)虛擬CPU中最低優(yōu)先 級(jí)的線程是否已經(jīng)被調(diào)度;如果是,則確定所述共享代碼段目標(biāo)虛擬CPU組 中的所有虛擬目標(biāo)CPU的所有線程被調(diào)度了至少一次。
7、 一種多核環(huán)境下的補(bǔ)丁裝置,其特征在于,所述補(bǔ)丁裝置包括 不可屏蔽中斷發(fā)送單元,用于向共享代碼段目標(biāo)虛擬CPU組中的每個(gè)目標(biāo)虛擬CPU發(fā)送核間不可屏蔽中斷;補(bǔ)丁同步狀態(tài)監(jiān)視單元,用于監(jiān)視所述目標(biāo)虛擬CPU組中每個(gè)目標(biāo)虛擬 CPU的補(bǔ)丁同步狀態(tài);補(bǔ)丁激活單元,用于當(dāng)所有目標(biāo)虛擬CPU都進(jìn)入補(bǔ)丁同步狀態(tài)后,將所 述目標(biāo)虛擬CPU的被打補(bǔ)丁原函數(shù)的第一條指令修改為異常指令;補(bǔ)丁同步結(jié)束通知單元,用于當(dāng)所述補(bǔ)丁激活單元完成所有被打補(bǔ)丁原函數(shù)的指令修改后,向所有目標(biāo)虛擬CPU輸出補(bǔ)丁同步狀態(tài)結(jié)束通知。
8、 根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述補(bǔ)丁裝置進(jìn)一步包括 存儲(chǔ)單元,用于保存目標(biāo)虛擬CPU的所有被打補(bǔ)丁原函數(shù)的信息;所述補(bǔ)丁激活單元具體用于當(dāng)所有目標(biāo)虛擬CPU都進(jìn)入補(bǔ)丁同步狀態(tài)后,根據(jù)從所述存儲(chǔ)單元中獲取的所有被打補(bǔ)丁原函數(shù)的信息,將所有被打 補(bǔ)丁原函數(shù)的第一條指令修改為異常指令。
9、 一種多核環(huán)境下的補(bǔ)丁裝置,其特征在于,所述補(bǔ)丁裝置包括 不可屏蔽中斷響應(yīng)單元,用于根據(jù)接收的核間不可屏蔽中斷,關(guān)閉共享代碼段目標(biāo)虛擬CPU組中對(duì)應(yīng)目標(biāo)虛擬CPU的中斷,輸出所述目標(biāo)虛擬CPU 進(jìn)入補(bǔ)丁同步狀態(tài)的通知;補(bǔ)丁生效單元,用于獲得補(bǔ)丁同步狀態(tài)結(jié)束通知后,刷新所述目標(biāo)虛擬 CPU的指令緩存使補(bǔ)丁生效,打開所述目標(biāo)虛擬CPU組中對(duì)應(yīng)目標(biāo)虛擬CPU 的中斷;異常處理單元,用于在被打補(bǔ)丁原函數(shù)被執(zhí)行到異常指令所觸發(fā)的異常 處理過程中,將被打補(bǔ)丁原函數(shù)跳轉(zhuǎn)到補(bǔ)丁新函數(shù)。
10、 根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述異常處理單元包括 調(diào)度判斷單元,用于判斷所述共享代碼段目標(biāo)虛擬CPU組中的所有目標(biāo)虛擬CPU的所有線程是否被調(diào)度了至少一次;補(bǔ)丁新函數(shù)生效單元,用于在所有線程被調(diào)度了至少一次,將被打補(bǔ)丁原 函數(shù)的第二條指令修改為空操作指令,將被打補(bǔ)丁原函數(shù)的第一條指令修改 為無條件跳轉(zhuǎn)到補(bǔ)丁新函數(shù)的指令,將異常處理的返回地址修改為補(bǔ)丁新函 數(shù)的地址;或者,用于在所有線程未被調(diào)度至少一次,將異常處理的返回地 址修改為補(bǔ)丁新函數(shù)的地址。
11、 根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述調(diào)度判斷單元為第一調(diào)度判斷單元,用于判斷所述補(bǔ)丁生效后是否 經(jīng)過了一預(yù)定時(shí)長(zhǎng);如果是,則確定所述共享代碼段目標(biāo)虛擬CPU組中的所有 目標(biāo)虛擬CPU的所有線程被調(diào)度了至少一次。
12、 根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述調(diào)度判斷單元為第二調(diào)度判斷單元,用于判斷所述共享代碼段目標(biāo)虛擬CPU組中的所有目標(biāo)虛擬CPU中最低優(yōu)先級(jí)的線程是否已經(jīng)被調(diào)度;如果是, 則確定所述共享代碼段目標(biāo)虛擬CPU組中的所有目標(biāo)虛擬CPU的所有線程被調(diào) 度了至少一次。
全文摘要
本發(fā)明實(shí)施例提供一種多核環(huán)境下的補(bǔ)丁方法與裝置,所述方法包括向共享代碼段目標(biāo)虛擬CPU組中的每個(gè)目標(biāo)虛擬CPU發(fā)送核間不可屏蔽中斷,使得所述目標(biāo)虛擬CPU響應(yīng)所述核間不可屏蔽中斷,并進(jìn)入補(bǔ)丁同步狀態(tài);監(jiān)視所述目標(biāo)虛擬CPU的補(bǔ)丁同步狀態(tài),當(dāng)所有目標(biāo)虛擬CPU都進(jìn)入補(bǔ)丁同步狀態(tài)后,將所述目標(biāo)虛擬CPU的被打補(bǔ)丁原函數(shù)的第一條指令修改為異常指令,并向所有目標(biāo)虛擬CPU輸出補(bǔ)丁同步狀態(tài)結(jié)束通知,使得在被打補(bǔ)丁原函數(shù)被執(zhí)行到異常指令所觸發(fā)的異常處理過程中,將被打補(bǔ)丁原函數(shù)跳轉(zhuǎn)到補(bǔ)丁新函數(shù)。本發(fā)明實(shí)施例的方法與裝置采用核間不可屏蔽中斷的同步方式實(shí)現(xiàn)共享代碼段的目標(biāo)虛擬CPU的補(bǔ)丁同步激活,在異常處理過程中實(shí)現(xiàn)補(bǔ)丁的完全生效。
文檔編號(hào)G06F9/445GK101561764SQ20091014536
公開日2009年10月21日 申請(qǐng)日期2009年5月18日 優(yōu)先權(quán)日2009年5月18日
發(fā)明者鵬 葉, 殷羅英 申請(qǐng)人:華為技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
平远县| 霍山县| 长泰县| 锡林浩特市| 宝坻区| 静安区| 南郑县| 宝山区| 武宁县| 青河县| 庆云县| 基隆市| 兰西县| 汤阴县| 修武县| 海盐县| 潜江市| 湘西| 晋州市| 新龙县| 蒙山县| 微山县| 新平| 开江县| 吴江市| 徐闻县| 宜君县| 来安县| 罗定市| 曲麻莱县| 孟州市| 孝感市| 龙山县| 三亚市| 屏东市| 新野县| 嘉禾县| 荃湾区| 新昌县| 巢湖市| 平乐县|