www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 電子電路開發(fā)學(xué)習(xí)
[導(dǎo)讀]關(guān)注、星標(biāo)公眾號 ,直達(dá)精彩內(nèi)容 ID:技術(shù)讓夢想更偉大 作者:李肖遙 摸水了一周,準(zhǔn)備在家里好好敲敲代碼,趕趕稿子,正當(dāng)我專心輸出的時候,被老婆打斷了。 娃拉臭了,趕緊過來!語氣中帶著一絲絲我害怕的味道。 怎么辦?沒辦法只有過去換尿布咯,三兩下,



關(guān)注、星標(biāo)公眾號 ,直達(dá)精彩內(nèi)容

ID:技術(shù)讓夢想更偉大

作者:李肖遙

摸水了一周,準(zhǔn)備在家里好好敲敲代碼,趕趕稿子,正當(dāng)我專心輸出的時候,被老婆打斷了。

娃拉臭了,趕緊過來!語氣中帶著一絲絲我害怕的味道。

怎么辦?沒辦法只有過去換尿布咯,三兩下,搞定!

之后,我繼續(xù)開始肝,但是心想,要是娃再哭鬧了,老婆是不是會罵人了?

想著不行,我得去看看,于是我每隔幾分鐘就去瞅瞅,媳婦看到我這么用心,笑開了花!

是的,從中我也悟出了中斷與輪詢的味道,今天我們來看看這兩者的內(nèi)涵與區(qū)別。

中斷

在嵌入式開發(fā)過程中,使用到處理器的時候,中斷是我們必不可少的元素。

中斷的基本概念

中斷是一種硬件機(jī)制,在CPU在正常運(yùn)行程序的過程中,中斷可以隨時發(fā)生

由預(yù)選安排或各種隨機(jī)的內(nèi)外部事件,一般稱為中斷源,發(fā)出中斷請求,使CPU中斷正在運(yùn)行的程序,并通過將控制權(quán)傳遞給服務(wù)設(shè)備的中斷處理程序來響應(yīng),這個過程稱為程序中斷

中斷的本質(zhì)

一般認(rèn)為中斷是外部設(shè)備向處理器發(fā)起的請求事件,這還不夠徹底,中斷可以說是是處理器對外開放的實(shí)時受控接口。

比如計算機(jī)系統(tǒng)中,如果沒有中斷,計算機(jī)所有的程序都是定論的,我們事先就可以知道其運(yùn)行的全部過程,無法交互,相當(dāng)于一個加速器。

有中斷后,外部服務(wù)程序可能打斷當(dāng)前任務(wù)。

CPU“正在執(zhí)行的程序”與“隨時可能發(fā)生的服務(wù)”,二者形成了異步關(guān)系,由人實(shí)時控制的中斷輸入,是無法預(yù)測的。

中斷可以看作是一種“硬件輪詢”。即本質(zhì)上,CPU會通過讀取外部信號來判斷CPU的下一步狀態(tài)。

中斷處理方式

設(shè)備管理中,高速的處理器和低速的輸入輸出設(shè)備相對來說,會降低整體效率,為了減少程序直接控制方式中CPU的等待時間,提高系統(tǒng)的并行工作程度,采用中斷處理方式是很有必要的。

在I/O設(shè)備中斷方式下,CPU與I/O設(shè)備之間數(shù)據(jù)的傳輸步驟如下:

  1. 在某個進(jìn)程需要數(shù)據(jù)時,發(fā)出指令啟動輸入輸出設(shè)備,準(zhǔn)備要處理的數(shù)據(jù);

  2. 在進(jìn)程發(fā)出指令啟動設(shè)備之后,該進(jìn)程放棄處理器,等待相關(guān)I/O操作完成。此時,進(jìn)程調(diào)度程序會調(diào)度其他就緒進(jìn)程使用處理器。

  3. 當(dāng)I/O操作完成時,輸入輸出設(shè)備控制器通過中斷請求線向處理器發(fā)出中斷信號,處理器收到中斷信號之后,轉(zhuǎn)向預(yù)先設(shè)計好的中斷處理程序,對數(shù)據(jù)傳送工作進(jìn)行相應(yīng)的處理。

  4. 得到了數(shù)據(jù)的進(jìn)程,轉(zhuǎn)入就緒狀態(tài)。在隨后的某個時刻,進(jìn)程調(diào)度程序會選中該進(jìn)程繼續(xù)工作。

CPU是怎么知道中斷發(fā)生的

舉個例子,比如說鍵盤,按下鍵盤Enter鍵時,cpu是怎么樣知道我按下了Enter鍵而不是Shift?

首先說明cpu不會知道你按下的哪個鍵,cpu只會按著機(jī)器指令的執(zhí)行順序,一條一條的執(zhí)行機(jī)器指令。

cpu只知道按設(shè)計好的邏輯執(zhí)行指令,不管這個指令是干嘛的。

知道你按下哪個鍵的是操作系統(tǒng),操作系統(tǒng)是根據(jù)中斷控制器以及相應(yīng)的寄存器的狀態(tài)判斷是不是中斷。

所以當(dāng)你按下一個鍵,這個鍵的地址馬上被寫入RAM中,同時發(fā)出中斷信號,CPU獲取中斷信號,就會去執(zhí)行中斷程序。

發(fā)生中斷時CPU怎么知道程序的地址?

中斷產(chǎn)生時,程序需要跳轉(zhuǎn)到某個地址去運(yùn)行該段的程序,那么CPU是不是要讀整個內(nèi)存然后去找中斷向量表呢?

