亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長(zhǎng)資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    Java開(kāi)發(fā)者需要研究JDK,Linux開(kāi)發(fā)者需要研究Kernel

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

    Java開(kāi)發(fā)者需要研究JDK,Linux開(kāi)發(fā)者需要研究Kernel

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

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

      Linux Kernel 短期內(nèi)不會(huì)過(guò)氣,而是會(huì)進(jìn)一步影響到更多開(kāi)發(fā)者,但是 Linux Kernel 的入門(mén)和實(shí)踐卻很困難,這讓許多初學(xué)者望而卻步,哪個(gè)開(kāi)發(fā)者說(shuō)自己是 Linux Kernel 領(lǐng)域的,那其他人必定會(huì)肅然起敬。

      最近了解到有一本值得初學(xué)者學(xué)習(xí)的相關(guān)書(shū)籍《精通 Linux 內(nèi)核——智能設(shè)備開(kāi)發(fā)核心技術(shù)》,我們就如何學(xué)習(xí) Linux Kernel、Linux Kernel 2019 年的發(fā)展與相關(guān)應(yīng)用領(lǐng)域等問(wèn)題采訪了作者姜亞華,希望能給到想要了解、研究 Linux Kernel 的開(kāi)發(fā)者一些啟發(fā)。以下是對(duì)話內(nèi)容:

      2019 年 Linux Kernel 進(jìn)入了 5.x 時(shí)代,雖然 Linus 自己說(shuō)從 4.20 到 5.x 只是因?yàn)樽约菏种覆粔蛴茫菍?shí)際上以您的理解,這對(duì)于項(xiàng)目的生命周期管理、特性合并或者社區(qū)文檔建設(shè)等方面有沒(méi)有比較大的影響呢?

      姜亞華:

      5.x 其實(shí)更新蠻多的,patch 文件 40 多 M,涉及 10000 多個(gè)文件。

      這是一個(gè)大版本更新,從用戶意識(shí)角度來(lái)講,4.x 已經(jīng)是舊的了,就好像 iPhone 更新,Apple 維持兩年一個(gè)大更新的節(jié)奏,買(mǎi)了一款 iPhone,下一年的小更新不會(huì)有啥感覺(jué),但是第二年大更新后,才覺(jué)得我的手機(jī)不是最流行的了。

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

      從代碼角度來(lái)講,我們可以從內(nèi)核更新的過(guò)程中學(xué)習(xí)到很多優(yōu)化的思路。我開(kāi)始寫(xiě)作《精通 Linux 內(nèi)核——智能設(shè)備開(kāi)發(fā)核心技術(shù)》的時(shí)候內(nèi)核還是 3.x,在書(shū)中也刻意保留了部分 3.x 的討論(sysfs、進(jìn)場(chǎng)切換等),就是為了通過(guò)對(duì)比總結(jié)這方面的經(jīng)驗(yàn)。

      書(shū)中講到文件系統(tǒng),但是沒(méi)有關(guān)于最近微軟件開(kāi)放出來(lái)的 exFAT,猜想是因?yàn)槟@書(shū)已經(jīng)在此之前就寫(xiě)了,那目前您有沒(méi)有繼續(xù)研究 exFAT 相關(guān)的內(nèi)容呢?目前 exFAT 也已經(jīng)在 5.4 中支持,它的能力上會(huì)帶來(lái)什么影響呢?

      姜亞華:

      是的,我接下來(lái)打算再深入一些模塊,exFAT 是其中之一。它的未來(lái)如何還很難說(shuō),Linux 已經(jīng)有很多優(yōu)秀的文件系統(tǒng)了,它們都經(jīng)過(guò)了多年的驗(yàn)證,bug 可能也相對(duì)少一些,exFAT 還需要在 Linux 上經(jīng)過(guò)時(shí)間的考驗(yàn)。

      近期另一個(gè)內(nèi)核新特性也引起了廣泛的討論,那就是內(nèi)核鎖定,這個(gè)特性其實(shí)討論了多年,最后它的表現(xiàn)形式似乎也挺讓人不解的。該特性限制了 root 角色的權(quán)限,但是 root 是系統(tǒng)的最高級(jí)權(quán)限都有不能訪問(wèn)的地方,這對(duì)于 root 來(lái)說(shuō)是挺奇怪的一件事情,在開(kāi)發(fā)、運(yùn)維或者日常使用上這會(huì)產(chǎn)生什么比較大的影響嗎?

      姜亞華:

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

      這對(duì) root 來(lái)說(shuō)其實(shí)并不奇怪,它依然是超級(jí)用戶,可以訪問(wèn)所有正常的門(mén)。只不過(guò)內(nèi)核鎖定把一些“后門(mén)”去掉了,這些門(mén)常閉或者不存在了。

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

      說(shuō)句題外話,root 是個(gè)挺危險(xiǎn)的東西,慎用。記得我負(fù)責(zé)管理部門(mén)服務(wù)器的時(shí)候,有一次供應(yīng)商幫我移植驅(qū)動(dòng)的過(guò)程中,安裝軟件的時(shí)候不小心刪除了一些文件,服務(wù)器斷電后就無(wú)法啟動(dòng)了。我?guī)е獗P(pán),在無(wú)數(shù)服務(wù)器轟鳴的實(shí)驗(yàn)室中,花了好幾天才將它“搶救”回來(lái)。

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

      姜亞華:

      我也是一行一行代碼看下來(lái)的,幾點(diǎn)建議供大家參考。

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

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

      最后,自我激勵(lì),堅(jiān)持到底,最好是興趣使然。

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

    Java開(kāi)發(fā)者需要研究JDK,Linux開(kāi)發(fā)者需要研究Kernel

      大家遇到疑問(wèn)也可以聯(lián)系我,共同探討,OSC 站內(nèi)信(always_first_meet)或者郵件(linux_kernel_os@163.com)都可以。

      Linux 內(nèi)核十分龐大,閱讀源碼的時(shí)候哪些部分是最開(kāi)始的時(shí)候必須的,而哪些部分可以作為后續(xù)針對(duì)性的補(bǔ)充?

      姜亞華:

      內(nèi)核代碼量龐大,模塊間的關(guān)系也錯(cuò)綜復(fù)雜,建議初學(xué)者可以從相對(duì)簡(jiǎn)單而且獨(dú)立的模塊入手,比如一個(gè)簡(jiǎn)單設(shè)備的驅(qū)動(dòng)。

      先了解驅(qū)動(dòng)本身的邏輯,之后是它的上下游,然后擴(kuò)展到相關(guān)模塊,最后自由發(fā)揮。

      舉個(gè)例子,在 drivers/input/keyboard 下面的文件是鍵盤(pán)驅(qū)動(dòng),我們選擇一個(gè)文件。

      第 1 階段,查看 xxx_probe 等函數(shù),梳理控制和數(shù)據(jù)流程,理解驅(qū)動(dòng)需要做什么。

      第 2 階段,適當(dāng)拓展,代碼內(nèi)調(diào)用的函數(shù)大概是如何實(shí)現(xiàn)的,驅(qū)動(dòng)涉及的中斷、定時(shí)器、input 子系統(tǒng)等機(jī)制的原理,這些機(jī)制相對(duì)獨(dú)立,文檔也多,多花些時(shí)間即可。

      第 3 階段,追根溯源,研究 xxx_probe 是如何被調(diào)用的,i2c 總線的驅(qū)動(dòng)(假設(shè)鍵盤(pán)接 i2c 總線),device/device_driver/bus 的關(guān)系(驅(qū)動(dòng)架構(gòu))。

      階段 2 與 3 可以同時(shí)進(jìn)行。

      第 4 階段,自由發(fā)揮,按照工作需要和興趣,進(jìn)軍內(nèi)存管理、文件系統(tǒng)和進(jìn)程管理等模塊。

      就算是能夠閱讀源碼,另一個(gè)問(wèn)題也會(huì)出現(xiàn),就是讀了源碼,理解了它的邏輯,但是有什么用呢?最簡(jiǎn)單的是增長(zhǎng)了自己的見(jiàn)識(shí),但是實(shí)際上這就像閱讀了一本書(shū)但是不輸出自己的理解與觀點(diǎn),沒(méi)有太大的作用。您是怎么看待并且怎么解決這個(gè)問(wèn)題的呢?

      姜亞華:

      研究?jī)?nèi)核有什么用,這是一個(gè)值得深思的問(wèn)題。

      中國(guó)現(xiàn)在這個(gè)時(shí)候的確需要沉下心玩底層系統(tǒng)的人,中國(guó)渴望自主操作系統(tǒng)已經(jīng)很久了,尤其是現(xiàn)在這種多事之秋。但是如果沒(méi)有大批工程師在這個(gè)領(lǐng)域積淀的話,操作系統(tǒng)無(wú)疑是一種空談。

      先不論未來(lái)的國(guó)產(chǎn)操作系統(tǒng)是否一定是 Linux 內(nèi)核的,研究 Linux 內(nèi)核本身也是很好的技術(shù)積累途徑。

      僅僅從個(gè)人職業(yè)生涯角度出發(fā),研究?jī)?nèi)核對(duì)個(gè)人技術(shù)的成長(zhǎng)有極大幫助,可以分多個(gè)層次看待。

      第 1 層次,初識(shí),對(duì)內(nèi)核有大概的了解,需要花時(shí)間深入工作相關(guān)的模塊。研究?jī)?nèi)核會(huì)占用大量時(shí)間,產(chǎn)出并不明顯。

      第 2 層次,入門(mén),熟悉工作相關(guān)的模塊,理解內(nèi)核模塊間的關(guān)系。研究?jī)?nèi)核會(huì)讓你豁然開(kāi)朗,經(jīng)常有“原來(lái) xxx 是這么實(shí)現(xiàn)的”之類(lèi)的感嘆。

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

      除了第 1 層次“浪費(fèi)”時(shí)間外,花時(shí)間研究?jī)?nèi)核可以反過(guò)來(lái)提高我們的效率。研究到了一定程度后就可以進(jìn)入一個(gè)良性循環(huán),研究得越多,效率越高,節(jié)省的時(shí)間越多,可以研究的越多。

      另外,看的代碼越多,越有能力解決錯(cuò)綜復(fù)雜的問(wèn)題,金老爺子也說(shuō)“重劍無(wú)鋒,大巧不工”,絕對(duì)的實(shí)力才是硬道理。

      還是 xxx_probe 的例子,如果我們的 probe 沒(méi)有被調(diào)用,新手可能會(huì)檢查 device 和 device_driver 的名字是否匹配,研究過(guò)驅(qū)動(dòng)架構(gòu)的工程師可能分 device、device_driver 和 match 三部分檢查。

      如果三部分看似都沒(méi)有問(wèn)題,但是 probe 依然沒(méi)有調(diào)用呢?研究過(guò)代碼的工程師可能會(huì)想到 device 是不是已經(jīng)和另一個(gè) device_driver 匹配了。

      經(jīng)驗(yàn)可以幫助我們看到問(wèn)題的關(guān)鍵部分,真正研究過(guò)代碼才能看到問(wèn)題的本質(zhì)。庖丁看到的不是牛,而是肌理結(jié)構(gòu),到了這種境界換成羊也是一樣的。

      最近經(jīng)常聽(tīng)到一句話,“工作 xx 年,就是一年的工作經(jīng)驗(yàn)重復(fù) xx 年”,如果只是要求“會(huì)用”的層次,的確一年足夠,但工程師在這種情況下早晚會(huì)失去核心競(jìng)爭(zhēng)力。

      有人傾向于使用結(jié)論,但要做的應(yīng)該是總結(jié)和解釋結(jié)論。

      現(xiàn)在學(xué)習(xí) Linux Kernel,主要有哪些工作方向呢?又是哪些類(lèi)型的公司、業(yè)務(wù)會(huì)主要需要這種能力?

      姜亞華:

      驅(qū)動(dòng)工程師、嵌入式工程師、系統(tǒng)工程師、Linux 程序開(kāi)發(fā)工程師,甚至運(yùn)維工程師這些崗位都需要了解內(nèi)核,就像從事 Java 開(kāi)發(fā)的工程師需要研究 JDK 一樣,并不是只有從事內(nèi)核相關(guān)工作的工程師才需要研究?jī)?nèi)核,反過(guò)來(lái)懂內(nèi)核的人向上發(fā)展也是很容易的。

      有半導(dǎo)體相關(guān)業(yè)務(wù)的公司都需要這類(lèi)人才,以前傳統(tǒng)的半導(dǎo)體公司需求大一些,但近幾年互聯(lián)網(wǎng)公司也紛紛涉足半導(dǎo)體領(lǐng)域,BAT 都包括在內(nèi)。美國(guó)一系列動(dòng)作之后,近期中國(guó)進(jìn)入了芯片和操作系統(tǒng)研發(fā)熱潮,一大批芯片公司成立,燧原、平頭哥、寒武紀(jì)與商湯科技等等,它們也都需要內(nèi)核相關(guān)的人才。

      您這本書(shū)講到關(guān)于智能設(shè)備的開(kāi)發(fā),Linux Kernel 與 AI 有什么特別大的關(guān)系呢?

      姜亞華:

      其實(shí)這個(gè)問(wèn)題我在這次寫(xiě)的書(shū)里有解釋。

    Java開(kāi)發(fā)者需要研究JDK,Linux開(kāi)發(fā)者需要研究Kernel

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

      Framework 的選擇也是多樣化的,Google 的 TensorFlow,F(xiàn)acebook 的 PyTorch,微軟的 CNDK,亞馬遜的 MXNet、Theano 和 Keras。很明顯,目前依然是百花齊放的局面,但技術(shù)的發(fā)展終歸只能是“三分天下”,甚至是“一統(tǒng)天下”。目前已經(jīng)存在與這些 Framework 配套的工具,比如 Tensorboard,可以用來(lái)查看 TensorFlow 的訓(xùn)練狀態(tài)。

      由于深度學(xué)習(xí)計(jì)算量太大,并行計(jì)算技術(shù)也會(huì)有所涉及,比如 MPI(Message Passing Interface)通信協(xié)議、英偉達(dá)的 NCCL(NVIDIA Collective Communications Library)。

      數(shù)據(jù)對(duì)深度學(xué)習(xí)十分重要,大數(shù)據(jù)是必不可少的。數(shù)據(jù)作為輸入,模型作為輸出,應(yīng)用于數(shù)據(jù)中心、個(gè)人計(jì)算機(jī)、機(jī)器人和無(wú)人駕駛汽車(chē)等設(shè)備中。

      縱觀這整個(gè)過(guò)程,并沒(méi)有哪一個(gè)環(huán)節(jié)提到了 Linux,但實(shí)際上多數(shù)環(huán)節(jié)都與 Linux 有關(guān)。雖然這些關(guān)系可能只有少數(shù)程序員關(guān)注,但隨著技術(shù)的成熟,新的智能設(shè)備,甚至新的操作系統(tǒng),又會(huì)轉(zhuǎn)回到我們熟悉的內(nèi)核。

      在您研究 Linux 內(nèi)核的過(guò)程中,有沒(méi)有覺(jué)得 Linux 內(nèi)核其實(shí)還可以用其它語(yǔ)言實(shí)現(xiàn)一次,這樣對(duì)于入門(mén)學(xué)習(xí)會(huì)好很多,比如用 Python 這種簡(jiǎn)單理解的語(yǔ)言。這樣的想法可行嗎?會(huì)遇到什么技術(shù)問(wèn)題?

      姜亞華:

      內(nèi)核里面有很多代碼采用的都是面向?qū)ο蟮乃枷耄热?VFS 采用了較多面向?qū)ο蟪绦虻脑O(shè)計(jì)模式,像 command 與 template method 等,使用其它語(yǔ)言尤其是面向?qū)ο笳Z(yǔ)言來(lái)實(shí)現(xiàn) Linux 內(nèi)核是可行的,但是不得不說(shuō)的是其它語(yǔ)言(比如 Python)很難有 C 語(yǔ)言的執(zhí)行效率。

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

      姜亞華:

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

      這對(duì) Linux 是好是壞先不說(shuō),這起碼說(shuō)明了 Linux 的強(qiáng)大,有種“東方教主,千秋萬(wàn)代,一統(tǒng)江湖”的感覺(jué)哈哈。

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

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

      除此之外,本書(shū)列舉了大量實(shí)例,分析了安卓操作系統(tǒng)的核心技術(shù),使讀者能夠深刻的理解理論知識(shí)。本書(shū)的讀者需要熟悉 C 語(yǔ)言,能夠?qū)?nèi)核有一定了解更好。推薦初學(xué)者按照本書(shū)的既定順序閱讀,熟悉內(nèi)核的讀者可以直接閱讀三個(gè)核心模塊。

      當(dāng)然了,借這個(gè)平臺(tái),也希望與道友們多多交流(包括但不限于本書(shū)的內(nèi)容),歡迎大家跟我交流共同促進(jìn)。另外本書(shū)是機(jī)械工業(yè)出版社《Linux 技術(shù)與應(yīng)用叢書(shū)》的開(kāi)篇之作,后續(xù)還會(huì)有一系列書(shū)籍出版,大家也可以關(guān)注關(guān)注。

      采訪嘉賓介紹

      姜亞華,一直從事與 Linux 內(nèi)核和 Linux 編程相關(guān)的工作,研究?jī)?nèi)核代碼十多年,對(duì)多數(shù)模塊的細(xì)節(jié)如數(shù)家珍。曾負(fù)責(zé)華為手機(jī) Touch、Sensor 的驅(qū)動(dòng)和軟件優(yōu)化(包括 Mate、榮耀等系列),以及 Intel 安卓平臺(tái) Camera 和 Sensor 的驅(qū)動(dòng)開(kāi)發(fā)(包括 Baytrail、Cherrytrail、Cherrytrail CR、Sofia 等)?,F(xiàn)負(fù)責(zé) DMA、Interrupt、Semaphore 等模塊的優(yōu)化與驗(yàn)證(包括 Vega、Navi 系列和多款 APU 產(chǎn)品)。

    特別提醒:本網(wǎng)內(nèi)容轉(zhuǎn)載自其他媒體,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實(shí),對(duì)本文以及其中全部或者部分內(nèi)容、文字的真實(shí)性、完整性、及時(shí)性本站不作任何保證或承諾,并請(qǐng)自行核實(shí)相關(guān)內(nèi)容。本站不承擔(dān)此類(lèi)作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。如若本網(wǎng)有任何內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系我們,本站將會(huì)在24小時(shí)內(nèi)處理完畢。

    贊(1)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)