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

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

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

Linux為什么中斷不允許休眠

麥辣雞腿堡 ? 來源:嵌入式Linux系統(tǒng)開發(fā) ? 作者:Jasonangel ? 2023-09-27 17:48 ? 次閱讀

Linux 為什么中斷不允許休眠?

所謂的睡眠,就是調(diào)用 schedule 讓出 CPU,調(diào)度器選擇另外個(gè)進(jìn)程繼續(xù)執(zhí)行,這個(gè)過程涉及進(jìn)程??臻g的切換。

1、假如中斷上下文中調(diào)用 schedule ,此時(shí)獲取的 struct thread info 數(shù)據(jù)結(jié)構(gòu)是發(fā)生中斷時(shí)該進(jìn)程棧信息,而不是中斷上下文調(diào)用 schedule 時(shí)任何信息。這就導(dǎo)致再也無法返回中斷上下文中調(diào)用 schedule 的地方。

2、中斷上下文處于關(guān)中斷中,需要發(fā)送個(gè) EOI 通知 GIC 中斷處理結(jié)束,GIC 和CPUinterface 才會(huì)進(jìn)入下一次中斷處理。如果中途 schedule,那么整個(gè)系統(tǒng)的中斷都會(huì)被屏蔽掉。

一般進(jìn)入中斷后,需要關(guān)中斷,也會(huì)關(guān)搶占,同時(shí)注意不可以調(diào)用schedule。

unhandled interrupt 和 spurious interrupt

未處理中斷和虛假中斷

在中斷處理的最后,總會(huì)有一段代碼如下:

irqreturn_t

handle_irq_event_percpu(structirq_desc*desc,structirqaction*action)

{

……

if(!noirqdebug)

note_interrupt(irq,desc,retval);

returnretval;

}

note_interrupt就是進(jìn)行unhandled interrupt和spurious interrupt處理的。對(duì)于這類中斷,linux kernel有一套復(fù)雜的機(jī)制來處理,你可以通過command line參數(shù)(noirqdebug)來控制開關(guān)該功能。

當(dāng)發(fā)生了一個(gè)中斷,但是沒有被處理(有兩種可能,一種是根本沒有注冊(cè)的 specific handler,第二種是有 handler,但是 handler 否認(rèn)是自己對(duì)應(yīng)的設(shè)備觸發(fā)的中斷),怎么辦?毫無疑問這是一個(gè)異常狀況,那么 kernel 是否要立刻采取措施將該 IRQ disable 呢?也不太合適,畢竟 interrupt request 信號(hào)線是允許共享的,直接 disable 該 IRQ 有可能會(huì)下手太狠,kernel 采取了這樣的策略:如果該 IRQ 觸發(fā)了 100,000 次,但是 99,900 次沒有處理,在這種條件下,我們就是 disable 這個(gè) interrupt request line。

中斷線和中斷號(hào)是一個(gè)意思。

相關(guān)的控制數(shù)據(jù)在中斷描述符中,如下:

