os中很多操作是必須保證不被打斷的,方法有很多,比如禁止中斷,採用訊號燈建立臨界區等等。相對於粗魯地禁止掉中斷,利用臨界區的方法更加靈活。
臨界區的實現依賴於對某一參考資料的原子修改。
在x86中,使用了帶字首lock的test and set指令來實現對訊號的原子修改。
在mips中用了一種新方法:配套使用ll(link load,鏈結載入)和sc(store conditionally,條件儲存)指令。硬體保證自最後的ll開始,如果後繼執行沒有競爭發生(當前指令流沒有被中斷過),sc才會成功地寫指定位置,並且它還會返回乙個0或者1的值到暫存器中指示成功還是失敗。1為成功,0為失敗。比如:
ll t1, 0(t0) #執行ll指令,硬體開始監控如果以上**沒有被中斷(競爭未發生),則sc執行後t1暫存器內儲存的值被設定為1,否則被設定為0。#some other insts here, modify t1, set sem, etc
sc t1, 0(t0) #執行是否成功依賴於前面是否發生過競爭
beq t1, zero, tryagain
有了ll/sc,我們可以確切地知道訊號燈是否設定成功,於是也就可以實現臨界區了。ll/sc是為多處理器引入的,但是,即使在單處理器環境下它同樣適用。它避免了禁用中斷的問題,可以減少最壞情況下中斷延遲時帶來的影響。
reference:《see mips run 2nd》 5.8.4
MIPS系列筆記 臨界區的支援
os中很多操作是必須保證不被打斷的,方法有很多,比如禁止中斷,採用訊號燈建立臨界區等等。相對於粗魯地禁止掉中斷,利用臨界區的方法更加靈活。臨界區的實現依賴於對某一參考資料的原子修改。在x86中,使用了帶字首lock的test and set指令來實現對訊號的原子修改。在mips中用了一種新方法 配套...
FreeRTOS 筆記之 臨界區及應用
目錄 1.臨界區概述 2.cortex m核心快速關中斷指令 3.關中斷 4.開中斷 5.進入 退出臨界段的巨集 6.臨界段 的應用 臨界區指的是乙個訪問共用資源 例如 共用裝置或是共用儲存器 的程式片段,而這些共用資源又無法同時被多個執行緒訪問的特性。當有執行緒進入臨界區段時,其他執行緒或是程序必...
單臨界區管理和多臨界區管理的效率對比
測試 struct test1 test1 void add void sub struct test2 test2 void add void sub int main auto thread pool thread pool instance auto start time timer get ...