pc解讀9:中斷機制的引入

來源:互聯網
上載者:User

在前面的文章中,我們理解到為了讓靈活的軟體來控制電腦,我們有了很多精巧的設計。cpu可以解析執行一些列指令,指令的組合組成程式。程式裝入記憶體中,由cpu 自動一條一條的解析執行,而且巧妙的實現了指令的跳轉。同時,巧妙的引入了裝置控制器(裝置配接器)來控制裝置,cpu與裝置控制器之間通過橋和匯流排串連在一起,通過匯流排協議進行互動。cpu通過與裝置管理員的互動實現對裝置的讀寫和控制。這樣看起來已很完美,在這種機制下,我們可以寫出千變萬化的軟體來使用我們的硬體功能。但是,這裡面還隱藏著一些問題。

為什麼需要中斷機制
如果我們的軟體執行過程中,不用與外部互動,程式永遠按部就班執行,不需要幹預,不需要人機互動,那確實有前面的機制就夠了。但是我們在使用過程中發現,我們的需求不止這些。如我們開機之後,有時想上網,有時像聽歌,有時寫寫部落格,這種想法是隨機的突發的,程式不可能預Crowdsourced Security Testing道。針對這樣的需求,我們必須提供人機互動手段。比如在軟體執行過程中有人動態通知軟體現在需要幫我幹什麼活。

人機互動如何?呢,經典配置是鍵盤和滑鼠等輸入裝置的引入和顯示器等輸出裝置的引入。也許有人會問,引入這類裝置的裝置管理員io控制,cpu不就可以控制他們了嗎,有什麼不一樣的嗎?還真有點不同。以前的那種方式適合於隨時都可以對裝置進行讀寫,而對於鍵盤和滑鼠,只能讀,而且並不是每次讀都有值,只有在人偶爾興起的時候“寫”入了值,才有的讀。當然,我們可以隔一段時間就去讀一次,這樣確實能起到效果,但是效率是不是有點低呢?

所以,對於這類裝置的控制,我們引入了中斷控制的思想。裝置的介面上有一條線是插斷要求線。當鍵盤點擊事件發生後,硬體會自動觸發插斷要求訊號。這個請求訊號會通到cpu, cpu在執行完每一條指令後,會“感應”下插斷要求訊號,如果有,就會觸發中斷處理流程。大致是這樣的,首先對當前運行環境進行儲存,然後由硬體機制擷取是誰申請的中斷,擷取中斷號,根據中斷號找到對應的中斷處理常式即軟體部分,然後將執行權交給中斷處理常式去執行。執行完後恢複以前的運行環境。

鍵盤中斷為例
以鍵盤使用為例,我們可以這樣進行控制。首先系統應該準備有鍵盤中斷處理常式,每當按鍵事件觸發後,鍵盤中斷處理常式會將按鍵事件存入到記憶體緩衝區中。同時在程式中,需要擷取按鍵資訊時,則查詢那個緩衝區,看有沒有按鍵資訊,不斷輪詢,直到有按鍵資訊。我們發現這裡也是要輪詢的,而且還多了個中斷處理流程,有意義嗎?當然有。以前輪詢的是裝置控制器的io空間,每次查詢需要佔用匯流排,消耗資源多而且慢,現在輪詢的是記憶體空間,速度快且不佔用io匯流排,減輕了系統的負擔。

通過這篇文章,我們應該對中斷機制有一個初步的瞭解,至於軟體部分如何利用硬體中斷機制來為應用程式服務,那就屬於軟體架構考慮的範疇了。同時我們可以感受一下電腦設計之美。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.