ucos OS_ENTER_CRITICAL

來源:互聯網
上載者:User

 

 今天又看了一下ucos保護臨界段代碼,ucos是利用禁止中斷來保護臨界段的。

ucos給我們提供了三種方法:

一:直接關中斷和直接開中斷。即成對使用,保證臨界段的安全。

二:先把原來的中斷狀態壓入棧中,然後再關閉中斷。恢複時直接從棧中返回原來儲存的中斷狀態。

三:先儲存原來的中斷狀態到一個變數中,然後再關閉中斷。

 

三種情況我都說完了,下面我說一下為什麼有這三種形態:

其實,這三種方法從應用上可分為兩種,可嵌套和不可嵌套。

其實大家分析一下,所謂保護臨界段代碼就是關中斷,在作業系統內部本身就是關中斷、然後開中斷。這是沒有問題的,但大家想一下,作業系統給使用者提供了一些編程介面,當使用者希望用同樣關中斷的方法來保護共用資料時。比如使用者寫的代碼如下:

關中斷

調用系統服務

其他動作

開中斷

大家想一下,本來使用者想儲存從使用者關中斷和開中斷這些代碼的,不過你調用了作業系統的服務,如果你是用的方法是不可嵌套的,那在退出作業系統代碼時已經開中斷了。違背了使用者的願望。所以我們作業系統提供可嵌套的關 開中斷的方法。這種嵌套是針對高層應用程式的。在作業系統內部這個嵌套是沒有任何意義的。

那有一點疑惑可能你會提出,那中斷最好是支援嵌套了,是,這個沒錯。但大家想一想我們想嵌套,就必須儲存原來的狀態寄存器的值,而前提是機器要有支援讀狀態寄存器的指令。如果沒有這樣的指令,只能採取第一種最不好的方案了。

這也是為什麼ucos要分這三個情況。它是定義了一個宏,關中斷和開中斷時用這個宏做。這個宏用條件編譯實現具體的關中斷和開中斷的方法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.