
我是荔園微風(fēng),作為一名在IT界整整25年的老兵,最近受邀給年輕人講了一場Windows內(nèi)核和Linux內(nèi)核相關(guān)的講座。大家聽得非常認真。
計算機操作系統(tǒng)的功能角色:作為用戶和計算機硬件資源之間的交互,管理調(diào)度硬件資源,為應(yīng)用軟件提供運行環(huán)境。操作系統(tǒng)屬于基礎(chǔ)軟件,是系統(tǒng)級程序的匯集,為用戶屏蔽底層硬件復(fù)雜度, 并提供編程接口和操作入口。操作系統(tǒng)控制處理器(CPU)調(diào)度系統(tǒng)資源,控制應(yīng)用程序執(zhí)行的時機, 決定各個程序分配的處理器時間。操作系統(tǒng)需要兼容底層硬件和應(yīng)用軟件,才能實現(xiàn)計算機的功能。
內(nèi)核是操作系統(tǒng)中應(yīng)用連接硬件設(shè)備的橋梁。對于一個現(xiàn)代的操作系統(tǒng)來說,它的內(nèi)核至少應(yīng)該提供以下 4 種基本能力:
管理進程、線程(決定哪個進程、線程使用 CPU)
管理內(nèi)存(決定內(nèi)存用來做什么)
接硬件設(shè)備(為進程、和設(shè)備間提供通信能力)
提供系統(tǒng)調(diào)用(接收進程發(fā)送來的系統(tǒng)調(diào)用)
從上面 4 種能力來看操作系統(tǒng)和內(nèi)核之間的關(guān)系,通常可以把操作系統(tǒng)分成 3 層,最底層的硬件設(shè)備抽象、中間的內(nèi)核和最上層的應(yīng)用。
那么,內(nèi)核和進程又是如何配合工作的?這個問題之前也困繞著我,后來,論壇里有一位高手指點我們,他說:進程和內(nèi)核的關(guān)系,初初一看類似于瀏覽器請求服務(wù)端服務(wù),但仔細一研究,又不是這樣。這個比喻打得很貼切,讓我們突然覺得這個問題不再那么讓人疑惑了。內(nèi)核權(quán)限非常高,它可以管理進程、可以直接訪問所有的內(nèi)存,因此確實需要和進程之間有一定的隔離。這個隔離用類似請求/響應(yīng)的模型,非常符合常理。
但不同的是,在瀏覽器、服務(wù)端模型中,瀏覽器和服務(wù)端是用不同的機器在執(zhí)行,因此不需要共享一個CPU。但是在進程調(diào)用內(nèi)核的過程中,這里是存在資源共享的。比如,一個機器有 4 個 CPU,不可能讓內(nèi)核用一個CPU,其他進程用剩下的 CPU。這樣太浪費資源了。再比如,進程向內(nèi)核請求 1000MB 的內(nèi)存,內(nèi)核把 1000MB 的數(shù)據(jù)傳回去。這個模型不可行,因為傳輸太慢了。所以,多數(shù)操作系統(tǒng)的設(shè)計都遵循一個原則:進程向內(nèi)核發(fā)起一個請求,然后將 CPU 執(zhí)行權(quán)限讓出給內(nèi)核。內(nèi)核接手 CPU 執(zhí)行權(quán)限,然后完成請求,再轉(zhuǎn)讓出 CPU 執(zhí)行權(quán)限給調(diào)用進程。
下面我把我講座中的一些PPT放上來和大家分享。做得一般,請大家將就著看。

Windows內(nèi)核(右)和Linux內(nèi)核(左)在體系結(jié)構(gòu)上的比較,一個是混合內(nèi)核結(jié)構(gòu),一個是宏內(nèi)核結(jié)構(gòu),各有千秋,不分伯仲。
Windows 系統(tǒng)的訪問分為 User mode(用戶模式)和 Kernel mode(內(nèi)核模式)。用戶級的應(yīng)用程序在用戶模式中運行,而系統(tǒng)級的程序在內(nèi)核模式中運行。內(nèi)核模式允許訪問所有的系統(tǒng)內(nèi)存和 CPU 指令。Windows 系統(tǒng)從最早期的 16 位、32 位到現(xiàn)在流行的 64 位,不斷持續(xù)更新。
開源社區(qū)是 Linux 系統(tǒng)的創(chuàng)新源泉和主要的開發(fā)場所。Linux 操作系統(tǒng)發(fā)行版分為社區(qū)版本和商業(yè)版本。社區(qū)版本數(shù)量較多,其開發(fā)和維護的主體是開源社區(qū)。少數(shù)的商業(yè)版本(比如紅帽企業(yè)版) 則是在社區(qū)版本的基礎(chǔ)上,進一步優(yōu)化而來。整體來看,無論是否涉及商業(yè)活動,開源社區(qū)是 Linux 發(fā)行版的創(chuàng)新來源和主要的開發(fā)場所。而成熟的開源社區(qū)通常由相應(yīng)的開源基金會(或者項目委員會)進行管理。開源基金會為開發(fā)社區(qū)制定了規(guī)則,進行資源管理,負責(zé)可能的商務(wù)對接,以及保護社區(qū)的健康運轉(zhuǎn)。社區(qū)的開源基金會(委員會)一般由開源貢獻方進行贊助和決策支持。
許多開源社區(qū)背后都有一個主導(dǎo)企業(yè),為社區(qū)提供資金和研究支撐,甚至直接委派員工參與開源項目。例如,F(xiàn)edora 社區(qū)的核心開發(fā)者中 1/3 是紅帽的正式雇員。通過資助和維護開源社區(qū)的方式,企業(yè)可以發(fā)揮研究力量的“杠桿”作用,通過向社區(qū)輸入自有的研究資源,吸引更多的外部貢 獻者參與進來,擴大創(chuàng)意來源;另一方面,開源社區(qū)版本也成為企業(yè)擴大技術(shù)影響力的重要途徑。
Linux 操作系統(tǒng)由 4 部分組成:kernel、shell、文件系統(tǒng)、應(yīng)用程序。Kernel(內(nèi)核)是操作系統(tǒng)的核心,不同于 windows 的內(nèi)核,Linux 的內(nèi)核不僅實現(xiàn)了進程調(diào)度、內(nèi)存管理、中斷處理、異常陷阱處理,而且還實現(xiàn)了進程管理、進程通信機制、虛擬內(nèi)存管理、文件系統(tǒng)驅(qū)動和 USB、網(wǎng)絡(luò)、聲 音等各類設(shè)備驅(qū)動子系統(tǒng),決定了整個系統(tǒng)的性能和穩(wěn)定性。而 shell 是系統(tǒng)的用戶界面,提供用 戶與內(nèi)核交互的接口,接收用戶輸入的命令并送入內(nèi)核去執(zhí)行。