structirq_desc{

……

unsignedintirq_count;--------記錄發(fā)生的中斷的次數(shù),每100,000則回滾

unsignedlonglast_unhandled;-----上一次沒有處理的IRQ的時(shí)間點(diǎn)

unsignedintirqs_unhandled;------沒有處理的次數(shù)

……

}

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

    關(guān)注

    68

    文章

    10804

    瀏覽量

    210829
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11207

    瀏覽量

    208717
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    895

    瀏覽量

    41349
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    為保醫(yī)療質(zhì)量不允許開展互聯(lián)網(wǎng)醫(yī)療診治?

    互聯(lián)網(wǎng)時(shí)代,很多人都已經(jīng)習(xí)慣了通過網(wǎng)絡(luò)解決很多問題,包括看病找醫(yī)生。在線輔助問診是否合法?對(duì)此,國家衛(wèi)計(jì)委新聞發(fā)言人宋樹立表示:互聯(lián)網(wǎng)上涉及醫(yī)學(xué)診斷治療是不允許開展的,只能做健康方面的咨詢。
    發(fā)表于 04-13 09:46 ?1121次閱讀

    “tc1.3”編譯報(bào)錯(cuò)不允許使用向量表編號(hào)TriCore?怎么解決?

    “tc1.3” TriCore? 不允許使用矢量表編號(hào)
    發(fā)表于 01-22 08:33

    NgdBuild:486不允許屬性“SIM_MODE”

    “BU2_U0_blk_mem_generator_valid.cstr_ramloop [3] .ram.r_v5_noinit.ram_SP.WIDE_P RIM36.TDP”上不允許屬性“SIM_MODE”。該屬性將被忽略。這可以嗎?ISE版本
    發(fā)表于 10-10 11:48

    請(qǐng)問SPI不允許在main函數(shù)中對(duì)SD卡操作嗎?

    請(qǐng)問下,我在一個(gè)定時(shí)中斷里使用原子哥寫SD的程序?qū)慡D卡,在mian函數(shù)的循環(huán)里同樣也有對(duì)SD卡的操作(SD_Init(),MSD_WriteBuffer),這時(shí)我發(fā)現(xiàn)程序有一定概率在出定時(shí)中斷后不跑了,把main函數(shù)中對(duì)SD卡操作的函數(shù)都去掉后就完全沒有這個(gè)問題了。難道
    發(fā)表于 07-11 04:35

    電壓互感器二次側(cè)為什么不允許短路

    變壓器的工作原理是什么?變壓器是由哪些部分組成的?電流互感器二次側(cè)為什么不允許開路?電壓互感器二次側(cè)為什么不允許短路?
    發(fā)表于 08-09 06:48

    電流互感器與電壓互感器二次側(cè)為什么不允許開路

    變壓器的工作原理是什么?變壓器是由哪些部分組成的?電流互感器二次側(cè)為什么不允許開路?電壓互感器二次側(cè)為什么不允許短路?
    發(fā)表于 08-23 06:14

    FreeRTOS的某些內(nèi)容是不允許MDMA讀取內(nèi)存嗎?

    驗(yàn)證了 RAM 地址存在于 AXI 內(nèi)存中,所以似乎 FreeRTOS 的某些內(nèi)容不允許 MDMA 讀取內(nèi)存?// Write operationMDMA_Channel0-&gt
    發(fā)表于 12-07 07:47

    STM32H7時(shí)鐘為什么不允許調(diào)整?

    時(shí)鐘不允許調(diào)整。通常它不應(yīng)該發(fā)出警告。
    發(fā)表于 12-14 06:52

    TTL門電路為什么輸出端不允許并聯(lián)相接呢?

    TTL門電路為什么輸出端不允許并聯(lián)相接?希望能從三極管的角度解釋一下,最好有圖解。
    發(fā)表于 04-28 11:06

    不允許32位傳輸?shù)膇.MX 8是否有限制?

    字節(jié)的 DMA 傳輸(DMA 控制器在設(shè)備內(nèi)部,因此它會(huì)進(jìn)行 PCI 總線主傳輸)并且該傳輸從未開始或完成,所以看起來 4 字節(jié)的傳輸大小是太小。較大的傳輸(8 個(gè)或更多字節(jié))工作正常。 不允許
    發(fā)表于 05-11 06:34

    網(wǎng)絡(luò)電視不允許直播世界杯?

    2018世界杯比賽不允許在互聯(lián)網(wǎng)電視平臺(tái)上進(jìn)行賽事的直播和延時(shí)播出,否則都屬于違規(guī),只能在賽事結(jié)束后提供比賽點(diǎn)播服務(wù)。
    的頭像 發(fā)表于 06-08 09:44 ?5242次閱讀

    AVR單片機(jī)外部中斷實(shí)例及下載燒錄的方法

    中斷向量位于Boot Loader 區(qū),那么執(zhí)行應(yīng)用區(qū)代碼時(shí)中斷是禁止的。401不允許運(yùn)行于Boot Loader 區(qū)的LPM 指令從應(yīng)用區(qū)讀取數(shù)據(jù)。若中斷向量位于Boot Load
    發(fā)表于 04-09 15:05 ?2145次閱讀
    AVR單片機(jī)外部<b class='flag-5'>中斷</b>實(shí)例及下載燒錄的方法

    為什么中性線不允許單獨(dú)斷開

     在我們通常所用的TN系統(tǒng)中,不管單相電路還是三相電路,零線和地線一樣在任何情況下都是不允許斷開的,也就是說零線不允許經(jīng)過開關(guān)和保險(xiǎn)絲。零線在電工學(xué)里用PEN表示,中性線用N表示,保護(hù)線(地線)用PE表示。我們生活中所用、通常所說的零線實(shí)際上在電工學(xué)里叫“中性線”。
    的頭像 發(fā)表于 12-22 03:42 ?9365次閱讀
    為什么中性線<b class='flag-5'>不允許</b>單獨(dú)斷開

    減速機(jī)為什么不允許有軸向竄動(dòng)現(xiàn)象?

    減速機(jī)為什么不允許有軸向竄動(dòng)現(xiàn)象? 減速機(jī)是一種用來改變輸入軸傳動(dòng)力矩和轉(zhuǎn)速的裝置。作為機(jī)械設(shè)備的核心部件之一,減速機(jī)在各個(gè)行業(yè)中起到非常重要的作用,廣泛應(yīng)用于機(jī)械傳動(dòng)系統(tǒng)中。 在減速機(jī)
    的頭像 發(fā)表于 11-23 10:46 ?916次閱讀

    電力系統(tǒng)不允許發(fā)生諧振的原因

    電力系統(tǒng)諧振是指在電力系統(tǒng)中,由于某些特定條件的滿足,導(dǎo)致系統(tǒng)內(nèi)部的電感和電容元件相互配合,形成一種振蕩現(xiàn)象。諧振現(xiàn)象在電力系統(tǒng)中是不允許發(fā)生的,因?yàn)樗鼤?huì)帶來一系列嚴(yán)重的問題和危害。以下是對(duì)電力系統(tǒng)
    的頭像 發(fā)表于 08-22 14:21 ?501次閱讀