linux 內(nèi)核從1991年至2018年已經(jīng)有27年的歷史了,從原來不到1萬行代碼到現(xiàn)在已經(jīng)超過2000萬行代碼了。我其實也挺佩服人類的大腦,可惜這佩服也是大腦想到的,細(xì)思極恐!
以下就是Linux內(nèi)核的大概的總體樣子!!


我大致總結(jié)一下,我打個不恰當(dāng)比方,軟件是上層建筑,就是你住的地方,地基面就是系統(tǒng)調(diào)用層,上層建筑只要根據(jù)地基面來規(guī)劃就好了,不用管地基里面是什么樣子。
一個Linux的內(nèi)核總體能分三部分:
硬件層:包括cpu、物理內(nèi)存、主板、磁盤和相應(yīng)的外設(shè)。
內(nèi)核空間:包括Linux內(nèi)核的核心部件,比如arch抽象層、設(shè)備管理抽象層、內(nèi)存管理、進(jìn)程管理、總線管理、字符設(shè)備以及應(yīng)用程序交互系統(tǒng)調(diào)用層
用戶空間:這里包括C語言庫、應(yīng)用程序和虛擬機(jī)等。
那我們先關(guān)注一些主要的部件。
(1) system calls(系統(tǒng)調(diào)用層)這個我在上篇文章中說了。
linux內(nèi)核把系統(tǒng)分成兩個空間,用戶空間和內(nèi)核空間。
系統(tǒng)調(diào)用層
把系統(tǒng)想成一個大樓,調(diào)用層是地基平面,用戶層就建立在上面,用戶是不關(guān)心地基里面怎么運(yùn)行的。比如編寫用戶進(jìn)程的程序員不需要知道這個文件具體存放在磁盤哪個扇區(qū)里,只需要調(diào)用open()、read()、mmap()等函數(shù)就可以。
(2) 進(jìn)程管理
進(jìn)程是現(xiàn)在操作系統(tǒng)中非常重要的概念,包括上下文切換以及進(jìn)程調(diào)度。每個進(jìn)程運(yùn)行時都感覺完全占有了全部的硬件資源。但是進(jìn)程不會長時間占有硬件資源。操作系統(tǒng)利用進(jìn)程調(diào)度器讓多個進(jìn)程并發(fā)執(zhí)行。
進(jìn)程管理還包括進(jìn)程的創(chuàng)建和銷毀、線程組管理、內(nèi)核線程管理、隊列等內(nèi)容。
問個問題,一個進(jìn)程和線程是啥區(qū)別呢?
(3) 內(nèi)存管理
內(nèi)存管理是Linux內(nèi)核中最復(fù)雜的模塊,它涉及了虛擬內(nèi)存和物理內(nèi)存的管理。作為Linux系統(tǒng),Linux內(nèi)核的虛擬內(nèi)存管理非常重要。虛擬內(nèi)存有很多優(yōu)點,比如多個進(jìn)程可以并發(fā)執(zhí)行、進(jìn)程請求的內(nèi)存可以比物理內(nèi)存大、多個進(jìn)程可以共享函數(shù)庫等,因此虛擬內(nèi)存越來越復(fù)雜了。
物理內(nèi)存的管理也比較復(fù)雜。頁面分配器是核心部件,它需要考慮系統(tǒng)內(nèi)存緊張時候,如何回收頁面和繼續(xù)分配物理內(nèi)存。
(4) 文件系統(tǒng)
為多種文件系統(tǒng)提供統(tǒng)一的操作接口,當(dāng)然有各種各樣的文件系統(tǒng),比如ext4和XFS等。為了支持各種各樣的文件系統(tǒng),Linux虛擬機(jī)出一個稱為虛擬文件系統(tǒng)(VFS),這樣linux內(nèi)核就可以很方便的集成多種文件系統(tǒng)。
再墨跡一下,如何學(xué)習(xí)Linux的內(nèi)核呢?
學(xué)習(xí)linux內(nèi)核應(yīng)該要對c語言有所了解,畢竟Linux內(nèi)核是c語言寫的,可以買一些書來看,或者關(guān)注我們的平臺,我們是一個強(qiáng)大的團(tuán)隊,有老師可以問問他們問題,一起交流。
還有你還要了解Linux系統(tǒng),熟悉vim和git等工具。
再Linux上做一些編程和調(diào)試的練習(xí),如使用QEMU+GDB+Eclipse來調(diào)試內(nèi)核,熟悉GDB等。
最后喜歡我文章的朋友請加圈子關(guān)注我們,私信關(guān)鍵詞:加群。
就會自動分享給你群號。歡迎大家加入我們的安全大家庭。提高大家的安全意識,提升大家的網(wǎng)絡(luò)安全技能一直是我們的初衷和愿景,讓我們共同成為守護(hù)信息世界的“SaFeMAN”。
還有可以關(guān)注我們微信公眾號,在公眾號上輸入安界網(wǎng),就可以關(guān)注到我們。