Windows內(nèi)核(右)和Linux內(nèi)核(左)在進程線程上的比較,生成子進程方式有較大不同,大家可查詢相關(guān)資料仔細研究。
Linux 操作系統(tǒng)在服務(wù)器領(lǐng)域的普及,主要由于 3 個方面:
(1)全球開發(fā)者對 Linux 內(nèi)核保持了持續(xù)的更新,提供了充足的創(chuàng)新動力。據(jù)分析結(jié)果,截至 2018 年 9 月,已有超過 19000 名開發(fā)者為 Linux 內(nèi)核貢獻了代碼, 這些開發(fā)者遍布全球范圍超過1500個組織/企業(yè)。廣泛分布的開發(fā)者,從不同視角不同方面對Linux 內(nèi)核的補充,使得 Linux 系統(tǒng)得以快速適應(yīng)服務(wù)器領(lǐng)域的變化。
(2)系統(tǒng)代碼可以修改和自定義,用戶可調(diào)用計算機資源的自由度極高。Linux 操作系統(tǒng)的使用者 可以輕松查看系統(tǒng)代碼,可以自由修改代碼來修補常見的問題,也可以開發(fā)自己的程序并添加入 Linux 操作系統(tǒng)中。相比 Windows 等閉源系統(tǒng),Linux 支持了使用者對于計算機資源極大的使用自由度,支持專業(yè)用戶去構(gòu)建和自定義服務(wù)器,由此獲得了互聯(lián)網(wǎng)公司、云計算公司的青睞。
(3)運行效率高,運維成本低。Linux 系統(tǒng)在服務(wù)器上面的運行效率較高,相對比較輕量化,除非硬件資源分配出現(xiàn)問題,不易出現(xiàn)系統(tǒng)卡死狀況。而且 Linux 系統(tǒng)天然地支持虛擬化。因此,在服務(wù) 器集群上,Linux 系統(tǒng)的運維成本較低。
(4)Linux 從發(fā)展根源上就是針對多用戶系統(tǒng)設(shè)計的,系統(tǒng)管理員和 root 用戶具有系統(tǒng)管理權(quán)限。Linux 面向全球開發(fā)者開源,系統(tǒng)文件都是文檔,在全球開發(fā)者多次的篩查和更新中,基本排除了“后門植入”的可能。實際應(yīng)用中,普通不成熟的 Linux 操作系統(tǒng)確實可能存在安全問題, 也是和系統(tǒng)的文檔屬性有關(guān)。例如,用戶 root 權(quán)限和 sudo 指令可在有意或無意間修改 Linux 系 統(tǒng)文檔,可能會對其他用戶或整個系統(tǒng)造成不利影響。因此,成熟的 Linux 操作系統(tǒng)解決方案,有 必要對這類屬性進行設(shè)計方面的防范,去進行適當(dāng)?shù)臋?quán)限屏蔽。而這些安全屬性的設(shè)計,本質(zhì)上并 不存在難以解決的障礙。

Linux內(nèi)核鏈表數(shù)據(jù)結(jié)構(gòu)(Linux內(nèi)核四大數(shù)據(jù)結(jié)構(gòu)之一)
說到 Linux 內(nèi)核設(shè)計,主要存在以下一些特色:
Multitask and SMP(Symmetric multiprocessing)
Linux 支持并發(fā),但這里的MultiTask 指多任務(wù),就是多個任務(wù)可以同時執(zhí)行,這里的“同時”并不是要求并發(fā),而是在一段時間內(nèi)可以執(zhí)行多個任務(wù)。SMP 指對稱多處理,其實是說 Linux 下每個處理器的地位是相等的,內(nèi)存對多個處理器來說是共享的,每個處理器都可以訪問完整的內(nèi)存和硬件資源。這個特點決定了在 Linux 上不會存在一個特定的處理器處理用戶程序或者內(nèi)核程序,它們可以被分配到任何一個處理器上執(zhí)行。
ELF(Executable and Linkable Format)
ELF 翻譯過來叫作“可執(zhí)行文件鏈接格式”。這是一種從 Unix 繼承而來的可執(zhí)行文件的存儲格式,ELF 中把文件分成了一個個分段(Segment),每個段都有自己的作用。

