一、Linux2.6相對於Linux2.4有相當大的改進,主要體現在如下幾個方面:
<1>新的調度器:使用了新的進程調度算法,它在高負載的情況下執行得很好,並且有很多處理器時可以進行很好的擴展
<2>內核搶占:內核任務可以被搶占,從而提高系統的實時性
<3>改進的線程模型:線程操作速度提高,可以處理任意數目的線程
<4>虛擬內存的變化:融合了r-map(反向映射)技術
<5>文件系統:對擴展屬性和POSIX標准訪問控制的支持
<6>音頻:新的音頻體系結構ALSA替代舊的OSS,支持USB音頻和MIDI設備,並支持全雙工
<7>總線、電源管理、網絡(IPv6)、用戶界面等
在設備驅動程序方面主要變化有:
<1>內核模塊從.o 變成.ko
<2>驅動模塊編譯方式
<3>模塊使用計數
<4>模塊加載和卸載函數的定義等方面
二、內核目錄介紹:
arch:包含和硬件體系結構相關的代碼
block:塊設備驅動程序I/O調度
crypto:常用加密和散列算法
Documentation:內核各部分的通用解釋和注釋
drivers:設備驅動程序,每個不同的驅動占用一個子目錄,如char、block、net、mtd、i2c等
fs:支持的各種文件系統
include:頭文件,與系統相關的頭文件被放置在include/linux子目錄下
init:內核初始化代碼
ipc:進程間通信的代碼
kernel:內核的最核心部分,包括進程調度、定時器等,與平台相關的放在 arch/*/kernel目錄下
lib:庫文件代碼
mm:內存管理代碼,與平台相關的一部分代碼放在 arch/*/mm目錄下
net:網絡相關代碼,實現了各種常見的網絡協議
scripts:包含用於配置內核的腳本文件
security:主要包含SELinux模塊
sound:ALSA、OSS音頻設備驅動核心代碼和常用設備驅動
usr:實現了用於打包和壓縮的cpio等
三、Linux內核的組成部分
Linux內核主要由進程調度(SCHED)、內存管理(MM)、虛擬文件系統(VFS)、網絡接口(NET) 和進程間通信IPC等5個子系統組成
1、進程調度:進程調度處於系統的中心位置,內核中其他子系統都依賴它,Linux進程中如果所請求的資源不能得到滿足,驅動一般會調度其他進程執行,並驅動對應的進程進入睡眠狀態。睡眠分為可打斷睡眠和不可打算睡眠,區別在於可打斷睡眠在收到信號後會醒來
進程狀態轉換圖如下:
設備驅動中,如果需要幾個並發執行的任務,可以啟動內核線程,該函數為:
int kernel_thread(int (*fd)(void *), void *arg,unsigned long flags);