linux內核設計與實現一書閱讀整理 之第一二章整合

第一章:Linux內核簡介linux

1、Unixlinuxgit

Unix是一個強大、健壯和穩定的操做系統。shell

  1.Unix內核特色

  1. 十分簡潔:僅提供幾百個系統調用而且有明確的目的;
  2. Unix中,大部分東西都被(或者正致力於)被當作文件對待;
  3. Unix內核即相關係統工具軟件都是用C語言編寫的,這使得系統有着強大的可移植性;
  4. Unix進程建立很是迅速,目標在於一次執行保質保量地完成一個任務

  2.LinuxUnix異同

  • Linux是基於Unix的類系統,好比它也實現了UnixAPI
  • 但它不一樣於Unix,沒有利用Unix內核源代碼;
  • Linux是非商業的產品,任何人均可以參與到它的開發中
  • Unix內核與Linux內核的比較
  • Unix內核是一個不可分割的靜態可執行庫,一般須要硬件系統提供頁機制(MMU)以管理內存;
  • Linux支持動態加載內核模塊,而且是可搶佔的。

 

.Linux系統的基礎是內核、C庫以及工具集和系統的基本工具。

 

 

2、操做系統和內核簡介

操做系統是指在整個系統中負責完成最基本功能和系統管理的那些部分。編程

  • 內核
  • 設備驅動程序
  • 啓動引導程序
  • 命令行shell或者其餘種類的用戶界面
  • 基本的文件管理工具和系統工具

內核獨立於普通應用程序,通常處於系統態,擁有受保護的內存空間和訪問硬件設備的全部權限。
這種系統態和被保護起來的內存空間,統稱爲內核空間。
在系統中運行的應用程序經過系統調用來與內核通訊。服務器

內核分類

  1. 單內核(好比大多數UnixLinux
  2. 把內核總體上做爲一個大的單獨的過程來實現,同時運行在一個單獨的地址空間上
  3. 簡單,性能高
  4. 微內核(好比Windows NT
  5. 微內核的功能被劃分爲多個獨立的功能,每一個過程叫作一個服務器;便於處理內核間通訊,還使用了IPC機制;

 

應用程序完成其工做的基本行爲方式是:

應用程序經過系統調用界面陷入內核。併發

處理器的活動必然其下三者之一:

  • 運行於用戶空間,執行用戶進程
  • 運行於內核空間,處於進程上下文,表明某個特定的進程執行
  • 運行於內核空間,處於中斷上下文,與任何進程無關,處理某個特定的中斷

第二章 從內核出發

1.源代碼管理

  1. 使用Git
  2. Git做爲版本控制系統來管理Linux內核源代碼;
  3. 下載並更新最新版本:
  4. git clone git://[網址]
  5. 內核源代碼通常安裝在/usr/src/linux目錄下,這個源碼樹並不能用於開發
  6. 源代碼樹
  7. 有不少目錄值得被注意:
  8. arch:特定體系結構的源代碼;
  9. include:內核頭文件;
  10. kernel:像調度程序這樣的核心子系統。

二、內核源碼樹

 

3.編譯內核

  1. 目的:將本身須要的功能編譯進內核
  2. 步驟:
  3. 配置內核
  4. 前提:能夠配置的各類變量都以CONFIG_前綴表示。有二選一(yes or no)和三選一(還有一個選項是module,即選定該配置項但編譯的時候以模塊形式生成); 【我我的的理解就是,對相似於驅動程序這樣須要模塊化也就是較爲獨立地完成功能而不必定隨時都要開啓的程序代碼須要此選項】
  5. 方式:
  6. make config【這個在作實驗的時候遇到過,應該屬於那種傻瓜似的逐一遍歷(適用於系統比較簡單的狀況)】
  7. make menuconfig
  8. make gconfig
  9. 後續:
  10. 配置選項CONFIGIKCONFIGPROC把完整的壓縮的配置文件放在/proc/config.gz下面,這樣編譯新的內核的時候就能夠直接拷貝使用了
  11. 衍生多個編譯做業
  12. 通常每一個處理器都會衍生1——2個做業,改善處理器的利用率
  13. make -j32 > /dev/null【以16核處理器爲例】
  14. 安裝新內核
  15. root身份運行 make modules_install便可
  16. 全部已編譯的模塊都會安裝到lib/modules
  17. 內核開發時既不能訪問C庫也不能訪問標準的C頭文件
    應對:include/linux文件夾中包含了所需的內核頭文件。
  18. 內核編程時必須使用GNU C

4.內核開發的特色

內聯函數:
函數會在所調用的位置上展開。
定義時,須要使用static做爲關鍵字,用inline限定它。
內聯函數必須在使用以前就定義好,通常在頭文件中定義。
內核中優先使用內聯函數而不是宏。異步

內聯彙編:
一般使用asm()指令嵌入彙編代碼,用volatile表示不優化模塊化

  1. 分支聲明:
    unlikely(x) - x不多出現,絕少發生,一般爲假
    likely(y) - y常常出現,一般爲真
  2. 內核編程時缺少像用戶空間那樣的內存保護機制
    內核中內存不分頁。
  3. 內核編程時難以執行浮點運算
  4. 內核給每一個進程只有一個很小的定長堆棧
  5. 因爲內核支持異步中斷、搶佔和SMP,必須時刻注意同步和併發
    SMP:對稱多處理系統。
    經常使用的解決競爭的方法:自旋鎖和信號量。
  6. 要考慮可移植性的重要性
    諸如保持字節序,64位對其,不假定字長和頁面長度等

 

總結:這兩章內容比較少,仍是容易去理解的,由於有婁老師的上學期的教授,各方面就像在複習學過的知識同樣。做者也寫得頗有風趣,有種比較平易近人的感受。函數

相關文章
相關標籤/搜索