接著記錄書中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下。
沒有留言:
張貼留言