一、內核源碼數linux
內核源碼樹由不少目錄組成,而大多數目錄又包含更多的子目錄,源碼樹的根目錄及其子目錄以下:編程
目錄 | 描述 |
arch | 特定體系結構的源碼 |
crypto | crypto API |
ducumention | 內核源碼文檔 |
drivers | 設備驅動程序 |
fs | VFS和各類文件系統 |
include | 內核頭文件 |
init | 內核引導和初始化 |
ipc | 進程間通訊代碼 |
kernel | 像調度程序這樣的核心子系統 |
lib | 調用內核函數 |
mm | 內存管理子系統和VM |
net | 網絡子系統 |
scripts | 編譯內核所用的腳本 |
security | linux安全模塊 |
sound | 語音子系統 |
usr | 早期用戶空間代碼 |
二、內核開發的特色安全
三、內核代碼使用到的C語言擴展網絡
GNU的C編譯器支持內聯函數,inline反應它的工做方式,函數會在它調用的位置上展開,這麼作能夠消除函數點永和返回所帶來的開銷。內聯函數必須在使用以前就定義好,不然編譯器就無法把這個函數展開。實踐中通常在頭文件中定義內聯函數。因爲使用了static做爲關鍵字進行限制,因此編譯器不會爲內聯函數單獨創建一個函數體。併發
gcc編譯器支持在C函數中嵌入彙編指令。Linux內核混合使用了C和彙編語言。在偏近體系結構的底層或對執行時間要求嚴格的地方,通常使用的是彙編語言,而內核其餘部分的大部分代碼是C語言編寫的。異步
對於條件選擇語句,gcc內奸了一條指令用於優化,在一個條件常常出現,或者該條件不多出現的時候,編譯器能夠根據這條指令對條件分支選擇進行優化。函數
四、沒有內存保護機制oop
若是一個用戶程序試圖進行一次非法的內存訪問,內核會發現這個錯誤,發送SIGSEGV,並結束整個進程。然而,若是是內核本身非法訪問了內存,那後果就很難控制了。內核中發生的內存錯誤會致使oops,這是內核中出現的最多見的錯誤。並且,內核中的內存都不分頁,沒用掉一個字節,物理內存就減小一個字節。優化
五、不要輕易在內核中使用浮點數操作系統
在用戶空間的進程內進行浮點操做的時候,內核會完成從證書操做到浮點數操做的模式轉換。
六、容積小而固定的棧
內核站的準確大小隨體系結構而變。
七、同步和併發
內核和容易產生競爭條件。和單線程的用戶空間程序不一樣,內核的許多特性都要求可以冰法的訪問共享數據,這就要求由同步機制保證不會出現競爭條件。
八、可移植性的重要性