讀薄「Linux 內核設計與實現」(1) - 從內核出發

這篇文章是《讀薄「Linux 內核設計與實現」》系列文章的第一篇,本文主要講了兩個問題:內核編程的特點以及 GNU C 在內核開發中的特點。

0x00 內核編程特點

  • 無 libc 庫,不能訪問標準 C 文件
  • 使用 GNU C
  • 無內存保護機制
  • 慎用浮點數計算
  • 注意同步和併發
  • 可移植性考慮:保持字節順序、64位對齊、不假定字長和頁面長度

0x01 GNU C

  • 內聯函數:將函數展開至調用位置,省卻函數調用代價
  • 內聯彙編:在確定體系結構的情況下,在 C 代碼中直接嵌入彙編代碼
  • 分支聲明:分支時可根據預知條件發生的概率進行優化

例:

if(error){
/* do something */
}

優化後:

if(unlikely(error)){ //error爲0的概率大
/* do something */
}

或:

if(likely(success)){ //success爲0的概率大
/* do something */
}

本文的版權歸作者 羅遠航 所有,採用 Attribution-NonCommercial 3.0 License。任何人可以進行轉載、分享,但不可在未經允許的情況下用於商業用途;轉載請註明出處。感謝配合!

發佈了105 篇原創文章 · 獲贊 237 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章