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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用靜態(tài)分析查找并發(fā)錯(cuò)誤

星星科技指導(dǎo)員 ? 來源:嵌入式計(jì)算設(shè)計(jì) ? 作者:Paul Anderson ? 2022-06-19 10:00 ? 次閱讀

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

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

競爭條件的后果

當(dāng)多個(gè)執(zhí)行線程訪問一個(gè)共享的數(shù)據(jù)并且其中至少一個(gè)線程在沒有顯式同步操作來分離訪問的情況下更改該數(shù)據(jù)的值時(shí),就會(huì)出現(xiàn)競爭條件。根據(jù)兩個(gè)線程的交錯(cuò),系統(tǒng)可能會(huì)處于不一致的狀態(tài)。

種族條件特別陰險(xiǎn),因?yàn)樗鼈兛梢詿o限期地潛伏而未被發(fā)現(xiàn),并且只在極少數(shù)情況下出現(xiàn),表現(xiàn)出難以診斷和重現(xiàn)的神秘癥狀。特別是,它們很可能通過對(duì)已部署軟件的測試而存活下來。充其量,這意味著增加開發(fā)時(shí)間;在最壞的情況下,后果可能是毀滅性的。

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

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

圖 1:競爭條件導(dǎo)致裝配線上的項(xiàng)目計(jì)數(shù)不正確。

poYBAGKug2yAZX4YAAFML_Us9r8240.png

對(duì)于這個(gè)例子和一般的競爭條件錯(cuò)誤,標(biāo)準(zhǔn)調(diào)試技術(shù)可能由于幾個(gè)原因而無效。

很少發(fā)生意味著發(fā)現(xiàn)問題的機(jī)會(huì)減少。如果問題不經(jīng)常出現(xiàn),它可能永遠(yuǎn)不會(huì)在測試期間出現(xiàn)。這個(gè)問題是雙重的。首先,兩個(gè)線程中可能的指令交錯(cuò)數(shù)量可能很大,并且隨著指令數(shù)量的增加而急劇增加。這種現(xiàn)象被稱為組合爆炸。如果線程 A 執(zhí)行M條指令,線程 B 執(zhí)行N條指令,則兩個(gè)線程的可能交錯(cuò)為:

等式 1

pYYBAGKug3OAajrHAAAvbcFv1Vc399.png

例如,給定兩個(gè)普通線程,每個(gè)線程有 10 條指令,則指令有 184,756 種可能的交錯(cuò)。現(xiàn)實(shí)世界的軟件龐大而復(fù)雜;測試每一個(gè)交織是根本不可能的。其次,即使測試人員可以識(shí)別出一些值得檢查的交錯(cuò),也很難設(shè)置測試用例來確保它們確實(shí)發(fā)生,因?yàn)榫€程調(diào)度可能是高度不確定的。

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

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

更復(fù)雜,更多錯(cuò)誤

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

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

圖 2:在兩個(gè)線程之間的死鎖中,兩個(gè)線程都無法前進(jìn)。

poYBAGKug3yAXQzhAAIy7ley9hk593.png

