日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Linux內(nèi)中斷與外中斷的異同(linux內(nèi)中斷與外中斷區(qū)別)

計算機中,中斷是一種用于通知CPU出現(xiàn)了重要事件的機制。中斷使得CPU能夠在不停止當(dāng)前正在執(zhí)行的程序的情況下,及時地響應(yīng)外部設(shè)備的事件,從而提高了計算機系統(tǒng)的效率。中斷分類有很多種,其中較為常見的是內(nèi)中斷和外中斷。本文將重點討論Linux操作系統(tǒng)中的內(nèi)中斷和外中斷的異同點。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:國際域名空間、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、巧家網(wǎng)站維護、網(wǎng)站推廣。

一、內(nèi)中斷和外中斷的概念

內(nèi)中斷:是指進程執(zhí)行過程中發(fā)生的事件,由于這種中斷事件都是在CPU內(nèi)部發(fā)生并處理,因此稱之為內(nèi)中斷。Linux內(nèi)核使用軟件中斷(定時器中斷,I/O中斷等)和硬件中斷(CPU異常)兩種方式來產(chǎn)生內(nèi)中斷。

外中斷:是指CPU在執(zhí)行指令時,接收來自外部設(shè)備的中斷請求。外部設(shè)備會向處理器發(fā)出請求,要求其停止當(dāng)前程序的執(zhí)行,暫時轉(zhuǎn)向處理該設(shè)備所發(fā)出的中斷請求,并返回到該請求發(fā)出之前的程序段繼續(xù)執(zhí)行。外中斷由硬件產(chǎn)生,與CPU打交道,例如,網(wǎng)卡、鼠標(biāo)、鍵盤等都是能夠產(chǎn)生中斷請求的外設(shè)。

二、內(nèi)中斷和外中斷的區(qū)別

1. 響應(yīng)方式不同

內(nèi)中斷和外中斷的響應(yīng)方式不同,內(nèi)中斷是由處理器自身進行處理,而外中斷是由外部設(shè)備對處理器發(fā)出中斷請求,處理器停止當(dāng)前程序的執(zhí)行。

2. 原因不同

內(nèi)中斷和外中斷產(chǎn)生的原因也不同,內(nèi)中斷是處理器在執(zhí)行指令過程中,由自身產(chǎn)生的異常事件,例如CPU超時、訪問非法內(nèi)存地址等。而外中斷是由外部設(shè)備發(fā)出請求,例如鍵盤輸入等。

3. 硬件執(zhí)行方式不同

內(nèi)中斷由CPU通過檢測處理器自身的運行狀態(tài)而觸發(fā)的,通常不需要特殊的硬件支持。而外中斷在處理器硬件中需要外設(shè)提供支持,例如網(wǎng)卡的中斷管腳等。

4. 響應(yīng)時間不同

內(nèi)中斷和外中斷的響應(yīng)時間也不同。內(nèi)中斷通常響應(yīng)較快,因為它們總是在當(dāng)前進程被打斷時立即發(fā)生。外中斷由于必須由外部設(shè)備發(fā)出并經(jīng)過處理器響應(yīng),因此響應(yīng)時間通常較長。

三、Linux系統(tǒng)中的中斷

在Linux系統(tǒng)中,所有的中斷最終都被內(nèi)核處理。系統(tǒng)中有兩個主要的中斷類型:軟中斷和硬中斷。

1. 軟中斷

Linux系統(tǒng)中的軟中斷通常是由一些編程接口或系統(tǒng)服務(wù)調(diào)用,例如在網(wǎng)絡(luò)服務(wù)中,會使用軟中斷來處理TCP/IP協(xié)議棧。此外,軟中斷還被用于實現(xiàn)CPU資源共享,以及多CPU系統(tǒng)中的任務(wù)管理。

2. 硬中斷

硬中斷是由外部設(shè)備發(fā)出并由處理器根據(jù)處理設(shè)備指定的優(yōu)先級來響應(yīng)。在Linux系統(tǒng)中,外部設(shè)備通過IRQ線向處理器發(fā)送中斷請求,該請求被處理器轉(zhuǎn)發(fā)給具體的設(shè)備驅(qū)動程序,驅(qū)動程序會使用硬件設(shè)備的中斷服務(wù)例程來處理這些請求。

