2019 年微軟 Build 開發者大會在雷德蒙德召開。繼將 Bash shell、原生 OpenSSH、WSL 引入 Windows,以及在微軟商店提供 Ubuntu、SUSE Linux 和 Fedora 等發行版,微軟又宣佈了一個重大的決定 —— 將完整的 Linux 內核引入 Windows 10。shell
按照微軟的說法,到時 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領域有深厚積累的專家。相信這本書會讓你收穫滿滿。架構
應用程序一般使用封裝好的庫,看起來彷佛和內核沒有關係,可是庫是在內核提供的系統調用的基礎上作了一層封裝。讀者若是研究了庫函數和內核配合實現庫函數提供的功能,那麼對軟件運行過程的理解將會更深入,我的的技術水平也將會提高到新的高度—可以設計開發出高質量的應用程序,在軟件運行過程當中出現問題時能夠快速地分析定位。另外,內核表明了軟件行業的最高編程技術,這些編程技術也適用於應用程序。是否有必要學習內核呢?答案是確定的。ide
早些年數通領域各廠商(包括思科和華爲)的操做系統,都是基於傳統的嵌入式操做系統(如典型的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章介紹內核的虛擬文件系統,內核使用虛擬文件系統支持各類不一樣的文件系統。
做者:餘華兵
編輯推薦:
基於ARM64架構的Linux 4.x內核;
大量圖例描述數據結構之間的關係和函數的執行流程;
結合代碼分析,以通俗化語言全面剖析Linux內核。
本書基於4.x版本的Linux內核,介紹了Linux內核的若干關鍵子系統的技術原理。本書主要內容包括內核的引導過程、內核管理和調度進程的技術原理、內核管理虛擬內存和物理內存的技術原理、內核處理異常和中斷的技術原理,以及系統調用的實現方式等。此外,本書還詳細講解了內核實現的各類保護臨界區的互斥技術,以及內核的文件系統。本書內容豐富,深刻淺出,經過大量的圖例來描述數據結構之間的關係和函數的執行流程,並結合代碼分析,引導讀者閱讀和理解內核源代碼。
- END -