2019 年微軟 Build 開發者大會在雷德蒙德召開。繼将 Bash shell、原生 OpenSSH、WSL 引入 Windows,以及在微軟商店提供 Ubuntu、SUSE Linux 和 Fedora 等發行版,微軟又宣布了一個重大的決定 —— 将完整的 Linux 核心引入 Windows 10。
按照微軟的說法,到時 Windows 10 将包含内置的完整定制版 Linux 核心,為最新的 WSL 提供更好的支援。Linux 核心版本為 4.19,是一個長期穩定版。随着 WSL2 正式釋出,WSL2 用的 Linux 核心也将完全開源。近些年,微軟公司來雇傭了很多 Linux contributor,給微軟帶來了很多業界領先的 Linux 技術,是以才會有去年的 WSL,這樣的舉動也必将吸引更多的人才加入。
Linux核心是使用最廣泛的開源核心,在伺服器和智能手機領域處于統治地位,物聯網、大資料、雲計算和人工智能等熱點技術也離不開Linux核心。對于商業公司而言,采用開源的Linux核心可以享受很多好處,比如節約成本,可以利用行業先進的技術,還可以根據自己的需求定制、修改核心。對于個人而言,從Linux核心中可以學習先進的設計方法和程式設計技術,為核心貢獻代碼可以證明自己的技術實力。
可是,當我們準備學習Linux核心時,會發現Linux核心的代碼龐大而複雜,在沒有專業書籍指導的情況下,讀懂代碼是一件非常困難的事情。如何學Linux核心?小編推薦這本《Linux核心深度解析》,書中剖析的代碼基于Linux 4.12版本,同時,它基于ARM64硬體平台,将兩者結合。
作為一個優秀的開源系統,Linux在業界有很廣泛的應用。從1994年釋出1.0正式版本開始,Linux核心一直在發展,代碼越來越龐大,參伍以變,錯綜其數,要想深入掌握它,并不是一件輕松的事情。
本書作者餘華兵從事Linux核心開發工作十餘年,有着豐富的實踐經驗,使用過不同的版本和硬體平台,從2.x到4.x,從MIPS、x86到ARM。伴随着研發大樓的華燈,當年初出校門的學子,如今蕭蕭兩鬓生華,成為一個在Linux領域有深厚積累的專家。相信這本書會讓你收獲滿滿。
對于從事應用程式開發的軟體工程師,是否有必要學習核心呢?
應用程式通常使用封裝好的庫,看起來似乎和核心沒有關系,但是庫是在核心提供的系統調用的基礎上做了一層封裝。讀者如果研究了庫函數和核心配合實作庫函數提供的功能,那麼對軟體運作過程的了解将會更深刻,個人的技術水準也将會提升到新的高度—能夠設計開發出高品質的應用程式,在軟體運作過程中出現問題時可以快速地分析定位。另外,核心代表了軟體行業的最高程式設計技術,這些程式設計技術也适用于應用程式。是否有必要學習核心呢?答案是肯定的。
為什麼要學Linux4.X?
早些年數通領域各廠商(包括思科和華為)的作業系統,都是基于傳統的嵌入式作業系統(如典型的VxWorks作業系統)開發的。2010年以後,Linux核心在數通廠商中快速生長,迅速成為數通裝置網絡作業系統的核心。就像基于Linux核心的安卓系統已經成為智能手機領域的領頭羊一樣,在數通裝置領域,Linux核心也大有一統江湖之勢。
我們在基于Linux核心開發網絡作業系統的過程中遇到的某些技術問題,在Linux核心的演進過程中已經提供了解決方案。Linux 3.11版本ARM架構支援巨型頁機制,解決了ARM架構的程序通路大記憶體的性能問題。Linux 3.14版本引入ZRAM記憶體壓縮技術,用于節省記憶體空間,這項技術适合在記憶體容量小的裝置上使用。Linux 2.6.29版本引入的squash檔案系統和Linux 3.18版本引入的overlay檔案系統,在閃存容量小的裝置上解決了存儲空間不足的問題。squash檔案系統可以壓縮資料,但是它是一個隻讀的檔案系統,而裝置需要一個可寫的檔案系統,我們在Linux核心找到了解決方案—使用overlay檔案系統在squash檔案系統上面疊加一個可寫的檔案系統。這些拿來即用的Linux核心技術,在這本書中都有提及。
近年來Linux發展迅速,公司最早使用的Linux核心是2.6版本,從2011年釋出3.0版本開始到2018年年底釋出4.20版本,Linux一共釋出了41個版本,技術發展日新月異。很多技術雖然有衆多的工程師在使用和總結,但仍相對零散,基于Linux 4.x的圖書更是少之又少。
本書特點是什麼嗎?
本書剖析的代碼基于Linux 4.12版本,釋出于2017年,是Linux核心史上變動較大的版本之一。基于這個版本進行核心代碼解析并出版成書,是比較新穎的,既不失通用性,又兼顧4.x版本中引入的不少新技術點。同時,它基于ARM64硬體平台,将兩者結合的書,目前還是比較少的。
另外,本書沒有過多地介紹作業系統的基礎原理,而更多地是以實際代碼來解讀在Linux核心中是如何實作作業系統的各個子系統的。對于熟悉作業系統基礎的讀者來說,可以快速地切入到具體代碼的了解與實作中。從核心引導和初始化開始,到程序管理、記憶體管理、中斷/異常/系統調用、核心互斥技術和檔案系統,本書比較系統地對核心代碼進行了深度解析。
Linux核心的知識點相當繁多,很難在一本書中面面俱到,也沒有必要。是以,在這本書中,看似不經意間逐層展開的知識點,都是比較基礎和常用的。作者以他的實踐經曆盡量通俗地進行解讀,并抓住了其中的重點,可以讓讀者在實際的開發、調試和維護工作中學以緻用。
“行是知之始,知是行之成”,學習Linux核心技術尤其如此。要真正消化了解Linux核心,離不開大量的工程實踐。希望本書可以成為你前進路上的好幫手!
如何讀這本書?
本書介紹4.12版本的Linux核心,建議你在閱讀本書時到Linux核心的官方網站中下載下傳一份代碼,對照代碼學習。推薦使用“Source Insight”軟體閱讀代碼。
Linux核心支援多種處理器架構,處理器架構特定的代碼放在“arch”目錄下。ARM處理器在手機和平闆電腦等移動裝置上處于統治地位。ARM處理器從ARMv7演進到支援64位的ARMv8,ARM公司重新設計了處理器架構,ARMv8定義了AArch64和AArch32兩種執行狀态,AArch64是64位架構;AArch32是32位架構,相容ARMv7。因為ARMv8和ARMv7的差别很大,是以Linux核心把ARMv8和ARMv7當作兩種不同的處理器架構,ARMv7架構的代碼放在“arch/arm”目錄下,ARMv8架構的代碼放在“arch/arm64”目錄下。人們通常把ARMv8架構的AArch64執行狀态稱為ARM64架構。本書在介紹Linux核心時選擇ARM64處理器架構。
學習本書,需要具備ARM64處理器的基礎知識,推薦以下兩篇文檔,讀者可以從ARM公司的網站下載下傳。
(1)“ARM Cortex-A Series Programmer’s Guide for ARMv8-A”:這篇文檔接近300頁,适合入門學習。
(2)“ARM Architecture Reference Manual ARMv8, for ARMv8-A architecture profile”:這篇文檔有6000多頁,寫得很詳細,适合當作工具書來查詢。
學習核心,關鍵是要了解資料結構之間的關系和函數調用關系。核心中資料結構之間的關系錯綜複雜,函數調用層次深,有些函數中的分支非常多,一個函數就可能涉及很多技術,這些都是初學者學習中的障礙。作者建議讀者在學習時抓住主要線索,弄清楚執行流程,剛開始不要過多關注函數的細節。為了友善學習,作者繪制了很多圖來描述資料結構之間的關系和函數的執行流程。另外,作者在介紹每種技術時會先介紹使用方法,從使用方法開始學習技術,相信會對讀者了解技術有很大的幫助。
全書内容共分為6章。
第1章介紹核心的引導過程,本書選擇常用的引導程式U-Boot,讀者可以從德國DENX軟體工程中心的網站下載下傳U-Boot的代碼,對照學習。
第2章介紹核心管理和排程程序的技術原理。
第3章介紹核心管理虛拟記憶體和實體記憶體的技術原理。
第4章介紹核心處理異常和中斷的技術原理,以及系統調用的實作方式。
第5章介紹核心實作的各種保護臨界區的互斥技術。
第6章介紹核心的虛拟檔案系統,核心使用虛拟檔案系統支援各種不同的檔案系統。
書名:
《Linux核心深度解析》作者:餘華兵
編輯推薦:
- 基于ARM64架構的Linux 4.x核心;
- 大量圖例描述資料結構之間的關系和函數的執行流程;
- 結合代碼分析,以通俗化語言全面剖析Linux核心。
本書基于4.x版本的Linux核心,介紹了Linux核心的若幹關鍵子系統的技術原理。本書主要内容包括核心的引導過程、核心管理和排程程序的技術原理、核心管理虛拟記憶體和實體記憶體的技術原理、核心處理異常和中斷的技術原理,以及系統調用的實作方式等。此外,本書還詳細講解了核心實作的各種保護臨界區的互斥技術,以及核心的檔案系統。本書内容豐富,深入淺出,通過大量的圖例來描述資料結構之間的關系和函數的執行流程,并結合代碼分析,引導讀者閱讀和了解核心源代碼。
- END -