核心 自旋鎖

2021-08-07 22:23:26 字數 849 閱讀 3493

自旋鎖用於多處理器環境下保護資料。

如果核心發現資料未鎖,就獲取鎖並執行;如果資料被鎖,就一直旋轉【反覆執行一條指令】。

自旋鎖在單處理器環境下(非搶占式核心)下,不起作用 ;單處理器搶占式核心的情況下,自旋鎖起到禁止搶占的作用。

注釋:

核心搶占(可搶占式核心):

即當程序位於核心空間時,有乙個更高優先順序的任務出現時,如果當前核心允許搶占,則可以將當前任務掛起,執行優先順序更高的程序。

非搶占式核心:

高優先順序的程序不能中止正在核心中執行的低優先順序的程序,搶占cpu執行。

程序一旦處於核心態【eg使用者程序執行系統呼叫】,除非程序自願放棄cpu,否則該程序將一直執行下去,直至完成或者退出核心

q搶占式核心的意義:

linux應用於實時作業系統,實時作業系統對響應時間有嚴格的規定。 當乙個實時程序被實時裝置的硬體中斷喚醒後,應在限定的時間內被排程執行。

而linux不能滿足這一要求,因為linux的核心是不可搶占的,不能確定系統在核心中的停留時間。事實上當核心首席執行官的系統呼叫時,實時程序要等到核心中執行的程序退出核心才能被排程,由此產生的響應延遲,在如今的硬體條件下,會長達100ms級。這對於那些要求高實時響應的系統是不能接受的。而可搶占的核心不僅對linux的實時應用至關重要,而且能解決linux對多**(video, audio)等要求低延遲的應用支援不夠好的缺陷。

被自旋鎖鎖著的程序一直旋轉,不是睡眠,所以自旋鎖可以用在中斷等禁止睡眠的場景。

自旋鎖的使用很簡單,參看一下**

spin_lock(shost->host_lock);

shost->host_busy++;

spin_unlock(shost->host_lock);

Linux 核心自旋鎖

現在很多cpu都是幾核幾核的了,如果有乙個變數a,cpu x正在訪問,突然cpu y也過來訪問他,這時候就可能出現問題,因為這個a非常重要,可能導致系統崩潰,中斷異常等。我們來看之前說的tp驅動裡面的 void gtp irq enable struct goodix ts data ts spin...

Linux 核心的排隊自旋鎖

引言 自旋鎖 spinlock 是一種 linux 核心中廣泛運用的底層同步機制。自旋鎖是一種工作於多處理器環境的特殊的鎖,在單處理環境中自旋鎖的操作被替換為空操作。當某個處理器上的核心執行執行緒申請自旋鎖時,如果鎖可用,則獲得鎖,然後執行臨界區操作,最後釋放鎖 如果鎖已被占用,執行緒並不會轉入睡眠...

核心與驅動 03 自旋鎖

使用佇列自旋鎖提高效能 使用如下 可以初始化乙個自旋鎖 kspin lock spinlock keinitlizespinlock spinlock 這個函式無返回值 要注意,多執行緒使用自旋鎖同步時 定義的自選鎖必須是乙個全域性的 不然是沒有任何意義的 kspin lock g spinlock...