陳莉君教授: 回望踏入Linux內核之旅

本文系轉載,著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。linux

做者: 陳莉君編程

來源: 微信公衆號linux閱碼場(id: linuxdev)安全

file


初次踏入Linux

幾多耕耘,幾多收穫,不當心在Linux這個自由王國暢遊了多年。依稀記得剛進入這個世界時的那份恐慌和無知,更慶幸那時的無知無畏。在那個20世紀的最後一年,貿然帶着幾個弟子踏入一無所知的Linux世界。服務器

1999年的那個春天,也是在講授操做系統,只不過是鼓勵你們參加個人興趣小組。竟然有10我的報名了(驚喜)。最初也無非是但願在課堂以外,讓你們可以多接觸一些東西,有點盲目,但你們興致很高。在咱們每週相約討論的過程當中,思路愈來愈多,機會之神也來光顧。人民郵電出版社但願就開源的Linux寫一本分析其內核的書。歷來沒有寫過書的我,敢承接嗎?不知勇氣從何而來,出版社約定我3個月拿出書稿,當時竟然絕不猶豫地答應了。微信

這書該怎麼寫?從何入手?既然是分析內核源代碼,那就從源代碼開始閱讀吧,因而,劃分任務,給堅持下來的7個每人一部份內容。到咱們興沖沖地下載了源代碼後才發現,這麼龐大的源代碼遠不是咱們能吃得動。真是自不量力!可有約在先,不作不罷呀。函數

那個炎熱的假期,你們苦戰的場面還歷歷在目。炎熱無空調,小夥子們光着膀子端杯水,有的乾脆晚上徹夜在幹,累了就在水泥地睡一下子。終於,在暑假快結束時,那本書總算草草封筆。之因此說草草,是由於,有太多的東西沒法歸入書本,還有太多的內容,咱們更沒有一一理清楚。有點遺憾,有點不甘心,但時間有限,就那麼交稿了。學習

2000年,《Linux操做系統內核分析》出版了,讀者的好評撲面而來。有點驚訝,有點受寵若驚,更沒有想到的是後來中科院指定該書爲考博參考書。有份喜悅,更有份慚愧,總以爲那麼不成熟的毛小孩受人尊敬有點不相稱。網站

不只僅是開源

在接觸Linux以後,但願把這種開源文化傳播給學生。每當第一次講起Linux,個人第一個頁面都是徐悲鴻的一匹奔放的馬。操作系統

file

我會問學生,從這匹馬中看到了什麼,「自由奔放」,有的學生回答。其實,由於那一頁的標題就是「Linux-自由而奔放的Linux黑馬」,因此這樣的回答,並無新意。我再問他們爲何一匹畫出來的馬不一樣於一張拍照?這樣的問題曾經是我思索而不得其解的。也是由於看到了徐悲鴻的馬,才以爲答案就在眼前….net

關於Linux,我總結成三句話「誕生於學生之手,成長於Internet,壯大於自由而開放的文化」,這幾句話展開,能夠寫出若干頁來,但簡練的話更能讓學生產生較強的記憶。

我在想,Linus在起初公佈這個稚嫩的操做系統時,是否想到會被人嘲笑,是否會想到沒有人會理會它,是否會想到一個錯誤百出的東西竟敢放在公共場所。也許,他只有一個理由,業餘愛好作出來的東西,就是它了。喜歡者,儘管參與進來,無論你身處何地,也無論你技藝如何,作不了開發,能夠找問題,bug找出來了,那也是一種貢獻了。

我在想,是誰都那麼主動的參與進去了?赫爾辛基大學的學生嗎?也許,最初,只有他們才能訪問到本身校園網的FTP服務器。當他們下載到這樣一個還不成型的操做系統時,會是怎樣一種行爲,試試用?叫罵的帖子?找出bug貼出來?把本身的補丁打上去?也許,都有。但估計,有一種行爲佔據了上風:有人用了,有人找出bug了,更有人願意把本身改寫的代碼也貢獻出來,他們是誰呢。我在閱讀源代碼時,看到過這些人的Email地址。在源代碼前面的註釋部分,附上本身的Email,這是他們惟一呈現本身貢獻的方式了。

