精通所有底層原理,助你拿下大廠百萬年薪!(大佬經(jīng)驗~)
什么是操作系統(tǒng)OS
操作系統(tǒng)(簡稱為OS)是一種軟件平臺,可創(chuàng)建一個環(huán)境,用戶可以在該環(huán)境中在計算設(shè)備上運行不同的應(yīng)用程序。 操作系統(tǒng)充當(dāng)軟件程序和系統(tǒng)硬件組件之間的橋梁。 它被移動設(shè)備,標(biāo)簽,臺式機(jī),Web服務(wù)器,視頻游戲機(jī)等不同的設(shè)備所利用。市場上有各種操作系統(tǒng)可用,例如Windows,Linux,Unix和Mac OSX。
操作系統(tǒng)的的組成
Bootloader:它負(fù)責(zé)設(shè)備的啟動過程。
Shell:Shell是一種編程語言,它可以控制其他文件,進(jìn)程以及所有其他程序。
Kernel:它是操作系統(tǒng)的主要組件,管理內(nèi)存,CPU和其他相關(guān)組件。
Desktop Environment:這是用戶通常與之交互的環(huán)境。
Graphical server(圖形服務(wù)器):它是操作系統(tǒng)的子系統(tǒng),用于在屏幕上顯示圖形
Applications: 這些是執(zhí)行不同用戶任務(wù)(例如word,excel等)的程序集。
Daemons : 后臺服務(wù)提供商。
什么是內(nèi)核kernel
內(nèi)核是操作系統(tǒng)的關(guān)鍵組件。 它借助進(jìn)程間通信和系統(tǒng)調(diào)用,在硬件級別上充當(dāng)應(yīng)用程序和數(shù)據(jù)處理之間的橋梁。
每當(dāng)將操作系統(tǒng)加載到內(nèi)存中時,首先,將加載內(nèi)核并將其保留在那里,直到操作系統(tǒng)關(guān)閉。 內(nèi)核負(fù)責(zé)處理低級任務(wù),例如任務(wù)管理,內(nèi)存管理,風(fēng)險管理等。
內(nèi)核的任務(wù)
用于應(yīng)用程序執(zhí)行的流程管理。
內(nèi)存和I / O(輸入/輸出)管理。
系統(tǒng)調(diào)用控制(內(nèi)核的核心行為)。
借助設(shè)備驅(qū)動程序進(jìn)行設(shè)備管理。
內(nèi)核空間,用戶空間是什么?
內(nèi)核空間
內(nèi)核處于提升的系統(tǒng)狀態(tài),其中包括受保護(hù)的內(nèi)存空間以及對設(shè)備硬件的完全訪問權(quán)限。 此系統(tǒng)狀態(tài)和內(nèi)存空間統(tǒng)稱為內(nèi)核空間。 在內(nèi)核空間內(nèi),對硬件和系統(tǒng)服務(wù)的核心訪問進(jìn)行管理,并作為服務(wù)提供給系統(tǒng)的其余部分。
用戶空間
用戶空間或用戶域是在操作系統(tǒng)內(nèi)核環(huán)境之外運行的代碼,用戶空間定義為操作系統(tǒng)用來與內(nèi)核連接的各種應(yīng)用程序或程序或庫。
用戶的應(yīng)用程序是在用戶空間中執(zhí)行的,它們可以通過內(nèi)核系統(tǒng)調(diào)用訪問計算機(jī)可用資源的一部分。 通過使用內(nèi)核提供的核心服務(wù),可以創(chuàng)建用戶級別的應(yīng)用程序,例如游戲或辦公軟件。
內(nèi)核的操作
內(nèi)核是任何操作系統(tǒng)的心臟,因為它控制系統(tǒng)中的所有其他程序。 當(dāng)設(shè)備啟動時,內(nèi)核會經(jīng)歷一個初始化的過程,例如檢查內(nèi)存。 它負(fù)責(zé)內(nèi)存分配部分,并創(chuàng)建了一個運行應(yīng)用程序的環(huán)境,而沒有任何干擾。
內(nèi)核充當(dāng)服務(wù)提供者,因此程序可以請求內(nèi)核完成多項任務(wù),例如請求使用磁盤,網(wǎng)卡或其他硬件,并且內(nèi)核為CPU設(shè)置中斷以啟用多任務(wù)處理。 它不讓錯誤的程序進(jìn)入其他程序的操作功能,從而保護(hù)了計算環(huán)境。 它通過不允許存儲空間來阻止未經(jīng)授權(quán)的程序進(jìn)入入口,并限制它們消耗的CPU時間。
內(nèi)核的分類
通常有三類內(nèi)核:
Monolithic kernel: 它包含許多設(shè)備驅(qū)動程序,可在設(shè)備的硬件和軟件之間創(chuàng)建通信接口。
它是操作系統(tǒng)廣泛使用的內(nèi)核。 在單片架構(gòu)中,內(nèi)核由可以動態(tài)加載和卸載的各種模塊組成。 這種體系結(jié)構(gòu)將擴(kuò)展OS的功能,并允許輕松擴(kuò)展內(nèi)核。
使用單片式體系結(jié)構(gòu),內(nèi)核的維護(hù)變得容易,因為當(dāng)需要修復(fù)特定模塊中的錯誤時,它允許相關(guān)模塊進(jìn)行加載和卸載。 因此,它消除了繁瑣的工作,即降低并重新編譯整個內(nèi)核以進(jìn)行很小的更改。 在單片內(nèi)核中,卸載不再使用的模塊更加容易。
Micro kernel: 它只能執(zhí)行基本功能。
微內(nèi)核已經(jīng)發(fā)展成為單片內(nèi)核的替代產(chǎn)品,以解決單片內(nèi)核無法做到的內(nèi)核代碼不斷增長的問題。 這種體系結(jié)構(gòu)允許某些基本服務(wù)(例如協(xié)議棧,設(shè)備驅(qū)動程序管理,文件系統(tǒng)等)在用戶空間中運行。 這樣可以以最少的代碼增強(qiáng)OS的功能,提高安全性并確保穩(wěn)定性。
它通過使系統(tǒng)的其余部分正常運行而不會造成任何中斷,從而限制了對受影響區(qū)域的損壞。 在微內(nèi)核體系結(jié)構(gòu)中,所有基本OS服務(wù)都可以通過進(jìn)程間通信(IPC)提供給程序。 微內(nèi)核允許設(shè)備驅(qū)動程序和硬件之間的直接交互。
Hybrid kernel: 它結(jié)合了單片內(nèi)核和微內(nèi)核的各個方面。
混合內(nèi)核可以決定要在用戶模式和主管模式下運行什么。 通常,在混合內(nèi)核環(huán)境中,設(shè)備驅(qū)動程序,文件系統(tǒng)I / O之類的內(nèi)容將在用戶模式下運行,而服務(wù)器調(diào)用和IPC則保持在管理者模式下。 它提供了兩個世界的最佳體驗。
Linux操作系統(tǒng)
Linux是Linus Torvalds在1991年開發(fā)的開源平臺。 它在各種設(shè)備中用作操作系統(tǒng),例如在計算機(jī),服務(wù)器,移動設(shè)備,大型機(jī)和其他嵌入式設(shè)備中。 由于它是開源軟件,因此用戶可以根據(jù)需要自定義此操作系統(tǒng)。 它支持幾乎所有主要的計算機(jī)平臺,例如ARM,x86,SPARK等。Linux的最常見用法是用于Server,但也用于臺式機(jī),電子書閱讀器,智能手機(jī)等。
Linux內(nèi)核
內(nèi)核是任何基于Linux的操作系統(tǒng)的核心組件。 它代表了臺式機(jī)和服務(wù)器的Linux發(fā)行版的核心方面。 它具有整體架構(gòu),并且操作系統(tǒng)完全在內(nèi)核空間中運行。 整體內(nèi)核不僅包圍中央處理器,IPC和內(nèi)存,而且具有系統(tǒng)服務(wù)器調(diào)用,設(shè)備驅(qū)動程序和文件系統(tǒng)管理。 Linux內(nèi)核充當(dāng)設(shè)備軟件和硬件之間的一層。
內(nèi)核可以是單片,微內(nèi)核或混合內(nèi)核(例如OS X和Windows 7)。 Linux內(nèi)核是類似于UNIX系統(tǒng)的單片計算機(jī)操作系統(tǒng)內(nèi)核。 Linux操作系統(tǒng)系列(通常稱為Linux發(fā)行版)基于此內(nèi)核。與微內(nèi)核不同,單塊內(nèi)核不僅包含中央處理單元,內(nèi)存和IPC,還具有設(shè)備驅(qū)動程序,系統(tǒng)服務(wù)器調(diào)用和文件系統(tǒng)管理。他們最擅長與硬件通信并同時執(zhí)行多項任務(wù)。由于這個原因,此處的過程反應(yīng)速度很快。
但是,很少的挫折是所需的巨大安裝和內(nèi)存占用空間以及安全性不足,因為一切都以管理員模式運行。相反,隨著用戶服務(wù)和內(nèi)核的分離,微內(nèi)核對應(yīng)用程序調(diào)用的反應(yīng)可能會很慢。因此,與整體內(nèi)核相比,它們的尺寸更小。微內(nèi)核很容易擴(kuò)展,但是編寫微內(nèi)核需要更多代碼。 Linux內(nèi)核是用C和Assembly編程語言編寫的。
內(nèi)核源碼結(jié)構(gòu)
在Linux系統(tǒng)中查看內(nèi)核源碼,如圖所示