Monolithic Kernel
翻譯過來就是“宏內(nèi)核”,宏內(nèi)核說明 Linux 的內(nèi)核是一個完整的可執(zhí)行程序,且內(nèi)核用最高權(quán)限來運行。宏內(nèi)核的特點就是有很多程序會打包在內(nèi)核中,比如,文件系統(tǒng)、驅(qū)動、內(nèi)存管理等。當(dāng)然這并不是說,每次安裝驅(qū)動都需要重新編譯內(nèi)核,現(xiàn)在 Linux 也可以動態(tài)加載內(nèi)核模塊。所以哪些模塊在內(nèi)核層,哪些模塊在用戶層,這是一種系統(tǒng)層的拆分,并不是很強的物理隔離。微內(nèi)核只保留最基本的能力,比如進程調(diào)度、虛擬內(nèi)存、中斷。多數(shù)應(yīng)用,甚至包括驅(qū)動程序、文件系統(tǒng),是在用戶空間管理的。

Linux內(nèi)核隊列數(shù)據(jù)結(jié)構(gòu)(Linux內(nèi)核四大數(shù)據(jù)結(jié)構(gòu)之一)
Windows 也有內(nèi)核,它的內(nèi)核是 C/C++ 寫的。我們今天用的 Windows 7, Windows 10 的內(nèi)核叫作 Windows NT。Windows 同樣支持 Multitask 和 SMP(對稱多處理)。Windows 的內(nèi)核設(shè)計屬于混合類型,你可以看到內(nèi)核中有一個 Microkernel 模塊。而整個內(nèi)核實現(xiàn)又像宏內(nèi)核一樣,含有的能力非常多,是一個完整的整體。Windows 下也有自己的可執(zhí)行文件格式,這個格式叫作 Portable Executable(PE),也就是可移植執(zhí)行文件,擴展名通常是 .exe、.dll、.sys 等。
PE 文件的結(jié)構(gòu)和 ELF 結(jié)構(gòu)有很多相通的地方,如上圖。

Linux內(nèi)核映射表數(shù)據(jù)結(jié)構(gòu)(Linux內(nèi)核四大數(shù)據(jù)結(jié)構(gòu)之一)
但是windows的軟件是不可以直接在linux上安裝的。雖然相對的軟件幾乎都在linux上有替代品。如果非要在linux上運行windows軟件的話,可以通過名為wine的適配層,但這玩意兒比較復(fù)雜,也不是所有東西都可以wine。其次因為activeX是微軟的私有技術(shù),所以用到activex的地方,比如國內(nèi)的大多數(shù)銀行,都不可以在linux下使用。但不是所有的網(wǎng)銀都不能用。90%在windows下創(chuàng)建的文件都可以在linux下打開,反之亦然。但不是全部,因為雖然我沒遇見過,但據(jù)說還是有類似的個案。

Linux內(nèi)核紅黑樹數(shù)據(jù)結(jié)構(gòu)(Linux內(nèi)核四大數(shù)據(jù)結(jié)構(gòu)之一)
課后有同學(xué)提問,Linux內(nèi)核是怎么一步一步發(fā)展到今天的。我的PPT上其實有相關(guān)的內(nèi)容,但是十分粗淺,如下:

以下是內(nèi)核在5.0及以后所發(fā)生的變化。
5.0 2019.3.3
此版本包括對energy-aware調(diào)度的支持,該調(diào)度將任務(wù)喚醒到phone中更節(jié)能的CPU;它還包括對低功耗設(shè)備的adiantum文件系統(tǒng)加密;它增加了對amdgpu驅(qū)動程序中AMD Freesync(可變刷新率)的支持;它增加了對UDP中接收卸載和MSG_ZEROCOPY支持的支持;它增加了對ARM指針認證的支持;它增加了對cgroupv2中的cpuset資源控制器(它可以約束任務(wù)的CPU和內(nèi)存節(jié)點位置)的支持;它增加了對binderfs的命名空間支持,它允許運行多個android實例;它增加了對btrfs中交換文件的支持;它還增加了許多新的驅(qū)動因素和其他改進。
5.1 2019.5.5
此版本包括用于異步I/O的高性能接口io_uring;它還增加了fanotify的改進,以提供在大型文件系統(tǒng)上監(jiān)視更改的可伸縮方式;它增加了一種方法,允許在PID重用的情況下安全地傳遞信號;持久內(nèi)存現(xiàn)在可以用作熱插拔RAM;Zstd壓縮級別可以在Btrfs中配置;它還添加了一個新的cpuidle調(diào)控器,比菜單調(diào)控器做出更好的電源管理決策;所有32位體系結(jié)構(gòu)都添加了處理y2038問題所需的系統(tǒng)調(diào)用;現(xiàn)在可以在沒有initramfs的情況下引導(dǎo)到設(shè)備映射器設(shè)備;而實時補丁增加了對創(chuàng)建累積補丁的支持。一如既往,還有許多其他新的驅(qū)動因素和改進。
5.2 2019.7.7
此版本包括Sound Open Firmware,這是一個將開源固件引入到DSP音頻設(shè)備的項目;還包括許多英特爾產(chǎn)品的開放固件。此版本還改進了Pressure Stall Information資源監(jiān)控,使其可供Android使用;通過新的系統(tǒng)調(diào)用重新設(shè)計了mount API;BFQ I/O調(diào)度程序獲得了一些性能改進;新的CLONEPIDFD標(biāo)志允許CLONE(2)返回PIDFDsend_signal(2)可用的pidfs;Ext4已經(jīng)獲得了對不區(qū)分大小寫的名稱查找的支持;還有一個新的設(shè)備映射器目標(biāo),它模擬有失敗扇區(qū)和/或讀取失敗的設(shè)備;已經(jīng)添加了ARM Mali t4xx和更新的6xx/7xx的開源驅(qū)動程序。一如既往,有最新的CPU錯誤(MDS)和許多其他新的驅(qū)動程序和改進。
5.3 2019.9.15
此版本包括對AMD Navi gpu的支持;對umwait x86指令的支持,該指令允許進程在短時間內(nèi)等待而無需spinning loops;一種“利用率限制”機制,用于增強手機中使用的功率不對稱cpu的交互性;一個新的PIDFDXOPEN(2)系統(tǒng)調(diào)用,完成了讓用戶處理PID重用問題的工作;在0.0.0.0/8范圍內(nèi)提供了16百萬個新的IPv4地址;支持Zaxin x86 CPU;支持英特爾速度選擇,以便在Xeon服務(wù)器中更容易地進行電源選擇;以及支持輕量級管理程序ACRN,這是為嵌入式物聯(lián)網(wǎng)設(shè)備構(gòu)建的。一如既往,還有許多其他新的驅(qū)動和改進。
5.4 2019.11.24
此版本包括kernel lockdown mode,旨在加強UID 0和內(nèi)核之間的邊界;virtio fs,一個高性能virtio驅(qū)動程序,它允許一個虛擬化的客戶機去裝載已導(dǎo)出到主機上的目錄;fs-verity,用于檢測文件篡改,如dm-verity,但是可以在文件上工作,而不是在塊設(shè)備上工作;dm-clone允許對dm目標(biāo)進行實時克?。粌蓚€新的madvise()標(biāo)志用于改進Android上的應(yīng)用程序內(nèi)存管理,支持新的Intel/AMD gpu,支持exfat文件系統(tǒng),并刪除EROFS文件系統(tǒng)的實驗狀態(tài);一個新的haltpoll cpuidle驅(qū)動程序和調(diào)控器,大大提高了虛擬化客戶機在空閑循環(huán)中進行客戶機端輪詢的性能;blk-iocost,一個I/O cgroup控制器,試圖更準(zhǔn)確地計算I/O的成本。另外有其他新的驅(qū)動和改進。
5.10 2021.1.6
Linux 5.10.5從Linux幀緩沖控制臺(FBCON)中刪除加速滾動,因為它充滿了Bug,而且并沒有得到廣泛使用。是一個長期維護支持的版本,它支持Ext4中的快速提交模式,提供更快的fsync(); 支持進程間更安全的io_uring共享環(huán);為其他進程提供 madvise(2) 提示的新系統(tǒng)調(diào)用,代碼補丁以允許使用直接調(diào)用而不是間接調(diào)用以提高 repotline 性能,支持 AMD 虛擬化客戶機中的寄存器加密; 更快更精簡的 virtio-fs 性能; 支持 ARM 內(nèi)存標(biāo)記擴展,可防止許多安全問題; 和代碼修補以允許使用直接調(diào)用而不是間接調(diào)用。 與往常一樣,還有許多其他新驅(qū)動程序和改進。Ext4文件系統(tǒng)優(yōu)化方面:許多應(yīng)用程序使用 fsync(2) 來確保數(shù)據(jù)已完成磁盤的存儲。 此類操作嘗試將比預(yù)期多一些的元數(shù)據(jù)同步到磁盤。 在這個版本中,Ext4 將使用一種新穎的日志技術(shù),日志中只包含最少所需的信息,通過這些信息,崩潰恢復(fù)操作可以恢復(fù)通過 fsync 操作修改的元數(shù)據(jù)。 這加快了 fsync() 和元數(shù)據(jù)繁重的操作。 此功能需要在 mkfs 時啟用。也就是想要使用該功能,大伙需要重新格式化磁盤,所以想要體驗新功能的朋友們記得備份好數(shù)據(jù)。io_uring修訂方面:5.1內(nèi)核引入io_uring以來,其關(guān)注度和使用率可謂不容小闕,個版本的更新優(yōu)化也是可謂積極。該版本同樣做了一波動作:支持對io_uring的使用限制,實現(xiàn)環(huán)的安全共享;此版本 API 稍作了修改,這些修改添加了一些限制,并使宿主應(yīng)用可以授予對其某些文件描述符的訪問權(quán)限,并允許不受信任的應(yīng)用程序或訪客安全地使用 io_uring。其他進程的Memory Hints方面:Linux 中的進程可以使用 madvise() 系統(tǒng)調(diào)用來通知內(nèi)核,告知他們的行為以獲得更好的性能。 但是,在某些平臺(例如 Android)中,做出提示決定所需要的信息對該過程來說是未知的。相反,集中式用戶空間守護進程(例如 ActivityManagerService)是感知的,并且該守護進程必須能夠在沒有任何應(yīng)用程序參與的情況下自行啟動內(nèi)存回收。 為了解決這個問題,這個補丁引入了新的系統(tǒng)調(diào)用 - process_madvise(2)。 基本上,它與 madvise(2) 系統(tǒng)調(diào)用相同,除了它需要目標(biāo)進程的 pidfd,而且現(xiàn)在它支持一組更有限的possible memory hints。virtio-fs性能優(yōu)化方面:virtio-fs 是在 Linux 5.4 中引入的,作為以高性能、API 兼容的方式與訪客VM 共享部分主機文件系統(tǒng)的解決方案。在這個版本中,virtio-fs 添加了對 DAX 的支持,它允許繞過訪客頁面緩存并允許直接在訪客地址空間映射主機頁面緩存。 在許多情況下,這可以大大加快速度。 此外,這可以節(jié)省大量內(nèi)存,因為文件數(shù)據(jù)不必在訪客中復(fù)制,并且可以從主機頁面緩存直接訪問??杉嫣摂M機的共享文件夾體驗將得到一波改善。AMD 支持對虛擬訪客中的注冊進行加密方面:Linux 從 Linux 4.15 開始支持 SEV。 SEV 是 AMD 的一項功能,它對虛擬化訪客的內(nèi)存進行加密,以便主機無法在未加密的情況下訪問它。 此版本還通過加密訪客寄存器狀態(tài)來增強它,通過在world switches上對寄存器進行加密/解密,使管理程序無法訪問寄存器。 因此,它為 Linux 客戶機增加了額外的保護,以防止?jié)B漏、控制流和回滾攻擊。 使用 SEV-ES,訪客可以完全控制管理程序可以訪問的寄存器。post-Spectre性能優(yōu)化方面:5.10內(nèi)核通過靜態(tài)調(diào)用來優(yōu)化post-Spectre性能,靜態(tài)調(diào)用是全局函數(shù)指針的替代品,使用代碼補丁來允許使用直接調(diào)用而不是間接調(diào)用,提供了函數(shù)指針的靈活性,但具有性能的一定幅度提高。有了post-Spectre可以擺脫retpolines的壓榨,retpolines對性能的影響是真的不小。新的 API 用于 x86 perf 代碼,函數(shù)指針的重度用戶,其中靜態(tài)調(diào)用將 PMU 處理程序的速度提高了 4.2%。支持ARM Memory Tagging Extension方面:Memory Tagging Extension(ARMv8.5 擴展的一部分,在Intel服務(wù)器定級的處理器都會有內(nèi)存RAS特性,也會支持Memory Tagging)提供了一種機制來檢測可能容易被利用的內(nèi)存相關(guān)錯誤的來源,包括邊界違規(guī)、釋放后使用、返回后使用、使用結(jié)束 of-scope 并在初始化錯誤之前使用。常規(guī)更新方面:新增nosymfollow掛載選項,禁用指定掛載中的符號鏈接解析;支持非阻塞 pidfds。 暫不支持將非阻塞 pidfd 傳遞給 waitid();Casefolding/Encryption引入的預(yù)更新;io_uring優(yōu)化更新;為用戶內(nèi)存訪問添加故障注入;lockdep:支持遞歸讀鎖的死鎖檢測;kcsan:添加了對啟用復(fù)合讀寫檢測的支持;printk:用完全無鎖的ringbuffer 替換實現(xiàn);RCU、rseq/membarrier、seqlock、rcutorture、lockdep的其它小修小補;任務(wù)調(diào)度器:提高 cfs 任務(wù)之間的公平性;tools/bootconfig目錄,添加引導(dǎo)時跟蹤腳本;builddeb:優(yōu)化debian包打包;ubsan:為 Clang 引入 CONFIG_UBSAN_LOCAL_BOUNDS配置;為 OLED 顯示添加6x8字體;添加 backtrace_idle 參數(shù)以強制對空閑 CPU 進行回溯kunit:允許在 JSON 中生成測試結(jié)果。文件系統(tǒng)方面:BTRFS fsync 和rename/link 性能優(yōu)化、將 Direct IO 實現(xiàn)切換到 iomap 基礎(chǔ)架構(gòu)將數(shù)據(jù)預(yù)留轉(zhuǎn)換為元數(shù)據(jù)使用的ticketing infrastructure;計劃從custom tree locks切換到標(biāo)準(zhǔn)的wsem,做了些預(yù)修訂;sysfs: export 支持發(fā)送stream version;XFS 將 inode btree 計數(shù)存儲在 AGI 中以加快每個 AG 塊預(yù)留操作的特定掛載時間并添加更多元數(shù)據(jù)冗余;加打時間戳寬度可以解決2038的問題;棄用 V4 格式;刪除不推薦使用的 sysctl 和掛載選項;其它 F2FS、EXT4、NFS、OVERLAYFS、QUOTA 、CEPH、ZONEFS有小修訂。
5.15 2021.11
Linux 5.15 版本增加對英特爾 DG2 獨顯的初步支持,并采用新 NTFS 文件系統(tǒng)驅(qū)動,還為 AMD Zen 3 APU 帶來溫度監(jiān)控支持。