內(nèi)中斷和外中斷雖然在基本概念上與區(qū)別上有所不同,但在Linux操作系統(tǒng)中都是非常重要的機制。Linux系統(tǒng)通過內(nèi)中斷和外中斷來監(jiān)控系統(tǒng)的異常情況和外部設(shè)備的請求,以提高系統(tǒng)的安全性和效率。對于Linux程序員來說,了解中斷的工作原理、機制以及響應(yīng)過程等,對于理解運行過程中的問題和定位系統(tǒng)故障都是非常重要的。

相關(guān)問題拓展閱讀:

  • AVR單片機中,舉例說明什么是外部中斷和內(nèi)部中斷。說明外部中斷(INT0和INT1)有哪幾種觸發(fā)方式?
  • linux 內(nèi)核軟中斷 是在中斷狀態(tài)嗎

AVR單片機中,舉例說明什么是外部中斷和內(nèi)部中斷。說明外部中斷(INT0和INT1)有哪幾種觸發(fā)方式?

呵呵 西科大的吧?找答案?參考答案見下面:

外部中斷是指升辯簡芯片引腳態(tài)發(fā)生變化向CPU申請中斷,比如下降沿灶弊、上升沿、電平變化等,具體可設(shè)置特殊功能寄存器來開啟或屏蔽;復(fù)位引腳比較特殊,中數(shù)后PC指針變?yōu)?x0000;

內(nèi)部中斷是吵褲指內(nèi)部功能模塊達到到中斷條件向CPU申請中斷,比如TCC、看門狗等,可參照不同芯片的技術(shù)文檔說明進行設(shè)置

5種

linux 內(nèi)核軟中斷 是在中斷狀態(tài)嗎

硬中斷:

1. 硬中斷是由硬件產(chǎn)生的,比如,像磁盤,網(wǎng)卡,鍵盤,時鐘等。每個設(shè)備或設(shè)備集都有它自己的IRQ(中斷請求)?;贗RQ,CPU可以將相應(yīng)的請求分發(fā)到對應(yīng)的硬件驅(qū)動上(注:硬件驅(qū)動通常是內(nèi)核中的一個子程序,而不是一個獨立的進程)。

2. 處理中斷的驅(qū)動是需要運行在CPU上的,因此,當(dāng)中斷產(chǎn)生的時候,CPU會中斷當(dāng)前正在運行的任務(wù),來處理中斷。在有多核心的系統(tǒng)上,一個中斷通常只能中斷一顆CPU(也有一種特殊的情況,就是在大型主機上是有硬件通道的,它可以在沒有主CPU的支持下,可以同時處理多個中斷。)。

3. 硬中斷可以直接中斷CPU。它會引起內(nèi)核中相關(guān)的代碼被觸發(fā)。對于那些需要花費一些時間去處理的進程,中斷代碼本身也可以被其他的硬中斷中斷。

4. 對于時鐘中斷,內(nèi)核調(diào)度代碼會將當(dāng)前正在運行的進程掛起,從而讓其他的進程來運行。它的存在是為了讓調(diào)度代碼(或稱為調(diào)度器)可以調(diào)度多任務(wù)。

軟中斷:

1. 軟中斷的處理非常像硬中斷。然而,它們僅僅是由當(dāng)前正在運行的進程所產(chǎn)生的。

2. 通常,軟中斷是一些對I/O的請求。這些請求會調(diào)用內(nèi)核中可以調(diào)度I/O發(fā)生的程序。對于某些設(shè)備,I/O請求需要被立即處理,而磁盤I/O請求通??梢耘抨牪⑶铱梢陨院筇幚?。根據(jù)I/O模型的不同,進程或許會被掛起直到I/O完成,此時內(nèi)核調(diào)度器就會選擇另一個進程去運行。I/O可以在進程之間產(chǎn)生并且調(diào)度過程通常和磁盤I/O的方式是相同。

3. 軟中斷僅與內(nèi)核相聯(lián)系。而內(nèi)核主要負責(zé)對需要運行的任何其他的進程進行調(diào)度。一些內(nèi)核允許設(shè)備驅(qū)動的一些部分存在于用戶空間,并且當(dāng)需要的時候內(nèi)核也會調(diào)度這個進程去運行。

