1. 前言
本文主要講解什么是linux內(nèi)核,以及通過多張圖片展示Linux內(nèi)核的作用與功能,以便于讀者能快速理解什么是Linux內(nèi)核,能看懂Linux內(nèi)核。
擁有超過1300萬行的代碼,Linux內(nèi)核是世界上最大的開源項(xiàng)目之一,但是內(nèi)核是什么,它用于什么?

一張圖看懂Linux內(nèi)核

Linux內(nèi)核是什么
2. 什么是內(nèi)核
內(nèi)核是與計(jì)算機(jī)硬件接口的易替換軟件的最低級(jí)別。它負(fù)責(zé)將所有以“用戶模式”運(yùn)行的應(yīng)用程序連接到物理硬件,并允許稱為服務(wù)器的進(jìn)程使用進(jìn)程間通信(IPC)彼此獲取信息。
3. 內(nèi)核還要分種類?
是的,沒錯(cuò)。
3.1 微內(nèi)核
微內(nèi)核只管理它必須管理的東西:CPU、內(nèi)存和IPC。計(jì)算機(jī)中幾乎所有的東西都可以被看作是一個(gè)附件,并且可以在用戶模式下處理。微內(nèi)核具有可移植性的優(yōu)勢(shì),因?yàn)橹灰僮飨到y(tǒng)仍然試圖以相同的方式訪問硬件,就不必?fù)?dān)心您是否更改了視頻卡,甚至是操作系統(tǒng)。微內(nèi)核對(duì)內(nèi)存和安裝空間的占用也非常小,而且它們往往更安全,因?yàn)橹挥刑囟ǖ倪M(jìn)程在用戶模式下運(yùn)行,而用戶模式不具有管理員模式的高權(quán)限。

微內(nèi)核
3.1.1 Pros
- 可移植性
- 安裝占用空間小
- 小內(nèi)存占用
- 安全
3.1.2 Cons
- 通過驅(qū)動(dòng)程序,硬件更加抽象
- 硬件可能反應(yīng)較慢,因?yàn)轵?qū)動(dòng)程序處于用戶模式
- 進(jìn)程必須在隊(duì)列中等待才能獲得信息
- 進(jìn)程不能在不等待的情況下訪問其他進(jìn)程
3.2 單內(nèi)核
單內(nèi)核與微內(nèi)核相反,因?yàn)樗鼈儾粌H包含CPU、內(nèi)存和IPC,而且還包含設(shè)備驅(qū)動(dòng)程序、文件系統(tǒng)管理和系統(tǒng)服務(wù)器調(diào)用等內(nèi)容。單內(nèi)核更擅長(zhǎng)于訪問硬件和多任務(wù)處理,因?yàn)槿绻粋€(gè)程序需要從內(nèi)存或運(yùn)行中的其他進(jìn)程中獲取信息,那么它就有一條更直接的線路來訪問信息,而不需要在隊(duì)列中等待來完成任務(wù)。但是,這可能會(huì)導(dǎo)致問題,因?yàn)樵诠芾砟J较逻\(yùn)行的東西越多,如果行為不正常,就會(huì)有越多的東西導(dǎo)致系統(tǒng)崩潰。

單內(nèi)核
3.2.1 Pros
- 更直接地訪問程序的硬件
- 流程之間更容易通信
- 如果支持您的設(shè)備,它應(yīng)該不需要額外安裝就可以工作
- 進(jìn)程反應(yīng)更快,因?yàn)闆]有等待處理器時(shí)間的隊(duì)列
3.2.2 Cons
- 較大安裝體積
- 較大內(nèi)存占用
- 不太安全,因?yàn)樗胁僮鞫荚诠芾砟J较逻\(yùn)行

內(nèi)核對(duì)比monolithic_vs_microkernel
4. 混合的內(nèi)核
混合內(nèi)核能夠選擇在用戶模式下運(yùn)行什么,以及在管理模式下運(yùn)行什么。通常情況下,設(shè)備驅(qū)動(dòng)程序和文件系統(tǒng)I/O將在用戶模式下運(yùn)行,而IPC和服務(wù)器調(diào)用將保持在管理器模式下。這是兩全其美,但通常需要硬件制造商做更多的工作,因?yàn)樗序?qū)動(dòng)程序的責(zé)任都由他們來承擔(dān)。它還可能存在一些與微內(nèi)核固有的延遲問題。

混合的內(nèi)核
4.1 Pros
- 開發(fā)人員可以選擇什么在用戶模式下運(yùn)行,什么在管理模式下運(yùn)行
- 比單片內(nèi)核更小的安裝占用空間
- 比其他型號(hào)更靈活
4.2 Cons
- 會(huì)遭受與微內(nèi)核相同的進(jìn)程延遲
- 設(shè)備驅(qū)動(dòng)程序需要由用戶管理(通常)
5. Linux內(nèi)核文件在哪里
Ubuntu中的內(nèi)核文件存儲(chǔ)在/boot文件夾中,稱為vmlinux -version。vmlinuz這個(gè)名字來自于unix世界,早在60年代,他們就把內(nèi)核簡(jiǎn)單地稱為“unix”,所以當(dāng)內(nèi)核在90年代首次開發(fā)時(shí),Linux就開始把內(nèi)核稱為“Linux”。

