董 燕,黃 晨,王小麗,虞礪琨,于 倩
嵌入式軟件研制過程中,廣泛采用中斷服務(wù)機(jī)制來(lái)實(shí)現(xiàn)任務(wù)需求,但中斷系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)過程中很容易引入資源訪問沖突錯(cuò)誤.由于中斷觸發(fā)的隨機(jī)性和不確定性,動(dòng)態(tài)測(cè)試過程中難以發(fā)現(xiàn)和定位該類問題,造成軟件相關(guān)的安全性可靠性測(cè)試降低,加大了軟件維護(hù)成本,實(shí)踐表明航天嵌入式軟件后期測(cè)試發(fā)現(xiàn)問題至少50%為中斷沖突問題[1].因此在軟件設(shè)計(jì)及靜態(tài)測(cè)試階段進(jìn)行中斷沖突分析是十分有必要的.
目前,中斷沖突技術(shù)及相關(guān)的工具的研究日漸增多[2-3],但是大多數(shù)還停留在理論研究階段,實(shí)際進(jìn)行應(yīng)用的還較少,文獻(xiàn)[4]重點(diǎn)針對(duì)單變量訪問序模式,基于抽象解釋,提出了一種支持過程間分析、中斷并發(fā)分析的高效檢測(cè)方法,但由于相關(guān)的沖突對(duì)象和場(chǎng)景識(shí)別不夠充分和確定,導(dǎo)致在應(yīng)用過程中存在信息誤報(bào)率大,操作困難等實(shí)際問題[5-7].本文基于航天嵌入式軟件近二十年第三方測(cè)試發(fā)現(xiàn)的中斷沖突問題研究的基礎(chǔ)上,識(shí)別和總結(jié)了中斷訪問沖突模式,并結(jié)合典型實(shí)例解析說明了沖突機(jī)理,對(duì)相關(guān)中斷沖突場(chǎng)景和分析方法進(jìn)行了較為全面的分析和總結(jié).
中斷訪問沖突本質(zhì)是對(duì)共享資源的訪問存在競(jìng)爭(zhēng)引起,因此識(shí)別競(jìng)爭(zhēng)資源是沖突分析的首要步驟.競(jìng)爭(zhēng)資源,也就是可能引入中斷沖突的參數(shù),包括任意一個(gè)變量,標(biāo)準(zhǔn)芯片端口、FPGA端口、絕對(duì)存儲(chǔ)地址,這些參數(shù)只要在不同優(yōu)先級(jí)的子程序中被引用,均是中斷沖突分析對(duì)象[8-9].另外還有規(guī)定的軟件固定操作序被軟件其他操作意外打斷的情況也有可能引入訪問沖突問題.但對(duì)這些對(duì)象的訪問并不是一定會(huì)引入中斷沖突,具體在什么情況下會(huì)引入沖突還需要具體進(jìn)行分析.
在此結(jié)合目前測(cè)試中已經(jīng)發(fā)現(xiàn)的中斷沖突問題,通過靜態(tài)的分析參數(shù)類型及參數(shù)訪問序,研究中斷數(shù)據(jù)訪問沖突及機(jī)理,繼而形成靜態(tài)的分析方法,能夠有效彌補(bǔ)動(dòng)態(tài)測(cè)試在發(fā)現(xiàn)數(shù)據(jù)訪問沖突問題上具有隨機(jī)性和不確定性的缺陷,提升發(fā)現(xiàn)數(shù)據(jù)訪問沖突的準(zhǔn)確率.
依據(jù)處理器對(duì)參數(shù)的訪問形式、多個(gè)變量之間的關(guān)系,將參數(shù)類型分為3類:
1) 原子變量
處理器對(duì)當(dāng)前變量進(jìn)行的一次讀或者寫訪問時(shí)僅為單條語(yǔ)句,不存在被其他操作打斷的可能.
2) 非原子變量
處理器對(duì)當(dāng)前參數(shù)進(jìn)行一次讀或者寫訪問時(shí)必須分解為多條語(yǔ)句執(zhí)行,比如數(shù)組變量(例如,char a[5]),多于處理器字長(zhǎng)變量(例如,處理器8051機(jī)器字長(zhǎng)為8 bits,軟件定義int型變量對(duì)應(yīng)16 bits).
3) 關(guān)聯(lián)變量
兩個(gè)或多個(gè)變量有依賴關(guān)系或者是同步關(guān)系,如一個(gè)數(shù)組中的多個(gè)元素拼接成為另外一個(gè)變量;一個(gè)變量是另外兩個(gè)或幾個(gè)變量的校驗(yàn)和;一個(gè)變量表示指令號(hào)與另一個(gè)變量表示指令內(nèi)容一一對(duì)應(yīng).
可以較為容易理解的是,當(dāng)處理器對(duì)變量的訪問僅為一條匯編語(yǔ)句(一條匯編語(yǔ)句對(duì)應(yīng)一個(gè)指令周期)時(shí),即便是多個(gè)子程序同時(shí)對(duì)其進(jìn)行訪問,也不會(huì)存在因?yàn)樽兞績(jī)?nèi)容不同步引入訪問沖突問題,在此重點(diǎn)針對(duì)非原子變量、關(guān)聯(lián)變量的典型沖突場(chǎng)景進(jìn)行分析,說明沖突發(fā)生的機(jī)理和分析方法,后續(xù)不再針對(duì)原子變量進(jìn)行訪問沖突分析.
該類型變量長(zhǎng)度超出了對(duì)應(yīng)處理器字長(zhǎng),雖然源代碼級(jí)上只有一條語(yǔ)句,但編譯后需要分成多條匯編語(yǔ)句步驟執(zhí)行,下面以單片機(jī)8051和DSP TMS320C6000芯片為例,通過分析匯編代碼驗(yàn)證中斷沖突發(fā)生的場(chǎng)景.
8051為8位處理器(大端結(jié)構(gòu),低地址存高字節(jié)數(shù)據(jù),高地址存低字節(jié)數(shù)據(jù)),定義變量c為int型(16位),則c對(duì)應(yīng)2字節(jié)長(zhǎng)度:
圖1 單片機(jī)2字節(jié)變量沖突場(chǎng)景Fig.1 Conflict scene of single chip two bytes variable
上圖1中一條給變量c賦值的C語(yǔ)言代碼,對(duì)應(yīng)的匯編代碼為多條語(yǔ)句,分為先寫入低字節(jié)數(shù)據(jù),再寫入高字節(jié)數(shù)據(jù)等多個(gè)步驟進(jìn)行.
當(dāng)主程序在寫變量c兩個(gè)字節(jié)過程中如果發(fā)生中斷并進(jìn)行讀c的操作,此時(shí)讀取到的c值高低字節(jié)數(shù)據(jù)并不同步.
TMS320C6000為32位處理器,定義變量a為long long int型(64位),對(duì)應(yīng)2個(gè)字長(zhǎng)度:
圖2 DSP 2個(gè)字變量沖突場(chǎng)景Fig.2 Conflict scene of DSP 2 byte variable
圖2中主程序中對(duì)變量a的賦值操作分為兩步,先寫低32位,再寫高32位,如果在寫操作過程中發(fā)生中斷讀變量a,會(huì)導(dǎo)致中斷中讀取到的變量a高低字?jǐn)?shù)據(jù)不同步.
表1 Franklin C51的基本數(shù)據(jù)類型Tab.1 Basic data type of Franklin C51
嵌入式軟件常用的芯片如MCS-51、SPARC、DSP處理器的字長(zhǎng)分別為8位、32位和32位,為了輔助分析,針對(duì)不同的數(shù)據(jù)類型,給出對(duì)應(yīng)的長(zhǎng)度說明如表1~3所示.表1中的sfr是C51中定義特殊功能寄存器所使用的一種專用關(guān)鍵字,與標(biāo)準(zhǔn)C不兼容,只適用于C51.
表2 SPARC的基本數(shù)據(jù)類型Tab.2 Basic data type of SPAR
表3 DSP芯片數(shù)據(jù)類型Tab.3 Basic data type of DSP
注:“-”表示該芯片不存在當(dāng)前數(shù)據(jù)類型.
當(dāng)數(shù)組元素中的多個(gè)變量存在關(guān)聯(lián)時(shí),應(yīng)保證相互關(guān)聯(lián)變量讀寫操作的匹配性.
(1) 數(shù)組變量中的多個(gè)元素存在關(guān)聯(lián)
在代碼實(shí)現(xiàn)過程中,一般對(duì)數(shù)組變量的訪問操作是由多條語(yǔ)句構(gòu)成,對(duì)應(yīng)的中斷場(chǎng)景也最易識(shí)別,下面以實(shí)例進(jìn)行分析:
參數(shù):系統(tǒng)時(shí)間碼System_time[6]:共6字節(jié),前4字節(jié)為s,后2字節(jié)為ms;主程序?qū)ζ溥M(jìn)行讀操作,中斷服務(wù)子程序?qū)ζ溥M(jìn)行寫操作,具體代碼實(shí)現(xiàn)如圖3所示:
圖3 數(shù)組變量沖突實(shí)例Fig.3 Conflict scene of array variable
主程序一次讀取系統(tǒng)時(shí)間碼過程中發(fā)生中斷進(jìn)行時(shí)間寫后返回,然后主程序繼續(xù)讀,讀取到的時(shí)間碼的3字節(jié)數(shù)據(jù)不同步.
(2) 多個(gè)獨(dú)立的變量之間存在關(guān)聯(lián)
例如:溫度參數(shù)t1,t2,對(duì)應(yīng)累加和變量t3,均為單字節(jié)變量.主程序讀取t1,t2進(jìn)行計(jì)算校驗(yàn)和,中斷服務(wù)子程序讀取t1,t2和t3進(jìn)行遙測(cè)下行:
圖4 關(guān)聯(lián)變量沖突場(chǎng)景Fig.4 Conflict scene of related variables
上述圖4變量如果獨(dú)立分析,則均不會(huì)存在數(shù)據(jù)訪問沖突,但由于t3與t1、t2存在一定的對(duì)應(yīng)關(guān)系,則在代碼設(shè)計(jì)過程中隱含的需求就是三者數(shù)據(jù)必須同步,否則當(dāng)主程序讀取t1、t2后計(jì)算t3之前產(chǎn)生中斷,則遙測(cè)下行的t3與t1、t2不對(duì)應(yīng).
針對(duì)參數(shù)類型進(jìn)行中斷沖突分析時(shí),除需要進(jìn)行每個(gè)變量的類型分析外,還需要進(jìn)行關(guān)聯(lián)變量的識(shí)別,關(guān)聯(lián)變量的識(shí)別應(yīng)在軟件研制過程中的需求分析階段進(jìn)行,在數(shù)據(jù)字典中進(jìn)行明確定義.
針對(duì)多于處理器字長(zhǎng)變量、數(shù)組變量、關(guān)聯(lián)變量,一次讀或?qū)懺L問過程中可能引入數(shù)據(jù)訪問沖突的場(chǎng)景及后果總結(jié)歸納如下:
(1) 主程序讀—中斷寫,會(huì)導(dǎo)致主程序讀取到的數(shù)據(jù)不同步;
(2) 主程序?qū)憽袛鄬懀瑫?huì)導(dǎo)致主程序?qū)懭氲臄?shù)據(jù)值不同步;
(3) 主程序?qū)憽袛嘧x,會(huì)導(dǎo)致中斷讀取到的數(shù)據(jù)值不同步;
(4) 主程序讀—中斷讀,要針對(duì)具體情況分析是否存在不同步的可能,一般來(lái)說存在不同步的可能性較小.
以上是針對(duì)幾種參數(shù)類型進(jìn)行一次訪問操作過程中引入的數(shù)據(jù)不同步場(chǎng)景分析.針對(duì)同一個(gè)參數(shù)的多次訪問過程中,如果存在多次訪問操作被中斷打斷的可能時(shí),需要從參數(shù)訪問序角度分析是否存在訪問沖突.
一個(gè)變量在主程序、各級(jí)中斷服務(wù)子程序中多次進(jìn)行讀寫,哪些會(huì)在讀寫過程中引入變量訪問沖突呢,在此以中斷中有讀操作和寫操作進(jìn)行分類,并通過實(shí)例加以分析說明.
3.1.1 中斷寫操作時(shí)的主程序訪問序
(1) 主程序中有讀讀操作序
圖5代碼針對(duì)變量rsCount的訪問就是主程序進(jìn)行連續(xù)兩次讀,中斷服務(wù)子程序中進(jìn)行一次寫的操作.該種形式的訪問序會(huì)在主程序第一條讀語(yǔ)句執(zhí)行后,第二條讀語(yǔ)句執(zhí)行前,如果產(chǎn)生中斷,會(huì)導(dǎo)致第二次讀出的數(shù)值與第一次不同.通過對(duì)本實(shí)例的分析,兩條讀語(yǔ)句對(duì)應(yīng)的變量值應(yīng)該為同一時(shí)刻的數(shù)值,上述代碼存在訪問沖突,在此稱為“讀讀之間產(chǎn)生寫”,通過該實(shí)例可以總結(jié)如下:
針對(duì)“讀讀之間產(chǎn)生寫”訪問序,分析是否發(fā)生中斷沖突的途徑就是確認(rèn)兩次或多次讀語(yǔ)句對(duì)應(yīng)該變量值是不是要求為同一時(shí)刻的值,如果要求是同一時(shí)刻的值,即多次讀的過程中不能被中斷改寫,則該“讀讀之間產(chǎn)生寫”訪問序就存在中斷訪問沖突.
針對(duì)兩次或多次讀語(yǔ)句對(duì)應(yīng)該變量值是不是要求為同一時(shí)刻的值,需要結(jié)合代碼實(shí)現(xiàn)邏輯及軟件功能進(jìn)行測(cè)試需求分析,一般在同一個(gè)模塊中連續(xù)讀操作的訪問沖突概率較大.
圖5 主程序讀-讀操作序場(chǎng)景Fig.5 Main program reading reading-interrupt reading operation order
(2) 主程序中有讀寫操作序
從代碼實(shí)現(xiàn)角度,針對(duì)讀寫訪問序,體現(xiàn)為兩種形式,多條源代碼語(yǔ)句和一條源代碼語(yǔ)句.
①多條源代碼語(yǔ)句完成讀寫
多條源代碼語(yǔ)句完成的讀寫典型過程如下圖主程序部分,對(duì)應(yīng)的沖突場(chǎng)景如下:
圖6 主程序讀寫-中斷寫操作序場(chǎng)景Fig.6 Main program reading writing-interrupt writing operation order
針對(duì)圖6形式的讀寫訪問序,如果中斷中寫操作,則會(huì)在主程序讀出變量a后,給a重新賦值之前,如果產(chǎn)生中斷,則會(huì)造成中斷給a賦值的操作被主程序的重新寫覆蓋,導(dǎo)致優(yōu)先級(jí)高的程序功能寫功能失效,即存在訪問沖突.
②一條源代碼語(yǔ)句完成讀寫
如c++,a=a+b.該類語(yǔ)句編譯后對(duì)應(yīng)的匯編代碼通常均有多條語(yǔ)句組成,完成對(duì)應(yīng)的讀寫操作.在此列出幾種處理器8051系列,TSC695F及DSPTMS3206701對(duì)應(yīng)的匯編語(yǔ)句如圖7所示:
圖7 一條源代碼讀寫對(duì)應(yīng)多條匯編代碼實(shí)現(xiàn)Fig.7 Assembly code related to c source code
經(jīng)分析匯編代碼進(jìn)行驗(yàn)證,針對(duì)單條的讀寫語(yǔ)句,對(duì)應(yīng)的匯編代碼均是先從原變量中讀出原值到寄存器,在寄存器中完成運(yùn)算操作,然后回寫到原變量中,對(duì)應(yīng)的訪問沖突原理與多條語(yǔ)句完成讀寫相同,針對(duì)一條源代碼讀寫操作存在訪問沖突的場(chǎng)景,僅從源代碼級(jí)別進(jìn)行分析時(shí)無(wú)法發(fā)現(xiàn)沖突,需要翻譯成對(duì)應(yīng)的匯編代碼進(jìn)行分析,具體沖突場(chǎng)景如圖8所示.
(3) 主程序中有寫讀操作序
寫讀操作序的訪問流程如圖9所示.
圖8 主程序讀寫-中斷寫操作序場(chǎng)景Fig.8 Main program reading writing-interrupt writing operation order
圖9 主程序?qū)懽x-中斷讀操作序場(chǎng)景Fig.9 Main program reading writing-interrupt reading operation order
針對(duì)上述形式的寫讀操作序是否會(huì)引入訪問沖突,需要結(jié)合代碼實(shí)現(xiàn)邏輯,確認(rèn)當(dāng)前模塊中對(duì)變量的讀操作的來(lái)源:如果來(lái)源是當(dāng)前模塊內(nèi)此前寫入的內(nèi)容,則該讀操作應(yīng)與前面的寫操作不能被中斷打斷,否則會(huì)引入訪問沖突;如果來(lái)源不限定本模塊寫入內(nèi)容,則不會(huì)存在訪問沖突.
(4) 主程序中存在只寫操作
主程序和中斷服務(wù)子程序均有寫操作的變量,理論上會(huì)存在中斷沖突導(dǎo)致中斷的寫操作失效,但此類沖突對(duì)軟件功能是否有影響,需要結(jié)合功能背景及匯編代碼進(jìn)行影響分析,一般情況下這種訪問序引起的中斷沖突會(huì)造成軟件錯(cuò)誤.
3.1.2 中斷讀操作時(shí)的主程序訪問序
(1) 主程序中有寫寫操作序
圖10場(chǎng)景中,如果中斷在第一次給TM[0]賦值語(yǔ)句后產(chǎn)生,則中斷中讀到的數(shù)據(jù)并不是本周期的最終結(jié)果,可能會(huì)導(dǎo)致后續(xù)操作錯(cuò)誤.
主程序中有寫寫操作,中斷中有讀操作時(shí),此時(shí)讀取到的數(shù)據(jù)可能不是最終結(jié)果,導(dǎo)致功能實(shí)現(xiàn)錯(cuò)誤.
圖10 主程序?qū)憣?中斷讀操作序場(chǎng)景Fig.10 Main program writing writing-interrupt reading operation order
(2) 主程序中有其他操作序
當(dāng)中斷中存在讀操作,主程序中存在讀寫操作、讀讀操作、寫讀操作的訪問序時(shí),需要根據(jù)中斷中讀操作時(shí)效性的要求進(jìn)行分析,如果要求中斷中讀取到的是主程序中最新寫入的數(shù)據(jù),則可能存在數(shù)據(jù)訪問沖突;如果不要求中斷中立刻讀取到主程序中最新寫入的數(shù)據(jù),則不存在數(shù)據(jù)訪問沖突問題.
3.1.3 固定操作序沖突場(chǎng)景分析
固定操作序是指某項(xiàng)功能對(duì)應(yīng)的一組固定執(zhí)行動(dòng)作,分布于一個(gè)或多個(gè)子程序中,涉及一個(gè)或多個(gè)變量,這些變量在當(dāng)前固定動(dòng)作中不能被外界意外改動(dòng).具體可分為一個(gè)子程序中的一個(gè)參數(shù)(端口)的固定操作序、多個(gè)子程序中的一個(gè)參數(shù)(端口)的固定操作序、多個(gè)子程序的多個(gè)參數(shù)(端口)的固定操作序等.在此以一個(gè)子程序中一個(gè)參數(shù)和多個(gè)子程序中一個(gè)參數(shù)為實(shí)例進(jìn)行說明.
(1) 一個(gè)子程序中一個(gè)參數(shù)的固定操作序
以CAN控制器MCP2515通過SPI接口擴(kuò)展方式的讀操作過程對(duì)應(yīng)一組操作序?yàn)槔M(jìn)行說明,向硬件端口的一系列操作如果被其他操作打斷,會(huì)造成讀操作失效.讀操作序的基本過程如下:
1) CS片選拉低;
2) 往SPI數(shù)據(jù)端口寫入命令0x03表示準(zhǔn)備讀數(shù)據(jù);
3) 往SPI數(shù)據(jù)端口寫入準(zhǔn)備讀出數(shù)據(jù)的對(duì)應(yīng)地址;
4) 往SPI數(shù)據(jù)端口寫入任意一字節(jié)數(shù);
5) 從SPI數(shù)據(jù)端口讀出數(shù)據(jù);
6) CS片選拉高.
圖11場(chǎng)景中當(dāng)主程序進(jìn)行讀操作序過程中向芯片執(zhí)行寫入任意數(shù)0x55后,若發(fā)生中斷進(jìn)入寫操作序,則在中斷返回主程序后從SPI0DAT讀出的數(shù)據(jù)不再是外部設(shè)備送入的內(nèi)容,可能為中斷服務(wù)子程序?qū)懭氲闹?x0EB,最終導(dǎo)致主程序中讀出的不是預(yù)期內(nèi)容,造成讀操作失敗.
圖11 同一個(gè)參數(shù)固定讀操作序沖突場(chǎng)景Fig.11 Conflicting scenario of reading sequence to the same parameter
(2) 多個(gè)子程序中一個(gè)參數(shù)的固定操作序
某嵌入式軟件對(duì)OC門指令的輸出操作過程為:向端口0x1111寫入指令對(duì)應(yīng)的編碼0xXX以啟動(dòng)控制脈沖發(fā)送,持續(xù)20 ms±5 ms后,再向遙控端口0x1111寫入0x00結(jié)束控制脈沖發(fā)送,如圖12所示.
圖12 向同一個(gè)參數(shù)寫操作序沖突場(chǎng)景Fig.12 Conflicting scenario of writing sequence to the same parameter
為保證操作序的正常執(zhí)行,分布于不同優(yōu)先級(jí)子程序(主程序,定時(shí)器中斷服務(wù)子程序)中的操作序不應(yīng)被外界打斷,但是該軟件會(huì)發(fā)出不同種類的OC門指令.如果軟件在啟動(dòng)20 ms定時(shí)后繼續(xù)執(zhí)行其他代碼過程中再次滿足發(fā)OC門指令且當(dāng)前時(shí)間間隔小于20 ms,會(huì)重新執(zhí)行主程序中定時(shí)20 ms操作,導(dǎo)致上一條OC門指令的執(zhí)行過程被意外終止,即未在20 ms后發(fā)結(jié)束控制脈沖,輸出的OC門指令高電平寬度不滿足性能指標(biāo)要求.
針對(duì)某參數(shù)存在連續(xù)的多次訪問操作序時(shí),需要注意以下內(nèi)容:
(1) 能夠完成讀寫功能的一條源代碼(如c++,a=a+b),如果中斷服務(wù)子程序中有寫操作,一定會(huì)引入該參數(shù)的訪問沖突,導(dǎo)致參數(shù)數(shù)值錯(cuò)誤;
(2) 一個(gè)參數(shù)在不同優(yōu)先級(jí)子程序中均被訪問時(shí),針對(duì)低優(yōu)先級(jí)子程序中的讀寫操作序如果不能被外界打斷,當(dāng)有高優(yōu)先級(jí)子程序?qū)ζ浯嬖谏鲜稣f明的訪問時(shí),一定會(huì)引入該參數(shù)的訪問沖突,導(dǎo)致參數(shù)數(shù)值錯(cuò)誤;
(3) 參數(shù)訪問序的設(shè)置需要結(jié)合代碼設(shè)計(jì)進(jìn)行分析,確定其不可被打斷的操作序有效范圍,例如:多條語(yǔ)句構(gòu)成的一個(gè)數(shù)學(xué)計(jì)算、一個(gè)獨(dú)立的邏輯處理,后續(xù)參數(shù)訪問應(yīng)是依據(jù)前面訪問邏輯獲取的結(jié)果.
(4) 針對(duì)固定操作序,對(duì)應(yīng)的操作序在執(zhí)行過程中都不能被打斷,如果被打斷且高優(yōu)先級(jí)程序中存在寫操作會(huì)導(dǎo)致讀操作失效.
(5) 固定的操作序可能分布于一個(gè)或多個(gè)子程序中,一旦啟動(dòng)后則不能因?yàn)槿魏纹渌獠織l件意外終止,否則會(huì)導(dǎo)致操作序失效.
本文從參數(shù)類型及參數(shù)訪問序兩個(gè)角度對(duì)中斷數(shù)據(jù)沖突進(jìn)行了原理分析和方法研究.從參數(shù)類型進(jìn)行分析:當(dāng)主程序和中斷中存在同時(shí)訪問的共享參數(shù)資源是數(shù)組變量、多字節(jié)變量、關(guān)聯(lián)變量時(shí),當(dāng)主程序或者中斷中同時(shí)存在寫操作時(shí)會(huì)造成數(shù)據(jù)不同步,存在訪問沖突問題.從參數(shù)訪問序進(jìn)行分析情況會(huì)比較復(fù)雜一些,確保主程序中讀寫操作不會(huì)被中斷改寫;中斷的寫操作不會(huì)被主程序覆蓋;中斷中的讀操作是最終結(jié)果,而不是中間計(jì)算過程;除此之外還有些情況需要結(jié)合具體應(yīng)用背景進(jìn)行分析.針對(duì)固定操作序,對(duì)應(yīng)的操作序在執(zhí)行過程中都不能被打斷,如果操作序執(zhí)行過程中,被高優(yōu)先級(jí)子程序打斷且對(duì)操作序中涉及的資源有寫操作,則導(dǎo)致當(dāng)前正在執(zhí)行的固定操作序中所讀數(shù)據(jù)不是當(dāng)前操作序的結(jié)果,而是高優(yōu)先級(jí)子程序操作序中的內(nèi)容.如果操作序執(zhí)行的過程中,存在新條件引起該操作序被重新啟動(dòng),會(huì)導(dǎo)致當(dāng)前正在進(jìn)行的操作序被意外終止.
由于中斷數(shù)據(jù)沖突的發(fā)生具有不確定性和隨機(jī)性,文中描述的沖突場(chǎng)景不可能在所有的動(dòng)態(tài)測(cè)試過程中都會(huì)出現(xiàn),這種靜態(tài)的分析方法相比較動(dòng)態(tài)的測(cè)試更容易發(fā)現(xiàn)這種小概率隨機(jī)性問題且容易實(shí)施,操作性較強(qiáng).在軟件設(shè)計(jì)和測(cè)試過程中增加專門的中斷數(shù)據(jù)沖突分析有助于充分、全面、準(zhǔn)確定位沖突問題,目前,這種分析方法目前已經(jīng)應(yīng)用于第三方實(shí)際測(cè)試過程中,并取得了較好的應(yīng)用效果,發(fā)現(xiàn)了大部分中斷沖突問題.本文列舉的實(shí)例和分析方法有助于建立完善的缺陷模式庫(kù),在自動(dòng)化檢測(cè)工具中構(gòu)建上述模型,可自動(dòng)識(shí)別訪問沖突問題.為自動(dòng)化工具在檢測(cè)數(shù)據(jù)競(jìng)爭(zhēng)的準(zhǔn)確性、高效性方面起到參考和借鑒作用.