一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

服務器資訊|IT/互聯網|云計算|區塊鏈|軟件資訊|操作系統|手機數碼|百科知識|免費資源|頭條新聞|

服務器之家 - 新聞資訊 - IT/互聯網 - Java開發者需要研究JDK,Linux開發者需要研究Kernel

Java開發者需要研究JDK,Linux開發者需要研究Kernel

2020-01-06 21:34開源中國 IT/互聯網

2019 年是 Linux 內核誕生的第 28 年,1991 年 8 月 26日,當年還是大學生的 Linus Torvalds 向 comp.os.minix 新聞組的成員透露了出于業余愛好而正在研究操作系統的消息。 Linux Kernel 是全球最大的開源項目,知名的科技公司幾乎都參與其中,

2019 年是 Linux 內核誕生的第 28 年,1991 年 8 月 26日,當年還是大學生的 Linus Torvalds 向 comp.os.minix 新聞組的成員透露了出于“業余愛好”而正在研究操作系統的消息。

Java開發者需要研究JDK,Linux開發者需要研究Kernel

Linux Kernel 是全球最大的開源項目,知名的科技公司幾乎都參與其中,包括微軟、谷歌、Red Hat、SUSE、Intel、Facebook、百度、阿里、華為、Oracle 與騰訊等。同時,基于 Kernel 衍生出的發行版與各種周邊項目也讓其生態多姿多彩。

另一方面,在當今云原生高速發展的時代,其底層也大多基于Linux Kernel,甚至連微軟也表示Linux 運行了 Azure 工作負載的 50% 以上。

Linux Kernel 短期內不會過氣,而是會進一步影響到更多開發者,但是 Linux Kernel 的入門和實踐卻很困難,這讓許多初學者望而卻步,哪個開發者說自己是 Linux Kernel 領域的,那其他人必定會肅然起敬。

最近了解到有一本值得初學者學習的相關書籍《精通 Linux 內核——智能設備開發核心技術》,我們就如何學習 Linux Kernel、Linux Kernel 2019 年的發展與相關應用領域等問題采訪了作者姜亞華,希望能給到想要了解、研究 Linux Kernel 的開發者一些啟發。以下是對話內容:

2019 年 Linux Kernel 進入了 5.x 時代,雖然 Linus 自己說從 4.20 到 5.x 只是因為自己手指不夠用,但是實際上以您的理解,這對于項目的生命周期管理、特性合并或者社區文檔建設等方面有沒有比較大的影響呢?

姜亞華:

5.x 其實更新蠻多的,patch 文件 40 多 M,涉及 10000 多個文件。

這是一個大版本更新,從用戶意識角度來講,4.x 已經是舊的了,就好像 iPhone 更新,Apple 維持兩年一個大更新的節奏,買了一款 iPhone,下一年的小更新不會有啥感覺,但是第二年大更新后,才覺得我的手機不是最流行的了。

新的項目,文檔等肯定都需要向 5.x 看齊了。

從代碼角度來講,我們可以從內核更新的過程中學習到很多優化的思路。我開始寫作《精通 Linux 內核——智能設備開發核心技術》的時候內核還是 3.x,在書中也刻意保留了部分 3.x 的討論(sysfs、進場切換等),就是為了通過對比總結這方面的經驗。

書中講到文件系統,但是沒有關于最近微軟件開放出來的 exFAT,猜想是因為您這書已經在此之前就寫了,那目前您有沒有繼續研究 exFAT 相關的內容呢?目前 exFAT 也已經在 5.4 中支持,它的能力上會帶來什么影響呢?

姜亞華:

是的,我接下來打算再深入一些模塊,exFAT 是其中之一。它的未來如何還很難說,Linux 已經有很多優秀的文件系統了,它們都經過了多年的驗證,bug 可能也相對少一些,exFAT 還需要在 Linux 上經過時間的考驗。

近期另一個內核新特性也引起了廣泛的討論,那就是內核鎖定,這個特性其實討論了多年,最后它的表現形式似乎也挺讓人不解的。該特性限制了 root 角色的權限,但是 root 是系統的最高級權限都有不能訪問的地方,這對于 root 來說是挺奇怪的一件事情,在開發、運維或者日常使用上這會產生什么比較大的影響嗎?

姜亞華:

內核鎖定主要是為了防止 root 帳戶篡改內核代碼,從而在用戶態進程和代碼之間劃清界限。啟用鎖定模塊后,各種內核功能都會受到限制。其中包括對內核功能的訪問限制;對 /dev/mem 的讀寫操作的阻止;對 CPU MSR 訪問的限制;以及防止系統進入睡眠狀態等等。

這對 root 來說其實并不奇怪,它依然是超級用戶,可以訪問所有正常的門。只不過內核鎖定把一些“后門”去掉了,這些門常閉或者不存在了。

引入內核鎖定(CONFIG_SECURITY)后,root 的訪問受到限制,開發、運維等過程中使用的腳本或者 sequence 可能就不能工作了。比如 root 可以通過 /dev/mem 文件訪問內存,引入內核鎖定后可能會受到限制。

說句題外話,root 是個挺危險的東西,慎用。記得我負責管理部門服務器的時候,有一次供應商幫我移植驅動的過程中,安裝軟件的時候不小心刪除了一些文件,服務器斷電后就無法啟動了。我帶著光盤,在無數服務器轟鳴的實驗室中,花了好幾天才將它“搶救”回來。

相信很多開發者,或者剛在大學學計算機的人在了解了 Linux Kernel 之后都會想要去讀它的源碼,但是應該大部分都會不得其法,最終放棄。您是怎樣閱讀 Linux 內核源碼的呢?有什么工具、方法與其它經驗可以分享?

姜亞華:

我也是一行一行代碼看下來的,幾點建議供大家參考。

首先,先大概弄清原理,再仔細研究代碼,事半功倍。對于已經成熟的模塊,可以先借助書籍和博客大致理解它的基本信息。

其次,邊讀代碼邊做筆記,防止看了后面忘記前面。做筆記的軟件蠻多的(比如微軟的 OneNote),選擇用的習慣的就好。

最后,自我激勵,堅持到底,最好是興趣使然。

好在大家不需要從頭開始了,我已經把自己看過的代碼的截圖放在隨書資料中了,算是一小段捷徑吧。這些截圖里面,某函數、它調用的函數等函數調用關系使用紅線標示(如下圖),內容包括內存管理、文件系統和進程管理三大模塊。

Java開發者需要研究JDK,Linux開發者需要研究Kernel

大家遇到疑問也可以聯系我,共同探討,OSC 站內信(always_first_meet)或者郵件([email protected])都可以。

Linux 內核十分龐大,閱讀源碼的時候哪些部分是最開始的時候必須的,而哪些部分可以作為后續針對性的補充?

姜亞華:

內核代碼量龐大,模塊間的關系也錯綜復雜,建議初學者可以從相對簡單而且獨立的模塊入手,比如一個簡單設備的驅動。

先了解驅動本身的邏輯,之后是它的上下游,然后擴展到相關模塊,最后自由發揮。

舉個例子,在 drivers/input/keyboard 下面的文件是鍵盤驅動,我們選擇一個文件。

第 1 階段,查看 xxx_probe 等函數,梳理控制和數據流程,理解驅動需要做什么。

第 2 階段,適當拓展,代碼內調用的函數大概是如何實現的,驅動涉及的中斷、定時器、input 子系統等機制的原理,這些機制相對獨立,文檔也多,多花些時間即可。

第 3 階段,追根溯源,研究 xxx_probe 是如何被調用的,i2c 總線的驅動(假設鍵盤接 i2c 總線),device/device_driver/bus 的關系(驅動架構)。

階段 2 與 3 可以同時進行。

第 4 階段,自由發揮,按照工作需要和興趣,進軍內存管理、文件系統和進程管理等模塊。

就算是能夠閱讀源碼,另一個問題也會出現,就是讀了源碼,理解了它的邏輯,但是有什么用呢?最簡單的是增長了自己的見識,但是實際上這就像閱讀了一本書但是不輸出自己的理解與觀點,沒有太大的作用。您是怎么看待并且怎么解決這個問題的呢?

姜亞華:

研究內核有什么用,這是一個值得深思的問題。

中國現在這個時候的確需要沉下心玩底層系統的人,中國渴望自主操作系統已經很久了,尤其是現在這種多事之秋。但是如果沒有大批工程師在這個領域積淀的話,操作系統無疑是一種空談。

先不論未來的國產操作系統是否一定是 Linux 內核的,研究 Linux 內核本身也是很好的技術積累途徑。

僅僅從個人職業生涯角度出發,研究內核對個人技術的成長有極大幫助,可以分多個層次看待。

