linux下c編程特點
- typeof 取變數型別
- GNU c對比ANSI c做了很多擴展,例如動態陣列
第7章 Linux設備驅動中的并發控制
造成竟態的原因
- 多核
- 行程和中斷形成的多路徑(linux2.6以后,禁止了中斷嵌套)
- 編譯亂序
- 執行亂序
解決竟態的辦法
- 中斷屏蔽:只能屏蔽本核的
- 原子操作:依賴cpu指令
- 自旋鎖:自旋鎖 + 中斷屏蔽可以完全解決竟態問題(中斷程式中呼叫自旋鎖,行程/執行緒中呼叫關中斷+自旋鎖)
- 互斥鎖:互斥鎖允許臨界區阻塞,而自旋鎖不可以
第8章 Linux設備驅動中的阻塞與非阻塞I/O
等待佇列
等待佇列一般用于同步訪問設備時,當不滿足讀寫時,將行程掛入設備的等待佇列,當可以讀寫時,將通過呼叫wakeup來喚醒行程,
globalfifo實作
注意:使用mutex互斥的地方,獲取到lock的一方發現設備不可訪問時,再schedule前需釋放lock,在被喚醒后重新獲取Lock
第10章 中斷與時鐘
中斷分為上下半部,下半部機制有tasklet, 作業佇列、軟中斷和執行緒化irq
- tasklet:運行在中斷背景關系,基于軟中斷實作
- 作業佇列:運行在行程背景關系
- 軟中斷:包括TIMER_SOFTIRQ, NEXT_TX/RX_SOFTIRQ, SCSI_SOFTIRQ, TASKLET_SOFTIRQ
第11章 記憶體與I/O訪問
內核記憶體管理
- 伙伴演算法解決頁外碎片,管理2^n個物理頁
- slab從buddy演算法拿到2^n個物理頁后,進行二次管理,類似于用戶態的ptmalloc這一類管理
原理有點像free queue,在free queue上做了進一步封裝
- 記憶體池
- 大頁記憶體:減少缺頁中斷
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/79199.html
標籤:Linux
上一篇:linux操作場景用到的命令