處理器方面:AMD PDTDMA 驅(qū)動在開發(fā)了兩年后被合并,用于 AMD EPYC 服務(wù)器處理器。為 RISC-V 擴展了堆棧隨機化,并為 RISC-V 連接了其他功能。在 TCC 驅(qū)動中支持了 Alder Lake。一個重要的 AMD 筆記本電腦暫停/恢復(fù)修復(fù),包含各種型號。KVM 現(xiàn)在默認為新的 x86 TDP MMU,并增加了 AMD SVM 5 級分頁。AMD Zen 3 APU 溫度監(jiān)控支持。Yellow Carp APU 溫度監(jiān)控支持。合并了 AMD SB-RMI 驅(qū)動,以利于服務(wù)器的使用情況,如基于 Linux 的 OpenBMC 軟件棧。優(yōu)化了 AMD CPU 的 C3 入口處理。一些 IRQ 內(nèi)核代碼的改進,使 Intel 486 時代的硬件受益。一個 AVX2 優(yōu)化的 SM4 密碼實現(xiàn)。圖形方面:許多新的 RDNA2 PCI ID,可能用于 RDNA2 顯卡更新。AMD Cyan Skillfish 顯卡支持。對英特爾 XeHP 和 DG2/Alchemist 獨立顯卡的初步支持。移除英特爾 Gen10 / Cannon Lake 圖形顯卡支持。在 DRM/KMS 驅(qū)動中還有許多其他圖形改進。存儲/文件系統(tǒng)方面:合并了新的 NTFS 驅(qū)動,這是對現(xiàn)有 NTFS 驅(qū)動的一大改進。這個新驅(qū)動程序是由 Paragon 軟件公司創(chuàng)建的 "NTFS3" 驅(qū)動程序。三星的 KSMBD 被合并為內(nèi)核內(nèi) SMB3 文件服務(wù)器。OverlayFS 具有更好的性能,并復(fù)制了更多的屬性。FUSE 現(xiàn)在允許掛載一個活動設(shè)備。對 F2FS 進行了性能優(yōu)化。通過 NFS 客戶端代碼在多個 NIC 上共享連接。針對 EXT4 的新優(yōu)化。對 XFS 的大量改進。對 Btrfs 的降級 RAID 模式支持和性能改進。Btrfs 支持 IDMAPPED 掛載和 Btrfs FS-VERITY 支持。Linux 5.15 I/O 可以達到每核~3.5M IOPS。應(yīng) systemd 開發(fā)者要求,支持全局縣/磁盤事件的序列號。刪除了 LightNVM 子系統(tǒng)。修復(fù)了 Linux 的軟盤驅(qū)動代碼。其他塊子系統(tǒng)的改動。
6.0 2022.10.3
Linux 6.0 正式版作為主要的內(nèi)核系列,它帶來了新的功能,改進了硬件支持,以及錯誤 Bug 和安全修復(fù)。

