Linux核心學習筆記六 併發和同步概念

2021-07-11 05:29:25 字數 1283 閱讀 2345

一 臨界區和競爭條件

臨界區:訪問和操作共享資料的**段。

競爭條件:多個執行執行緒處於同乙個臨界區中。

處於競爭條件:造成訪問的資料或者資源不一致狀態:

對資源i的訪問:processa和b訪問後得到正確的結果應該是9:

程序是併發執行,有可能得到的結果是:8

防止這種情況的發生:保證對資源的訪問原子操作。

二 加鎖

鎖:採用原子操作實現,原子操作不存在競爭。

造成併發原因:

l  中斷:隨時可以打斷當前執行的程序**;

l  軟中斷和tasklet:任何時刻能喚醒排程軟中斷和tasklet,打斷當前正在執行的**;

l  核心搶占:當前任務被搶占;

l  程序睡眠:喚醒排程程式,執行新的程序;

l  多處理器:同時執行**。

針對資源併發競爭條件的存在,需要對資源進行保護,保證資源的訪問操作是原子的。

需要弄清楚哪些資料需要被保護,要試圖弄清楚資源會不會被併發的訪問操作。

三 死鎖

多個執行執行緒互相等待被對方占用的資源,但永遠不會釋放各自擁有的資源,導致眾執行緒永遠無法得到執行。

出現死鎖是件很危險的事情,預防死鎖:

l  加鎖順序保持一致;

l  防止發生飢餓措施;

l  不要重複請求同乙個鎖;

l  複雜加鎖方案造成死鎖概率較大——設計鎖力求簡單;

四 鎖的粒度

加鎖粒度:描述加鎖保護的資料規模;

過粗的鎖:保護大塊資料,如子系統所有資料結構;

精細的鎖:保護小塊資料,乙個大資料結構中的乙個元素;

在粗糙與精細之間需要平衡:精細的鎖複雜開銷大,良好擴充套件性:從單核到多核,為提高效能,鎖得機制變得更細。

保護資料不被併發的訪問,加鎖你的**。恰當的加鎖:滿足不死鎖、可擴充套件、清晰簡潔。

linux核心學習筆記 六 程序排程

linux 核心程序排程 linux 核心筆記 程序排程 linux 核心筆記 程序排程 4 程序排程示意圖 linux的程序排程如圖1所示。5 smp系統的排程 smp系統中的排程演算法的不同主要表現在排程演算法的最後,對於被切換出當前cpu執行權的程序呼叫了schedule tail函式,目的是...

linux核心學習筆記

核心的配置 a.make s3c2410 deconfig b.make menuconfig 圖形化配置 c.使用廠家給出的配置 生成.config 編譯生成核心,使用如下命令 make vmlinux make uimage 帶頭部 真正核心 1 config 建立生成autoconf.h 供源...

Linux核心學習筆記

2.2 核心原始碼樹 arch 特定體系結構的原始碼 block crypto api crypto 核心原始碼文件 drivers 裝置驅動程式 firmware fs vfs和各種檔案系統 include 核心標頭檔案 init 核心引導和初始化 ipc 程序間通訊 kernel 像排程程式這樣...