4. 軟中斷并不會直接中斷CPU。也只有當(dāng)前正在運行的代碼(或進程)才會產(chǎn)生軟中斷。這種中斷是一種需要內(nèi)核為正在運行的進程去做一些事情(通常為I/O)的請求。有一個特殊的軟中斷是Yield調(diào)用,它的作用是請求內(nèi)核調(diào)度器去查看是否有一些其他的進程可以運行。

問題解答:

1. 問:對于軟中斷,I/O操作是否是由內(nèi)核中的I/O設(shè)備驅(qū)動程序完成?

答:對于I/O請求,內(nèi)核會將這項工作分派給合適的內(nèi)核驅(qū)動程序,這個程序會對I/O進行隊列化,以可以稍后處理(通常是磁盤I/O),或如果可能可以立即執(zhí)行它。通常,當(dāng)對硬中斷進行回應(yīng)的時候,這個隊列會被驅(qū)動所處理。當(dāng)一個I/O請求完成的時候,下一個在隊列中的I/O請求就會發(fā)送到這個設(shè)備上。

2. 問:軟中斷所經(jīng)過的操作流程是比硬中斷的少嗎?換句話說,對于軟中斷就是:進程 ->內(nèi)核中的設(shè)備驅(qū)動程序;對于硬中斷:硬件->CPU->內(nèi)核中的設(shè)備驅(qū)動程序?

答:是的,軟中斷比硬中斷少了一個硬件發(fā)送信號的步驟。產(chǎn)生軟中斷的進程一定是當(dāng)前正在運行的進程,因此它們不會中斷CPU。但是它們會中斷調(diào)用代碼的流程。

如果硬件需要CPU去做一些事情,那么這個硬件會使CPU中斷當(dāng)前正在運行的代碼。而后CPU會將當(dāng)前正在運行進程的當(dāng)前狀態(tài)放到堆棧(stack)中,以至于之后可以返回繼續(xù)運行。這種中斷可以停止一個正在運行的進程;可以停止正處理另一個中斷的內(nèi)核代碼;或者可以停止空閑進程。

先說說環(huán)境

1.硬件:DELL R410

2.網(wǎng)卡:板載1000M BCM5709

2.OS: RHEL 5.5 x86_64

3.KERNEL: 2.6.18-194.el5

所出現(xiàn)的問題

1.網(wǎng)卡毫無征兆的down掉,而且沒有任何log信息

2.當(dāng)流量增大時,不到理論上限的1/3時機器出現(xiàn)網(wǎng)絡(luò)延遲嚴重,伴隨大量的丟包

3.機器的cpu軟中斷不均衡,只有1個cpu處理軟中斷,并且該cpu的軟中斷周期性的達到100%

4.內(nèi)外網(wǎng)網(wǎng)卡做nat丟包數(shù)據(jù)量不一致,差別很大,不在同一個數(shù)量級

想必之一個問題,大部分使用bcm網(wǎng)卡,rhel 5.3以后得機器都會遇到這種情況,網(wǎng)上的資料比較的多,我也不多啰嗦了,直接升級網(wǎng)卡驅(qū)動就可以解決了。第二,三,四其實是同一個問題都是由于網(wǎng)卡中斷過多,cpu處理不過來(準(zhǔn)確的說,cpu分配不均衡,導(dǎo)致只有一個cpu處理,處理不過來),引起丟包,那么為什么兩個網(wǎng)卡丟包的數(shù)量級不一樣呢,下面從原理上進行解釋,既然是做nat多出口,那么就有大量的路由信息,是一個網(wǎng)絡(luò)應(yīng)用,當(dāng)一個數(shù)據(jù)包請求nat時,數(shù)據(jù)包先被網(wǎng)卡驅(qū)動的數(shù)據(jù)接收,網(wǎng)卡收到數(shù)據(jù)時,觸發(fā)中斷。在中斷執(zhí)行例程中,把skb掛入輸入隊列,并觸發(fā)軟中斷。稍后的某個時刻,當(dāng)軟中斷執(zhí)行時,再從該隊列中把skb取下來,投遞給上層協(xié)議。

