(五)核心中的同步

2021-10-10 01:23:06 字數 2328 閱讀 9438

1、單一處理器、對稱多處理,分別在哪些時候可能會併發地訪問資料
單一處理器: 比較簡單。只有在中斷發生的時候,或在核心**明確地請求重新排程、執行另乙個任務的時候,資料才能被併發訪問。

對稱多處理器:比較麻煩。意味著 核心**可以同時執行在兩個或者多個的處理器上,如果不加保護,完全可能在同一時刻發生併發訪問共享資料。

2、什麼是臨界區、競爭狀態、同步?
– 臨界區:就是訪問和操作共享資料的**段,這段**必須被原子地執行

– 競爭狀態:多個核心任務同時訪問同一臨界區

– 同步:避免併發和防止競爭狀態稱為同步(synchronization)

3、哪些情況可能產生競爭條件
當多個程序都企圖對共享資料進行某種處理,而最後的結果又取決於程序執行的順序時,則我們認為這發生了競爭條件(race condition)。

4、核心中可能造成併發執行的原因?
 中斷——中斷幾乎可以在任何時刻非同步發生,也可能隨時打斷正在執行的**。

 核心搶占——若核心具有搶占性,核心中的任務就可能會被另一任務搶占

 睡眠及與使用者空間的同步——在核心執行的程序可能會睡眠,這將喚醒排程程式,導致排程乙個新的使用者程序執行

 對稱多處理——兩個或多個處理器可以同時執行** ,「真併發」

兩個處理器絕對不能同時訪問同一共享資料

5、哪些物件需要保護、加鎖
大多數核心資料結構都需要加鎖:若有其它核心任務可以訪問這些資料,那麼就給這些資料加上某種形式的鎖;若任何其它東西能看到它,那麼就要鎖住它。

核心任務的區域性資料僅僅被它本身訪問,顯然不需要保護

如果資料只會被特定的程序訪問,也不需加鎖

6、死鎖的概念
死鎖產生的條件:有乙個或多個併發執行的核心任務和乙個或多個資源,每個任務都在等待其中的乙個資源,但所有的資源都已經被占用。所有任務都在相互等待,但它們永遠不會釋放已經占有的資源,於是任何任務都無法繼續。

7、使用atomic_t資料型別執行原子操作的兩個原因
原子整數操作最常見的用途就是實現計數器。

使用atomic_t資料型別操作相對來說輕便一點的操作,還可以用原子整數操作原子地執行乙個操作並檢查結果。

8、	linux上的自旋鎖的三種實現
中斷控制(僅在中斷**可能訪問臨界區時需要)

搶占控制(僅存在於可搶占核心中需要)

自旋鎖標誌控制 (僅smp系統需要)

9、	自旋鎖和訊號量
自旋鎖:在短期內進行輕量級的鎖定。乙個被持有的自旋鎖使得請求它的任務在等待鎖重新可用期間進行自旋,所以自旋鎖不應該被持有時間過長,如果需要長時間鎖定,最好使用訊號量。

 自旋鎖在核心中主要用來防止多處理器中併發訪問臨界區,防止核心搶占造成的競爭

 自旋鎖不允許任務睡眠,持有自旋鎖的任務睡眠會造成自死鎖,因此自旋鎖能夠在中斷上下文中使用

訊號量:一種睡眠鎖,若有乙個任務試圖獲得乙個已被持有的訊號量時,訊號量會將其推入等待佇列,然後讓其睡眠。

 訊號量具有睡眠特性,適用於鎖會被長時間持有的情況,只能在程序上下文中使用

10、	讀-寫自旋鎖原理
乙個或多個讀任務可以併發的持有讀者鎖;相反,用於寫的鎖最多只能被乙個寫任務持有,而且此時不能有併發的讀操作。

讀/寫鎖也叫共享/排斥鎖,或者併發/排斥鎖:對讀者共享,對寫者排斥。

 優點:多個讀者可以安全地獲得同乙個讀鎖,即使乙個執行緒遞迴地獲得同一讀鎖也是安全的。

 缺點:照顧讀比照顧寫要多一點,大量讀者必定會使掛起的寫者處於飢餓狀態。

11、	核心任務及其之間的併發關係
系統呼叫:是使用者程式通過門機制來進入核心執行的核心例程,它執行在核心態,處於程序上下文中,可以認為是代表使用者程序的核心任務。

核心執行緒:核心執行緒可以理解成在核心中執行的特殊程序,它有自己的「程序上下文」。定時器任務佇列:任務佇列屬於下半部,主要有排程佇列、定時器佇列和及時佇列等三種任務佇列 。

系統呼叫和核心執行緒可能和各種核心任務併發執行,可能發生競爭。

Linux核心中的同步機制

與其解釋什麼是同步,倒不如告訴讀者同步的由來。在linux核心中,同步技術是為了解決問題而產生的。說起這個問題,不得不提起可重入核心。可重入核心執行多個程序交替執行,而程序的切換就發生在核心態下。程序的切換就意味著a程序還未執行結束,就要換b程序執行,如果存在全域性變數g,一旦程序切換,這意味著a程...

Java核心中的核心 多型

一句話概括多型 也叫動態繫結 在執行期間,判斷其引用的實際型別,根據其實際的型別,呼叫對應的方法。多型可以幫助我們的程式的顆擴充套件性達到極致。多型的三個必要條件 1 要有繼承。2 子類要重寫父類的方法。3 父類的引用指向子類的物件。根據以下的 來理解 class animal 在animal類裡面...

IoC容器 Spring核心中的核心

spring 容器是 spring 框架的核心。容器將建立物件,把它們連線在一起,配置它們,並管理他們的整個生命週期從建立到銷毀。spring 容器使用依賴注入 di 來管理組成乙個應用程式的元件。這些物件被稱為 spring bean。1 spring主要容器包括beanfactory sprin...