Linux內(nèi)核文件在哪里
當(dāng)開發(fā)虛擬內(nèi)存以便更容易地進(jìn)行多任務(wù)處理時(shí),將“vm”放在文件的前面,以顯示內(nèi)核支持虛擬內(nèi)存。有一段時(shí)間,Linux內(nèi)核被稱為vmlinux,但是內(nèi)核變得太大,無法裝入可用的引導(dǎo)內(nèi)存,因此壓縮了內(nèi)核映像,并將末尾的x更改為z,以顯示它是用zlib壓縮的。并不總是使用相同的壓縮,通常用LZMA或BZIP2替換,一些內(nèi)核簡(jiǎn)單地稱為zImage。
版本號(hào)將采用A.B.C.格式D在。B可能是2.6,C是您的版本,D表示您的補(bǔ)丁或補(bǔ)丁。

linux版本號(hào)
在/boot文件夾中還有其他非常重要的文件,稱為initrd.img-version、system.map-version, config-version。initrd文件用作一個(gè)小RAM磁盤,用于提取和執(zhí)行實(shí)際的內(nèi)核文件。這個(gè)系統(tǒng)。map文件用于內(nèi)核完全加載之前的內(nèi)存管理,配置文件告訴內(nèi)核在編譯內(nèi)核映像時(shí)要加載哪些選項(xiàng)和模塊。6. Linux內(nèi)核體系結(jié)構(gòu)
因?yàn)長(zhǎng)inux內(nèi)核是單片的,所以它比其他類型的內(nèi)核占用空間最大,復(fù)雜度也最高。這是一個(gè)設(shè)計(jì)特性,在Linux早期引起了相當(dāng)多的爭(zhēng)論,并且仍然帶有一些與單內(nèi)核固有的相同的設(shè)計(jì)缺陷。

Linux內(nèi)核體系結(jié)構(gòu)
為了解決這些缺陷,Linux內(nèi)核開發(fā)人員所做的一件事就是使內(nèi)核模塊可以在運(yùn)行時(shí)加載和卸載,這意味著您可以動(dòng)態(tài)地添加或刪除內(nèi)核的特性。這不僅可以向內(nèi)核添加硬件功能,還可以包括運(yùn)行服務(wù)器進(jìn)程的模塊,比如低級(jí)別虛擬化,但也可以替換整個(gè)內(nèi)核,而不需要在某些情況下重啟計(jì)算機(jī)。
想象一下,如果您可以升級(jí)到windows服務(wù)包,而不需要重新啟動(dòng)……
7. 內(nèi)核模塊
如果Windows已經(jīng)安裝了所有可用的驅(qū)動(dòng)程序,而您只需要打開所需的驅(qū)動(dòng)程序怎么辦?這本質(zhì)上就是內(nèi)核模塊為L(zhǎng)inux所做的。內(nèi)核模塊,也稱為可加載內(nèi)核模塊(LKM),對(duì)于保持內(nèi)核在不消耗所有可用內(nèi)存的情況下與所有硬件一起工作是必不可少的。

內(nèi)核模塊
模塊通常向基本內(nèi)核添加設(shè)備、文件系統(tǒng)和系統(tǒng)調(diào)用等功能。lkm的文件擴(kuò)展名是.ko,通常存儲(chǔ)在/lib/modules目錄中。由于模塊的特性,您可以通過在啟動(dòng)時(shí)使用menuconfig命令將模塊設(shè)置為load或not load,或者通過編輯/boot/config文件,或者使用modprobe命令動(dòng)態(tài)地加載和卸載模塊,輕松定制內(nèi)核。
第三方和封閉源碼模塊在一些發(fā)行版中是可用的,比如Ubuntu,默認(rèn)情況下可能無法安裝,因?yàn)檫@些模塊的源代碼是不可用的。該軟件的開發(fā)人員(即nVidia、ATI等)不提供源代碼,而是構(gòu)建自己的模塊并編譯所需的.ko文件以便分發(fā)。雖然這些模塊像beer一樣是免費(fèi)的,但它們不像speech那樣是免費(fèi)的,因此不包括在一些發(fā)行版中,因?yàn)榫S護(hù)人員認(rèn)為它通過提供非免費(fèi)軟件“污染”了內(nèi)核。
內(nèi)核并不神奇,但對(duì)于任何正常運(yùn)行的計(jì)算機(jī)來說,它都是必不可少的。Linux內(nèi)核不同于OS X和Windows,因?yàn)樗瑑?nèi)核級(jí)別的驅(qū)動(dòng)程序,并使許多東西“開箱即用”。希望您能對(duì)軟件和硬件如何協(xié)同工作以及啟動(dòng)計(jì)算機(jī)所需的文件有更多的了解。
8. 總結(jié)
通過本文,您應(yīng)該較好地理解什么是Linux內(nèi)核以及通過一張或者多張圖看懂Linux內(nèi)核的作用了吧?
本文已同步至博客站,尊重原創(chuàng),轉(zhuǎn)載時(shí)請(qǐng)?jiān)谡闹懈綆б韵骆溄樱?/p>
https://www.linuxrumen.com/rmxx/1406.html