亚洲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