在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用靜態分析查找并發錯誤

星星科技指導員 ? 來源:嵌入式計算設計 ? 作者:Paul Anderson ? 2022-06-19 10:00 ? 次閱讀

盡管幾十年來小型化的進步已經為單處理器帶來了巨大的性能提升,但這個時代似乎即將結束。使用單芯片實現顯著額外性能的最佳選擇是通過多個內核,但前提是軟件可以編程以利用它們。

不幸的是,并發編程很困難。即使是只熟悉單線程編程的專家級程序員也常常無法理解并發程序容易受到諸如競爭條件、死鎖和饑餓等全新類別的缺陷的影響。人類很難推理并發程序,并且編程語言本身的某些方面不適合并發。因此,專家們經常偶然發現這些危害。以下討論描述了常見的并發缺陷,并解釋了靜態分析工具如何在不執行程序的情況下發現此類缺陷。

競爭條件的后果

當多個執行線程訪問一個共享的數據并且其中至少一個線程在沒有顯式同步操作來分離訪問的情況下更改該數據的值時,就會出現競爭條件。根據兩個線程的交錯,系統可能會處于不一致的狀態。

種族條件特別陰險,因為它們可以無限期地潛伏而未被發現,并且只在極少數情況下出現,表現出難以診斷和重現的神秘癥狀。特別是,它們很可能通過對已部署軟件的測試而存活下來。充其量,這意味著增加開發時間;在最壞的情況下,后果可能是毀滅性的。

2003 年東北大停電如此普遍的一個原因是計算機化能源管理系統中的競爭條件導致向運營商傳達誤導性信息。正如 Kevin Poulsen 在 2004 年的一篇文章 ( www.securityfocus.com/news/8412 ) 中指出的那樣,“該漏洞有一個以毫秒為單位的機會窗口。” 在測試過程中出現此類問題的可能性微乎其微。在另一種情況下,iOS 4.0 到 4.1(現已修復)中的競爭條件意味著任何可以物理訪問 iPhone 3G 或更高版本的人都可以在某些條件下繞過其密碼鎖定。

圖 1 顯示了一個簡單競爭條件的示例。帶有入口和出口傳感器的制造裝配線維護當前生產線上的項目的運行計數。每次項目進入行時,此計數都會增加,每次項目到達行尾并退出時,此計數就會減少。如果一個項目在另一個項目退出的同時進入該行,則計數應該遞增然后遞減(或反之亦然),以使凈變化為零。但是,正常的遞增和遞減不是原子操作;它們由一系列單獨的指令組成,這些指令首先從內存中加載值,然后在本地對其進行修改,最后將其存儲回內存中。如果更新事務是在沒有足夠保護措施的多線程系統中處理的,由于傳感器讀取和寫入共享數據:計數,因此可能會出現競爭條件。圖 1 中的交錯導致錯誤計數為 69。也有可能導致錯誤計數為 71 的交錯,以及一些正確導致計數為 70 的交錯。

圖 1:競爭條件導致裝配線上的項目計數不正確。

poYBAGKug2yAZX4YAAFML_Us9r8240.png

對于這個例子和一般的競爭條件錯誤,標準調試技術可能由于幾個原因而無效。

很少發生意味著發現問題的機會減少。如果問題不經常出現,它可能永遠不會在測試期間出現。這個問題是雙重的。首先,兩個線程中可能的指令交錯數量可能很大,并且隨著指令數量的增加而急劇增加。這種現象被稱為組合爆炸。如果線程 A 執行M條指令,線程 B 執行N條指令,則兩個線程的可能交錯為:

等式 1

pYYBAGKug3OAajrHAAAvbcFv1Vc399.png

例如,給定兩個普通線程,每個線程有 10 條指令,則指令有 184,756 種可能的交錯。現實世界的軟件龐大而復雜;測試每一個交織是根本不可能的。其次,即使測試人員可以識別出一些值得檢查的交錯,也很難設置測試用例來確保它們確實發生,因為線程調度可能是高度不確定的。

