Linux 內核設計的理念主要有這幾個點:
MutiTask,多任務
SMP,對稱多處理
ELF,可執行文件鏈接格式
Monolithic Kernel,宏內核
MutiTask
MutiTask 的意思是多任務,代表著 Linux 是壹個多任務的操作系統。多任務意味著可以有多個任務同時執行,這裏的「同時」可以是並發或並行:
對於單核 CPU 時,可以讓每個任務執行壹小段時間,時間到就切換另外壹個任務,從宏觀角度看,壹段時間內執行了多個任務,這被稱為並發。
對於多核 CPU 時,多個任務可以同時被不同核心的 CPU 同時執行,這被稱為並行。
SMP
SMP 的意思是對稱多處理,代表著每個 CPU 的地位是相等的,對資源的使用權限也是相同的,多個 CPU ***享同壹個內存,每個 CPU 都可以訪問完整的內存和硬件資源。
這個特點決定了 Linux 操作系統不會有某個 CPU 單獨服務應用程序或內核程序,而是每個程序都可以被分配到任意壹個 CPU 上被執行。
ELF
ELF 的意思是可執行文件鏈接格式,它是 Linux 操作系統中可執行文件的存儲格式;
ELF 文件格式
ELF 把文件分成了壹個個分段,每壹個段都有自己的作用,具體每個段的作用這裏就不詳細說明了,感興趣的同學可以去看《程序員的自我修養——鏈接、裝載和庫》這本書。
另外,ELF 文件有兩種索引,Program header table 中記錄了「運行時」所需的段,而 Section header table 記錄了二進制文件中各個「段的首地址」。
那 ELF 文件怎麽生成的呢?
我們編寫的代碼,首先通過「編譯器」編譯成匯編代碼,接著通過「匯編器」變成目標代碼,也就是目標文件,最後通過「鏈接器」把多個目標文件以及調用的各種函數庫鏈接起來,形成壹個可執行文件,也就是 ELF 文件。
那 ELF 文件是怎麽被執行的呢?
執行 ELF 文件的時候,會通過「裝載器」把 ELF 文件裝載到內存裏,CPU 讀取內存中宏內核的特征是系統內核的所有模塊,比如進程調度、內存管理、文件系統、設備驅動等,都運行在內核態。
不過,Linux 也實現了動態加載內核模塊的功能,例如大部分設備驅動是以可加載模塊的形式存在的,與內核其他模塊解藕,讓驅動開發和驅動加載更為方便、靈活。