我在想,開源世界五彩繽紛,爲何Linux這匹黑馬奔跑不止呢?也許,有人說,壟斷的Windows給了Linux競爭的場地。其實,這只是今天的Linux造成了足以壓倒Windows的優點。在Linux仍是搖搖晃晃的嬰兒時呢?也許由於,它攀到好兄弟Unix,還有Linus本人的魅力和技術,也許更重要的是開源文化這片肥沃的土壤和場地。但,這些,好像還不是充足的理由…

我在想,Internet到底給人帶來了什麼。在這個開源的社區,咱們感到的是一種平等,自由,開放,和諧的社會也不過如此吧。弗裏德曼在《世界是扁平的》中描繪的全球化的三步中,是否解答了個人疑惑:第一步是因爲航海的發展而利於強國侵略所造成的全球化;第二步是因爲生產力和貿易的發展而造成的市場全球化;第三步則是近些年開始加速的通訊的發展而造成的信息全球化。一些強國是要增強本身對於別國的強權,而全球化是打破這種強權的大趨勢,是使那些強權的非中心化。

只是,弗裏德曼站得更高, 而我經常會告訴學生,若是你喜歡權利或被奴役,那不要到這個社區來…

翻譯之路

不知不覺,竟然有不少本書從本身的手上脫稿而出。回想第一次欣然答應翻譯《Understanding The Linux kernel》初版時的茫然和興奮。歷來沒有作過翻譯的本身竟然敢承擔業界最有名的Linux內核書的翻譯,由於無知,也就無畏了。當真正着手翻譯時才發現,翻譯遠不是本身想象的那麼簡單。專業知識,英文底子,中文表述,哪個也不能少。對初版的傾情翻譯徹底出於當時那種對Linux內核的狂熱。依然記得那些不知疲倦的日子,看着那一頁頁的英文被本身消化掉,再讀着自認爲還過得去的表述,更從做者對知識的組織和表達中學到未曾瞭解到的東西,能夠說,整個翻譯過程就在這種激情中悄然度過的。

如今都很驚訝本身獨立翻譯《ULK》第二版時的那種投入,找出初版和第二版的差別就花去大量的時間。出版社老是給譯者較爲嚴格的時間界限,這讓我除了吃飯就是翻譯了。

出版社再找我翻譯《ULK》第三版時,面對800多頁的書,有點猶豫和退縮了。那些辛苦,興奮,忘個人日子有點不敢回首了。可是,前兩版的翻譯,傾注了太多心血,又不捨得就這麼把本身撫養的孩子送給別人。當我把這個想法告訴在全國操做系會上認識的張瓊聲老師(石油大學)時,她欣然答應,讓我把關,她願意接收繼續翻譯。她的認真和負責我是有所瞭解的,所以,仍是答應了第三版的翻譯。

一個春夏和暑假過去,又成了記憶中一段難忘的日子。常常爲了一個詞的準確翻譯,在網上來回屢次討論,有時甚至快要吵起來了。但即便這樣,當咱們不得不按原定的日期交稿時,依然以爲有很多遺憾隱藏在譯稿中,若是讀者在閱讀時,發現任何的bug,但願誠懇指出,發佈出來,讓更多的讀者知曉。

Linux內核書籍點評

從99年開始帶學生分析Linux內核,一路走來,積累了很多資料,也編寫和翻譯了近10本相關書籍,一直在摸索怎樣才能使你們儘快走入內核,但彷佛沒有捷徑。尤爲是內核版本的不斷更新,更是很多內核愛好者無所適從。

咱們初次接觸的內核資料是「The Linux Kernel」( kernelbook.sourceforge.net),介紹的是Linux2.0,儘管其中的內容過於概略,但其引導性的全面概述,使咱們逐步找到了進入內核的入口。

依然記得「Concrete Architecture of the Linux Kernel」這篇文章,當我在網上查到這篇文章時,一遍遍的閱讀以後,雖然仍是朦朦朧朧的感受,但這種高屋建瓴式的對內核的總體性把握,使得內核這個龐然大物有了骨架,這也符合了從總體入手,各個擊破的思惟模式。這篇文章對內核的分析採用了反向工程中自頂向下和自低向上的策略,

