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