不是的,不需要去讀取整個內(nèi)存,而是通過映射的關(guān)系。

例如在x86架構(gòu)中,中斷向量表的位置保存在IDTR寄存器里,CPU通過這個寄存器就能找到中斷向量表,然后根據(jù)中斷號就可以找到具體的中斷入口了。

CPU檢測到中斷信號時,怎么知道是發(fā)給哪個進(jìn)程的?

這個問題是我在知乎上看到的,也是極大激發(fā)我的興趣,對我們理解中斷也有極大的好處。

首先我們需要知道:中斷并不直接把數(shù)據(jù)送給用戶進(jìn)程的,中斷通知的是驅(qū)動程序,而不關(guān)心當(dāng)前正在執(zhí)行的是哪個進(jìn)程。

而進(jìn)程操作都是一樣的:保存現(xiàn)場,進(jìn)入內(nèi)核,執(zhí)行需要的操作,返回中斷前的現(xiàn)場,繼續(xù)進(jìn)程執(zhí)行。

一個系統(tǒng)的的中斷系統(tǒng)通常是類似這樣的組成,包括設(shè)備的中斷、中斷控制器、CPU的中斷

設(shè)備的中斷

指設(shè)備要產(chǎn)生一個事件來通知CPU,事件的產(chǎn)生的方法有很多。對設(shè)備“關(guān)中斷”,指的是讓這個設(shè)備停止發(fā)出中斷信號,如果中斷控制器已經(jīng)獲得這個中斷信號,那么這個中斷信號還是會報到CPU上的。

中斷控制器

指對多個設(shè)備的中斷進(jìn)行采樣,排隊,分發(fā)的機(jī)制。對中斷控制器說:關(guān)中斷,是讓中斷控制器不要給CPU(或者上級)發(fā)送中斷信號了,設(shè)備報不報信號上來,這些信號是否被排隊,那是另一個問題。

CPU的中斷

指CPU核上有一條中斷線,當(dāng)這條線加上合適的電平或者信號,CPU核就會從當(dāng)前的執(zhí)行上下文中,直接跳轉(zhuǎn)到中斷處理程序中執(zhí)行。在CPU的角度上關(guān)中斷,就是不要執(zhí)行“跳轉(zhuǎn)到中斷處理程序”這個動作。

中斷方式的優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

I/O設(shè)備中斷方式使處理器的利用率顯著提高;

支持多道程序和I/O設(shè)備的并行操作,提高了效率。

缺點(diǎn)

各種各樣的輸入輸出設(shè)備通過中斷處理方式進(jìn)行并行操作,使中斷次數(shù)增加,會造成CPU無法響應(yīng)中斷;

如果在緩沖區(qū)裝滿數(shù)據(jù)之后發(fā)生中斷。那么在數(shù)據(jù)傳送過程中,發(fā)生中斷的機(jī)會較多,將耗去大量的CPU處理時間。

輪詢

什么是輪詢

輪詢是一種CPU決策如何提供周邊設(shè)備服務(wù)的方式。

在輪詢過程中,由CPU定時發(fā)出詢問,依序詢問每一個周邊設(shè)備是否需要其服務(wù)。

每個設(shè)備都有一個指示命令就緒的位,指示該設(shè)備的狀態(tài)。

當(dāng)此狀態(tài)就緒即給予服務(wù),服務(wù)結(jié)束后再問下一個周邊,接著不斷周而復(fù)始。

輪詢方式

I/O設(shè)備的程序輪詢是計算機(jī)系統(tǒng)對I/O設(shè)備的一種管理方式。它定時對各種設(shè)備輪流詢問一遍有無處理要求。

輪流詢問之后,有要求的,則加以處理。

在處理I/O設(shè)備的要求之后,處理機(jī)返回繼續(xù)工作。

輪詢的優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

在一些應(yīng)用中可以增強(qiáng)了程序的實(shí)時性...

缺點(diǎn)

能處理的輸入輸出設(shè)備的數(shù)量也是有一定限度的。

程序輪詢占用CPU的處理時間,效率較低。

中斷和輪詢之間的區(qū)別

  1. 中斷時,設(shè)備會通知CPU引起注意;而在輪詢中,CPU會穩(wěn)定地檢查設(shè)備是否需要注意。

  2. 中斷不是協(xié)議,而是一種硬件機(jī)制;輪詢反之。

  3. 在中斷中,該設(shè)備由中斷處理程序提供服務(wù);輪詢時,該設(shè)備由CPU維修。

  4. 中斷可以隨時發(fā)生;輪詢時,CPU會以固定的間隔穩(wěn)定地對設(shè)備進(jìn)行投票。

  5. 在中斷中,中斷請求線用作指示設(shè)備需要維修的指示;在輪詢時,命令就緒位用作指示,表明設(shè)備需要維修。

  6. 在中斷中,一旦任何設(shè)備將其中斷,處理器就會受到干擾;在輪詢中,處理器通過重復(fù)檢查每個設(shè)備的命令就緒位來浪費(fèi)無數(shù)的處理器周期。

巨人的肩膀

https://www.zhihu.com/question/47862508 https://www.cnblogs.com/jhxk/articles/1893314.html https://www.eet-china.com/mp/a20627.html

推薦閱讀:


    
             
              
嵌入式編程專輯
Linux 學(xué)習(xí)專輯
C/C++編程專輯

關(guān)注 微信公眾號『技術(shù)讓夢想更偉大』,后臺回復(fù)“m”查看更多內(nèi)容,回復(fù)“ 加群 ”加入技術(shù)交流群。

長按前往圖中包含的公眾號關(guān)注

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉
關(guān)閉