對內核這樣一個沒有起點,也沒有終點的圓球,首先得找一個入口點。也許你們認爲從進程入手是個不錯的選擇,但咱們啃的第一塊硬骨頭是「Unix下保護模式的編程」,主要閱讀其中的第四章,關於保護模式。

另外,咱們常常閱讀的資料還有Linux Kernel howto。其實,最直接的資料仍是源代碼以及其中的doc。我常常訪問的源代碼網站是lxr.linux.no,其進行了較大的調整,不只有內核的每一版本的源代碼,並且增長了很多的文檔。

咱們的第一本書《Linux操做系統內核分析》在2000年出版後,不少讀者給予承認。我想這可能由於,在本書的編寫過程當中,咱們沒有拘泥於任何框框,只是把咱們在分析2.0內核時,閱讀的相關資料以及自我認識,比較原始的展示出來。儘管書所涵蓋的內容遠非咱們曾經設想的,但對入門而言,可讓讀者少走很多彎路。

本書以後,咱們翻譯了內核紅寶書《Understanding The Linux Kernel》(已經出版了三版),在本書的翻譯過程當中,我時不時有插入源代碼的願望,也就是說,本書的原理和敘述比較順暢,但若是沒有源碼在手,有時如墜霧裏。所以建議,本書的閱讀,儘可能要與源碼結合。

在這以後,在《Linux操做系統內核分析》基礎上,對2.4版的內核進行分析。 當我着手《深刻分析Linux內核源代碼》這本書的編寫時,看到了毛德操、胡希明 著的《Linux內核源代碼情景分析》一書。厚厚的兩大本,徹底是娓娓道來。本書做者以英語情景會話的方式,對閱讀內核代碼路途中遇到的幾乎每一個函數,都一一說明。可是,由於內核代碼的深層次嵌套,若是你在閱讀的過程當中,沒有作好返回「現場」的準備,極可能走入某條小徑後不知返回的路途在哪裏了。可是,若是你有時間,並且有耐心,仔細閱讀本書,應該說能夠全景式掌握Linux內核。

在此說明,《深刻分析Linux內核源代碼》是針對Linux 內核2.4的,本書編寫過程當中,依然遵循了「Concrete Architecture of the Linux Kernel」一文的從頂向下的思路,同時還不斷的比較2.2與2.4內核在開發驅動程序方面的差別。整體感受,新版本對內核函數進行了較好的封裝,讓內核接口變得愈來愈容易。

《Linux kernel development》一書(中文名「Linux內核設計與實現」,已出三版,2.6內核),又一本口碑較好的Linux內核書籍。當咱們費勁翻譯完這本並不厚的書時,才感受其涵蓋信息量之大,相比《Understanding The Linux Kernel》,能夠說,若是沒有內核的基礎知識,閱讀以後,大有不知因此然之感。儘管這本書深得讀者喜歡,咱們的翻譯也獲得讀者的極大承認,但仍是建議讀者有必定內核基礎知識以後再去讀這本書。

《The Linux® Kernel Primer: A Top-Down Approach for x86 and PowerPC Architectures》,咱們翻譯的另外一本2.6內核書籍,本書的做者在IBM呆過多年,有開發經驗。書中對涉及到的代碼逐行給予瞭解釋,所以,在必定程度上適合於初學者。

在翻譯和編寫了以上書籍以後,咱們爲清華大學出版社編寫了《Linux操做系統原理與應用》教材,本書的側重點不在逐行分析源代碼,而是對部分源代碼有所瞭解後,讓讀者可以動手進行內核模塊的編寫,每章後面的例子有必定的難度,可是,動手以後,再去了解內核相關內容就具備針對性了。

以上對內核書籍的簡評,只限於咱們編寫和翻譯的書籍,像《Linux Device Driver》也是經典內核書籍,在此並無給予說明,近幾年出版了很多內核方面的好書,建議讀者擇優去讀。