如果詳盡的測試難以解決,那么開發人員可以做什么?一種非常有用的方法是靜態分析。CodeSonar 等高級靜態分析工具使用高度復雜的符號執行技術同時考慮許多可能的執行路徑和交錯。這些技術可以在不需要執行程序的情況下找到競爭條件和其他并發錯誤。

有幾個因素使比賽狀況診斷變得困難。首先,癥狀可能令人困惑。在圖 1 示例中,運行計數通常是正確的,但有時太高,有時太低。其次,不習慣考慮多線程編程的特定缺陷的程序員可能會在可能出現競爭條件之前花費大量時間對代碼感到困惑。高級靜態分析工具在這方面特別有用。他們通過檢查共享內存位置的訪問模式來識別競爭條件;也就是說,他們關注的是種族本身,而不是它的癥狀。當識別出競爭條件時,高級靜態分析工具將報告它以及支持信息,以幫助用戶進行評估和調試。程序員的負擔大大減輕。

更復雜,更多錯誤

競爭條件通常通過使用鎖來保護共享資源來避免。但是,鎖可能會引入性能瓶頸,可能會阻止程序充分利用多核的潛力,因此程序員在使用它們時必須小心謹慎。編寫有效使用鎖的代碼可能很棘手,這種復雜性可能導致一組不同的問題,即死鎖和饑餓。

在死鎖中,兩個或多個線程相互阻止,因為每個線程都持有另一個線程需要的鎖。圖 2 顯示了如何使用用于保護兩個共享變量的兩個鎖出現死鎖。在此示例中,多條裝配線共享當前正在裝配的項目總數,第二個 bad_items 值記錄有多少成品未通過質量控制。一個線程在 count 上獲得鎖,另一個在 bad_items 上獲得鎖。兩個線程都無法獲得它需要的第二個鎖;因此既不能執行它的操作,也不能到達釋放鎖的地步。由于兩個更新都無法完成,因此兩個線程都完全卡住了。

圖 2:在兩個線程之間的死鎖中,兩個線程都無法前進。

poYBAGKug3yAXQzhAAIy7ley9hk593.png

靜態分析工具可以通過標記不同線程可以以不同順序獲取相同鎖的情況來識別存在死鎖風險的軟件,例如圖 2 中所示的線程。消除所有此類情況足以確保系統不會陷入死鎖。

饑餓是使用鎖的多線程程序中發生的另一個問題。如果一個線程正在等待另一個線程當前持有的資源需要很長時間,它可能會餓死。例如,假設上述制造自動化系統包括一個定期審核線程,該線程檢查所有進入和退出記錄,以確保運行計數與進入的總項目數相匹配,而不是退出的總項目數。審計線程需要鎖定計數和所有傳感器,因此所有更新都必須等待審計完成。如果審核運行很長時間,更新可能會顯著延遲。如果運行時間過長,下一次審計可能會設法獲取所有鎖并在未完成的線程取得任何進展之前開始運行。在最壞的情況下,部分或全部更新可能永遠沒有機會運行。

靜態分析可以通過提出諸如“在持有鎖時是否調用長時間運行的庫函數?”之類的問題來提供重要的價值。CodeSonar 等工具還為用戶提供了添加自己檢查的機制。如果已知內部函數 f() 具有較長的運行時間,工程師可以添加自定義檢查,每當持有一個或多個鎖的線程調用 f() 時觸發警告。

多線程為嵌入式開發人員必須考慮的潛在錯誤添加了全新的類別,使得查找各種錯誤變得更加困難。最新一代的靜態分析工具可以幫助解決這兩個問題。

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2552

    文章

    51383

    瀏覽量

    756304
  • 嵌入式
    +關注

    關注

    5092

    文章

    19176

    瀏覽量

    307438
  • 計算機
    +關注

    關注

    19

    文章

    7534

    瀏覽量

    88582
