一 臨界區和競爭條件
臨界區:訪問和操作共享資料的**段。
競爭條件:多個執行執行緒處於同乙個臨界區中。
處於競爭條件:造成訪問的資料或者資源不一致狀態:
對資源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 像排程程式這樣...