Linux核心學習心得(1)---CH1、CH2

接著記錄書中CH1、CH2的相關知識,主要是核心介紹,核心入門這兩章的知識。

 
(1)Linux和Unix有非常深的淵源;而Unix成功有以下4點。
     1.系統呼叫不多,只數百個。
     2.一切皆檔案(socket除外)。
     3.以C撰寫,變得好移植、好維護。
     4.簡單的IPC通訊(因策略和機制界線明顯)。

(2)處理器在每個時間中,只有下列三種狀態之一。

     1.用戶空間執行程式。
     2.核心空間Process Context,代替特定行程工作。
     3.核心空間Interrupt Context,處理中斷向量工作。

(3)Linux是集成式核心(Monolithic),有別於微核心(Micro)、外核心(Exo)。

(4)Linux和Unix的差異如下:
   1.Linux可動態載入和卸載核心模組。
   2.Linux支援SMP(對稱式多處理器)。
   3.Linux核心是可搶佔的(Preemptive)。
   4.Linux的行程和執行緒一樣,只是剛好共享部份資源。
   5.Linux有裝置類別的模型,且有sysfs位於用戶空間。
   6.Linux忽略一些Unix明顯的缺點。
   7.Linux是開放原始碼。

(5)$git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git and $git pull 下載程式碼到電腦。

(6)改程式應該在/home下進行,用root安裝,無論如何不要動到Host下的/usr/src/linux程式碼。

(7)使用修補檔;$patch -pl < ../patch-x.y.z。

(8)核心源碼樹:

    arch:特定架構源碼。
    block:區塊I/O層。
    certs:
    crypto:Crypto API。
    Documentation:源碼文件。
    drivers:裝置驅動程式。
    firmware:特定驅動需用到的韌體。
    fs:VFS和各種檔案系統。
    include:核心標頭檔。
    init:核心啟動和初始化。
    ipc:行程間通訊程式碼。
    kernel:基礎子系統,例如排程器。
    lib:通用核心常式。
    mm:記憶體管理子系統和VM。
    net:網路子系統。
    samples:範例程式。
    scripts:用於建立核心的命令稿。
    security:安全模組。
    sound:音效子系統。
    usr:開始階段的用戶空間程式碼(initramfs)。
    tools:開發時有用的工具。
    virt :虛擬化基礎架構。

(9)核心建構請參考此篇建構核心 。

(10)利用distcc或ccache等工具可加快編譯的速度。

(11)核心最重要的差異:
      1.不使用C庫及C標頭檔,使用include及lib下的程式。
         EX:printk(KERN_ERR "oop !");實做此函數。 
      2.使用GNU C進行編譯。  
         內嵌函式:static inline為函式前綴。
         內嵌組語(和平台有關):asm volatile("");
         可用unlikely()、likely()加快分支選擇速度。
      3.缺乏用戶空間的記憶體保護機制。
         核心記憶體是不分頁的。
      4.不會輕易進行浮點運算。
      5.具有一個小型的,每個行程都定長的堆疊。
      6.核心很容易造成競速的問題,同步化和並行要注意。
      7.可移植的重要性要注意,和平台有關的要放/arch下。

沒有留言:

張貼留言