支持 NVMe 帶內(nèi)認證,支持 OpenRISC 和 LoongArch 架構(gòu)的 PCI 總線,使用 XFS 和 io_uring 時的異步緩沖寫入,以及 io_uring 零拷貝網(wǎng)絡(luò)傳輸支持。Linux 內(nèi)核 6.0 還帶來了對 RISC-V 硬件架構(gòu)的“Zicbom”擴展的支持,用于管理具有非緩存一致性 DMA 的設(shè)備,還有新的運行時驗證子系統(tǒng),允許內(nèi)核狀態(tài)監(jiān)控,支持生成新的 CXL 內(nèi)存區(qū)域,支持在 OverlayFS 文件系統(tǒng)上正確實現(xiàn) POSIX 訪問控制列表,以及實現(xiàn)第二代 Btrfs“發(fā)送”協(xié)議,支持發(fā)送大型數(shù)據(jù)和原始壓縮擴展。其他值得注意的變化包括 DAMON 機制中新的用戶空間內(nèi)存管理功能,支持將 NFSv4 服務(wù)器限制在 1GB 內(nèi)存的 1024 活躍客戶端,支持 EXT4 文件系統(tǒng)獲取和設(shè)置存儲在文件系統(tǒng)超級塊中的 UUID,支持 fsnotify 子系統(tǒng)以更好地控制被忽略的事件,支持連接到 uprobes 的可睡眠 BPF 程序,以及對 perf 工具的鎖爭奪追蹤點和內(nèi)核內(nèi)聚合 BPF 的新報告。在虛擬化方面也有好消息,Linux 內(nèi)核 6.0 引入了新的偽設(shè)備,叫做“guest vCPU stall detector”,可以作為“看門狗”,告訴主機虛擬機是否停滯。在 Linux 6.0 中還有新的 debugfs 接口,新的 BPF 迭代器,一組新的 BPF kfuncs,用于生成和檢查 SYN cookies 的新 BPF 助手,以及新的基于 io_uring 的用戶空間塊驅(qū)動器。當(dāng)然,Linux 6.0 還包括許多更新和新的驅(qū)動程序,以便更好地支持硬件。除此之外,它還增加了許多錯誤 Bug 修復(fù)和調(diào)整,以提供比以前的內(nèi)核更好的性能,這里最值得注意的是對大型系統(tǒng)上的任務(wù)安排的調(diào)整,對內(nèi)核內(nèi) TLS 實現(xiàn)的性能改進,以及新的 IORING_RECV_MULTISHOT flag,以使 recv () 調(diào)用能夠進行多鏡頭操作。安全方面,Linux 內(nèi)核 6.0 實現(xiàn)了從 bootloader 的設(shè)置數(shù)據(jù)中獲取隨機數(shù) seeds 到 x86 和 m68k 內(nèi)核,支持 SafeSetID 安全模塊來控制 setgroups () 的變化,支持 ARIA 加密算法,以及支持鉤子連接到控制組或單一目標(biāo)進程到 BPF 安全模塊。其他硬件等特性支持如下: 像 A750 和 A770 這樣的英特爾 Arc 獨立 GPU 可以在 Linux 6.0 內(nèi)核的 i915 DRM 內(nèi)核驅(qū)動上運行,但目前仍然是實驗性的,所以需要“force_probe”選項來啟用。但至少在 Linux 6.0 中,現(xiàn)在可以使用這些新的英特爾桌面獨顯與更新的 Mesa 堆棧配對。 更多的 AMD RDNA3 的啟用,希望能夠與即將推出的 Radeon RX 7000 系列顯卡一起工作。 高通驍龍 8xc Gen 3 支持和對聯(lián)想 ThinkPad X13s Arm 筆記本電腦早期支持。這項工作在主線上仍處于早期形式,但至少已經(jīng)可以使用,并開辟了 Arm Linux 筆記本電腦選項。 各種調(diào)度器的變化,包括一些針對 AMD Zen 的 NUMA 平衡增強,以及 AMD CPU 現(xiàn)在傾向于 MWAIT 而不是 HALT。英特爾 Raptor Lake 的各種補充,如 TCC 冷卻驅(qū)動、RAPL 驅(qū)動中的 Raptor Lake P、Raptor Lake USB4 / Thunderbolt,以及其他缺失的 Raptor Lake ID。還有一些初步的 Meteor Lake 支持,比如音頻代碼和其他地方。對 AMD Ryzen 7000“Raphael”平臺的音頻驅(qū)動支持。支持 IO_uring 用戶空間塊驅(qū)動,各種 IO_uring 優(yōu)化,以及其他有希望的 I / O 相關(guān)工作,如 Btrfs Send Protocol v2。對英特爾 Habana Labs Gaudi 2 的初步支持。H.265 / HEVC media user-space API 現(xiàn)在已經(jīng)宣布穩(wěn)定。安全關(guān)鍵系統(tǒng)的運行時間驗證。
6.1 2022.12
Linus Torvalds 發(fā)布了最新的 Linux 6.1 內(nèi)核穩(wěn)定版,從此開啟了 Linux 6.2 合并窗口。據(jù)介紹,Linux 6.1 內(nèi)核系列集成了改進的頁面回收代碼的多代 LRU (MGLRU) 、初始的 Rust 語言支持(仍在構(gòu)建中)、新的 AMD 平臺管理框架、各種開源圖形驅(qū)動程序改進、Btrfs 性能優(yōu)化、Kernel Memory Sanitizer、Maple Tree 數(shù)據(jù)結(jié)構(gòu)的引入以及許多其他硬件驅(qū)動程序工作。

