【 前言 】
2019 年3 月3 日,Linux 核心創始人Linus Torvalds 在社區裡正式宣佈了Linux 5.0 核心的發佈。雖然Linus 在郵寄清單裡提到,Linux 5.0 並不是一個大幅修改和新增很多特性的版本,只不過是因為Linux 4.20 核心的次版本編號太大了,所以才發佈了Linux 5.0 核心。但是Linux 核心的開發並沒有因此而暫停或變慢,依然每兩個月左右就發佈一個新版本,將很多新特性加入核心。從Linux4.0 核心到Linux 5.0 核心,其間發佈了20 個版本,出現了很多新特性並且核心的實現已經發生了很大的變化。
最近兩年,研究作業系統和開放原始碼軟體的氣氛越來越濃厚,很多大公司在基於Linux 核心打造自己的作業系統,包含手機作業系統、伺服器作業系統、IoT 嵌入式系統等。另外,很多公司在探索使用ARM64 架構來建置自己的硬體生態系統,包含手機晶片、伺服器晶片等。
本書包含處理器架構、Linux 核心的記憶體管理、處理程序管理等,包含Linux核心偵錯和效能最佳化、如何解決當機難題以及安全性漏洞分析等。
🔶 本書特色
本書特色如下。
■ 基於 Linux 5.0 和 ARM64/x86_64 架構
完全基於Linux 5.0 核心來說明。相對於Linux 4.0 核心,Linux 5.0 核心中不少重要模組的實現已經發生了天翻地覆的變化,如綠色節能排程器的實現、迴旋栓鎖的實現等。同時,Linux 5.0 核心修復了Linux 4.x 核心的很多故障,如KSM 導致的虛擬機器當機故障等。
在手機晶片和嵌入式晶片領域,ARM64 架構的處理器佔了80% 以上的市佔率;而在個人電腦和伺服器領域,x86_64 架構的處理器則佔了90% 以上的市佔率。因此,ARM64 架構和x86_64 架構是目前市場上的主流處理器架構。本書主要基於ARM64/x86_64 架構來說明Linux 5.0 核心的實現,很多核心模組的實現和架構的相關性很低,因此本書也非常適合使用其他架構的讀者閱讀。在伺服器領域,目前大部分廠商依然使用x86_64 架構加上Red Hat Linux 或Ubuntu Linux 企業發行版本的方案。
■ 新增了實戰案例分析
新增了很多實戰案例,如記憶體管理方面新增了4 個實戰案例,這些案例都是從實際專案中分析出來的,對讀者提升實戰能力有非常大的幫助。另外還新增了解決當機難題的實戰案例。在實際專案開發中,我們常常會遇到作業系統當機,如手機當機、伺服器當機等,本書歸納了多個當機案例,利用Kdump+Crash 工具來詳細分析如何解決當機難題。考慮到有部分讀者使用ARM64 處理器做產品開發,也有不少讀者在x86_64 架構的伺服器上做運行維護或效能最佳化等工作,本書分別說明了針對這兩種架構的處理器如何快速解決當機難題。
2019 年出現的CPU 熔斷和「幽靈」漏洞牽動了全球軟體開發人員的心,了解這兩個漏洞對讀者熟悉電腦架構和Linux 核心的實現非常有幫助。
■ 提供了核心偵錯和最佳化技巧
本書說明了很多核心偵錯和最佳化的技巧。Linux 核心透過proc 和sysfs 檔案系統給我們提供了很多有用的記錄檔資訊。在記憶體管理最佳化過程中,可透過核心提供的記錄檔資訊來快速了解和分析系統記憶體並進行最佳化,如檢視和分析meminfo、zone 資訊、夥伴系統等。
■ 提供了大量插圖和表格
本書盡可能在書中不貼上程式或只列出少量核心程式,這樣可以用更多的篇幅來擴充新內容。
■ 說明了 ARM64 架構方面的內容
介紹了ARM64 架構及其在Linux 核心中的實現,其中包含ARM64 指令集、ARM64 暫存器、分頁、記憶體管理、TLB、記憶體屏障等方面的知識。
■ 提供了面試題。
為了展現問題導向式的核心原始程式碼分析,每章列舉了一些高頻面試題,以觸發讀者探索未知的興趣。
■ 使用基於 GCC 的 "O0" 選項編譯的 Linux 5.0 實驗平台
本書使用基於GCC 的"O0" 選項編譯的Linux 5.0 核心實驗平台。讀者可以使用GCC 來偵錯核心,它支援ARM64、x86_64 以及RISC-V 架構,對深入了解Linux 核心的實現有很大幫助。
重點內容如下
■ ARM64 架構,包含 ARM64 暫存器、ARM64 堆疊配置、ARM64 記憶體管理、TLB 管理、記憶體屏障、ARM64 Linux 組合語言程式碼分析等。
■ 記憶體管理之預備知識,如從硬體角度看記憶體管理、從軟體角度看記憶體管理等。
■ 頁面分配之慢速路徑分析。
■ 記憶體碎片化管理。
■ 記憶體管理偵錯和案例分析。
■ 處理程序管理之基本概念。
■ 綠色節能排程器分析。
■ 處理程序管理偵錯和案例分析。
🔶 本書主要內容
本書主要介紹ARM64 架構、Linux 核心記憶體管理以及處理程序管理和排程。
本書重點介紹Linux 核心中基礎架構的實現原理。本書基於Linux 核心的話題或技術點多作說明,本書共9 章。
■ 第 1 章簡單介紹 ARM64 架構、ARMv8 暫存器、A64 指令集等。
■ 第 2 章介紹 ARM64 記憶體管理、快取記憶體管理、TLB 管理、記憶體屏障並分析Linux 核心的組合語言程式碼等。
■ 第 3 章說明如何從硬體角度看記憶體管理、從軟體角度看記憶體管理以及實體記憶體管理之預備知識等內容。
■ 第 4 章討論頁面分配之快速路徑、slab 分配器、vmalloc()、虛擬記憶體管理之處理程序位址空間、malloc()、mmap 以及缺頁異常處理等內容。
■ 第 5 章探討 page、RMAP、頁面回收、匿名頁面生命週期、頁面遷移、記憶體規整、KSM、頁面分配之慢速路徑以及記憶體碎片化管理等內容。
■ 第 6 章探討記憶體管理記錄檔資訊和偵錯資訊、記憶體管理最佳化參數、記憶體管理實戰案例等內容。
■ 第 7 章說明處理程序的基本概念、處理程序的建立和終止、處理程序排程基本操作等內容。
■ 第 8 章說明 CFS、負載計算、SMP 負載平衡、綠色節能排程器、即時排程等內容。
■ 第 9 章介紹處理程序管理中的偵錯、綜合案例等內容。
🔶 繁體中文版及書附程式碼說明
本書作者為中國大陸人士,為求讀者能正確執行本附程式碼,本書所附程式碼為簡體中文介面,讀者可至本公司官網https://www.deepmind.com.tw/ 尋找相對書目下載。另本書原作會會不斷更新程式碼,讀者也可至讀者github 頁面https://github.com/figozhang/runninglinuxkernel_5.0 下載全新程式碼。
由於作者知識水準有限,書中難免存在紕漏,敬請各位讀者批評指正。作者電子郵件是runninglinuxkernel@126.com。