靜態(tài)分析工具可以通過標(biāo)記不同線程可以以不同順序獲取相同鎖的情況來識(shí)別存在死鎖風(fēng)險(xiǎn)的軟件,例如圖 2 中所示的線程。消除所有此類情況足以確保系統(tǒng)不會(huì)陷入死鎖。

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

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

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

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2564

    文章

    52724

    瀏覽量

    764739
  • 嵌入式
    +關(guān)注

    關(guān)注

    5144

    文章

    19575

    瀏覽量

    315802
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7638

    瀏覽量

    90371
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    鴻蒙5開發(fā)寶藏案例分享---應(yīng)用并發(fā)設(shè)計(jì)

    ?** 鴻蒙并發(fā)編程實(shí)戰(zhàn)指南:解鎖ArkTS多線程黑科技** 嘿,開發(fā)者朋友們! 今天給大家扒一扒鴻蒙官方文檔里藏著的并發(fā)編程寶藏—— 100+實(shí)戰(zhàn)場景解決方案 !從金融理財(cái)?shù)接螒蜷_發(fā),從折疊屏適配
    發(fā)表于 06-12 16:19

    RK3568驅(qū)動(dòng)指南|第三篇-并發(fā)與競爭-第19章 并發(fā)與競爭實(shí)驗(yàn)

    RK3568驅(qū)動(dòng)指南|第三篇-并發(fā)與競爭-第19章 并發(fā)與競爭實(shí)驗(yàn)
    的頭像 發(fā)表于 02-24 16:26 ?517次閱讀
    RK3568驅(qū)動(dòng)指南|第三篇-<b class='flag-5'>并發(fā)</b>與競爭-第19章 <b class='flag-5'>并發(fā)</b>與競爭實(shí)驗(yàn)

    集成電路設(shè)計(jì)中靜態(tài)時(shí)序分析介紹

    本文介紹了集成電路設(shè)計(jì)中靜態(tài)時(shí)序分析(Static Timing Analysis,STA)的基本原理、概念和作用,并分析了其優(yōu)勢和局限性。 ? 靜態(tài)時(shí)序
    的頭像 發(fā)表于 02-19 09:46 ?544次閱讀

    ADC的靜態(tài)指標(biāo)有專用的分析工具嗎?

    請問:ADC的靜態(tài)指標(biāo)有專用的分析工具嗎?該指標(biāo)很少在評(píng)估ADC指標(biāo)時(shí)使用,是否該指標(biāo)不重要,應(yīng)用中什么情況下需要評(píng)估該指標(biāo)? 另外ADC的SNR = 6.02*N + 1.76 +10*log10(fs/2BW) 當(dāng)被采樣信號(hào)為單音時(shí) 該BW為多少?
    發(fā)表于 02-08 08:13

    基于Vector工具進(jìn)行CAN協(xié)議錯(cuò)誤幀的分析實(shí)踐

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

    電橋電路的常見錯(cuò)誤分析

    電橋電路的常見錯(cuò)誤分析主要包括以下幾個(gè)方面: 一、電阻值不準(zhǔn)確 電阻值不準(zhǔn)確是電橋電路常見的錯(cuò)誤之一。這可能是由于電阻本身的誤差,如電阻的標(biāo)稱值與實(shí)際值存在偏差,或者電阻老化、溫度變化等因素導(dǎo)致
    的頭像 發(fā)表于 01-09 10:08 ?1024次閱讀

    Linux文件查找

    Linux文件查找 1.find查找概述 為什么要有文件查找,因?yàn)楹芏鄷r(shí)候我們可能會(huì)忘了某個(gè)文件所在的位置,此時(shí)就需要通過find來查找。 find命令可以根據(jù)不同的條件來進(jìn)行
    的頭像 發(fā)表于 12-03 17:09 ?658次閱讀

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

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

    常見傅里葉變換錯(cuò)誤及解決方法

    傅里葉變換是一種數(shù)學(xué)工具,用于將信號(hào)從時(shí)域轉(zhuǎn)換到頻域,以便分析其頻率成分。在使用傅里葉變換時(shí),可能會(huì)遇到一些常見的錯(cuò)誤。 1. 采樣定理錯(cuò)誤 錯(cuò)誤描述: 在進(jìn)行傅里葉變換之前,沒有正確
    的頭像 發(fā)表于 11-14 09:42 ?2066次閱讀

    汽車異構(gòu)硬件平臺(tái)開發(fā)如何進(jìn)行靜態(tài)代碼分析

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

    Perforce靜態(tài)分析工具2024.2新增功能:Helix QAC全新CI/CD集成支持、Klocwork分析引擎改進(jìn)和安全增強(qiáng)

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

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

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

    中性點(diǎn)接地10 kV線路故障的查找方法

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

    并發(fā)物聯(lián)網(wǎng)云平臺(tái)是什么

    并發(fā)物聯(lián)網(wǎng)云平臺(tái)是一種能夠處理大量設(shè)備同時(shí)連接并進(jìn)行數(shù)據(jù)交換的云計(jì)算平臺(tái)。這種平臺(tái)通常被設(shè)計(jì)用來應(yīng)對(duì)來自數(shù)以萬計(jì)甚至數(shù)十億計(jì)的物聯(lián)網(wǎng)設(shè)備的并發(fā)請求,保證系統(tǒng)的穩(wěn)定性和響應(yīng)速度。 首先,從技術(shù)層面
    的頭像 發(fā)表于 08-13 13:50 ?507次閱讀

    基于ANSYS的高速磨削電主軸動(dòng)靜態(tài)性能分析

    以國產(chǎn)120MD60Y6型高速磨削電主軸為研究對(duì)象,使用有限元分析方法,基于ANSYS Workbench建立高速電主軸模型,先分析靜態(tài)特性,計(jì)算工作條件下電主軸前端所受徑向力和軸承徑向剛度;然后
    的頭像 發(fā)表于 08-05 11:20 ?152次閱讀
    基于ANSYS的高速磨削電主軸動(dòng)<b class='flag-5'>靜態(tài)</b>性能<b class='flag-5'>分析</b>
    主站蜘蛛池模板: 美女被免网站在线视频 | 久久久免费观看 | 一级特黄特黄的大片免费 | 欧美精品区 | 丁香五月缴情在线 | 色婷婷久久综合中文久久蜜桃 | 校园 春色 欧美 另类 小说 | 操操操干干干 | 国产精品天天看 | 日韩特黄毛片 | 波多野结衣在线免费视频 | 一本到卡二卡三卡视频 | jizz性欧美12| 欧美福利精品 | 黄色在线观看视频网站 | 久久精品国产免费中文 | 一本在线免费视频 | 免费在线观看大片影视大全 | 日韩一级在线播放免费观看 | 波多野结衣久久精品 | 亚洲精品福利网站 | 久热国产在线 | 岛国毛片 | 中文字幕第十页 | 看全色黄大色大片免费久久怂 | 色五月激情小说 | 香蕉网影院在线观看免费 | 99热最新在线| 国产精品一区在线观看你懂的 | 欧美日韩亚洲色图 | 高清在线观看视频 | 免费色视频网站 | 韩国三级hd | 天天操天天舔 | 欧美色图亚洲综合 | 色偷偷网 | 人人做天天爱夜夜爽中字 | 99成人国产精品视频 | 久久久久久午夜精品 | 日本免费大黄在线观看 | 亚色视频在线 |