第 1 層次,初識,對內核有大概的了解,需要花時間深入工作相關的模塊。研究內核會占用大量時間,產出并不明顯。

第 2 層次,入門,熟悉工作相關的模塊,理解內核模塊間的關系。研究內核會讓你豁然開朗,經常有“原來 xxx 是這么實現的”之類的感嘆。

第 3 層次,熟悉或精通,對內核常用模塊有一定研究,熟悉代碼。即使是新模塊,也可以快速厘清脈絡。

除了第 1 層次“浪費”時間外,花時間研究內核可以反過來提高我們的效率。研究到了一定程度后就可以進入一個良性循環,研究得越多,效率越高,節省的時間越多,可以研究的越多。

另外,看的代碼越多,越有能力解決錯綜復雜的問題,金老爺子也說“重劍無鋒,大巧不工”,絕對的實力才是硬道理。

還是 xxx_probe 的例子,如果我們的 probe 沒有被調用,新手可能會檢查 device 和 device_driver 的名字是否匹配,研究過驅動架構的工程師可能分 device、device_driver 和 match 三部分檢查。

如果三部分看似都沒有問題,但是 probe 依然沒有調用呢?研究過代碼的工程師可能會想到 device 是不是已經和另一個 device_driver 匹配了。

經驗可以幫助我們看到問題的關鍵部分,真正研究過代碼才能看到問題的本質。庖丁看到的不是牛,而是肌理結構,到了這種境界換成羊也是一樣的。

最近經常聽到一句話,“工作 xx 年,就是一年的工作經驗重復 xx 年”,如果只是要求“會用”的層次,的確一年足夠,但工程師在這種情況下早晚會失去核心競爭力。

有人傾向于使用結論,但要做的應該是總結和解釋結論。

現在學習 Linux Kernel,主要有哪些工作方向呢?又是哪些類型的公司、業務會主要需要這種能力?

姜亞華:

驅動工程師、嵌入式工程師、系統工程師、Linux 程序開發工程師,甚至運維工程師這些崗位都需要了解內核,就像從事 Java 開發的工程師需要研究 JDK 一樣,并不是只有從事內核相關工作的工程師才需要研究內核,反過來懂內核的人向上發展也是很容易的。

有半導體相關業務的公司都需要這類人才,以前傳統的半導體公司需求大一些,但近幾年互聯網公司也紛紛涉足半導體領域,BAT 都包括在內。美國一系列動作之后,近期中國進入了芯片和操作系統研發熱潮,一大批芯片公司成立,燧原、平頭哥、寒武紀與商湯科技等等,它們也都需要內核相關的人才。

您這本書講到關于智能設備的開發,Linux Kernel 與 AI 有什么特別大的關系呢?

姜亞華:

其實這個問題我在這次寫的書里有解釋。

Java開發者需要研究JDK,Linux開發者需要研究Kernel

如上圖,“硬件廠商負責硬件,原語(primitives)庫一般也由他們維護,比如 AMD 的 MIOpen、Intel 的 MKL 和 Nvidia 的 cuDNN,多數程序員并不會接觸這部分內容,而是使用已有的 Framework。

Framework 的選擇也是多樣化的,Google 的 TensorFlow,Facebook 的 PyTorch,微軟的 CNDK,亞馬遜的 MXNet、Theano 和 Keras。很明顯,目前依然是百花齊放的局面,但技術的發展終歸只能是“三分天下”,甚至是“一統天下”。目前已經存在與這些 Framework 配套的工具,比如 Tensorboard,可以用來查看 TensorFlow 的訓練狀態。

由于深度學習計算量太大,并行計算技術也會有所涉及,比如 MPI(Message Passing Interface)通信協議、英偉達的 NCCL(NVIDIA Collective Communications Library)。

數據對深度學習十分重要,大數據是必不可少的。數據作為輸入,模型作為輸出,應用于數據中心、個人計算機、機器人和無人駕駛汽車等設備中。

縱觀這整個過程,并沒有哪一個環節提到了 Linux,但實際上多數環節都與 Linux 有關。雖然這些關系可能只有少數程序員關注,但隨著技術的成熟,新的智能設備,甚至新的操作系統,又會轉回到我們熟悉的內核。

在您研究 Linux 內核的過程中,有沒有覺得 Linux 內核其實還可以用其它語言實現一次,這樣對于入門學習會好很多,比如用 Python 這種簡單理解的語言。這樣的想法可行嗎?會遇到什么技術問題?

姜亞華:

