linux嵌入式程式設計 基礎 鎖機制

2021-08-20 10:38:36 字數 1340 閱讀 5857

共享資源被併發使用的時候,當有可能破壞資源的一致性的時候,就需要一種同步機制,保證資源可以被使用正確。

廁所浴室:一種共享資源

爸爸、媽媽、小孩:使用者

當有乙個人進入廁所後,該資源已經被占用,就會將門鎖住。另乙個人只能排隊等待,直到資源被釋放(開門離開),下乙個人才能使用。

名稱

定義特點

應用場景

備註原子操作(atomic)

所謂原子操作,就是該操作絕不會在執行完畢前被任何其他任務或事件打斷,也就說,它的最小的執行單位,不可能有比它更小的執行單位,因此這裡的原子實際是使用了物理學裡的物質微粒的概念。

需要硬體的支援。都使用組合語言實現

原子操作主要用於實現資源計數,很多引用計數(refcnt)就是通過原子操作實現的

互斥鎖(mutex)

每個物件都對應於乙個可稱為」 互斥鎖」 的標記,這個標記用來保證在任一時刻,只能有乙個執行緒訪問該物件

同一時間只能有乙個任務持有互斥鎖,而且只有這個任務可以對互斥鎖進行解鎖。互斥鎖不能用於中斷上下文。互斥鎖比當前的核心訊號量選項更快,並且更加緊湊。會引起呼叫者睡眠。

自旋鎖(spanlock)

自旋鎖與互斥鎖有點類似,只是自旋鎖不會引起呼叫者睡眠

如果自旋鎖已經被別的執行單元保持,呼叫者就一直迴圈在那裡看是否該自旋鎖的保持者已經釋放了鎖,」自旋」一詞就是因此而得名。由於自旋鎖使用者一般保持鎖時間非常短,因此選擇自旋而不是睡眠是非常必要的,自旋鎖的效率遠高於互斥鎖呼叫資源的時間短。可以在任何上下文使用

順序鎖(seqlock)

用於能夠區分讀與寫的場合,並且是讀操作很多、寫操作很少,寫操作的優先權大於讀操作。

rcu(read-copy-update)

rcu也是用於能夠區分讀與寫的場合,並且也是讀多寫少,但是讀操作的優先權大於寫操作(與seqlock相反)

訊號量linux核心的訊號量在概念和原理上與使用者態的systemv的ipc機制訊號量是一樣的,但是它絕不可能在核心之外使用,因此它與systemv的ipc機制訊號量毫不相干

訊號量和讀寫訊號量適合於保持時間較長的情況,它們會導致呼叫者睡眠,因此只能在程序上下文使用(_trylock的變種能夠在中斷上下文使用)

訊號量可以模擬為一把鎖(共享資源)對應多把鑰匙(訊號量),只有持有鑰匙的人才能開鎖

嵌入式linux基礎

缺頁中斷和時鐘中斷都屬於中斷,在核心態執行。程序排程屬於系統呼叫,在核心態執行,命令解釋程式屬於命令介面,在使用者態執行。1 insmod和modprobe都可以用來載入驅動模組,請描述這兩者的差異。2 請給出三種以上linux驅動模組載入失敗的可能原因。1 modprobe和insmod類似,都是...

嵌入式linux基礎

一 嵌入式系統定義 嵌入式系統是以應用為中心,以計算機技術為基礎,並且軟硬體可裁剪,適用於應用系統對功能,可靠性,成本,體積,功耗有嚴格要求的專用計算機系統。二 嵌入式學習的重點 1 站在全域性進行領會,不糾纏細節 2 了解嵌入式系統開發的流程 3 學習嵌入式系統開發的理念 4 了解嵌入式系統開發的...

嵌入式linux的mdev機制

mdev是busybox自帶的乙個簡化版的udev 作用是在系統啟動和熱插拔 或動態載入驅動程式時,自動產生驅動程式所需的節點檔案,在檔案系統中的 dev目錄下的裝置節點都是由mdev建立的 使用mdev時不加引數就是用hotplug機制來決定建立什麼樣的裝置檔案。而用mdev s是用sys檔案系統...