linux内核的中断上下文,Linux操作系统中中断上下文中的互斥
UP(單CPU系統(tǒng))上的中斷處理
互斥
如果一個中斷處理程序的代碼訪問或者更新了由非中斷的代碼(通常稱為基準(zhǔn)代碼)使用的同一數(shù)據(jù)結(jié)構(gòu),那么就會出現(xiàn)競爭條件。
幸運的是,得到允許的以內(nèi)核態(tài)執(zhí)行的進程會臨時禁止中斷。因此,只要基準(zhǔn)代碼要更新一個與中斷處理程序共享的數(shù)據(jù)結(jié)構(gòu),那么就
首先禁止中斷,執(zhí)行臨界段,然后再重新允許中斷。禁止和允許中斷的動作就實現(xiàn)了互斥。
在采取中斷互斥時,必須使用函數(shù)顯示地把編碼寫入算法中。
MP(多CPU系統(tǒng))上
在MP系統(tǒng)上,中斷可以在任何處理器上出現(xiàn)。從最低限度上來說,每個進程會接收時鐘中斷,但也可能接收I/O中斷。在MP系統(tǒng)上,例程
SPL(禁止中斷)所提供的保護并不充分,因為它們執(zhí)行影響執(zhí)行它們的處理器上的中斷優(yōu)先級。中斷可能會在另一個處理器上出現(xiàn),如果設(shè)備驅(qū)動程序
正在別處運行,那么會造成一個競爭條件。因為中斷處理程序代表另一個進入內(nèi)核的入口點。
當(dāng)基準(zhǔn)驅(qū)動程序代碼和中斷處理程序之間共享數(shù)據(jù)結(jié)構(gòu)時,UP可以通過屏蔽中斷來防止出現(xiàn)競爭條件的技術(shù),在多線程MP內(nèi)核中還不充分。
臨界段要在一個處理器上執(zhí)行,執(zhí)行屏蔽中斷例程只會屏蔽在那個處理器上出現(xiàn)的中斷。如果在別的處理器上出現(xiàn)中斷,那么立即就會有
兩個處理器同時訪問、而且可能更新臨界資源。既然這些臨界段需要短期互斥,那么可以使用自旋鎖來對數(shù)據(jù)進行保護。
如果不考慮中斷處理程序和基準(zhǔn)代碼之間的互斥,則Linux中的中斷處理程序是無須重入的。當(dāng)一個給定的中斷處理程序正在執(zhí)行時,相應(yīng)的中斷線
在所有處理器上都會被屏蔽掉,以防止同一中斷線上接收另一個新的中斷。通常情況下,所有的其他中斷都是打開的,所以這些不同中斷線上的其他中斷
都能處理,但當(dāng)前中斷線總是被禁止的。由此可以看出,同一個中斷處理程序絕不會被同時調(diào)用以處理嵌套的中斷。這極大地簡化了中斷程序的編寫。
posted on 2013-07-08 14:01 martin_yahoo 閱讀(3015) 評論(0) ?編輯?收藏 引用
總結(jié)
以上是生活随笔為你收集整理的linux内核的中断上下文,Linux操作系统中中断上下文中的互斥的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux怎么到conf目录,linux
- 下一篇: linux 创建crontab文件位置,