內核里面有很多代碼采用的都是面向對象的思想,比如 VFS 采用了較多面向對象程序的設計模式,像 command 與 template method 等,使用其它語言尤其是面向對象語言來實現 Linux 內核是可行的,但是不得不說的是其它語言(比如 Python)很難有 C 語言的執行效率。

2019 年是 Linux Kernel 28 周年,分享一下您在這其中關于 Linux Kernel 印象最深的事情吧。

姜亞華:

Linux 內核是開源的,天生與微軟(更確切的說是 Windows)就是宿敵。微軟對 Linux 前期的敵對和近些年的轉變是件很有趣的事情,敵對時期就不多說了,近幾年微軟宣布“愛 Linux”,也做了很多實事,Azure、SQL Server 和 Visual Studio Code 等都有了 Linux 的身影。

這對 Linux 是好是壞先不說,這起碼說明了 Linux 的強大,有種“東方教主,千秋萬代,一統江湖”的感覺哈哈。

這是一件關于 Linux Kernel 印象比較深的事情,還有另一件也值得一提,那就是我今年寫了一本 Linux Kernel 相關的書籍《精通 Linux 內核——智能設備開發核心技術》,借此也宣傳宣傳,同時希望能夠通過這本書為道友們提供些許幫助。

這本書基于 Linux 5.x,歷時五年,研究數百萬行代碼總結而成,共分為五個部分,按照先易后難的順序剖析內核。首先介紹基礎知識,包括數據結構、中斷處理、內核同步和時間計算等,它們是理解后續章節的前提,在此基礎上詳細討論內存管理、文件管理和進程管理三個核心模塊,最后一部分升華篇融合了前面多個模塊。重點和難點部分均配以圖表、代碼或實驗,力求深入淺出。

除此之外,本書列舉了大量實例,分析了安卓操作系統的核心技術,使讀者能夠深刻的理解理論知識。本書的讀者需要熟悉 C 語言,能夠對內核有一定了解更好。推薦初學者按照本書的既定順序閱讀,熟悉內核的讀者可以直接閱讀三個核心模塊。

當然了,借這個平臺,也希望與道友們多多交流(包括但不限于本書的內容),歡迎大家跟我交流共同促進。另外本書是機械工業出版社《Linux 技術與應用叢書》的開篇之作,后續還會有一系列書籍出版,大家也可以關注關注。

采訪嘉賓介紹

姜亞華,一直從事與 Linux 內核和 Linux 編程相關的工作,研究內核代碼十多年,對多數模塊的細節如數家珍。曾負責華為手機 Touch、Sensor 的驅動和軟件優化(包括 Mate、榮耀等系列),以及 Intel 安卓平臺 Camera 和 Sensor 的驅動開發(包括 Baytrail、Cherrytrail、Cherrytrail CR、Sofia 等)。現負責 DMA、Interrupt、Semaphore 等模塊的優化與驗證(包括 Vega、Navi 系列和多款 APU 產品)。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美兽皇另类 | 糖心vlog麻豆精东影业传媒 | 国产精品女主播自在线拍 | 果冻传媒在线视频观看免费 | 精品国产理论在线观看不卡 | 毛片在线免费观看网站 | 美女黄金大片视频免费看 | 欧美日韩精品一区二区三区视频在线 | 黑人艹逼| 午夜精品在线视频 | 国产亚洲一区二区三区 | 日韩无砖专区体验区 | 女人张开腿让男人做爽爽 | 男人的天堂在线观看免费 | 精品在线免费观看 | 日本丰满www色 | bnb99八度免费影院 | 日产精品一卡2卡三卡4乱码久久 | 成人免费视频在 | 闺蜜调教我做她的脚奴 | 色老女人| 大象传媒1234区 | 国产精品久久久99 | 香蕉精品国产高清自在自线 | 私人影院在线播放 | 特级毛片免费视频观看 | 国产成人+亚洲欧洲 | 人生路不在线观看完整版 | 好紧好爽再叫浪一点点潘金莲 | 国产一卡2卡3卡四卡国色天香 | 北条麻妃一区 | 亚洲国产精品福利片在线观看 | 日韩妹妹| 国产精品久久久久久影院 | 无码一区国产欧美在线资源 | 欧美色fx性乌克兰 | 91麻豆国产福利精品 | 4438全国免费观看 | 国产一区二区三区在线观看视频 | 亚洲区在线播放 | 好硬好大好浪夹得好紧h |