在Linux內核這樣一片茂密無邊的樹林面前,若是說我曾給過你們有所幫助,其實也只是引領了一條小徑而已,那種探究的路途,全憑的是我的的悟性和不懈的執着,路漫漫兮,尋覓者自有探索,然後,我更但願是一旁觀者,但願看到勇者無往的憨勁!

從機制與策略探究Linux內核設計之道

2011年的Linux內核開發者大會邀請我作主題發言,但給你們分享些什麼,起初選定Linux的安全,由於那幾年的項目是這方面的。可是,當我着手準備講稿時,才發現安全是個太廣的話題,根本難以把握。因而想起本身經常告訴別人的話,從本身最熟悉的地方下手。因而,仍是從本身最熟悉的Linux內核入手吧。可是,內核也是太大的話題,漫無邊地,怎樣才能在有限的時間把本身這麼多年的體會分享出去,有兩個詞在瞬間跳在眼前:機制與策略,這也是本身經常掛在口邊的詞,怎樣從內核的設計釋義這兩個詞的含義,這實際上也是一個哲學命題。當開始寫講稿時,題目天然就蹦出來了:」從機制與策略探究Linux內核的設計之道「

當題目肯定下來後,才發現跳進本身挖的大陷阱中,這個涉及哲學、技術的寬泛題目我能把握麼?但,沒有其餘令本身更滿意的題目,只能是它了。所以,講稿的第一頁分別引用了易經和聖經中的兩句話:「形而上謂之道,形而下謂之器」;「看見的是暫時的,看不見的是永遠的」。這兩句話一出來,思路一會兒打開了。實際上,我要分享給你們的不是具體的技術,而是思考問題的方式。因而,第二頁上引用了龍應臺在」百年思索「中對文、史、哲的釋義—」文學-使看不見的東西被看見,哲學-迷宮中望見星空,歷史-沙漠玫瑰的開放「。當咱們僅僅在技術的座標系中看問題時,實際上總有必定的侷限性,那些萬事萬物之間的聯繫由於咱們固有的觀念而被割裂了。至此,我定位了本身的位置:若是說」道「是一隻大象(突然想起老子說的「大象無形」,但我這裏是偷換概念),那麼我在這裏講的觀點只是摸到了大象的鼻子。這樣以來,本身一會兒釋然了,我並非什麼專家,我只是在這個領域呆的時間長了,比你們早知道一些東西,多知道一些道理,有些感悟,但遠不是所有事實。

當這樣的開場白後,講稿上打出屈原「天問」中的幾句(這是學人家龍應臺)「天何所沓 十二焉分 日月安屬 列星安陳 何闔而晦 何開而明 角宿未旦 曜靈安藏」,屈原一個文學家,怎麼問天文地理不着邊際的這些問題:「天爲何和地相合,...",這是爲了引出胡適的觀點「作學問要在不疑出有疑」。

引子部分所有結束後就進入主題,首先用一組數據觀察Linux內核演變歷史,而後,從Linux總體結構入手,分析機制與策略分離的設計原則,再而後,從各個子系統中這一設計原則的應用入手,說明機制與策略的分離其實是計算機科學中的設計理念,而不只僅用在操做系統中。最後引出手機操做系統Android以及虛擬機xen的設計思路。

回頭看整篇講稿,與本身最初設想的根本不同了。一件事情動手作起來之後徹底是按照事情自己的規律往前走了,而不是腦子固有設想的非得怎樣去作,也許這也是一種「道」。

後來,華爲的深研所,西研所,北研所邀請我去他們的大講堂講講關於Linux內核方面的東西,「從機制與策略探究Linux內核的設計之道」的通用性省卻了我每次要從新準備講稿的時間,而把大量的時間花在瞭解他們具體的需求上,在不一樣的地方,面對不一樣的人羣,只須要針對具體需求實例化後進行發揮,就有遊刃有餘的感受了。

迷時師度 悟了自度

曾在企業實習的學生髮來郵件說,企業在培訓中推薦他們閱讀侯捷寫的《迷時師度 悟了自度》一文,我讀罷歎爲觀止,先把其中的故事貼過來:

● 六祖壇經

佛教東傳中土之後,雖然大德大賢備出,但由中國和尚所著,被奉爲「經者],也只「六祖檀經」一書而已。六祖檀經記錄着佛教禪宗六祖惠能一輩子的思想言行。其中對於六祖得道的過程,有詳細的敘述。

六祖惠能俗姓盧,南海新興人。年少失父,母且寡居,家亦屢空,業無腴產。因此他從小作了樵夫,養家活口。有一天偶聞肆間誦金剛般若經,心有所感,於是詢問鄰人何處學佛,遂安置母親,至河北黃梅山禮拜五祖。

●五祖弘忍

五祖弘忍見惠能談吐甚有根性,不動聲色地讓他到後院碓米。八個月後有一天,弘忍告訴衆弟子說,每個人寫一首偈,誰能悟道,我便傳他衣鉢。當時人人覺得五祖座下第一大弟子神秀必得衣鉢,因此也沒有人去做這首偈。神秀在這種狀況下,一來「義不容辭」,二來也想讓師父看看本身心中的看法,便在三更時候於南廊壁上寫下心偈一首:

身是菩提樹,心如明鏡臺;時時勤拂拭,莫使惹塵埃。

次日五祖弘忍見到了這首偈,把神秀叫到座前詢問。並謂:「汝做此偈,見即未到,只到門前,還沒有得入...」。要神秀回去再做一偈。過了數天,神秀卻做不出來。

●千古名誦

有個童子行過碓房,唱誦神秀的偈。惠能聞後,問明原因,便請童子引至大堂。禮拜之後,惠能說本身也有一首偈,可是他既不識字更不會寫字,乃請人代書寫下千古名誦:

菩提本非樹,明鏡亦非臺;原本無一物,何處惹塵埃。

此偈一成,衆總皆驚。消息傳至五祖,瞭然於心,但恐人損害,遂脫了鞋子 當抹布,馬上把這首偈擦掉,而且說「這首也嘛沒有悟道」!

次日,五祖弘忍悄悄來到後院,看到惠能把大石頭系在腰上,增長身體的重量來碓米,非常感動,於是和惠能展開一段很是空靈神妙的對話。弘忍問「米熟也未」?惠能曰:「米熟久矣,猶欠篩在」。於是祖以仗擊碓三下而去。惠能知祖意,是夜三鼓入室,由祖爲說金剛經。當說到「因無所住而生其心」,惠能大悟,於是五祖授衣鉢覺得信,而且說「衣爲爭端,止汝勿傳...,汝須速去,恐人害汝」。

●迷時師度,悟了自度

五祖弘忍親自送惠能到九江驛,令上船,把自搖。惠能曰:「請和尚坐,弟子合搖」。祖雲:「合是吾渡汝」。惠能雲:「迷時師度,悟了自度」。

個人觀點:

●誰是師?

古人一字,涵蓋多義。我經常會以爲本身爲師多年,是當仁不讓的師,可有一天與一位40多歲還從頭學計算機編程的人聊後 ,就從內心認他爲師,不是由於他的知識,而是由於他純粹的學習興趣和沒有功利心而爲的勁頭。

●怎麼悟

一個「悟」字,太有禪意,彷佛高不可攀,但每一個人都有感覺到悟的時刻,只是當你尋找悟的感受時,它反倒跑的無影無蹤。追溯「悟」的源頭,大都是由於日思夜想,吞下無數文字,馳騁于思惟的高山峽谷,有那麼一時刻,有了衆裏尋他千百度的頓悟。在這以前,一次次模模糊糊的感受似影似幻,總困擾着你。若是放棄了,那本該觸手可及的頓悟也就溜之大吉。

●悟什麼

好比,在Linux內核這樣有禪意的做品中,高人的代碼散落四處,那些代碼後的文字和原理,或者一些經典原理落地有聲的代碼,關聯起他們的,非文字所能描述,悟就別無選擇了。

更多精彩更新中……歡迎關注帳號:linux閱碼場(id: linuxdev)
Uploading file...
file

相關文章
相關標籤/搜索