国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      基于靜態(tài)共享變量識(shí)別的動(dòng)態(tài)數(shù)據(jù)競爭檢測方法

      文檔序號(hào):6422997閱讀:199來源:國知局
      專利名稱:基于靜態(tài)共享變量識(shí)別的動(dòng)態(tài)數(shù)據(jù)競爭檢測方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及計(jì)算機(jī)軟件可靠性技術(shù)領(lǐng)域,特別涉及一種基于靜態(tài)共享變量識(shí)別的動(dòng)態(tài)數(shù)據(jù)競爭檢測方法。
      背景技術(shù)
      隨著底層多核處理器的發(fā)展,并發(fā)程序越來越受到程序員的歡迎。但是并發(fā)程序不僅不易正確編寫,而且會(huì)出現(xiàn)各種難以調(diào)試和重現(xiàn)的軟件缺陷。數(shù)據(jù)競爭是引起并發(fā)程序軟件缺陷的重要原因之一。數(shù)據(jù)競爭是指多個(gè)線程沒有同步保護(hù)地訪問同一個(gè)內(nèi)存地址,且至少一個(gè)訪問是寫操作。因?yàn)槠鋾?huì)導(dǎo)致嚴(yán)重的后果,學(xué)術(shù)界和工業(yè)界一直試圖找到一種有效的檢測方法?,F(xiàn)有的數(shù)據(jù)競爭檢測方式都基于軟件插裝的方法,主要分為兩類程序運(yùn)行前的靜態(tài)插裝和程序運(yùn)行中的動(dòng)態(tài)插裝。程序運(yùn)行前的靜態(tài)插裝工具在程序真正運(yùn)行前對源代碼或者二進(jìn)制文件進(jìn)行插裝,得到一個(gè)插裝后的二進(jìn)制代碼,最后按照原始程序的運(yùn)行方式執(zhí)行插裝程序。程序運(yùn)行中的動(dòng)態(tài)插裝在程序執(zhí)行的過程中動(dòng)態(tài)插入插裝指令,現(xiàn)有的動(dòng)態(tài)插裝工具一般采用類似Java虛擬機(jī)的即時(shí)執(zhí)行方式,在執(zhí)行過程中動(dòng)態(tài)翻譯執(zhí)行用戶程序指令并插入插裝指令。相對于靜態(tài)插裝,動(dòng)態(tài)插裝方式的功能更加豐富且方便使用(比如不需要重新編譯鏈接程序,可以監(jiān)控運(yùn)行進(jìn)程等)?,F(xiàn)有的廣泛使用的插裝工具Pin 和Valgrind都采用動(dòng)態(tài)插裝方式。對于數(shù)據(jù)競爭,不管是動(dòng)態(tài)插裝方式,還是靜態(tài)插裝方式,都面臨著開銷和于擾性的問題。在典型應(yīng)用程序中,不管是串行還是并行程序,內(nèi)存訪問操作數(shù)量占的比例都很大,因此數(shù)據(jù)競爭檢測的開銷和干擾性主要來源于對于內(nèi)存操作的插裝。最新的研究提出了基于采樣的方法,也即不需要插裝程序中所有的內(nèi)存訪問,而只以采樣的方式插裝一部分內(nèi)存訪問操作。對于采樣,首先要解決的問題是采樣的對象或者粒度?,F(xiàn)有的一個(gè)方法(參考LiteRace !effective sampling for lightweight data-race detection, PLDI' 09Proceedings of the 2009 ACMSIGPLAN conference on Programming language designand implementation)采用一個(gè)基于函數(shù)粒度的采樣,也就是針對一個(gè)函數(shù),統(tǒng)計(jì)其動(dòng)態(tài)執(zhí)行過程運(yùn)行的次數(shù),不同函數(shù)以不同的概率各自進(jìn)行采樣而不互相干擾。但是其選取函數(shù)作為采樣粒度并不合適,主要存在下面的問題I、采樣檢查開銷增大。程序中大多數(shù)的函數(shù)都和數(shù)據(jù)競爭無關(guān),盲目對每個(gè)函數(shù)檢查采樣會(huì)使檢查開銷增大。如果某個(gè)熱點(diǎn)函數(shù)中不涉及數(shù)據(jù)競爭,而基于函數(shù)粒度采樣的方法每次運(yùn)行這個(gè)函數(shù)之前都需要檢查采樣條件,這會(huì)引入額外不必要的開銷。如果檢查采樣的代碼實(shí)現(xiàn)的不合理,這個(gè)開銷有時(shí)候會(huì)達(dá)到20%。2、代碼膨脹。一個(gè)函數(shù)體如果很大,但是真正與數(shù)據(jù)競爭相關(guān)的只是其中的一小部分代碼區(qū)域,基于函數(shù)粒度的采樣會(huì)復(fù)制整個(gè)函數(shù),并在復(fù)制的函數(shù)中加入插裝代碼,這必然會(huì)引起程序代碼膨脹,對程序產(chǎn)生干擾??傊?,現(xiàn)有基于函數(shù)粒度的采樣方法沒有考慮并發(fā)程序缺陷或者數(shù)據(jù)競爭的特性。

      發(fā)明內(nèi)容
      (一 )要解決的技術(shù)問題本發(fā)明要解決的技術(shù)問題是如何以較小的資源開銷代價(jià)實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)競爭檢測。(二)技術(shù)方案為解決上述技術(shù)問題,本發(fā)明提供了一種基于靜態(tài)共享變量識(shí)別的動(dòng)態(tài)數(shù)據(jù)競爭檢測方法,包括以下步驟SI :識(shí)別待檢測程序的共享變量; S2:對所述待檢測程序中包含共享變量的基本塊進(jìn)行數(shù)據(jù)競爭檢測插裝和采樣,得到所述待檢測程序經(jīng)插裝和采樣后的二進(jìn)制代碼,所述基本塊是指一個(gè)連續(xù)的程序語句序列,控制流從它的開始進(jìn)入,并從它的末尾離開,中間沒有中斷或者分支;S3 :運(yùn)行所述二進(jìn)制代碼動(dòng)態(tài)檢測所述待檢測程序中的數(shù)據(jù)競爭。其中,所述步驟SI具體包括SI. I :讀取所述待檢測程序的源代碼,為源代碼中的每一個(gè)函數(shù)建立函數(shù)信息,對所有函數(shù)根據(jù)其調(diào)用關(guān)系建立一個(gè)不完整的函數(shù)調(diào)用圖,不完整的函數(shù)調(diào)用關(guān)系圖不包括函數(shù)中指針的調(diào)用關(guān)系;SI. 2 :對函數(shù)進(jìn)行上下文敏感的指針分析,并構(gòu)建完整函數(shù)調(diào)用圖,指針分析的結(jié)果為每一個(gè)函數(shù)建立一個(gè)指針別名圖。指針別名圖的結(jié)點(diǎn)代表該函數(shù)中可以訪問的內(nèi)存空間,邊代表結(jié)點(diǎn)之間的指向關(guān)系,指針分析還需要建立函數(shù)調(diào)用者指針和被調(diào)用者指針的指向圖之間的關(guān)系;SI. 3:采用自底向上的方式遍歷線程間完整的函數(shù)調(diào)用圖,識(shí)別出共享變量。其中,所述函數(shù)信息包括符號(hào)表信息、中間表示結(jié)構(gòu)。其中,所述步驟S2具體包括S2. I :遍歷函數(shù)中間表示的過程中收集包含共享變量的基本塊集合;S2. 2 :復(fù)制每一個(gè)包含共享變量的基本塊,并且在基本塊中插入采樣檢查語句,進(jìn)行基本塊采樣;S2. 3 :編譯并鏈接經(jīng)插裝和采樣后的源代碼,生成插裝和采樣后的可執(zhí)行的二進(jìn)制代碼。其中,所述步驟S2. 2中在復(fù)制基本塊之前包括步驟S2. 2. I :檢查一個(gè)基本塊是否屬于某個(gè)循環(huán),若是,則復(fù)制整個(gè)外層循環(huán)并插入采樣檢查語句。其中,所述步驟S2. 2. I之前還包括步驟比較包含共享變量的基本塊數(shù)量和函數(shù)中總的基本塊數(shù)量,若兩者之間的比例小于預(yù)定閾值,則步驟S2.2中不執(zhí)行步驟S2. 2. 1,也不復(fù)制基本塊,而進(jìn)行函數(shù)粒度的采樣。其中,所述預(yù)定閾值為10%。其中,所述采樣方式采用軟件采樣、突發(fā)性采樣、可適應(yīng)的采樣及線程敏感采樣中的一種或幾種。(三)有益效果
      本發(fā)明通過對含有共享變量的基本塊進(jìn)行插裝和采樣,避免了代碼膨脹問題,大大減小了系統(tǒng)開銷。


      圖I是本發(fā)明實(shí)施例的一種基于靜態(tài)共享變量識(shí)別的動(dòng)態(tài)數(shù)據(jù)競爭檢測方法的框架設(shè)計(jì)圖;圖2是本發(fā)明實(shí)施例的一種基于靜態(tài)共享變量識(shí)別的動(dòng)態(tài)數(shù)據(jù)競爭檢測方法流程圖;圖3是圖I中步驟S2的基于基本塊的插裝過程示意圖;圖4是圖I中步驟S2的基于基本塊粒度的采樣算法;圖5是采用圖I中的檢測方法的代碼大小比較結(jié)果; 圖6是采用圖I中的檢測方法的性能比較結(jié)果。
      具體實(shí)施例方式下面結(jié)合附圖和實(shí)施例,對本發(fā)明的具體實(shí)施方式
      作進(jìn)一步詳細(xì)描述。以下實(shí)施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。經(jīng)過研究發(fā)現(xiàn),非死鎖類型的并發(fā)程序缺陷,比如數(shù)據(jù)競爭,其發(fā)生只與程序中的共享變量相關(guān)?;谶@個(gè)觀察,本發(fā)明提出了一種基于共享變量識(shí)別的動(dòng)態(tài)數(shù)據(jù)競爭檢測方法,如圖I所示,為本實(shí)施例中方法實(shí)現(xiàn)框架,在本實(shí)施例中首先利用編譯器的過程間分析模塊實(shí)現(xiàn)了一個(gè)靜態(tài)共享變量識(shí)別算法,輸出共享變量的識(shí)別結(jié)果。編譯器后端的數(shù)據(jù)競爭檢測插裝和采樣模塊利用共享變量的識(shí)別結(jié)果,實(shí)現(xiàn)了一個(gè)基于基本塊粒度的數(shù)據(jù)競爭檢測插裝和采樣方法,最后得到一個(gè)插裝后的二進(jìn)制版本。通過運(yùn)行插裝的二進(jìn)制代碼動(dòng)態(tài)檢測程序中的數(shù)據(jù)競爭。具體流程如圖2所示,包括步驟S101,識(shí)別待檢測程序的共享變量。該步驟具體包括三個(gè)步驟過程間的指針別名分析;線程間函數(shù)調(diào)用圖構(gòu)建;識(shí)別算法。其中指針別名分析和線程間函數(shù)調(diào)用圖的構(gòu)建兩者在一起完成。最后的識(shí)別算法依賴于指針別名分析和線程間函數(shù)調(diào)用圖。算法首先讀入整個(gè)程序的源代碼,為每一個(gè)函數(shù)建立后續(xù)所需的信息,比如符號(hào)表信息,中間表示(Intermediate Representation)結(jié)構(gòu)等。在整個(gè)過程間分析的開始階段,算法需要對所有函數(shù)根據(jù)其調(diào)用關(guān)系進(jìn)行一個(gè)不完整的排序(不完整是因?yàn)橛泻瘮?shù)指針的存在),建立一個(gè)不完整的函數(shù)調(diào)用圖。接著算法在不完整函數(shù)調(diào)用的基礎(chǔ)上進(jìn)行一個(gè)上下文敏感的指針分析,并在此過程中逐步構(gòu)建完整函數(shù)調(diào)用圖。指針分析的結(jié)果為每一個(gè)函數(shù)建立一個(gè)指針別名圖(alias graph)(指針別名圖的結(jié)點(diǎn)代表該函數(shù)中可以訪問的內(nèi)存空間,邊代表結(jié)點(diǎn)之間的指向關(guān)系)。指針分析還需要建立函數(shù)調(diào)用者(caller)和被調(diào)用者(callee)指針指向圖之間的關(guān)系(程序中的兩個(gè)函數(shù)通過參數(shù)的傳遞,返回值和全局變量聯(lián)系,在指針分析中表現(xiàn)為不同指針別名圖中結(jié)點(diǎn)的對應(yīng)關(guān)系)。由于共享變量會(huì)在不同的線程中被訪問,有可能是通過別名訪問的,指針別名圖是幫助識(shí)別共享變量的不同指針別名,而函數(shù)調(diào)用關(guān)系圖是幫助分析變量在哪個(gè)線程中被訪問。最后的識(shí)別算法采用一個(gè)自底向上的方式遍歷線程間函數(shù)調(diào)用圖。在訪問一個(gè)函數(shù)集時(shí),識(shí)別算法收集三個(gè)集合線程內(nèi)部的內(nèi)存訪問集合,子線程的內(nèi)存訪問集合,兩者的并集合。算法在向上遍歷的過程會(huì)根據(jù)caller和callee的指針指向圖的關(guān)系,實(shí)例化callee中的內(nèi)存訪問集合,如果callee中一個(gè)內(nèi)存訪問在caller的指針指向圖中沒有一個(gè)相應(yīng)的結(jié)點(diǎn),就說明該內(nèi)存訪問在caller中不可訪問,就不需要對其再繼續(xù)向上實(shí)例化。如果遍歷時(shí)碰到一條線程創(chuàng)建邊,需要把子線程最后的并集實(shí)例化為父線程中的子線程內(nèi)存訪問集合。按照這個(gè)方法,直至分析遍歷到main函數(shù)停止。步驟S102,對所述待檢測程序中包含共享變量的基本塊進(jìn)行數(shù)據(jù)競爭檢測插裝和采樣,得到所述待檢測程序經(jīng)插裝和采樣后的二進(jìn)制代碼,所述基本塊是指一個(gè)連續(xù)的程序語句序列,控制流從它的開始進(jìn)入,并從它的末尾離開,中間沒有中斷或者分支。與一般的靜態(tài)二進(jìn)制重寫方法實(shí)現(xiàn)不同,本發(fā)明提出的方法在高層的編譯器中實(shí)現(xiàn),也就是在源代碼級(jí)別實(shí)現(xiàn)。這是因?yàn)楸景l(fā)明的共享變量識(shí)別在編譯器中實(shí)現(xiàn),編譯器后端可以十分方便地獲得共享變量識(shí)別結(jié)果,實(shí)現(xiàn)基本塊復(fù)制并插入采樣檢查語句?;緣K的復(fù)制在編譯器后端的過程間分析(編譯器將高級(jí)語言變成機(jī)器碼的過程中的中間代碼)階段實(shí)現(xiàn),每個(gè)函數(shù)已經(jīng)建立了控制流圖(CFG)。簡單的基本塊復(fù)制方法如圖3所示,BB6是存在共享變量(cnt)的基本塊,若在數(shù)據(jù)競爭檢測中對BB6的每一次執(zhí)行都進(jìn)行插裝,會(huì) 導(dǎo)致較大的開銷,為避免這種情況,加入一個(gè)BB6的副本基本塊BB8(插裝了 cnt的讀寫)以及預(yù)判斷模塊Sampling_TeSt_BB,預(yù)判斷模塊可以控制程序以一定的概率執(zhí)行不被插裝的BB6,則程序正常執(zhí)行;或執(zhí)行被插裝的BB8,則程序被進(jìn)行數(shù)據(jù)競爭檢測,避免了程序的每一次執(zhí)行都被插裝進(jìn)行數(shù)據(jù)競爭檢測,降低了開銷。算法在遍歷函數(shù)中間表示過程中首先收集包含共享變量的基本塊集合。最后對于每一個(gè)包含共享變量的基本塊進(jìn)行復(fù)制,并且插入采樣檢查語句。在復(fù)制之前,檢查一個(gè)基本塊是否屬于某個(gè)循環(huán),若是,則復(fù)制整個(gè)外層循環(huán)并插入采樣檢查語句。優(yōu)選地,在檢查一個(gè)基本塊是否屬于某個(gè)循環(huán)之前還包括步驟比較包含共享變量的基本塊數(shù)量和函數(shù)中總的基本塊數(shù)量,若兩者之間的比例小于預(yù)定閾值,優(yōu)選為10 %,則不檢查基本塊是否屬于某個(gè)循環(huán),也不復(fù)制基本塊,而進(jìn)行函數(shù)粒度的采樣。本實(shí)施例實(shí)現(xiàn)了一個(gè)基于基本塊的軟件采樣機(jī)制,與LiteRace相似,采樣機(jī)制支持下面的特性I、軟件采樣,與硬件采樣不同,軟件采樣可以更好地控制采樣的粒度和對象。2、突發(fā)性采樣突發(fā)性(bursty),采樣是指一旦采樣某個(gè)采樣對象,可以連續(xù)對其采樣。這個(gè)性質(zhì)對不常執(zhí)行代碼中的軟件缺陷非常有用。比如一個(gè)函數(shù)和基本塊只會(huì)被執(zhí)行很少的次數(shù),這種突發(fā)性的采樣可以保證這些很少的執(zhí)行次數(shù)都被采樣到。3、可適應(yīng)的采樣,與固定的采樣周期不同,可適應(yīng)的采樣會(huì)根據(jù)采樣對象的動(dòng)態(tài)執(zhí)行頻率動(dòng)態(tài)調(diào)節(jié)采樣周期,執(zhí)行頻率高的對象的采樣周期較高,而對不常執(zhí)行的代碼則采用較低的采樣周期。4、線程敏感的采樣,在多線程程序中,一個(gè)采樣對象,比如函數(shù)或者基本塊,可能會(huì)被多個(gè)線程執(zhí)行,并且在多個(gè)線程中表現(xiàn)出不同的執(zhí)行特性,這需要對于采樣對象能夠區(qū)別其在的線程環(huán)境,即做到線程敏感的采樣。5、基本塊粒度的采樣與函數(shù)粒度采樣不同,基于基本塊粒度的采樣以一個(gè)基本塊或者代碼區(qū)域作為采樣控制對象。這個(gè)是本發(fā)明的采樣機(jī)制和現(xiàn)有其他采樣機(jī)制不同的地方。
      實(shí)現(xiàn)上述采樣機(jī)制的方法如圖4所示。算法中,函數(shù)Sampling Check插入在圖3中的Sampling Test BB基本塊中。對于一個(gè)基本塊,首先需要一個(gè)唯一標(biāo)識(shí)。算法中采用調(diào)用Sampling Check函數(shù)的返回地址作為需要監(jiān)控的基本塊的唯一標(biāo)識(shí)。算法接著定義了三個(gè)線程私有的數(shù)組,用來控制實(shí)現(xiàn)線程敏感的實(shí)現(xiàn)。每一個(gè)基本塊第一次被執(zhí)行時(shí)都被采樣,并且會(huì)連續(xù)采樣nlnstrO次,也即實(shí)現(xiàn)了一個(gè)突發(fā)式的采樣。在一輪采樣(包括連續(xù)的nlnstrO次采樣)結(jié)束后,算法根據(jù)當(dāng)前基本塊被執(zhí)行的次數(shù)設(shè)置下一輪的采樣周期,即實(shí)現(xiàn)一個(gè)可適應(yīng)的采樣。最后,編譯并鏈接經(jīng)插裝和采樣后的源代碼,生成插裝和采樣后的可執(zhí)行的二進(jìn)制代碼。步驟S103,運(yùn)行所述二進(jìn)制代碼動(dòng)態(tài)檢測所述點(diǎn)檢測程序中的數(shù)據(jù)競爭。以下是本發(fā)明的基于靜態(tài)共享變量識(shí)別的動(dòng)態(tài)數(shù)據(jù)競爭檢測方法的實(shí)驗(yàn)結(jié)果分析。 代碼大小是指一個(gè)程序在經(jīng)過檢測工具靜態(tài)插裝后得到的可執(zhí)行二進(jìn)制文件的大小。原始的LiteRace方法在二進(jìn)制代碼上直接插裝,其至少會(huì)帶來I倍的代碼大小膨脹。這些代碼膨脹包括復(fù)制每一個(gè)函數(shù),函數(shù)入口的采樣檢查插裝和在復(fù)制函數(shù)版本中對于內(nèi)存和同步操作的插裝。本發(fā)明提出的基于共享變量識(shí)別的改進(jìn)版LiteRace可以有效地解決原始LiteRace的代碼膨脹問題。改進(jìn)版LiteRace的代碼大小變化如圖5所示。對于圖中的四個(gè)程序,經(jīng)過本發(fā)明的方法插裝,程序最后代碼大小平均只增加了 13%。相對于原始版LiteRace的至少一倍的代碼大小膨脹,本文提出的方法能夠有效地減少了代碼膨脹,這主要得益于基于基本塊粒度的復(fù)制和插裝,而不需要復(fù)制整個(gè)函數(shù)(更進(jìn)一步,如果一個(gè)函數(shù)不包含任何共享變量訪問,本文的方法不會(huì)對其進(jìn)行任何插裝)。本發(fā)明實(shí)現(xiàn)的工具的性能指標(biāo)是指相對于原始程序的開銷。對于原始的LiteRace的性能,本文采用其論文中報(bào)告的平均性能28%。對于apache-http和pbzip2,其性能數(shù)據(jù)如圖6所示所示。其中apache-httpd使用2個(gè)線程進(jìn)行測試,pbzip2使用4個(gè)線程并且壓縮30M的文件。aget的性能為使用四個(gè)線程下載本機(jī)web服務(wù)器上的170M的文件的時(shí)間(使用本機(jī)上的服務(wù)器可以排除網(wǎng)絡(luò)帶來的干擾)。原始性能是指沒有經(jīng)過任何工具插裝的原始程序的基礎(chǔ)性能。從圖中可以看出,在不引入過多的代碼膨脹的前提下,本發(fā)明的平均開銷對于評估的三個(gè)程序只有32. 3%。相比較原始LiteRace的平均28%的開銷,本文提出的方法的開銷與其相當(dāng)。由實(shí)驗(yàn)結(jié)果看出本發(fā)明相比較現(xiàn)有的方法,主要有下面的優(yōu)點(diǎn)I、插裝數(shù)量少基于共享變量的信息和其在程序中的精確位置,軟件插裝只需要插裝涉及共享變量的內(nèi)存操作。傳統(tǒng)的數(shù)據(jù)競爭檢測工具和最新的使用采樣方法的檢測工具都可以利用這個(gè)特性,使檢測的開銷大大降低。2、采樣粒度更易控制對于基于采樣的檢測方法,通過共享變量的信息,可以更加精確地確定哪些函數(shù)包含共享變量訪問;更進(jìn)一步,可以精確地確定哪些代碼段或者基本塊包含共享變量訪問。如果一個(gè)函數(shù)不包含共享變量訪問,檢測工具不需要對其插裝,這減少了程序中的采樣檢查點(diǎn),降低了檢測工具的開銷。另外一方面,對于包含共享變量訪問的函數(shù),基于精確的共享變量訪問信息,采樣工具可以實(shí)現(xiàn)基于基本塊或者代碼段粒度的采樣。因?yàn)榱6刃。瑥?fù)制的插裝代碼區(qū)域也相應(yīng)減小,這也解決了現(xiàn)有方法的代碼膨脹問題。
      基于共享變量識(shí)別的檢測工具比現(xiàn)有的檢測工具因?yàn)殚_銷和干擾性小,更容易被程序接受,同時(shí)本發(fā)明提出的共享變量識(shí)別結(jié)果還可以被其他類型的并發(fā)程序缺陷檢測使用。以上實(shí)施方式僅用于說明本發(fā)明,而并非對本 發(fā)明的限制,有關(guān)技術(shù)領(lǐng)域的普通技術(shù)人員,在不脫離本發(fā)明的精神和范圍的情況下,還可以做出各種變化和變型,因此所有等同的技術(shù)方案也屬于本發(fā)明的范疇,本發(fā)明的專利保護(hù)范圍應(yīng)由權(quán)利要求限定。
      權(quán)利要求
      1.一種基于靜態(tài)共享變量識(shí)別的動(dòng)態(tài)數(shù)據(jù)競爭檢測方法,其特征在于,包括以下步驟 Si:識(shí)別待檢測程序的共享變量; 52:對所述待檢測程序中包含共享變量的基本塊進(jìn)行數(shù)據(jù)競爭檢測插裝和采樣,得到所述待檢測程序經(jīng)插裝和采樣后的二進(jìn)制代碼,所述基本塊是指一個(gè)連續(xù)的程序語句序列,控制流從它的開始進(jìn)入,并從它的末尾離開,中間沒有中斷或者分支; 53:運(yùn)行所述二進(jìn)制代碼動(dòng)態(tài)檢測所述待檢測程序中的數(shù)據(jù)競爭。
      2.如權(quán)利要求I所述的基于靜態(tài)共享變量識(shí)別的動(dòng)態(tài)數(shù)據(jù)競爭檢測方法,其特征在于,所述步驟SI具體包括 SI. I :讀取所述待檢測程序的源代碼,為源代碼中的每一個(gè)函數(shù)建立函數(shù)信息,對所有函數(shù)根據(jù)其調(diào)用關(guān)系建立一個(gè)不完整的函數(shù)調(diào)用圖,不完整的函數(shù)調(diào)用關(guān)系圖不包括函數(shù)中指針的調(diào)用關(guān)系; SI. 2 :對函數(shù)進(jìn)行上下文敏感的指針分析,并構(gòu)建完整函數(shù)調(diào)用圖,指針分析的結(jié)果為每一個(gè)函數(shù)建立一個(gè)指針別名圖。指針別名圖的結(jié)點(diǎn)代表該函數(shù)中可以訪問的內(nèi)存空間,邊代表結(jié)點(diǎn)之間的指向關(guān)系,指針分析還需要建立函數(shù)調(diào)用者指針和被調(diào)用者指針的指向圖之間的關(guān)系; 51.3 :采用自底向上的方式遍歷線程間完整的函數(shù)調(diào)用圖,識(shí)別出共享變量。
      3.如權(quán)利要求2所述的基于靜態(tài)共享變量識(shí)別的動(dòng)態(tài)數(shù)據(jù)競爭檢測方法,其特征在于,所述函數(shù)信息包括符號(hào)表信息、中間表不結(jié)構(gòu)。
      4.如權(quán)利要求I所述的基于靜態(tài)共享變量識(shí)別的動(dòng)態(tài)數(shù)據(jù)競爭檢測方法,其特征在于,所述步驟S2具體包括 52.I :遍歷函數(shù)中間表示的過程中收集包含共享變量的基本塊集合; S2. 2 :復(fù)制每一個(gè)包含共享變量的基本塊,并且在基本塊中插入采樣檢查語句,進(jìn)行基本塊采樣; S2. 3 :編譯并鏈接經(jīng)插裝和采樣后的源代碼,生成插裝和采樣后的可執(zhí)行的二進(jìn)制代碼。
      5.如權(quán)利要求4所述的基于靜態(tài)共享變量識(shí)別的動(dòng)態(tài)數(shù)據(jù)競爭檢測方法,其特征在于,所述步驟S2. 2中在復(fù)制基本塊之前包括步驟S2. 2. I :檢查一個(gè)基本塊是否屬于某個(gè)循環(huán),若是,則復(fù)制整個(gè)外層循環(huán)并插入采樣檢查語句。
      6.如權(quán)利要求5所述的基于靜態(tài)共享變量識(shí)別的動(dòng)態(tài)數(shù)據(jù)競爭檢測方法,其特征在于,所述步驟S2. 2. I之前還包括步驟比較包含共享變量的基本塊數(shù)量和函數(shù)中總的基本塊數(shù)量,若兩者之間的比例小于預(yù)定閾值,則步驟S2. 2中不執(zhí)行步驟S2. 2. 1,也不復(fù)制基本塊,而進(jìn)行函數(shù)粒度的采樣。
      7.如權(quán)利要求6所述的基于靜態(tài)共享變量識(shí)別的動(dòng)態(tài)數(shù)據(jù)競爭檢測方法,其特征在于,所述預(yù)定閾值為10%。
      8.如權(quán)利要求I 7中任一項(xiàng)所述的基于靜態(tài)共享變量識(shí)別的動(dòng)態(tài)數(shù)據(jù)競爭檢測方法,其特征在于,所述采樣方式采用軟件采樣、突發(fā)性采樣、可適應(yīng)的采樣及線程敏感采樣中的一種或幾種。
      全文摘要
      本發(fā)明公開了一種基于靜態(tài)共享變量識(shí)別的動(dòng)態(tài)數(shù)據(jù)競爭檢測方法,包括S1識(shí)別待檢測程序的共享變量;S2對所述待檢測程序中包含共享變量的基本塊進(jìn)行數(shù)據(jù)競爭檢測插裝和采樣,得到所述待檢測程序經(jīng)插裝和采樣后的二進(jìn)制代碼,所述基本塊是指一個(gè)連續(xù)的程序語句序列,控制流從它的開始進(jìn)入,并從它的末尾離開,中間沒有中斷或者分支;S3運(yùn)行所述二進(jìn)制代碼動(dòng)態(tài)檢測所述點(diǎn)檢測程序中的數(shù)據(jù)競爭。本發(fā)明對含有共享變量的基本塊進(jìn)行插裝和采樣,避免了代碼膨脹問題,大大減小了系統(tǒng)開銷。
      文檔編號(hào)G06F11/36GK102760095SQ20111010379
      公開日2012年10月31日 申請日期2011年4月25日 優(yōu)先權(quán)日2011年4月25日
      發(fā)明者盛田維, 蔣運(yùn)韞, 鄭緯民, 陳文光 申請人:清華大學(xué)
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
      1