Linux 6.1 的一個主要升級在于對 Rust 的主線 (實驗性) 支持。Rust 是一種“多范式、通用編程語言”,在開源領(lǐng)域呈現(xiàn)出滾雪球般的勢頭不斷壯大。此外,Linux 內(nèi)核 6.1 的另一個新增功能是 Multi-Generational Least-Recently-Used 功能(MG-LRU),不過它默認情況下不會啟用。據(jù)介紹,它可以優(yōu)化頁面回收機制,并在重內(nèi)存負載情況下提高性能。Linux 6.1 還包含了對 Btrfs 文件系統(tǒng)性能的一系列性能改進,例如額外的 io_uring 集成,調(diào)整 sysfs 導(dǎo)出;以及“FIEMAP 速度顯著提高”。其他方面,新版本還支持 erofs 文件系統(tǒng)的跨文件系統(tǒng)共享數(shù)據(jù),對 EXT4 文件系統(tǒng)進行了一系列的修復(fù)、清理和調(diào)整。值得一提的是,PinePhone Pro 現(xiàn)在也已經(jīng)可以運行 Linux 6.1 內(nèi)核,就像索尼 Xperia 1 IV、三星 Galaxy E5, E7 和 Grand Max 等舊手機。此外,Linux 6.1 現(xiàn)在還提供了一個用于 PinePhone 鍵盤的輸入驅(qū)動程序。新版本還完善了任天堂 HID 驅(qū)動,以至于“廉價手柄都可以與之兼容”,羅技驅(qū)動程序現(xiàn)在支持所有藍牙設(shè)備 HID++,而且還可以自動檢測高分辨率滾動能力。Linux 6.1 還將提供一系列新的音頻硬件支持,包括對 Apple Silicon 的初步支持,對 AMD Rembrandt 開放固件 (SOF) 的支持,以及對聯(lián)發(fā)科 MT8186 SoC 的支持,預(yù)計將會在新的 ChromeBook 中有所應(yīng)用。新版本還為一些設(shè)備帶來了來自 XPad 內(nèi)核輸入驅(qū)動程序的支持,包括初代 Elite 和 Elite 系列 2 上的 Xbox One Elite 手柄,還有 Hori Fighting Commander ONE 手柄 (包括 Xbox 模式)、8BitDo Pro 2 有線手柄,以及一系列 Wooting 鍵盤,包括 Wooting ONE、Two, Two HE 和 60HE。除此之外,6.1 版本還包括了下一代 CPU 和 GPU 的基礎(chǔ)支持,包括未來 Ryzen 平臺管理框架的新驅(qū)動程序代碼,以及英特爾“Meteor Lake”芯片的管道(plumbing); 并繼續(xù)努力適配 Intel Arc Graphics DG2 / Alchemist。其他變化主要有:內(nèi)核地址消毒劑 (KMSAN) 已合并;支持更多龍芯 LoongArch 架構(gòu) CPU;內(nèi)核可以在 EFI 系統(tǒng)上以與體系結(jié)構(gòu)無關(guān)的方式解壓縮 + 啟動;通過 EDAC 驅(qū)動程序更快地實現(xiàn)英特爾內(nèi)存錯誤解碼;楓樹數(shù)據(jù)結(jié)構(gòu)支持;對創(chuàng)建用戶命名空間的能力進行新的安全控制;內(nèi)核會打印出發(fā)生分割錯誤的 CPU 內(nèi)核。總體而言,Linux 內(nèi)核 6.1 提供了一系列新功能和改進,同時還增強了基于 Linux 的系統(tǒng)的性能和安全性。這些改進將使得 Linux 成為更完善、更靈活的操作系統(tǒng),能夠滿足更多用戶的需求。
6.2 2023.2
包括許多由 Intel、AMD、Google 和 Red Hat 等公司貢獻的特性。附帶了一個名為 RV(運行時驗證)的新工具,可以控制運行時驗證子系統(tǒng)的運行,一個處理計算加速設(shè)備的新框架,支持用戶定義的 BPF 對象。以及一個新的 sysctl 旋鈕用于控制分裂鎖定檢測器在 x86 上處于“警告”模式時的工作方式。最重要的是,PowerPC 架構(gòu)有一個新的 qspinlock 實現(xiàn),支持 ID 映射掛載和 SquashFS 文件系統(tǒng)的并行解壓縮控制,改進的 Btrfs RAID5 和 RAID6 實現(xiàn),以及啟用或禁用軟件實現(xiàn)的影子堆棧的能力啟動期間在 AArch64 (ARM64) 上。在安全方面,Linux 6.2 改進了 Landlock 安全模塊,使其可以控制文件截斷操作,更快地緩解對 Intel CPU 的 Retbleed 推測執(zhí)行攻擊,并能夠?qū)⒋螖?shù)上限設(shè)置為 10,000 允許內(nèi)核在重新啟動或恐慌之前發(fā)出 oops。值得注意的新增功能包括開箱即用的對 Intel Arc Graphics (DG2/Alchemist) 的穩(wěn)定支持,以及使用 Nouveau 開源代碼對 Nvidia GeForce RTX 30 系列“Ampere”加速圖形的初始支持。Linux 6.2 內(nèi)核還包括更新的驅(qū)動程序,這包括對 OneXPlayer 游戲手持設(shè)備、Habana Labs 的 Gaudi2 AI 加速器等的支持。Linux 6.2 還增加了對 Apple 鍵盤上的交換控制和命令鍵的支持,對帶有按鈕和搖桿的 Sony DualShock4 USB 控制器的基本支持,以及對橙皮 4G-IoT 中所見的聯(lián)發(fā)科技 MT6370 I2C Sub 電源管理芯片的支持開源單板計算機。除此之外,這個新內(nèi)核還包括 Call Depth Tracking,以幫助提高舊版英特爾 Skylake 時代 PC 的性能,以及各種文件系統(tǒng)驅(qū)動程序增強和安全改進。除了新的硬件支持之外,NTFS3 文件內(nèi)核驅(qū)動程序也得到了改進,并使用新的掛載選項進行了更新。Linux 6.2 內(nèi)核提供了重要的新硬件支持和功能。文章來源:http://www.zghlxwxcb.cn/news/detail-496328.html
作者簡介:荔園微風(fēng),1981年生,高級工程師,浙大工學(xué)碩士,軟件工程項目主管,做過程序員、軟件設(shè)計師、系統(tǒng)架構(gòu)師,早期的Windows程序員,Visual Studio忠實用戶,C/C++使用者,是一位在計算機界學(xué)習(xí)、拼搏、奮斗了25年的老將,經(jīng)歷了UNIX時代、桌面WIN32時代、Web應(yīng)用時代、云計算時代、手機安卓時代、大數(shù)據(jù)時代、ICT時代、AI深度學(xué)習(xí)時代、智能機器時代,我不知道未來還會有什么時代,只記得這一路走來,充滿著艱辛與收獲,愿同大家一起走下去,充滿希望的走下去。文章來源地址http://www.zghlxwxcb.cn/news/detail-496328.html
到了這里,關(guān)于Windows內(nèi)核和Linux內(nèi)核比較(附Linux內(nèi)核各版本歷史紀(jì)年表)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!