多線程程序的動態(tài)數(shù)據(jù)競爭檢測技術(shù)研究
發(fā)布時間:2021-12-18 00:30
隨著多核硬件的廣泛普及,多線程編程技術(shù)也被應(yīng)用到計算機領(lǐng)域的各個方面,多線程編程技術(shù)能夠更加充分的利用多核眾核設(shè)備的超強計算能力,在同一時間執(zhí)行多項任務(wù),還可成倍加速某些任務(wù),特別適用于某些需要快速響應(yīng)用戶操作的任務(wù)。但多線程程序在執(zhí)行過程中會產(chǎn)生大量可能的交錯,執(zhí)行順序具有極大的不確定性,導(dǎo)致嚴(yán)重的并發(fā)錯誤,數(shù)據(jù)競爭是一種具有高度破壞性的并發(fā)錯誤。數(shù)據(jù)競爭會導(dǎo)致數(shù)據(jù)損壞、內(nèi)存泄漏、程序崩潰或不正確的執(zhí)行等現(xiàn)象。當(dāng)多個線程同時訪問同一共享變量,至少存在一次寫訪問操作時,會引發(fā)數(shù)據(jù)競爭。由于無序的線程交錯,在調(diào)試過程中數(shù)據(jù)競爭會隨機出現(xiàn)或消失,查找和重現(xiàn)它們異常困難。因此,檢測出數(shù)據(jù)競爭錯誤是提高并發(fā)軟件可靠性和安全性急需解決的問題。國內(nèi)外研究人員已經(jīng)提出了許多靜態(tài)和動態(tài)程序分析技術(shù)來檢測數(shù)據(jù)競爭。然而,在檢測開銷、精度、覆蓋率、速度等方面還有改進的空間。文中提出一種基于優(yōu)化的FastTrack算法和鎖模式相結(jié)合的動態(tài)混合數(shù)據(jù)競爭檢測算法AsampleLock。該算法利用采樣技術(shù),監(jiān)控同一時刻同時運行的來自并發(fā)線程的函數(shù)對;通過預(yù)競爭檢測獲得真正涉及數(shù)據(jù)競爭的內(nèi)存訪問對;為了降低算法受線...
【文章來源】:中原工學(xué)院河南省
【文章頁數(shù)】:75 頁
【學(xué)位級別】:碩士
【部分圖文】:
論文主要研究內(nèi)容結(jié)構(gòu)圖
10富并且強大的編程接口,它提供的API允許注入任意C/C++代碼,Pin的插樁粒度包括指令級(Instruction)插樁、軌跡級(Trace)插樁、鏡像級(Image)插樁、函數(shù)級(Routine)插樁。圖2.2Pin的軟件架構(gòu)Pin的軟件架構(gòu)如圖2.2所示[36],Pin由虛擬機、代碼緩存和調(diào)用Pintool的插樁API三部分組成。Pin虛擬機包括即時編譯器、模擬執(zhí)行單元、代碼調(diào)度器三部分。整個架構(gòu)的運轉(zhuǎn)流程為:Pin獲得了應(yīng)用程序的控制權(quán)后,虛擬機通過協(xié)調(diào)它的組件開始工作一起執(zhí)行應(yīng)用程序,即時編譯器編譯并插樁應(yīng)用程序代碼,然后由調(diào)度程序啟動該代碼。2.2.2DynamoRIO平臺DynamoRIO[37]是另一個運用廣泛的動態(tài)二進制插樁框架,是Google上的一個開源項目,在其上可為Windows、Linux、Android構(gòu)建稱為客戶端的程序分析工具,并支持商用的IA-32、AMD64、ARM、AArch64指令集架構(gòu)。DynamoRIO是應(yīng)用程序和操作系統(tǒng)之間的中間平臺,能夠觀察和操縱應(yīng)用程序中每個被執(zhí)行的指令。DynamoRIO使用回調(diào)機制來處理二進制可執(zhí)行代碼,通過在事件上設(shè)置回調(diào),可以輕松地操縱目標(biāo)程序的二進制可執(zhí)行代碼。DynamoRIO可用于創(chuàng)建程序分析、插樁、優(yōu)化和翻譯等動態(tài)分析工具[38],[39]。DynamoRIO通過將應(yīng)用程序代碼復(fù)制到代碼緩存器中,一次一個基本塊,來執(zhí)行目標(biāo)應(yīng)用程序。通過上下文切換將代碼緩存從DynamoRIO的調(diào)度狀態(tài)輸入到應(yīng)用程序的狀態(tài)[40]。DynamoRIO提供了豐富的API接口,開發(fā)
11者可以利用這些接口實現(xiàn)對指令、基本塊、線程、系統(tǒng)調(diào)用等的監(jiān)控,從而實現(xiàn)二進制分析插件的開發(fā)[41]。DynamoRIO的內(nèi)核由三個模塊組成:調(diào)度器(Dispatch)、基本塊構(gòu)建器(Basicblockbuilder)和代碼緩存器(Codecache),DynamoRIO將以單個控制轉(zhuǎn)移指令結(jié)尾的指令序列視為基本塊[42],DynamoRIO的基本塊通常包含大約6或7條指令,但是少數(shù)基本塊也可達到50條以上的指令。圖2.3描述了DynamoRIO的運轉(zhuǎn)流程,三個模塊分別負責(zé)的任務(wù)以及各個組件的運轉(zhuǎn)流程為:首先,基本塊構(gòu)建器把待測程序分割成許多基本塊,并對基本塊進行插樁,然后把插樁完畢的基本塊存儲到代碼緩存器中,最后,調(diào)度器來截獲和操縱基本塊中每個被執(zhí)行的指令,對內(nèi)存事件進行監(jiān)控,并協(xié)調(diào)其它模塊進行工作[43]。以上介紹了兩種動態(tài)插樁工具的整體架構(gòu)和各自的特點,雖然DynamoRIO跟Pin相比具有較高的性能,但本文選擇了IntelPin插樁工具,其主要原因如下:在運行大型軟件程序時,Pin比DynamoRIO更穩(wěn)定可靠,本文采用的基準(zhǔn)測試集均為大型程序;DynamoRIO的API并不是最友好和易于使用的,但Pin給開發(fā)人員提供了豐富易用的API接口函數(shù)以及大量詳細的樣例Pintool的源代碼;Pin插樁平臺的插樁粒度較多,較靈活,本文實驗涉及多種插樁粒度;Pin通過動態(tài)編譯插樁時,配合多種優(yōu)化方法,執(zhí)行效率更高。圖2.3DynamoRIO運轉(zhuǎn)流程圖
【參考文獻】:
期刊論文
[1]程序分析研究進展[J]. 張健,張超,玄躋峰,熊英飛,王千祥,梁彬,李煉,竇文生,陳振邦,陳立前,蔡彥. 軟件學(xué)報. 2019(01)
[2]并發(fā)程序中數(shù)據(jù)競爭檢測方法[J]. 張楊,梁亞楠,張冬雯,孫仕欣. 計算機應(yīng)用. 2019(01)
[3]競態(tài)漏洞檢測方法綜述[J]. 趙世斌,周天陽,朱俊虎,王清賢. 計算機工程與應(yīng)用. 2018(03)
[4]基于訪問對的有害數(shù)據(jù)競爭定位方法[J]. 張高舉,郭紹忠,王磊. 信息工程大學(xué)學(xué)報. 2017(06)
[5]基于動態(tài)二進制分析的網(wǎng)絡(luò)協(xié)議逆向解析[J]. 何永君,舒輝,熊小兵. 計算機工程. 2010(09)
[6]多線程程序數(shù)據(jù)競爭的靜態(tài)檢測[J]. 吳萍,陳意云,張健. 計算機研究與發(fā)展. 2006(02)
[7]面向Java的分布式程序測試系統(tǒng)[J]. 顧慶,陳道蓄,謝立,孫鐘秀. 軟件學(xué)報. 2003(04)
博士論文
[1]并發(fā)程序缺陷檢測技術(shù)研究[D]. 薄莉莉.中國礦業(yè)大學(xué) 2019
[2]并發(fā)缺陷的檢測與規(guī)避研究[D]. 禹振.哈爾濱工業(yè)大學(xué) 2017
碩士論文
[1]基于二進制指令插樁的C++程序缺陷檢測技術(shù)的研究與實現(xiàn)[D]. 何磊.北京郵電大學(xué) 2017
[2]多線程程序數(shù)據(jù)競爭檢測和驗證方法研究[D]. 楊振.哈爾濱工業(yè)大學(xué) 2016
[3]動態(tài)數(shù)據(jù)競爭檢測研究[D]. 汪雄峰.華中科技大學(xué) 2016
[4]多線程程序數(shù)據(jù)競爭靜態(tài)檢測方法研究[D]. 簡道紅.大連理工大學(xué) 2013
[5]基于線程摘要的C/C++數(shù)據(jù)競爭檢測研究[D]. 姚欣洪.北京郵電大學(xué) 2011
本文編號:3541261
【文章來源】:中原工學(xué)院河南省
【文章頁數(shù)】:75 頁
【學(xué)位級別】:碩士
【部分圖文】:
論文主要研究內(nèi)容結(jié)構(gòu)圖
10富并且強大的編程接口,它提供的API允許注入任意C/C++代碼,Pin的插樁粒度包括指令級(Instruction)插樁、軌跡級(Trace)插樁、鏡像級(Image)插樁、函數(shù)級(Routine)插樁。圖2.2Pin的軟件架構(gòu)Pin的軟件架構(gòu)如圖2.2所示[36],Pin由虛擬機、代碼緩存和調(diào)用Pintool的插樁API三部分組成。Pin虛擬機包括即時編譯器、模擬執(zhí)行單元、代碼調(diào)度器三部分。整個架構(gòu)的運轉(zhuǎn)流程為:Pin獲得了應(yīng)用程序的控制權(quán)后,虛擬機通過協(xié)調(diào)它的組件開始工作一起執(zhí)行應(yīng)用程序,即時編譯器編譯并插樁應(yīng)用程序代碼,然后由調(diào)度程序啟動該代碼。2.2.2DynamoRIO平臺DynamoRIO[37]是另一個運用廣泛的動態(tài)二進制插樁框架,是Google上的一個開源項目,在其上可為Windows、Linux、Android構(gòu)建稱為客戶端的程序分析工具,并支持商用的IA-32、AMD64、ARM、AArch64指令集架構(gòu)。DynamoRIO是應(yīng)用程序和操作系統(tǒng)之間的中間平臺,能夠觀察和操縱應(yīng)用程序中每個被執(zhí)行的指令。DynamoRIO使用回調(diào)機制來處理二進制可執(zhí)行代碼,通過在事件上設(shè)置回調(diào),可以輕松地操縱目標(biāo)程序的二進制可執(zhí)行代碼。DynamoRIO可用于創(chuàng)建程序分析、插樁、優(yōu)化和翻譯等動態(tài)分析工具[38],[39]。DynamoRIO通過將應(yīng)用程序代碼復(fù)制到代碼緩存器中,一次一個基本塊,來執(zhí)行目標(biāo)應(yīng)用程序。通過上下文切換將代碼緩存從DynamoRIO的調(diào)度狀態(tài)輸入到應(yīng)用程序的狀態(tài)[40]。DynamoRIO提供了豐富的API接口,開發(fā)
11者可以利用這些接口實現(xiàn)對指令、基本塊、線程、系統(tǒng)調(diào)用等的監(jiān)控,從而實現(xiàn)二進制分析插件的開發(fā)[41]。DynamoRIO的內(nèi)核由三個模塊組成:調(diào)度器(Dispatch)、基本塊構(gòu)建器(Basicblockbuilder)和代碼緩存器(Codecache),DynamoRIO將以單個控制轉(zhuǎn)移指令結(jié)尾的指令序列視為基本塊[42],DynamoRIO的基本塊通常包含大約6或7條指令,但是少數(shù)基本塊也可達到50條以上的指令。圖2.3描述了DynamoRIO的運轉(zhuǎn)流程,三個模塊分別負責(zé)的任務(wù)以及各個組件的運轉(zhuǎn)流程為:首先,基本塊構(gòu)建器把待測程序分割成許多基本塊,并對基本塊進行插樁,然后把插樁完畢的基本塊存儲到代碼緩存器中,最后,調(diào)度器來截獲和操縱基本塊中每個被執(zhí)行的指令,對內(nèi)存事件進行監(jiān)控,并協(xié)調(diào)其它模塊進行工作[43]。以上介紹了兩種動態(tài)插樁工具的整體架構(gòu)和各自的特點,雖然DynamoRIO跟Pin相比具有較高的性能,但本文選擇了IntelPin插樁工具,其主要原因如下:在運行大型軟件程序時,Pin比DynamoRIO更穩(wěn)定可靠,本文采用的基準(zhǔn)測試集均為大型程序;DynamoRIO的API并不是最友好和易于使用的,但Pin給開發(fā)人員提供了豐富易用的API接口函數(shù)以及大量詳細的樣例Pintool的源代碼;Pin插樁平臺的插樁粒度較多,較靈活,本文實驗涉及多種插樁粒度;Pin通過動態(tài)編譯插樁時,配合多種優(yōu)化方法,執(zhí)行效率更高。圖2.3DynamoRIO運轉(zhuǎn)流程圖
【參考文獻】:
期刊論文
[1]程序分析研究進展[J]. 張健,張超,玄躋峰,熊英飛,王千祥,梁彬,李煉,竇文生,陳振邦,陳立前,蔡彥. 軟件學(xué)報. 2019(01)
[2]并發(fā)程序中數(shù)據(jù)競爭檢測方法[J]. 張楊,梁亞楠,張冬雯,孫仕欣. 計算機應(yīng)用. 2019(01)
[3]競態(tài)漏洞檢測方法綜述[J]. 趙世斌,周天陽,朱俊虎,王清賢. 計算機工程與應(yīng)用. 2018(03)
[4]基于訪問對的有害數(shù)據(jù)競爭定位方法[J]. 張高舉,郭紹忠,王磊. 信息工程大學(xué)學(xué)報. 2017(06)
[5]基于動態(tài)二進制分析的網(wǎng)絡(luò)協(xié)議逆向解析[J]. 何永君,舒輝,熊小兵. 計算機工程. 2010(09)
[6]多線程程序數(shù)據(jù)競爭的靜態(tài)檢測[J]. 吳萍,陳意云,張健. 計算機研究與發(fā)展. 2006(02)
[7]面向Java的分布式程序測試系統(tǒng)[J]. 顧慶,陳道蓄,謝立,孫鐘秀. 軟件學(xué)報. 2003(04)
博士論文
[1]并發(fā)程序缺陷檢測技術(shù)研究[D]. 薄莉莉.中國礦業(yè)大學(xué) 2019
[2]并發(fā)缺陷的檢測與規(guī)避研究[D]. 禹振.哈爾濱工業(yè)大學(xué) 2017
碩士論文
[1]基于二進制指令插樁的C++程序缺陷檢測技術(shù)的研究與實現(xiàn)[D]. 何磊.北京郵電大學(xué) 2017
[2]多線程程序數(shù)據(jù)競爭檢測和驗證方法研究[D]. 楊振.哈爾濱工業(yè)大學(xué) 2016
[3]動態(tài)數(shù)據(jù)競爭檢測研究[D]. 汪雄峰.華中科技大學(xué) 2016
[4]多線程程序數(shù)據(jù)競爭靜態(tài)檢測方法研究[D]. 簡道紅.大連理工大學(xué) 2013
[5]基于線程摘要的C/C++數(shù)據(jù)競爭檢測研究[D]. 姚欣洪.北京郵電大學(xué) 2011
本文編號:3541261
本文鏈接:http://sikaile.net/shoufeilunwen/xixikjs/3541261.html
最近更新
教材專著