亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標題:
Linux內(nèi)核中在自旋鎖,信號量及中斷禁止之間的選擇
[打印本頁]
作者:
zhanglong71
時間:
2011-06-16 19:35
標題:
Linux內(nèi)核中在自旋鎖,信號量及中斷禁止之間的選擇
ULK3 第五章 中的 “在自旋鎖,信號量及中斷禁止之間的選擇”粗略歸納了下,希望能與大家一起紙上談兵。加深認識。
Linux內(nèi)核中在自旋鎖,信號量及中斷禁止之間的選擇
一.linux內(nèi)核控制路徑的三種執(zhí)行環(huán)境:
1>中斷
中斷的頂半部分,也就是用request_irq注冊的中斷例程
處中斷上下文,不可睡眠
2>可延遲函數(shù)(軟中斷及基于軟中斷實現(xiàn)的其它處理函數(shù),如tasklet, 定時器等)
被中斷的頂半部分觸發(fā),并在稍后時間內(nèi)執(zhí)行的例程。
處中斷上下文,不可睡眠
一般是:
由open_softirq注冊,在中斷處理中由raise_softirq觸發(fā)的函數(shù)。
由tasklet_init初始化,在中斷處理中由tasklet_schedule調(diào)度的函數(shù)。
3>異常
典型是系統(tǒng)調(diào)用(內(nèi)核線程也算吧)。
處進程上下文,可睡眠
中斷,異常及可延遲函數(shù)之間對cpu的爭奪:
1>中斷處理程序可以搶占其它中斷處理程序
2>中斷處理程序可以搶占異常
3>中斷處理程序可以搶占可延遲函數(shù)
4>中斷處理程序在退出前觸發(fā)可延遲函數(shù)。
5>一個可延遲函數(shù)不能搶占中斷處理程序。
6>一個可延遲函數(shù)不能搶占另一個可延遲函數(shù)。
7>相同類型的軟中斷可以并發(fā)的運行在多個cpu上
8>相同類型的tasklet只能被串行的執(zhí)行,不同類型的tasklet可以在幾個cpu上并發(fā)執(zhí)行。tasklet基于軟中斷而實現(xiàn)(可視為加入約束的軟中斷?)。
9>軟中斷始終在觸發(fā)它的同一個cpu上執(zhí)行,tasklet也是。
10>異常不能搶占中斷,不能搶占可延遲函數(shù),不能搶占異常(缺頁不在考慮之中)
二.自信號旋鎖,信號量及關中斷的之間的……
自旋鎖:在竟爭條件下,反復執(zhí)行緊湊的循環(huán)指令,直到鎖被釋放。防止多cpu間的竟爭。
信號量:在竟爭條件下,不允許內(nèi)核控制路徑繼續(xù)進行,相應的進程被掛起。因此中斷處理,和可延遲函數(shù)都不能使用信號量。
關中斷:禁用本地中斷。關中斷都是為了防止同一cpu下的中斷搶占,關本地中斷后,可延遲函數(shù)也被禁止了。
三.Linux內(nèi)核中在自旋鎖,信號量及中斷禁止之間的選擇
3.1僅異常時的數(shù)據(jù)訪問保護
1>單處理器:此時的CPU運行在內(nèi)核態(tài)為用戶進程提供服務。此竟爭條件可通過信號量避免。
2>多處理器:與單處理器環(huán)境時相同
3>訪問per-cpu變量時,要禁用搶占。
3.2僅中斷時的數(shù)據(jù)訪問保護
單處理器
1>只有一個中斷的“上半部分”訪問時,中斷都相對自己串行地執(zhí)行,無需同步。
2>多個中斷的“上半部分”訪問時,要關中斷。
多處理器
3>只有一個中斷的“上半部分”訪問時,中斷都相對自己串行地執(zhí)行,無需保護。
4>多個中斷可訪問時,要關中斷,并加上自旋鎖。
3.3僅可延遲函數(shù)(軟中斷和tasklet)中的數(shù)據(jù)訪問保護
單處理器
1>上不存在競爭問題
多處理器
2>軟中斷訪問的數(shù)據(jù)使用自旋鎖,防止多cpu竟爭
3>僅由一種tasklet訪問的數(shù)據(jù)結(jié)構(gòu)不需要保護
4>被多種tasklet訪問需要用自旋鎖保護
3.4.異常和中斷時的數(shù)據(jù)訪問保護(只考慮一種中斷與一種異常)
單處理器
1>在異常的訪問中關閉中斷;中斷的訪問中不需要保護
多處理器
2>在異常的訪問中關閉本地中斷,并加上自旋鎖;中斷的訪問中加上自旋鎖即可(可用緊循環(huán)和down_trylock代替自旋的功能)
3.5.異常和可延遲函數(shù)中的數(shù)據(jù)訪問保護(只考慮一種異常與一種可延遲函數(shù))
單處理器
1>在異常訪問中關閉中斷(禁止可延遲函數(shù)更合適);可延遲函數(shù)無需保護
多處理器
2>在異常訪問中關閉中斷(禁止可延遲函數(shù)更合適)并加上自旋鎖;可延遲函數(shù)加上自旋鎖
3.6.中斷和可延遲函數(shù)中的數(shù)據(jù)訪問保護(只考慮一種中斷與一種可延遲函數(shù))
單處理器
1>可延遲函數(shù)訪問中關閉中斷;中斷的訪問中不需要保護
多處理器
2>可延遲函數(shù)訪問中關閉中斷,并加上自旋鎖;中斷的訪問中加上自旋鎖
3.7.異常,中斷和可延遲函數(shù)中的數(shù)據(jù)訪問保護(只考慮一種中斷一種可延遲函數(shù)一種異常)
單處理器
1>在異常訪問中關閉中斷; 可延遲函數(shù)訪問中關閉中斷 ;中斷的訪問中不需要保護
多處理器
2>在異常訪問中關閉中斷并加上自旋鎖; 可延遲函數(shù)訪問中關閉中斷并加上自旋鎖 ;中斷的訪問中加上自旋鎖
其它的場景都可看作以上場景的組合
如:異常,中斷和可延遲函數(shù)中的數(shù)據(jù)訪問保護?煽醋髦袛嗪涂裳舆t函數(shù),中斷和異常的組合。可同時使用相應的保護方式。
作者:
Godbach
時間:
2011-06-17 12:28
感謝 LZ 分析
作者:
瀚海書香
時間:
2011-06-19 16:49
本帖最后由 瀚海書香 于 2011-06-19 16:51 編輯
大家可以結(jié)合帖子
http://72891.cn/viewthread.php?tid=2016217
,加深一下對內(nèi)核同步的理解。
作者:
phoxia
時間:
2011-06-20 09:38
不錯,學習了
歡迎光臨 Chinaunix (http://72891.cn/)
Powered by Discuz! X3.2