收藏 人收藏

    評論

    相關推薦

    基于Vector工具進行CAN協議錯誤幀的分析實踐

    廣播發送的短幀結構,還體現在其錯誤檢測機制上。通過總線數據以及總線波形來分析總線故障時,CAN協議錯誤檢測機制中豐富的錯誤幀類型能讓定位問題的效率更高。
    的頭像 發表于 01-15 10:03 ?93次閱讀
    基于Vector工具進行CAN協議<b class='flag-5'>錯誤</b>幀的<b class='flag-5'>分析</b>實踐

    電橋電路的常見錯誤分析

    電橋電路的常見錯誤分析主要包括以下幾個方面: 一、電阻值不準確 電阻值不準確是電橋電路常見的錯誤之一。這可能是由于電阻本身的誤差,如電阻的標稱值與實際值存在偏差,或者電阻老化、溫度變化等因素導致
    的頭像 發表于 01-09 10:08 ?143次閱讀

    Linux文件查找

    Linux文件查找 1.find查找概述 為什么要有文件查找,因為很多時候我們可能會忘了某個文件所在的位置,此時就需要通過find來查找。 find命令可以根據不同的條件來進行
    的頭像 發表于 12-03 17:09 ?345次閱讀

    如何使用Ozone分析Cortex-M異常

    Ozone可以幫助用戶快速分析查找導致CPU故障的軟件bug。本文解釋如何使用Ozone的調試功能,深入了解Cortex-M架構上的這些錯誤
    的頭像 發表于 11-29 11:14 ?906次閱讀
    如何使用Ozone<b class='flag-5'>分析</b>Cortex-M異常

    汽車異構硬件平臺開發如何進行靜態代碼分析

    先進的靜態代碼分析工具,其新版本中引入的多CCT功能為開發人員提供了強大的支持,該功能不僅簡化了多編譯器環境下的代碼分析過程,還可以極大增強代碼的質量和安全性。
    的頭像 發表于 10-09 16:15 ?577次閱讀
    汽車異構硬件平臺開發如何進行<b class='flag-5'>靜態</b>代碼<b class='flag-5'>分析</b>

    Perforce靜態分析工具2024.2新增功能:Helix QAC全新CI/CD集成支持、Klocwork分析引擎改進和安全增強

    ?和Klocwork的最新版本對靜態分析工具進行了重大改進,通過盡早修復錯誤、降低開發成本和加快發布速度,使開發團隊實現左移。本文中,我們將概述2024.2版本的新特性和新功能。CI/CD和左移以
    的頭像 發表于 10-08 16:22 ?330次閱讀
    Perforce<b class='flag-5'>靜態</b><b class='flag-5'>分析</b>工具2024.2新增功能:Helix QAC全新CI/CD集成支持、Klocwork<b class='flag-5'>分析</b>引擎改進和安全增強

    如何查找線路漏電的方法和步驟

    線路漏電是電氣設備和線路中常見的故障之一,它不僅會導致設備損壞,還可能引發火災等安全事故。因此,查找和處理線路漏電問題至關重要。 確定漏電類型 首先,我們需要確定漏電的類型。漏電分為兩種:一種是接地
    的頭像 發表于 08-26 09:07 ?2449次閱讀

    中性點接地10 kV線路故障的查找方法

    隨著社會對供電可靠性的要求越來越高,快速查找10 kV線路故障顯得越來越重要。鑒于此,從各種技術、管理手段出發,分析查找中性點接地10 kV線路故障的方法,以求達到提高供電可靠性的目的。
    的頭像 發表于 08-13 17:08 ?131次閱讀
    中性點接地10 kV線路故障的<b class='flag-5'>查找</b>方法

    并發物聯網云平臺是什么

    并發物聯網云平臺是一種能夠處理大量設備同時連接并進行數據交換的云計算平臺。這種平臺通常被設計用來應對來自數以萬計甚至數十億計的物聯網設備的并發請求,保證系統的穩定性和響應速度。 首先,從技術層面
    的頭像 發表于 08-13 13:50 ?297次閱讀

    基于ANSYS的高速磨削電主軸動靜態性能分析

    以國產120MD60Y6型高速磨削電主軸為研究對象,使用有限元分析方法,基于ANSYS Workbench建立高速電主軸模型,先分析靜態特性,計算工作條件下電主軸前端所受徑向力和軸承徑向剛度;然后
    的頭像 發表于 08-05 11:20 ?152次閱讀
    基于ANSYS的高速磨削電主軸動<b class='flag-5'>靜態</b>性能<b class='flag-5'>分析</b>

    IAR通過多架構認證的靜態分析工具加速代碼質量自動化

    公司推出經TüV SüD認證的C-STAT靜態分析工具,適用于最新發布的IAR Embedded Workbench for RISC-V V3.30.2功能安全版。
    的頭像 發表于 06-19 15:49 ?421次閱讀

    有線以太網TCP轉無線wifi 雙頻2.4G+5.8G網關配置步驟

    無線靜態STA橋接:由上級AP(路由器/服務器)分配固定的IP/MAC地址供模塊鏈接,這樣實現了AP(路由器/服務器)控制多個終端,從而達到每個終端收發指令及采集數據和上級網絡具備唯一對應指向性,防止信號干擾和數據丟包、轉發錯誤等問題,實時在線監控每一臺獨立終端運行狀態達
    的頭像 發表于 06-13 10:58 ?980次閱讀
    有線以太網TCP轉無線wifi 雙頻2.4G+5.8G網關配置步驟

    如何設置靜態IP代理

    靜態IP
    jf_60146132
    發布于 :2024年04月29日 07:46:31

    淺談船舶電氣接地故障的查找及解決方法

    。作為影響供電可靠性因素之一的電氣絕緣性能逐漸成為各方關注的。文章對電力系統接地故障進行分析,并提出查找及解決方法,以期為相關工程案例提供參考。 關鍵詞:船舶電氣;接地故障;查找及解決方法 0引言 隨著現代船舶電氣自動化程度的
    的頭像 發表于 03-14 10:20 ?794次閱讀
    淺談船舶電氣接地故障的<b class='flag-5'>查找</b>及解決方法

    HarmonyOS如何使用異步并發能力進行開發

    一、并發概述 并發是指在同一時間段內,能夠處理多個任務的能力。為了提升應用的響應速度與幀率,以及防止耗時任務對主線程的干擾,HarmonyOS系統提供了異步并發和多線程并發兩種處理策略
    的頭像 發表于 02-18 09:18 ?579次閱讀
    主站蜘蛛池模板: 日本与大黑人xxxx | 国产男靠女免费视频网站 | 99久久99久久久精品齐齐鬼色 | 傲视影院午夜毛片 | 国产激情视频一区二区三区 | 婷婷综合七月激情啪啪 | 免费观看一级特黄三大片视频 | www.xxx.日本| 亚洲毛片免费在线观看 | 你懂的视频在线观看资源 | 国漫在线观看 | 婷婷六月综合网 | 免费视频性 | 亚洲精品亚洲人成毛片不卡 | 精品香港经典三级在线看 | 黄在线观看在线播放720p | 在线 | 一区二区三区四区 | 日本免费不卡在线一区二区三区 | 亚洲一本高清 | 久久精品亚洲 | 一级特黄高清完整大片 | 香蕉免费在线视频 | 亚洲 另类 在线 欧美 制服 | 久久久久国产一级毛片高清版 | 中文在线三级中文字幕 | 欧美性爽xxxⅹbbbb | 国产欧美色图 | 国产色司机在线视频免费观看 | 中国男女全黄大片一级 | bt种子搜索在线 | 国产在线高清精品二区色五郎 | 欧美在线bdsm调教一区 | 中文在线天堂网 | 久久久久久人精品免费费看 | 国产精品欧美久久久久天天影视 | 日本午夜大片免费观看视频 | 午夜影院在线免费 | 精品伊人久久香线蕉 | 亚洲三级黄色 | 黄色一区二区三区 | 欧美一区二区高清 |