arch 特定體系結(jié)構(gòu)的代碼
block 塊設(shè)備I/O層
crypo 加密API
Documentation 內(nèi)核源碼文檔
drivers 設(shè)備驅(qū)動程序
firmware 使用某些驅(qū)動程序而需要的設(shè)備固件
fs VFS和各種文件系統(tǒng)
include 內(nèi)核頭文件
init 內(nèi)核引導(dǎo)和初始化
ipc 進(jìn)程間通信代碼
kernel 像調(diào)度程序這樣的核心子系統(tǒng)
lib 同樣內(nèi)核函數(shù)
mm 內(nèi)存管理子系統(tǒng)和VM
net 網(wǎng)絡(luò)子系統(tǒng)
samples 示例,示范代碼
scripts 編譯內(nèi)核所用的腳本
security Linux 安全模塊
sound 語音子系統(tǒng)
usr 早期用戶空間代碼(所謂的initramfs)
tools 在Linux開發(fā)中有用的工具
virt 虛擬化基礎(chǔ)結(jié)構(gòu)
文末有學(xué)習(xí)路線圖
【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦!?。。ê曨l教程、電子書、實戰(zhàn)項目及代碼)? ? ?


這里給大家分享零聲教育的Linux內(nèi)核源碼課程,對標(biāo)騰訊T9級別。
主要從
進(jìn)程管理專題
內(nèi)存管理專題
網(wǎng)絡(luò)協(xié)議棧專題
設(shè)備驅(qū)動管理專題
文件系統(tǒng)及內(nèi)核組件專題
全方面系統(tǒng)全面的講解底層原理開發(fā)技術(shù):
最新Linux內(nèi)核大綱
進(jìn)程管理專題

內(nèi)存管理專題

網(wǎng)絡(luò)協(xié)議棧專題

設(shè)備驅(qū)動管理專題

文件系統(tǒng)及內(nèi)核組件專題


適合于
1. 從事業(yè)務(wù)開發(fā)多年,對底層原理理解不夠深入的在職工程師
2. 從事嵌入式方向開發(fā),想轉(zhuǎn)入互聯(lián)網(wǎng)開發(fā)的在職工程師
3. 從事Qt/MFC等桌面開發(fā),薪資多年漲幅不大的在職工程師
4. 從事非開發(fā)崗位(算法崗,運維崗,測試崗),想轉(zhuǎn)后臺開發(fā)崗位的在職工程師
5. 工作中技術(shù)沒有挑戰(zhàn),工作中接觸不到新技術(shù)的在職工程師
6. 自己研究學(xué)習(xí)速度較慢,不能系統(tǒng)構(gòu)建知識體系的開發(fā)人員
7. 了解很多技術(shù)名詞,但是深入細(xì)問又不理解的工程師
8. 計算機(jī)相關(guān)專業(yè)想進(jìn)入大廠的在校生(本科及以上學(xué)歷,有c/c++基礎(chǔ))



