1. 程式人生 > >1、話說linux內核

1、話說linux內核

原則 spa 內核源代碼 出了 人做 進行 層次 進程 log

1.內核和發行版的區別

到底什麽是操作系統
  • linux、windows、android、ucos就是操作系統
  • 操作系統本質上是一個程序,由很多個源文件構成,需要編譯連接成操作系統程序(vmlinz、zImage)
  • 操作系統的主要作用就是管理計算機硬件,給應用程序提供運行環境。
操作系統核心功能:
  • 內存管理。如果沒有操作系統,內存是需要程序自己來管理的。譬如在uboot中要使用內存的哪裏是自己隨便用的,沒有註冊也沒有限制。這時候如果程序自己不小心把同一塊內存重復用了就會出現程序邏輯錯誤。系統大了之後(內存多了)內存管理非常麻煩;有了操作系統之後,操作系統負責管控所有的內存,所有的應用程序需要使用內存時都要向操作系統去申請和註冊,由操作系統的內存管理模塊來分配內存給你使用,這樣好處是可以保證內存使用不會沖突。
  • 進程調度。操作系統下支持多個應用程序同時運行(所以可以一邊聊QQ一邊看電影···),這是宏觀上的並行。實際上在單核心CPU上微觀上是不能並行的,宏觀上的並行就是操作系統提供的分時復用機制。操作系統的進程調度模塊負責在各個進程之間進行切換。
  • 硬件設備管理。沒有操作系統時要控制任何硬件都要自己寫代碼,有了操作系統後操作系統本身會去控制各個硬件,應用程序就不用考慮硬件的具體細節了。操作系統的硬件設備管理模塊就是驅動模塊。
  • 文件系統。文件系統是管理存儲設備的一種方式。存儲設備是由很多個扇區組成的,每個扇區有512/1024/2048/4096字節,存儲設備要以扇區為單位進行讀寫。如果沒有文件系統,程序要自己去讀寫扇區,就得記得哪個文件在哪個扇區。有了文件系統之後我們人不用再關註扇區,人只用關註文件系統中的目錄和文件名,而不用管這個文件在物理磁盤的哪個扇區。
操作系統擴展功能:
  • 協議棧
  • 有用的應用程序包。應用程序本身不屬於操作系統內核的一部分,應用程序是給人用的,面向某種功能的。譬如ping程序用來測試網絡是否聯通,ifconfig程序用來配置網卡。
內核和發行版的區別
  • 區別:內核是操作系統內核的簡稱,內核負責實現操作系統的核心功能(資源管理模塊,譬如內存管理、調度系統······),內核不包括應用程序。所以說只有內核人是沒法用的,因為人做任何事情都是通過相應的應用程序來完成的。所以賣操作系統的人把內核和一些常用的應用程序打包在一起提供給普通用戶,這就是操作系統的發行版(也就是普通意義上的操作系統)。
  • 內核只有一個。www.kernel.org
  • 發行版有很多。譬如ubuntu、redhat、suse、centos······

2.內核和驅動的關聯

學習linux的思路
  • 對龐大的整體要有個認識。學習路線就是先建立框架和整體,然後逐漸去學習各個細節部分,逐步細化。
  • 對各分層的作用要清楚。
  • 對層次間的關聯和互相調用要理解。
驅動屬於內核的一部分
  • 驅動就是內核中的硬件設備管理模塊
  • 驅動工作在內核態。
  • 驅動程序故障可能導致整個內核崩潰
  • 驅動程序漏洞會使內核不安全

3.內核和應用程序、根文件系統的關聯

應用和內核的關系
  • 應用程序不屬於內核,而是在內核之上的
  • 應用程序工作在用戶態,是受限制的。
  • 應用程序故障不會導致內核崩潰
  • 應用程序通過內核定義的API接口來調用內核工作
  • 總結1:應用程序是最終目標
  • 總結2:內核就是為應用程序提供底層資源管理的服務員
內核和根文件系統
  • 根文件系統提供根目錄。
  • 進程1存放在根文件系統中
  • 內核啟動最後會去裝載根文件系統。
  • 總結:根文件系統為操作系統啟動提供了很多必備的資源:根目錄、進程1

4.linux內核的模塊化設計

什麽是模塊化設計
  • 因為linux內核很龐大,代碼量很大、東西很多,如果設計時完全設計成一體(各個文件、各個函數之間緊耦合),復雜度超出了人所能理解的範圍。所以模塊化設計也是一種必要。
  • 模塊化設計就是內核中各個功能模塊在代碼上是彼此獨立的,譬如說調度系統和內存管理系統之間並沒有全局變量的互相引用,甚至函數互相調用也很少,就算有也是遵循一個接口規範的。模塊化設計的目的就是實現功能模塊的松耦合。
模塊化設計的體現
  • 配置時可裁剪。linux內核在編譯之前可以進行配置,配置時可以選擇將組成內核的成千上萬個模塊每一個要或者不要。要了之後還有更多的一些細節的配置。
  • 模塊化編譯和安裝。為了操作方便,逐漸從靜態的升級變成了動態的升級(不需要重啟系統,更不需要重新燒錄系統)。這種動態的升級也是由模塊化來支持的。
  • 源碼中使用條件編譯。這種在uboot中已經見過了。
模塊化設計的好處
  • 功能可裁剪、靈活性
  • 可擴展性(動態安裝卸載、新硬件支持)
  • 利於協作
模塊化設計是一種普遍性的系統設計原則

5.選擇合適版本的內核

linux內核版本變遷簡史
  • linux0.01。初版
  • linux0.11。很多講linux內核源代碼解析的書都是以這個版本為原本來講。《圖解linux內核設計的藝術》
  • linux2.4。比較接近現代的版本,很多經典的書都是以2.4版本內核為參照的,譬如《LDD3》。linux2.4的晚期內核在前幾年還會經常碰到有用的。
  • linux2.6早期。2.6的早期和2.4晚期內核挺像的。
  • linux2.6晚期。2.6的晚期內核較早期內核有一些改變,尤其是驅動相關的部分和一些頭文件的位置。2.6的晚期內核目前還算是比較主流。
  • linux3.x 4.x
如何選擇合適的內核版本
  • 並不是越新版本的內核越好
  • 選擇SoC廠家移植版本會減少工作量
S5PV210適用的內核版本
  • 2.6.35.7+android2.3/QT4.8.3
  • 3.0.8+android4.0
本次程使用2.6.35.7版本內核講解

1、話說linux內核