如果在這個過程當(dāng)中cpu沒有及時處理完這個隊列導(dǎo)致網(wǎng)卡的buffer滿了,網(wǎng)卡將直接丟棄該數(shù)據(jù)包。這里牽涉到2個隊列,一個是tx,一個是rx,它的隊列的大小默認都是255,可以通過ethtool -g eth0(你指定的網(wǎng)卡),為了防止丟包,當(dāng)時我通過ethtool -G eth0 rx xxx 把它調(diào)大了,但是調(diào)大以后,還是杯水車薪啊,通過ethtool -S eth0 |grep rx_fw_discards,發(fā)現(xiàn)數(shù)值還是不停的在增長,也就是說還在不停的丟包,cpu處理不過來,這時候找到網(wǎng)上有人在利用lvs時也遇到這個問題,cpu軟中斷分配不均衡,只有一個cpu處理軟中斷的問題,網(wǎng)上的資料五花八門,有建議使用修改設(shè)備中斷方式。即通過修改設(shè)置中斷/proc/irq/${網(wǎng)卡中斷號}/p_affinit這時候,我也修改過,沒有什么實質(zhì)的效果,

從官方的bug報告,

,其中提到rhel5.6已經(jīng)修復(fù)了這個bug,這其中也提到目前我們的版本可以升級內(nèi)核到kernel-2.6.18-194.3.1.el5可以解決這個問題。

紅帽子官方修復(fù)報告中的說明如下:

,我們升級了這個內(nèi)核算是解決單核處理軟中斷的問題,升級后各個cpu已經(jīng)能夠平均的分配這個軟中斷,也不丟包了,那么為什么cpu處理不過來這個軟中斷呢,數(shù)據(jù)量并不是特別的大啊,上層應(yīng)用接到這個數(shù)據(jù)包后,通過路由協(xié)議,找到某個出口給nat出去,找nat出口是需要查找路由表,查詢路由表是一件很耗時的工作,而每一個不同源地址,不同目的地址的數(shù)據(jù)包都得重新查找一次路由表,導(dǎo)致cpu處理不過來,為了提高路由查詢的效率。Linux內(nèi)核引用了路由緩存,用于減少對路由表的查詢。Linux的路由緩存是被設(shè)計來與協(xié)議無關(guān)的獨立子系統(tǒng),查看路由緩存可以通過命令route -Cn,由于路由緩存當(dāng)中是采用hash算法進行才找,它的查找速度非常之快,既然是cache就有超時這一概念。系統(tǒng)默認為10分鐘,可以通過這個文件進行查看和修改/proc/sys/net/ipv4/route/secret_interval。而當(dāng)路由緩存當(dāng)中未找到或者已經(jīng)超時的路由信息才開始查找路由表,查詢到的結(jié)果保存在路由緩存中。如果路由表越大,那么查詢的時間就越長,一個新的連接進來后或者是老連接cache超時后,占用大量的cpu查詢時間,導(dǎo)致cpu周期性的軟中斷出現(xiàn)100%,而兩個網(wǎng)卡丟包的情況來看不均衡也是因為用戶的數(shù)據(jù)包是經(jīng)過其中一個網(wǎng)卡進來后查詢路由表耗時過長,cpu處理不過來,導(dǎo)致那塊網(wǎng)卡的隊列滿了,丟包嚴重。當(dāng)然在路由表變動不大的情況下可以加大cache的時間,修改上述內(nèi)容后,從我監(jiān)測的情況來看,扛流量能力得到了大大的提升。

linux內(nèi)中斷與外中斷區(qū)別的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于linux內(nèi)中斷與外中斷區(qū)別,Linux內(nèi)中斷與外中斷的異同,AVR單片機中,舉例說明什么是外部中斷和內(nèi)部中斷。說明外部中斷(INT0和INT1)有哪幾種觸發(fā)方式?,linux 內(nèi)核軟中斷 是在中斷狀態(tài)嗎的信息別忘了在本站進行查找喔。

香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。


文章標(biāo)題:Linux內(nèi)中斷與外中斷的異同(linux內(nèi)中斷與外中斷區(qū)別)
標(biāo)題來源:http://m.5511xx.com/article/dhhiccj.html