Linux內(nèi)核設(shè)計(jì)的藝術(shù)

出版時(shí)間:2011-6-20  出版社:機(jī)械工業(yè)出版社華章公司  作者:新設(shè)計(jì)團(tuán)隊(duì)  頁(yè)數(shù):444  
Tag標(biāo)簽:無  

前言

很早就有一個(gè)想法,做中國(guó)人自己的、有所突破、有所創(chuàng)新的操作系統(tǒng)、計(jì)算機(jī)語言及編譯平臺(tái)。我?guī)ьI(lǐng)的“新設(shè)計(jì)團(tuán)隊(duì)”(主要由中國(guó)科學(xué)院研究生院已畢業(yè)的學(xué)生組成)在實(shí)際開發(fā)自己的操作系統(tǒng)的過程中,最先遇到的問題就是如何培養(yǎng)學(xué)生真正看懂Linux操作系統(tǒng)的源代碼的能力。開源的Linux操作系統(tǒng)的源代碼很容易找到,但很快就會(huì)發(fā)現(xiàn),培養(yǎng)學(xué)生看懂Linux操作系統(tǒng)的源代碼是一件非常非常困難的事。操作系統(tǒng)的代碼量通常都是非常龐大的,動(dòng)輒幾百萬行,即使是瀏覽一遍也要很長(zhǎng)時(shí)間。比龐大的代碼量更讓學(xué)習(xí)者絕望的是操作系統(tǒng)有著極其錯(cuò)綜復(fù)雜的關(guān)系??瓷先?,代碼的執(zhí)行序時(shí)隱時(shí)現(xiàn),很難抓住脈絡(luò)。代碼之間相互牽扯,相互勾連,幾乎無法理出頭緒。更談不上理解代碼背后的原理、意圖和思想。對(duì)于學(xué)生而言,選擇從源代碼的什么地方開始分析本身就是一個(gè)難題。通常,學(xué)生有兩種選擇:一種是從main函數(shù),也就是從C語言代碼的總?cè)肟陂_始,沿著源代碼的調(diào)用路線一行一行地看下去,學(xué)生很快就會(huì)發(fā)現(xiàn)源代碼的調(diào)用路線莫名其妙地?cái)嗔耍庇X和常識(shí)告訴他操作系統(tǒng)肯定不會(huì)在這個(gè)地方停止,一定還在繼續(xù)運(yùn)行,但卻不知道后續(xù)的代碼在哪里,這種方法很快就走進(jìn)了死胡同;另一種則是從某一模塊入手,如文件系統(tǒng),但這樣會(huì)無形中切斷操作系統(tǒng)源碼之間復(fù)雜的關(guān)系,如文件系統(tǒng)與進(jìn)程管理的關(guān)系,文件系統(tǒng)與內(nèi)存管理的關(guān)系,等等。使學(xué)生孤立地去理解一個(gè)模塊,往往只能記住一些名詞和簡(jiǎn)單概念,難以真正理解操作系統(tǒng)的全貌。用學(xué)生的話講,他們理解的操作系統(tǒng)變成了“文科”的操作系統(tǒng)。由于操作系統(tǒng)是底層系統(tǒng)程序,對(duì)應(yīng)用程序行之有效的調(diào)試和跟蹤等手段對(duì)操作系統(tǒng)的源代碼而言,幾乎無效。就算把每一行源代碼都看懂了,對(duì)源代碼已經(jīng)爛熟于心,知道這一行是一個(gè)for循環(huán),那一行是一個(gè)調(diào)用……但仍然不知道整個(gè)代碼究竟在做什么,以及起什么作用,更不知道設(shè)計(jì)者的意圖究竟是什么。我們?cè)诓僮飨到y(tǒng)的課程上學(xué)習(xí)過進(jìn)程管理、內(nèi)存管理、文件系統(tǒng)等基礎(chǔ)知識(shí),但是這些空洞的理論在一個(gè)實(shí)際的操作系統(tǒng)中是如何實(shí)現(xiàn)的卻不得而知。他們?cè)谠创a中很難看出進(jìn)程和內(nèi)存之間有什么關(guān)聯(lián),內(nèi)核程序和用戶程序有什么區(qū)別,為什么要有這些區(qū)別。也很難從源代碼中看清楚,我們實(shí)際經(jīng)常用到的操作,比如打開文件,操作系統(tǒng)在其中都做了哪些具體的工作?想在與常見的應(yīng)用程序的編程方法有巨大差異的、晦澀難懂的、浩瀚如海的操作系統(tǒng)底層源代碼中找到這些問題的答案,似乎比登天還難。對(duì)熟悉操作系統(tǒng)源代碼的學(xué)生而言,他們也知道像分頁(yè)機(jī)制這樣知識(shí)點(diǎn),但是未必能夠真正理解隱藏在機(jī)制背后的深刻意義。這些都是學(xué)生在學(xué)習(xí)Linux操作系統(tǒng)源代碼時(shí)遇到的實(shí)際問題。中國(guó)科學(xué)院研究生院的學(xué)生應(yīng)該是年輕人中的佼佼者,他們遇到的問題可能其他讀者也會(huì)遇到。我萌發(fā)了一個(gè)想法,雖然學(xué)生的問題早已解決,但是否可以把他們?cè)?jīng)在學(xué)習(xí)、研發(fā)操作系統(tǒng)的過程中遇到的問題和心得體會(huì)得拿出來供廣大讀者分享?當(dāng)時(shí),針對(duì)學(xué)生的實(shí)際問題,我的解決方法是以一個(gè)真實(shí)的操作系統(tǒng)為例,讓學(xué)生理解源代碼,把操作系統(tǒng)在內(nèi)存中的運(yùn)行時(shí)狀態(tài)畫出圖來。實(shí)踐證明,這個(gè)方法簡(jiǎn)單有效?,F(xiàn)在我們把這個(gè)解決方案體現(xiàn)在這本書中。就是以一個(gè)真實(shí)的操作系統(tǒng)的實(shí)際運(yùn)行為主線;以圖形、圖像為核心,突出描述操作系統(tǒng)在實(shí)際運(yùn)行過程中內(nèi)存的運(yùn)行時(shí)結(jié)構(gòu);強(qiáng)調(diào)站在操作系統(tǒng)設(shè)計(jì)者的視角,用體系的思想方法,整體把握操作系統(tǒng)的行為、作用、目的和意義。在全書的講解過程中,我們不僅詳細(xì)分析了源代碼、分析了操作系統(tǒng)的執(zhí)行序,我們還特別分析了操作系統(tǒng)都作了哪些“事”,并且把“事”與“事”之間的關(guān)系和來龍去脈,這些“事”意味著什么,為什么要做這些“事”,這些“事”背后的設(shè)計(jì)思想是什么……都做了非常詳細(xì)且深入的分析。更重要的是,對(duì)于所有重要的階段,我們幾乎都用圖解的方式把操作系統(tǒng)在內(nèi)存中的實(shí)際運(yùn)行狀態(tài)精確地表示了出來。我們用600dpi的分辨率精心繪制了349張圖,圖中表現(xiàn)的運(yùn)行時(shí)結(jié)構(gòu)和狀態(tài)與操作系統(tǒng)實(shí)際運(yùn)行的真實(shí)狀態(tài)完全吻合。每一條線、每一個(gè)色塊、每一個(gè)位置、每一個(gè)地址及數(shù)字都經(jīng)過了我們認(rèn)真反復(fù)地推演和求證,并最終在計(jì)算機(jī)上進(jìn)行了核對(duì)和驗(yàn)證??戳诉@些繪制精美的圖后,在讀者的頭腦中就不再是一行行、一段段枯燥的、令人眩暈的源代碼,而是立體呈現(xiàn)的一件件清晰的“事”,以及這些“事”在內(nèi)存中直截了當(dāng)、清晰鮮活的畫面。用這樣的方法講解操作系統(tǒng)是本書的一大特色。理解這些圖要比理解源代碼和文字容易得多,毫不夸張地說,只要你能理解這些圖,你就理解了操作系統(tǒng)的80%,這時(shí)你可以自豪的說,你比大多數(shù)用別的方法學(xué)過操作系統(tǒng)的人的水平都要高出一大截。作者和機(jī)械工業(yè)出版社的編輯作了大量的檢索工作,就我們檢索的范圍而言,這樣的創(chuàng)作方法及具有這樣特色的操作系統(tǒng)專著在世界范圍都是第一次。我們分三個(gè)部分來講解Linux操作系統(tǒng):第一部分由第1章和第2章組成,分析了從開機(jī)加電到操作系統(tǒng)啟動(dòng)完成并進(jìn)入怠速狀態(tài)的整個(gè)過程;第二部分由第3章、第4章、第5章、第6章、第7章組成,講述了操作系統(tǒng)進(jìn)入系統(tǒng)怠速后,在執(zhí)行用戶程序的過程中,操作系統(tǒng)和用戶進(jìn)程的實(shí)際運(yùn)行過程和狀態(tài);第三部分由第8章組成,闡述整個(gè)Linux操作系統(tǒng)的設(shè)計(jì)指導(dǎo)思想,本章內(nèi)容是從微觀到宏觀的回歸。第一部分,我們?cè)敿?xì)講解了開機(jī)加電啟動(dòng)BIOS,通過BIOS加載操作系統(tǒng)程序,對(duì)主機(jī)的初始化,打開保護(hù)模式和分頁(yè),調(diào)用main函數(shù),創(chuàng)建進(jìn)程0、進(jìn)程1、進(jìn)程2以及shell進(jìn)程,并且具備用文件的形式與外設(shè)交互。第二部分,我們?cè)O(shè)計(jì)了幾個(gè)盡可能簡(jiǎn)單又有代表性的應(yīng)用程序,并以這些程序的執(zhí)行為引導(dǎo),詳細(xì)講解了安裝文件系統(tǒng)、文件操作、用戶進(jìn)程與內(nèi)存管理、多個(gè)進(jìn)程對(duì)文件的操作以及進(jìn)程間通信。我們將操作系統(tǒng)的原理自然而然地融入到了講解真實(shí)操作系統(tǒng)的實(shí)際運(yùn)行過程中。在讀者看來,操作系統(tǒng)原理不再是空對(duì)空的、“文科”概念的計(jì)算機(jī)理論,而是既有完整的、體系的理論,又有真實(shí)、具體、實(shí)際的代碼和案例,理論與實(shí)際緊密耦合。第三部分是全書水平最高的部分,我們嘗試從操作系統(tǒng)設(shè)計(jì)者的視角講解操作系統(tǒng)的設(shè)計(jì)指導(dǎo)思想。詳細(xì)闡述了主奴機(jī)制以及實(shí)現(xiàn)主奴機(jī)制的三項(xiàng)關(guān)鍵技術(shù):保護(hù)和分頁(yè)、特權(quán)級(jí)、中斷,分析了保障主奴機(jī)制實(shí)現(xiàn)的決定性因素——先機(jī),還詳細(xì)講解了緩沖區(qū)、共享頁(yè)面、信號(hào)、管道的設(shè)計(jì)指導(dǎo)思想。希望幫助讀者用體系的思想理解、把握、駕馭整個(gè)操作系統(tǒng)以及背后的設(shè)計(jì)思想和設(shè)計(jì)意圖。在本書中,我們?cè)敿?xì)講解了大家在學(xué)習(xí)操作系統(tǒng)的過程中可能會(huì)遇到的每一個(gè)難點(diǎn),如main函數(shù)中的pause()調(diào)用,雖然已經(jīng)找不到后續(xù)代碼,但該調(diào)用結(jié)束后,程序仍然執(zhí)行的原因是:中斷一經(jīng)打開,進(jìn)程調(diào)度就開始了,而此時(shí)可以調(diào)度的進(jìn)程只有進(jìn)程1,所以后續(xù)的代碼應(yīng)該從進(jìn)程1處繼續(xù)執(zhí)行……我們還對(duì)一些讀者不容易理解和掌握的操作系統(tǒng)特有的底層代碼的編程技巧作了詳細(xì)的講解。如用模擬call的方法,通過ret指令“調(diào)用”main函數(shù)…………總之,我們所做的一切努力就是想真正解決讀者遇到的實(shí)際問題和難題,給予讀者有效的幫助。我們盼望即使是剛剛考入大學(xué)的學(xué)生也有興趣和信心把這本書讀下去;我們同樣希望即使是對(duì)操作系統(tǒng)源代碼很熟悉的讀者,這本書也能給他們一些不同的視角、方法和體系性思考。這本書選用的操作系統(tǒng)源代碼是Linux 0.11。對(duì)為什么選用Linux 0.11而不是最新版本,趙炯先生有過非常精彩的論述,我們認(rèn)為趙先生的論述是非常到位的。我們不妨看一下Linux最新的版本2.6,代碼量大約在千萬行這個(gè)量級(jí),去掉其中的驅(qū)動(dòng)部分,代碼量仍在百萬行這個(gè)量級(jí)。一個(gè)人一秒鐘看一行,一天看8小時(shí),中間不吃、不喝、不休息,也要看上幾個(gè)月,很難想象如何去理解。就算我們硬要選用Linux 2.6,就算我們寫上3000頁(yè)(書足足會(huì)有十幾厘米厚),所有的篇幅都用來印代碼,也只能印上不到十分之一的代碼。所以,即使是這么不切實(shí)際的篇幅,也不可能整體講解Linux 2.6。讀者會(huì)逐漸明白,對(duì)于理解和掌握操作系統(tǒng)而言,真正有價(jià)值的是整體、是體系,而不是局部。Linux 0.11的內(nèi)核代碼雖然只有約兩萬行,但卻是一個(gè)實(shí)實(shí)在在、不折不扣的現(xiàn)代操作系統(tǒng),因?yàn)樗哂鞋F(xiàn)代操作系統(tǒng)最重要的特征——支持實(shí)時(shí)多任務(wù),所以必然支持保護(hù)和分頁(yè)……而且它還是后續(xù)版本的真正的始祖,有著內(nèi)在的、緊密的傳承關(guān)系。讀者更容易看清設(shè)計(jì)者最初的、最根本的設(shè)計(jì)意圖和設(shè)計(jì)指導(dǎo)思想。Linux 0.11已經(jīng)問世20年了,被世人廣為研究和學(xué)習(xí)。換一個(gè)角度看,要想在眾人熟悉的事物和領(lǐng)域講出新意和特色,對(duì)作者來說也是一個(gè)強(qiáng)有力的挑戰(zhàn)。這本書能夠順利出版,我們首先要感謝機(jī)械工業(yè)出版社華章公司的副總經(jīng)理溫莉芳女士以及其他領(lǐng)導(dǎo),是他們的決心和決策成就了這本書,并且在幾乎所有方面給予了強(qiáng)有力的支持。特別令人感動(dòng)的是他們主動(dòng)承擔(dān)了全部的出版風(fēng)險(xiǎn),同時(shí)給予了作者最好的條件,讓我們看到一個(gè)大出版社的氣度和風(fēng)范。其次,我們還要感謝的是機(jī)械工業(yè)出版社華章公司的編輯楊福川。楊先生的鑒賞力和他的事業(yè)心以及他對(duì)工作認(rèn)真負(fù)責(zé)的態(tài)度為這本書的出版打開了大門。楊先生對(duì)讀者的理解以及他的計(jì)算機(jī)專業(yè)素養(yǎng)使得他有能力對(duì)這本書給予全方位的指導(dǎo)和幫助,使我們對(duì)這本書整體修改了6次,使之更貼近讀者,可讀性更好。我們還要感謝我們和楊福川先生共同的朋友張國(guó)強(qiáng)先生和楊縉女士。最后,我們要感謝我們的家人和朋友。是他們堅(jiān)定的支持才使得我們的整個(gè)團(tuán)隊(duì)能夠拒絕方方面面、形形色色的誘惑,放棄普遍追求的短期利益,在常人難以想象的艱苦條件下,長(zhǎng)時(shí)間專注于操作系統(tǒng)、計(jì)算機(jī)語言、編譯器、計(jì)算機(jī)體系結(jié)構(gòu)等基礎(chǔ)性學(xué)科的研究。認(rèn)認(rèn)真真、踏踏實(shí)實(shí)、不為名利,做了一點(diǎn)實(shí)在、深入的工作,有了一點(diǎn)能湊合拿得出手的10年積累,以及一支敢想、敢干、敢打、敢拼、不懼世界頂級(jí)強(qiáng)敵的隊(duì)伍。這些是本書的基礎(chǔ)。楊力祥中國(guó)科學(xué)院研究生院2011年5月

內(nèi)容概要

關(guān)于Linux內(nèi)核的書已經(jīng)不計(jì)其數(shù),但這本書卻是獨(dú)樹一幟的,它的內(nèi)容代表著Linux內(nèi)核研究成果的世界頂尖級(jí)水平,它在世界范圍內(nèi)首次提出并闡述了操作系統(tǒng)設(shè)計(jì)的核心指導(dǎo)思想——主奴機(jī)制,這是所有操作系統(tǒng)研究者的一筆寶貴財(cái)富。本書可能也代表著同類圖書的頂尖水平,是一本真正能引導(dǎo)我們較為容易地、極為透徹地理解Linux內(nèi)核的經(jīng)典之作,也可能是當(dāng)前唯一能從本質(zhì)上指引我們?nèi)ピO(shè)計(jì)和開發(fā)擁有自主知識(shí)產(chǎn)權(quán)的操作系統(tǒng)的著作。它的出版也許會(huì)成為L(zhǎng)inux內(nèi)核研究領(lǐng)域的一個(gè)里程碑事件。
本書的最大特點(diǎn)是它的寫作方式和內(nèi)容組織方式,與同類書完全不同。它在深刻地分析了傳統(tǒng)講解方法的利弊之后,破舊立新,從認(rèn)知學(xué)的角度開創(chuàng)了一種全新的方式。以操作系統(tǒng)的真實(shí)運(yùn)行過程為主線,結(jié)合真實(shí)的內(nèi)核源代碼、349幅精確的內(nèi)核運(yùn)行時(shí)序圖和具有點(diǎn)睛之妙的文字說明,對(duì)操作系統(tǒng)從開機(jī)加電到系統(tǒng)完全準(zhǔn)備就緒的整個(gè)過程進(jìn)行了系統(tǒng)而完整地分析,深刻地揭示了其間每一個(gè)動(dòng)作的設(shè)計(jì)意圖和實(shí)現(xiàn)原理,完美地再現(xiàn)了操作系統(tǒng)設(shè)計(jì)者的設(shè)計(jì)思路。閱讀本書就如同跟隨著操作系統(tǒng)設(shè)計(jì)者一起去思考,我們會(huì)在閱讀的過程中發(fā)現(xiàn)Linux內(nèi)核設(shè)計(jì)的精妙,會(huì)發(fā)現(xiàn)原來處處都“暗藏玄機(jī)”,哪怕是一行很短的代碼。
本書在所有細(xì)節(jié)上都力求完美。為了保證知識(shí)的準(zhǔn)確性,操作系統(tǒng)運(yùn)行過程中的每個(gè)動(dòng)作都經(jīng)過了嚴(yán)格的考證;為了讓我們真正理解Linux內(nèi)核的原理,它突破傳統(tǒng),以Linux的真實(shí)運(yùn)行過程為主線進(jìn)行講解;為了做到真正易于理解,創(chuàng)新性地使用了圖解的方式,精心繪制了349幅分辨率600dpi的時(shí)序圖,圖中表現(xiàn)的運(yùn)行時(shí)結(jié)構(gòu)和狀態(tài)與操作系統(tǒng)實(shí)際運(yùn)行時(shí)的真實(shí)狀態(tài)完全吻合;為了提高閱讀體驗(yàn),本書采用了雙色印刷,以便于我們更清楚地觀察每一幅圖中的細(xì)節(jié)。

作者簡(jiǎn)介

新設(shè)計(jì)團(tuán)隊(duì)始于世紀(jì)之交,不斷發(fā)展、優(yōu)勝劣汰、適者生存、自然形成。團(tuán)隊(duì)始終不自量力地奉行高舉高打的策略,只對(duì)計(jì)算機(jī)領(lǐng)域中基礎(chǔ)的、有體系的事情感興趣,且只做自己感興趣的事。團(tuán)隊(duì)不相信二流水平、三流心態(tài),能作出世界頂級(jí)的工作。團(tuán)隊(duì)相信成功的決定因素是人,而不是物。團(tuán)隊(duì)對(duì)藝術(shù)、對(duì)鑒賞力、對(duì)欣賞品味、對(duì)一切美好的事物都有著近乎狂熱的追求。認(rèn)為科學(xué)、技術(shù)的最高境界是藝術(shù),認(rèn)為世界的本源是通的。團(tuán)隊(duì)崇尚理論體系、崇尚個(gè)性鮮明、崇尚獨(dú)立思考。“沒體系”是團(tuán)隊(duì)成員之間善意貶損的常用語,也是判斷一件事是否值得關(guān)注的標(biāo)準(zhǔn)之一。團(tuán)隊(duì)鄙視抄襲、弄虛作假。對(duì)別人熱炒、做熟的事情不感興趣,更不喜歡在別人的體系上狗尾續(xù)貂、移花接木,粉飾為“自主創(chuàng)新”。團(tuán)隊(duì)強(qiáng)調(diào)理論,注重實(shí)踐,講究科學(xué)的研究方法,不屈膝權(quán)威,不迷信盲從。提出基礎(chǔ)假設(shè),構(gòu)建邏輯自洽的體系,證偽、修正、再證偽、再修正,不斷推進(jìn)體系的完善。團(tuán)隊(duì)鉆研學(xué)術(shù),但決不死板,學(xué)術(shù)和商業(yè)結(jié)合,彼此互為推進(jìn),最終改變整個(gè)時(shí)代的商業(yè)格局,是團(tuán)隊(duì)追求的目標(biāo)。團(tuán)隊(duì)特別注重誠(chéng)信,提倡公平、公正。團(tuán)隊(duì)內(nèi)部是一方凈土,既相互競(jìng)爭(zhēng),又相互幫助、相互協(xié)作。團(tuán)隊(duì)成員都在高高興興做自己喜歡的、感興趣的事,沒有時(shí)間顧及其他。勾心斗角、爾虞我詐、溜須拍馬、拉幫結(jié)派……,在團(tuán)隊(duì)內(nèi)部沒有市場(chǎng)。團(tuán)隊(duì)在上述思想的指導(dǎo)下,研發(fā)了基于圖形、圖像(而非基于字符、語句)的圖示化程序設(shè)計(jì)集成開發(fā)環(huán)境,已成功的移植了linux 0.11,正確編譯,正確boot,正確運(yùn)行?,F(xiàn)在正在研發(fā)新的操作系統(tǒng),已初步實(shí)現(xiàn)了與現(xiàn)有的基于塊概念的文件系統(tǒng)有較大差異的新的文件系統(tǒng),據(jù)我們測(cè)試,相對(duì)于基于塊設(shè)備的文件系統(tǒng),在文件的讀寫速度上有較大優(yōu)勢(shì)?!禠inux內(nèi)核設(shè)計(jì)的藝術(shù)》一書,體現(xiàn)了我們?cè)O(shè)計(jì)新操作系統(tǒng)的過程中,對(duì)操作系統(tǒng)的理解??赡茉诓痪玫膶?,我們也將我們?cè)谠O(shè)計(jì)圖示化程序設(shè)計(jì)平臺(tái)中,對(duì)編譯原理的理解,奉獻(xiàn)給廣大讀者。

書籍目錄

前言
第1章 從開機(jī)加電到執(zhí)行main函數(shù)之前的過程1
1.1 啟動(dòng)BIOS,準(zhǔn)備實(shí)模式下的中斷向量表和中斷服務(wù)程序1
1.1.1 BIOS的啟動(dòng)原理2
1.1.2 BIOS在內(nèi)存中加載中斷向量表和中斷服務(wù)程序3
1.2 加載操作系統(tǒng)內(nèi)核程序并為保護(hù)模式做準(zhǔn)備4
1.2.1 加載第一部分代碼—引導(dǎo)程序(bootsect)5
1.2.2 加載第二部分代碼—setup7
1.2.3 加載第三部分代碼—system模塊12
1.3 開始向32位模式轉(zhuǎn)變,為main函數(shù)的調(diào)用做準(zhǔn)備16
1.3.1 關(guān)中斷并將system移動(dòng)到內(nèi)存地址起始位置0x0000016
1.3.2 設(shè)置中斷描述符表和全局描述符表18
1.3.3 打開A20,實(shí)現(xiàn)32位尋址20
1.3.4 為在保護(hù)模式下執(zhí)行head.s做準(zhǔn)備21
1.3.5 head.s開始執(zhí)行24
1.4 本章小結(jié)41
第2章 從main到怠速42
2.1 開中斷之前的準(zhǔn)備工作43
2.1.1 復(fù)制根設(shè)備號(hào)和硬盤參數(shù)表 44
2.1.2 物理內(nèi)存規(guī)劃格局45
2.1.3 虛擬盤設(shè)置與初始化46
2.1.4 內(nèi)存管理結(jié)構(gòu)mem_map初始化47
2.1.5 異常處理類中斷服務(wù)程序掛接48
2.1.6 初始化塊設(shè)備請(qǐng)求項(xiàng)結(jié)構(gòu)50
2.1.7 與建立人機(jī)交互界面相關(guān)的外設(shè)的中斷服務(wù)程序掛接52
2.1.8 開機(jī)啟動(dòng)時(shí)間設(shè)置55
2.1.9 系統(tǒng)開始激活進(jìn)程056
2.1.10 進(jìn)程相關(guān)事務(wù)初始化設(shè)置57
2.1.11 時(shí)鐘中斷設(shè)置59
2.1.12 系統(tǒng)調(diào)用服務(wù)程序掛接59
2.1.13 初始化緩沖區(qū)管理結(jié)構(gòu)61
2.1.14 初始化硬盤63
2.1.15 初始化軟盤65
2.1.16 開中斷66
2.2 進(jìn)程創(chuàng)建的最基本動(dòng)作67
2.2.1 操作系統(tǒng)為進(jìn)程0創(chuàng)建進(jìn)程1做準(zhǔn)備67
2.2.2 在進(jìn)程槽中為進(jìn)程1 申請(qǐng)一個(gè)空閑位置并獲取進(jìn)程號(hào)71
2.2.3 復(fù)制進(jìn)程信息之前,先將一些數(shù)據(jù)壓棧73
2.2.4 初步設(shè)置進(jìn)程1管理結(jié)構(gòu)74
2.2.5 進(jìn)程0創(chuàng)建進(jìn)程1的過程中發(fā)生時(shí)鐘中斷76
2.2.6 從時(shí)鐘中斷返回78
2.2.7 調(diào)整進(jìn)程1管理結(jié)構(gòu)79
2.2.8 設(shè)置進(jìn)程1的線性地址空間及物理頁(yè)面81
2.2.9 繼續(xù)調(diào)整進(jìn)程1管理結(jié)構(gòu)84
2.2.10 操作系統(tǒng)如何區(qū)分進(jìn)程0和進(jìn)程187
2.2.11 進(jìn)程0準(zhǔn)備切換到進(jìn)程189
2.2.12 系統(tǒng)切換到進(jìn)程1執(zhí)行90
2.3 加載根文件系統(tǒng)92
2.3.1 進(jìn)程1如何開始執(zhí)行96
2.3.2 進(jìn)程1開始執(zhí)行98
2.3.3 進(jìn)程1開始以數(shù)據(jù)塊的形式操作硬盤99
2.3.4 將找到的緩沖塊與請(qǐng)求項(xiàng)掛接101
2.3.5 將請(qǐng)求項(xiàng)與硬盤處理函數(shù)掛接104
2.3.6 進(jìn)行硬盤讀盤前的準(zhǔn)備工作105
2.3.7 給硬盤下達(dá)讀盤指令106
2.3.8 進(jìn)程1由于等待讀盤操作掛起107
2.3.9 系統(tǒng)切換到進(jìn)程0執(zhí)行109
2.3.10 進(jìn)程0的執(zhí)行過程110
2.3.11 進(jìn)程0執(zhí)行過程中發(fā)生硬盤中斷111
2.3.12 硬盤中斷服務(wù)程序響應(yīng)后,進(jìn)程0繼續(xù)執(zhí)行113
2.3.13 再次響應(yīng)硬盤中斷并喚醒進(jìn)程1114
2.3.14 讀盤操作完成后,進(jìn)程1繼續(xù)執(zhí)行116
2.3.15 進(jìn)程1繼續(xù)設(shè)置硬盤管理結(jié)構(gòu)117
2.3.16 進(jìn)程1獲取軟盤超級(jí)塊,為加載根文件系統(tǒng)做準(zhǔn)備118
2.3.17 進(jìn)程1備份超級(jí)塊數(shù)據(jù)119
2.3.18 進(jìn)程1將根文件系統(tǒng)從軟盤拷貝到虛擬盤120
2.3.19 進(jìn)程1開始加載根文件系統(tǒng)122
2.3.20 進(jìn)程1準(zhǔn)備加載根文件系統(tǒng)超級(jí)塊123
2.3.21 進(jìn)程1加載根文件系統(tǒng)超級(jí)塊124
2.3.22 進(jìn)程1繼續(xù)加載根文件系統(tǒng)126
2.3.23 進(jìn)程1準(zhǔn)備讀取根目錄i節(jié)點(diǎn)127
2.3.24 進(jìn)程1加載根目錄i節(jié)點(diǎn)128
2.3.25 進(jìn)程1結(jié)束加載根文件系統(tǒng)的過程129
2.4 打開終端設(shè)備文件及復(fù)制文件句柄131
2.4.1 進(jìn)程1與內(nèi)核文件表掛接,為打開文件做準(zhǔn)備133
2.4.2 確定打開操作的起點(diǎn)135
2.4.3 獲得枝梢i節(jié)點(diǎn)—dev目錄文件的i節(jié)點(diǎn)136
2.4.4 確定dev目錄文件i節(jié)點(diǎn)為枝梢i節(jié)點(diǎn)137
2.4.5 繼續(xù)返回枝梢i節(jié)點(diǎn)138
2.4.6 查找tty0文件的i節(jié)點(diǎn)138
2.4.7 將tty0設(shè)備文件的i節(jié)點(diǎn)返回給sys_open系統(tǒng)調(diào)用 139
2.4.8 分析tty0文件i節(jié)點(diǎn)140
2.4.9 設(shè)置文件管理結(jié)構(gòu)并返回給用戶進(jìn)程141
2.4.10 進(jìn)程1復(fù)制tty0文件句柄142
2.4.11 進(jìn)程1繼續(xù)復(fù)制tty0文件句柄144
2.5 創(chuàng)建進(jìn)程2145
2.5.1 進(jìn)程1準(zhǔn)備創(chuàng)建進(jìn)程2145
2.5.2 復(fù)制進(jìn)程2管理結(jié)構(gòu)并進(jìn)行調(diào)整146
2.5.3 設(shè)置進(jìn)程2的頁(yè)目錄項(xiàng)并復(fù)制進(jìn)程2的頁(yè)表146
2.5.4 調(diào)整進(jìn)程2管理結(jié)構(gòu)中與文件有關(guān)的內(nèi)容146
2.5.5 進(jìn)程1執(zhí)行過程中發(fā)生時(shí)鐘中斷148
2.5.6 進(jìn)程1從時(shí)鐘中斷返回,準(zhǔn)備切換到進(jìn)程2150
2.6 進(jìn)程1等待進(jìn)程2退出150
2.6.1 進(jìn)程1查找它自己的子進(jìn)程151
2.6.2 對(duì)進(jìn)程2的狀態(tài)進(jìn)行處理151
2.6.3 切換到進(jìn)程2執(zhí)行153
2.7 shell程序的加載154
2.7.1 進(jìn)程2開始執(zhí)行156
2.7.2 為打開/etc/rc文件做準(zhǔn)備156
2.7.3 進(jìn)程2打開“/etc/rc”配置文件157
2.7.4 通過壓棧為加載shell文件做準(zhǔn)備158
2.7.5 為參數(shù)和環(huán)境變量設(shè)置做準(zhǔn)備159
2.7.6 得到shell文件的i節(jié)點(diǎn)160
2.7.7 為加載參數(shù)和環(huán)境變量做準(zhǔn)備161
2.7.8 根據(jù)i節(jié)點(diǎn),對(duì)shell文件進(jìn)行檢測(cè)162
2.7.9 檢測(cè)shell文件頭163
2.7.10 備份文件頭并進(jìn)行分析163
2.7.11 對(duì)shell文件進(jìn)行進(jìn)一步分析165
2.7.12 拷貝參數(shù)和環(huán)境變量166
2.7.13 調(diào)整進(jìn)程2的管理結(jié)構(gòu)167
2.7.14 繼續(xù)調(diào)整進(jìn)程2管理結(jié)構(gòu)168
2.7.15 釋放進(jìn)程2繼承的頁(yè)面169
2.7.16 檢測(cè)協(xié)處理器170
2.7.17 調(diào)整shell程序所在的線性空間地址171
2.7.18 為shell程序準(zhǔn)備參數(shù)和環(huán)境變量172
2.7.19 繼續(xù)調(diào)整進(jìn)程2管理結(jié)構(gòu)173
2.7.20 調(diào)整EIP,使其指向shell程序入口地址173
2.7.21 shell程序執(zhí)行引發(fā)缺頁(yè)中斷175
2.7.22 缺頁(yè)中斷中shell程序加載前的檢測(cè)175
2.7.23 為即將載入的內(nèi)容申請(qǐng)頁(yè)面177
2.7.24 將shell程序載入新獲得的頁(yè)面177
2.7.25 根據(jù)shell程序的情況,調(diào)整頁(yè)面的內(nèi)容178
2.7.26 將線性地址空間與程序所在的物理頁(yè)面對(duì)應(yīng)179
2.8 系統(tǒng)實(shí)現(xiàn)怠速180
2.8.1 shell進(jìn)程準(zhǔn)備創(chuàng)建update進(jìn)程180
2.8.2 進(jìn)程2開始執(zhí)行/etc/rc文件181
2.8.3 準(zhǔn)備加載update進(jìn)程181
2.8.4 update進(jìn)程的作用182
2.8.5 shell程序檢測(cè)“/etc/rc”文件183
2.8.6 shell進(jìn)程退出184
2.8.7 shell進(jìn)程退出善后處理185
2.8.8 進(jìn)程1清理shell進(jìn)程管理結(jié)構(gòu)187
2.8.9 系統(tǒng)開始重建shell190
2.8.10 shell進(jìn)程為何不會(huì)再次退出192
2.9 小結(jié)194
第3章 安裝文件系統(tǒng)195
3.1 獲取硬盤設(shè)備號(hào)196
3.1.1 用戶發(fā)出安裝硬盤文件系統(tǒng)指令196
3.1.2 從分析路徑開始,準(zhǔn)備查找hd1設(shè)備的掛接點(diǎn)197
3.1.3 以根目錄i節(jié)點(diǎn)為依托,得到dev目錄文件的i節(jié)點(diǎn)197
3.1.4 從dev目錄文件中找到代表hd1設(shè)備文件的目錄項(xiàng)198
3.1.5 得到hd1設(shè)備文件的i節(jié)點(diǎn)號(hào)199
3.1.6 釋放dev目錄文件的相關(guān)內(nèi)容200
3.1.7 得到hd1設(shè)備文件的i節(jié)點(diǎn)200
3.1.8 獲得hd1設(shè)備的設(shè)備號(hào)200
3.1.9 釋放hd1設(shè)備文件的i節(jié)點(diǎn)201
3.2 獲取虛擬盤上的掛接點(diǎn)202
3.3 得到hd1設(shè)備文件的超級(jí)塊202
3.3.1 準(zhǔn)備讀取hd1設(shè)備文件超級(jí)塊203
3.3.2 為hd1設(shè)備文件的超級(jí)塊找到存儲(chǔ)位置203
3.3.3 初始化空閑超級(jí)塊并加鎖203
3.3.4 從硬盤獲得hd1設(shè)備文件的超級(jí)塊204
3.3.5 加載邏輯塊位圖和i節(jié)點(diǎn)位圖205
3.4 將hd1設(shè)備文件與mnt目錄文件的i節(jié)點(diǎn)掛接206
3.5 小結(jié)207
第4章 文件操作208
4.1 打開文件211
4.1.1 用戶程序調(diào)用open庫(kù)函數(shù)產(chǎn)生軟中斷212
4.1.2 建立用戶進(jìn)程與文件管理表的關(guān)系213
4.1.3 從硬盤上獲取helloc.txt文件的i節(jié)點(diǎn)214
4.1.4 將helloc.txt文件與文件管理表相掛接226
4.2 讀文件227
4.2.1 為按照用戶要求讀入文件做準(zhǔn)備228
4.2.2 確定要讀入的數(shù)據(jù)塊的位置230
4.2.3 將指定的數(shù)據(jù)塊從硬盤讀入到高速緩沖塊233
4.2.4 將數(shù)據(jù)拷貝到用戶指定的內(nèi)存234
4.3 新建文件237
4.3.1 查找路徑“/mnt/user/hello.txt”238
4.3.2 為hello.txt文件新建一個(gè)i節(jié)點(diǎn)240
4.3.3 為hello.txt文件新建目錄項(xiàng)242
4.3.4 完成hello.txt新建操作并返回給用戶進(jìn)程245
4.4 寫文件246
4.4.1 文件寫入前的準(zhǔn)備工作248
4.4.2 確定hello.txt文件的寫入位置249
4.4.3 為數(shù)據(jù)的寫入申請(qǐng)緩沖塊252
4.4.4 將指定的寫入數(shù)據(jù)從用戶數(shù)據(jù)區(qū)拷貝到緩沖塊253
4.4.5 數(shù)據(jù)同步到硬盤的方法1255
4.4.6 將文件寫入硬盤的情況2257
4.5 修改文件260
4.5.1 對(duì)文件的當(dāng)前操作指針進(jìn)行重定位261
4.5.2 對(duì)文件進(jìn)行修改261
4.6 關(guān)閉文件263
4.6.1 當(dāng)前進(jìn)程與文件管理表“脫鉤”264
4.6.2 將文件管理表中hello.txt對(duì)應(yīng)的引用次數(shù)減1265
4.6.3 hello.txt文件與文件管理表“脫鉤”266
4.7 刪除文件268
4.7.1 系統(tǒng)準(zhǔn)備刪除hello.txt文件268
4.7.2 刪除hello.txt文件在硬盤上對(duì)應(yīng)的數(shù)據(jù)和i節(jié)點(diǎn)270
4.7.3 對(duì)hello.txt文件所在的user目錄做處理275
4.8 本章小結(jié)275
第5章 用戶進(jìn)程與內(nèi)存管理277
5.1 用戶進(jìn)程的創(chuàng)建277
5.1.1 為創(chuàng)建進(jìn)程str1準(zhǔn)備條件277
5.1.2 為str1進(jìn)程管理結(jié)構(gòu)找到存儲(chǔ)空間279
5.1.3 復(fù)制str1進(jìn)程管理結(jié)構(gòu)281
5.1.4 確定str1進(jìn)程在線性空間中的位置282
5.1.5 復(fù)制str1進(jìn)程頁(yè)表并設(shè)置其對(duì)應(yīng)的頁(yè)目錄項(xiàng)283
5.1.6 調(diào)整str1進(jìn)程中與文件相關(guān)的結(jié)構(gòu)285
5.1.7 建立str1進(jìn)程與全局描述符表GDT的關(guān)聯(lián)286
5.1.8 將str1進(jìn)程設(shè)為就緒態(tài)287
5.2 為用戶進(jìn)程str1的加載做準(zhǔn)備288
5.2.1 為str1進(jìn)程加載自身對(duì)應(yīng)的程序做準(zhǔn)備288
5.2.2 讀取str1可執(zhí)行文件的i節(jié)點(diǎn)并統(tǒng)計(jì)參數(shù)和環(huán)境變量289
5.2.3 讀取str1可執(zhí)行文件的文件頭290
5.2.4 對(duì)str1可執(zhí)行程序文件頭進(jìn)行分析291
5.2.5 拷貝str1可執(zhí)行程序的參數(shù)和環(huán)境變量292
5.2.6 調(diào)整str1進(jìn)程管理結(jié)構(gòu)中可執(zhí)行程序?qū)?yīng)的i節(jié)點(diǎn)292
5.2.7 繼續(xù)調(diào)整str1進(jìn)程管理結(jié)構(gòu)—文件和信號(hào)相關(guān)的字段293
5.2.8 釋放str1進(jìn)程的頁(yè)表294
5.2.9 重新設(shè)置str1的程序代碼段和數(shù)據(jù)段295
5.2.10 創(chuàng)建環(huán)境變量和參數(shù)指針表296
5.2.11 繼續(xù)根據(jù)str1可執(zhí)行程序情況調(diào)整str1進(jìn)程管理結(jié)構(gòu)297
5.2.12 設(shè)置str1可執(zhí)行程序的棧指針和eip值297
5.3 對(duì)缺頁(yè)中斷的處理298
5.3.1 產(chǎn)生缺頁(yè)中斷并由操作系統(tǒng)響應(yīng)298
5.3.2 為str1程序申請(qǐng)一個(gè)內(nèi)存頁(yè)面299
5.3.3 將str1程序加載到新分配的頁(yè)面中300
5.3.4 檢測(cè)是否需要對(duì)頁(yè)面剩余空間清0300
5.3.5 將str1程序占用的物理內(nèi)存地址與str1進(jìn)程的線性地址空間對(duì)應(yīng)301
5.3.6 不斷通過缺頁(yè)中斷加載str1程序的全部?jī)?nèi)容301
5.3.7 str1程序需要壓棧302
5.3.8 str1程序第一次調(diào)用foo程序壓棧302
5.3.9 str1程序第二次壓棧,產(chǎn)生缺頁(yè)中斷302
5.3.10 處理str1程序第二次壓棧產(chǎn)生的缺頁(yè)中斷302
5.3.11 str1程序繼續(xù)執(zhí)行,反復(fù)壓棧并產(chǎn)生缺頁(yè)中斷303
5.3.12 str1程序運(yùn)行結(jié)束后清棧303
5.4 str1用戶進(jìn)程的退出305
5.4.1 str1進(jìn)程準(zhǔn)備退出305
5.4.2 釋放str1程序所占頁(yè)面305
5.4.3 解除str1程序與文件有關(guān)的內(nèi)容并給父進(jìn)程發(fā)信號(hào)306
5.4.4 str1程序退出后執(zhí)行進(jìn)程調(diào)度307
5.5 多個(gè)用戶進(jìn)程“同時(shí)”運(yùn)行308
5.5.1 依次創(chuàng)建str1、str2和str3進(jìn)程308
5.5.2 str1進(jìn)程壓棧的執(zhí)行效果309
5.5.3 str1運(yùn)行過程中產(chǎn)生時(shí)鐘中斷并切換到str2執(zhí)行309
5.5.4 str2執(zhí)行過程遇到時(shí)鐘中斷切換到str3執(zhí)行310
5.5.5 三個(gè)程序執(zhí)行一段時(shí)間后在主內(nèi)存的分布格局311
5.6 進(jìn)程的調(diào)度與切換311
5.6.1 str1剛被shell創(chuàng)建并處于就緒態(tài)311
5.6.2 shell進(jìn)程將自己掛起,然后準(zhǔn)備切換到str1執(zhí)行311
5.6.3 準(zhǔn)備切換到str1進(jìn)程執(zhí)行312
5.6.4 str1執(zhí)行時(shí)發(fā)生時(shí)鐘中斷314
5.6.5 時(shí)鐘中斷遞減str1運(yùn)行的時(shí)間片315
5.6.6 str1執(zhí)行一段時(shí)間后掛起,shell進(jìn)程新建str2進(jìn)程315
5.6.7 str2運(yùn)行期間發(fā)生時(shí)鐘中斷316
5.6.8 系統(tǒng)切換到str1程序執(zhí)行317
5.7 內(nèi)核的分頁(yè)318
5.7.1 為設(shè)置內(nèi)核的頁(yè)目錄表和頁(yè)表做準(zhǔn)備—所占空間清0318
5.7.2 設(shè)置內(nèi)核對(duì)應(yīng)的頁(yè)目錄項(xiàng)和頁(yè)表項(xiàng)的內(nèi)容319
5.7.3 設(shè)置內(nèi)核對(duì)應(yīng)的全局描述符表GDT320
5.8 頁(yè)寫保護(hù)321
5.8.1 進(jìn)程A和進(jìn)程B共享頁(yè)面321
5.8.2 進(jìn)程A準(zhǔn)備進(jìn)行壓棧操作322
5.8.3 進(jìn)程A的壓棧動(dòng)作引發(fā)頁(yè)寫保護(hù)322
5.8.4 將進(jìn)程A的頁(yè)表指向新申請(qǐng)的頁(yè)面323
5.8.5 拷貝原頁(yè)面內(nèi)容到進(jìn)程A新申請(qǐng)的頁(yè)面324
5.8.6 進(jìn)程B準(zhǔn)備操作共享頁(yè)面325
5.8.7 假設(shè)進(jìn)程B先執(zhí)行壓棧操作的情況325
5.9 小結(jié)326
第6章 多個(gè)進(jìn)程“同時(shí)”操作一個(gè)文件327
6.1 三個(gè)進(jìn)程操作同一個(gè)文件327
6.1.1 進(jìn)程A執(zhí)行,hello.txt文件被打開328
6.1.2 進(jìn)程A讀取hello.txt文件并由于等待硬盤中斷而被系統(tǒng)掛起328
6.1.3 進(jìn)程B準(zhǔn)備打開hello.txt文件330
6.1.4 系統(tǒng)準(zhǔn)備為進(jìn)程B獲取hello.txt文件的i節(jié)點(diǎn)332
6.1.5 系統(tǒng)找到hello.txt文件已經(jīng)載入的i節(jié)點(diǎn)333
6.1.6 系統(tǒng)準(zhǔn)備為進(jìn)程B從硬盤上讀取hello.txt文件334
6.1.7 系統(tǒng)找到了正在操作的緩沖塊,將進(jìn)程B掛起335
6.1.8 系統(tǒng)再次切換到進(jìn)程0執(zhí)行337
6.1.9 進(jìn)程C啟動(dòng)并打開hello.txt文件337
6.1.10 進(jìn)程C也由于等待緩沖塊解鎖而被系統(tǒng)掛起338
6.1.11 緩沖塊解鎖后先喚醒進(jìn)程C339
6.1.12 系統(tǒng)將進(jìn)程B設(shè)為就緒狀態(tài)340
6.1.13 系統(tǒng)將指定數(shù)據(jù)寫入緩沖塊341
6.1.14 寫入完成后,進(jìn)程C繼續(xù)執(zhí)行341
6.1.15 進(jìn)程C準(zhǔn)備切換到進(jìn)程B342
6.1.16 進(jìn)程C切換到進(jìn)程B執(zhí)行,進(jìn)程B喚醒進(jìn)程A342
6.1.17 進(jìn)程B不斷執(zhí)行,直到時(shí)間片減為0后切換到進(jìn)程A執(zhí)行343
6.1.18 進(jìn)程A、B、C退出,寫入數(shù)據(jù)由update進(jìn)程同步344
6.2 緩沖區(qū)與外設(shè)的數(shù)據(jù)同步344
6.2.1 系統(tǒng)不斷為進(jìn)程A向緩沖區(qū)寫入數(shù)據(jù)346
6.2.2 繼續(xù)執(zhí)行引發(fā)緩沖塊數(shù)據(jù)需要同步346
6.2.3 將緩沖區(qū)中的數(shù)據(jù)同步到硬盤上347
6.2.4 進(jìn)程A由于等待空閑請(qǐng)求項(xiàng)而被系統(tǒng)掛起349
6.2.5 進(jìn)程B開始執(zhí)行350
6.2.6 進(jìn)程B也被掛起351
6.2.7 進(jìn)程C開始執(zhí)行并隨后被掛起352
6.2.8 進(jìn)程A和進(jìn)程C均被喚醒352
6.2.9 進(jìn)程B切換到進(jìn)程A執(zhí)行354
6.3 小結(jié)356
第7章 IPC問題358
7.1 管道機(jī)制358
7.1.1 為管道文件在文件管理表中申請(qǐng)空閑項(xiàng)360
7.1.2 為管道文件與進(jìn)程建立聯(lián)系創(chuàng)造條件360
7.1.3 創(chuàng)建管道文件i節(jié)點(diǎn)361
7.1.4 將管道文件i節(jié)點(diǎn)與文件管理表建立聯(lián)系362
7.1.5 將管道文件句柄返回給用戶進(jìn)程363
7.1.6 讀管道進(jìn)程開始操作管道文件363
7.1.7 寫管道進(jìn)程向管道中寫入數(shù)據(jù)364
7.1.8 寫管道進(jìn)程繼續(xù)向管道寫入數(shù)據(jù)366
7.1.9 寫管道進(jìn)程已將管道空間寫滿366
7.1.10 寫管道進(jìn)程掛起366
7.1.11 讀管道進(jìn)程從管道中讀出數(shù)據(jù)367
7.1.12 讀管道進(jìn)程繼續(xù)執(zhí)行,不斷從管道中讀出數(shù)據(jù)369
7.1.13 讀管道進(jìn)程執(zhí)行中發(fā)生時(shí)鐘中斷369
7.1.14 讀管道進(jìn)程執(zhí)行過程中再次發(fā)生時(shí)鐘中斷370
7.1.15 讀管道進(jìn)程切換到寫管道進(jìn)程執(zhí)行371
7.1.16 寫管道進(jìn)程掛起切換到讀管道進(jìn)程執(zhí)行371
7.1.17 讀管道進(jìn)程繼續(xù)執(zhí)行,直到把管道中的數(shù)據(jù)讀完372
7.1.18 讀取完成后,讀進(jìn)程掛起,寫進(jìn)程繼續(xù)執(zhí)行373
7.2 信號(hào)機(jī)制374
7.2.1 processig進(jìn)程開始執(zhí)行376
7.2.2 processig進(jìn)程進(jìn)入可中斷等待狀態(tài)377
7.2.3 sendsig進(jìn)程開始執(zhí)行并向processig進(jìn)程發(fā)信號(hào)379
7.2.4 系統(tǒng)檢測(cè)當(dāng)前進(jìn)程接收到信號(hào)并準(zhǔn)備處理381
7.2.5 系統(tǒng)檢測(cè)信號(hào)處理函數(shù)指針掛接是否正常382
7.2.6 調(diào)整processig進(jìn)程的內(nèi)核棧結(jié)構(gòu),使之先執(zhí)行信號(hào)處理函數(shù)383
7.2.7 信號(hào)對(duì)進(jìn)程執(zhí)行狀態(tài)的影響386
7.3 小結(jié)393
第8章 操作系統(tǒng)的設(shè)計(jì)指導(dǎo)思想395
8.1 運(yùn)行一個(gè)最簡(jiǎn)單的程序,看操作系統(tǒng)為程序運(yùn)行做了哪些工作395
8.2 操作系統(tǒng)的設(shè)計(jì)指導(dǎo)思想—主奴機(jī)制398
8.2.1 主奴機(jī)制中的進(jìn)程及進(jìn)程創(chuàng)建機(jī)制399
8.2.2 操作系統(tǒng)在內(nèi)存管理中的主奴機(jī)制400
8.2.3 操作系統(tǒng)在文件系統(tǒng)中體現(xiàn)的主奴機(jī)制401
8.3 實(shí)現(xiàn)主奴機(jī)制的三種關(guān)鍵技術(shù)402
8.3.1 保護(hù)和分頁(yè)402
8.3.2 特權(quán)級(jí)405
8.3.3 中斷405
8.4 建立主奴機(jī)制的決定性因素—先機(jī)407
8.5 軟件和硬件的關(guān)系:主機(jī)與進(jìn)程、外設(shè)與文件408
8.5.1 非用戶進(jìn)程—進(jìn)程0、進(jìn)程1、shell進(jìn)程408
8.5.2 文件與數(shù)據(jù)存儲(chǔ)409
8.6 父子進(jìn)程共享頁(yè)面414
8.7 操作系統(tǒng)的全局中斷與進(jìn)程的局部中斷—信號(hào)414
8.8 小結(jié)415
結(jié)束語415
“新設(shè)計(jì)團(tuán)隊(duì)”簡(jiǎn)介416
附錄 搭建Linux 0.11系統(tǒng)環(huán)境421

編輯推薦

《Linux內(nèi)核設(shè)計(jì)的藝術(shù):圖解Linux操作系統(tǒng)架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)原理》對(duì)操作系統(tǒng)內(nèi)核的駕馭能力和深刻理解程度達(dá)到世界頂尖級(jí)水平,是一本能真正引導(dǎo)你深入理解Linux內(nèi)核設(shè)計(jì)思想的經(jīng)典著作。結(jié)合真實(shí)的源碼、349幅內(nèi)核運(yùn)行時(shí)序圖和詳細(xì)的文字描述,以一種開創(chuàng)性的方式對(duì)Linux內(nèi)核進(jìn)行了極為直觀和透徹地闡述,讀者可通過閱讀本書提出自己的設(shè)計(jì)思想。

圖書封面

圖書標(biāo)簽Tags

評(píng)論、評(píng)分、閱讀與下載


    Linux內(nèi)核設(shè)計(jì)的藝術(shù) PDF格式下載


用戶評(píng)論 (總計(jì)135條)

 
 

  •   Linux是一種自由和開放源碼的類Unix操作系統(tǒng)。目前存在著許多不同的Linux,但它們都使用了Linux內(nèi)核。Linux可安裝在各種計(jì)算機(jī)硬件設(shè)備中,從手機(jī)、平板電腦、路由器和視頻游戲控制臺(tái),到臺(tái)式計(jì)算機(jī)、大型機(jī)和超級(jí)計(jì)算機(jī)。Linux是一個(gè)領(lǐng)先的操作系統(tǒng),世界上運(yùn)算最快的10臺(tái)超級(jí)計(jì)算機(jī)運(yùn)行的都是Linux操作系統(tǒng)。嚴(yán)格來講,Linux這個(gè)詞本身只表示Linux內(nèi)核,但實(shí)際上人們已經(jīng)習(xí)慣了用Linux來形容整個(gè)基于Linux內(nèi)核,并且使用GNU 工程各種工具和數(shù)據(jù)庫(kù)的操作系統(tǒng)。Linux得名于計(jì)算機(jī)業(yè)余愛好者Linus Torvalds。
    Linux 操作系統(tǒng)是UNIX 操作系統(tǒng)的一種克隆系統(tǒng)。它誕生于1991 年的10 月5 日(這是第一次正式向外公布的時(shí)間)。以后借助于Inter*** 網(wǎng)絡(luò),并經(jīng)過全世界各地計(jì)算機(jī)愛好者的共同努力下,現(xiàn)已成為今天世界上使用最多的一種UNIX 類操作系統(tǒng),并且使用人數(shù)還在迅猛增長(zhǎng)。   Linux 操作系統(tǒng)的誕生、發(fā)展和成長(zhǎng)過程始終依賴著以下五個(gè)重要支柱:UNIX 操作系統(tǒng)、MINIX 操作系統(tǒng)、GNU 計(jì)劃、POSIX 標(biāo)準(zhǔn)和Inter*** 網(wǎng)絡(luò)。   下面主要根據(jù)這五個(gè)基本線索來追尋一下Linux 的開發(fā)歷程,它的醞釀過程,最初的發(fā)展經(jīng)歷。首先分別介紹其中的四個(gè)基本要素(UNIX、MINIX、GNU 和POSIX,Inter*** 的重要性顯而易見,所以不用對(duì)其羅嗦),然后根據(jù)Linux 的創(chuàng)始人Linus Torvalds 從對(duì)計(jì)算機(jī)感興趣而自學(xué)計(jì)算機(jī)知識(shí),到心里開始醞釀編制一個(gè)自己的操作系統(tǒng),到最初Linux 內(nèi)核0.01 版公布,以及從此如何艱難地一步一個(gè)腳印地在全世界hacker 的幫助下最后推出比較完善的1.0 版本這段時(shí)間的發(fā)展經(jīng)過,也即對(duì)Linux 的早期發(fā)展歷史進(jìn)行詳細(xì)介紹。
  •   本來以為是近期的操作系統(tǒng),拿到書發(fā)現(xiàn)是0.11版的原始linux內(nèi)核。該書從機(jī)器上電,每時(shí)每刻內(nèi)存的所有使用情況,事無巨細(xì)的用等比例圖表示,非常少見的寫法,不過真的很適合學(xué)習(xí)。
  •   正如作者所說 操作系統(tǒng)重要是全面的了解 而不應(yīng)該居于細(xì)節(jié)
    書中研究的linux是 2點(diǎn)幾版本的 內(nèi)核只有2萬行
    插圖非常精美 非常多
    字體印刷業(yè)精美 強(qiáng)烈建議購(gòu)買
  •   以圖文的方式進(jìn)行講解,配合者圖片能夠更加清楚的理解書中所講的內(nèi)容,如果對(duì)于Linux內(nèi)核感興趣,這本書應(yīng)該是必選的一本書.
  •   詳細(xì)講解了linux內(nèi)核設(shè)計(jì)方法,不錯(cuò)!
  •   本文的思路是一條主線貫穿整個(gè)Linux內(nèi)核,這不但學(xué)習(xí)了內(nèi)核的知識(shí),同時(shí)也學(xué)習(xí)了如何閱讀別的開源代碼??傊?,值得一讀。
  •   好書,內(nèi)容很好,經(jīng)典,和《linux內(nèi)核完全注釋》一起看會(huì)更好
  •   本書適合linux內(nèi)核編程入門,與linux內(nèi)核剖析(趙炯)結(jié)合學(xué)習(xí)效果更佳。建議廣大志同道和之人積極學(xué)習(xí)。此外本書得到歐美眾多教師及讀者的高度好評(píng),這是中國(guó)的驕傲。強(qiáng)烈推薦。
  •   第一次發(fā)現(xiàn)國(guó)內(nèi)也有人能將linux內(nèi)核講得這么好。
  •   很不錯(cuò)的linux內(nèi)核講解書籍
  •   圖文并茂,很形象的講解linux內(nèi)核。
  •   很好,對(duì)于學(xué)習(xí)Linux內(nèi)核很有幫助...
  •   講解深?yuàn)W,能幫助linux愛好者對(duì)操作系統(tǒng)有個(gè)更加形象的理解
  •   書中的圖對(duì)初學(xué)者極具參考價(jià)值,也是0.11的,可以與趙炯的《linux源碼剖析》一起參看。不過自我吹水的詞有點(diǎn)惡,現(xiàn)在計(jì)算機(jī)界盛行吹水之風(fēng),大師都是至少的用詞了,創(chuàng)造的一些專業(yè)用詞 怠速、主奴 并非沒有已有的相近的詞語,作為獨(dú)創(chuàng)成分大可不必
  •   學(xué)習(xí)linux0.11不錯(cuò)的一本書,不僅是操作系統(tǒng)學(xué)到手,連c語言的種種難懂的知識(shí)也講了不少,推薦
  •   從頭開始~~從啟動(dòng)開始~一點(diǎn)點(diǎn)解釋了內(nèi)核原理~~豐富的圖解是本書的精華
  •   很好的一本書 把linux0.11的設(shè)計(jì)思想很好的寫了出來
  •   必讀,學(xué)習(xí)linux 的必讀書籍,了解系統(tǒng)工作的一些知識(shí)
  •   內(nèi)容闡述清楚,是學(xué)習(xí)內(nèi)核的不錯(cuò)的參考材料
  •   剛買了三天,讓我了解的linux的詳細(xì)啟動(dòng)過程。希望之后的內(nèi)容更實(shí)用。
  •   很不錯(cuò)的內(nèi)核學(xué)習(xí)書,暑假好好研究研究!
  •   詳細(xì)描述了操作系統(tǒng)實(shí)現(xiàn)機(jī)制,圖文結(jié)合,容易閱讀
  •   昨天下午6點(diǎn)拿到書的,本打算瀏覽一番再說,但從導(dǎo)讀一看,便不能釋書了,一口氣看了2多小時(shí),直到遇到一些不能理解的匯編語言,書中內(nèi)容和排版不類同于常見的講解操作系統(tǒng)的圖書,可謂匠心獨(dú)運(yùn),意蘊(yùn)深藏,是中國(guó)原創(chuàng)圖書之中的精品之精品。
  •   圖形化語言在很大程度上使得理解linux更為簡(jiǎn)單
  •   配和趙炯的內(nèi)核剖析,互相印證看,效果好
  •   里面的確有很多圖片,非常直觀,能很好地幫助你理解操作系統(tǒng)的整個(gè)加載過程。
  •   我所接觸的第一本從機(jī)理上討論LINUX的書,很不錯(cuò),紙張都彩印,很有奢華的感覺,400來頁(yè);但能學(xué)到東西才是最重要的。給五分,希望第二版能有更多內(nèi)容,如果可以選用普印就行了,雖然是圖文并茂的書籍。
  •   確實(shí)非常好,閱讀此書最好要先讀懂操作系統(tǒng)原理,兩者結(jié)合起來讀,你會(huì)受益匪淺
  •   學(xué)習(xí)開發(fā)操作系統(tǒng)的好書
  •   這本書是很好的橋梁。通常的程序員想要理解原理,但也相結(jié)合代碼來看實(shí)現(xiàn)。而且喜歡問"how"的問題,這本書很好的滿足了這些需求。深入淺出,不抽象也不過于陷入細(xì)節(jié)而讓人無法把握
  •   講的很好,主要講系統(tǒng)的東西,圖很多,一眼就明白
  •   書寫得還是不錯(cuò)的,以流暢的語言描述了設(shè)計(jì)的根源和動(dòng)機(jī),圖文并茂.很好...結(jié)合源代碼學(xué)習(xí),效果很好.
    就是字體有些小.
  •   這書的厚度大約2cm,共424頁(yè),后面還有推薦其他相關(guān)書籍.
    書有一股香氣,但是聞起來比較刺鼻......
    先說一說這本書最值得夸獎(jiǎng)的地方:易懂
    圖片很多,讓人一目了然能夠知道原理.并不與其他書籍一樣云山霧罩.可以說這本書是直達(dá)本質(zhì).
    嗯......要去看書了.對(duì)了,這本書只有一個(gè)缺點(diǎn):書頁(yè)有點(diǎn)松
    貌似因?yàn)楹竺娴臅?yè)的膠不夠粘,經(jīng)常翻看的可能會(huì)把書頁(yè)翻掉.內(nèi)容絕對(duì)是第一的!
    寫了有200字了,不多說了哈
  •   不錯(cuò)的一本書,將來實(shí)現(xiàn)原理,但不是很詳細(xì)
  •   喜歡這本書的設(shè)計(jì),內(nèi)容也挺好
  •   從外觀上看,這本書的紙質(zhì)很好,內(nèi)容采用雙色印刷,給人清新雅致的感覺;從內(nèi)容上看,這本書講解細(xì)致入微,嚴(yán)謹(jǐn)有序,讓人讀來深受啟發(fā)。
  •   圖片多,精心配圖講解
  •   很好的一本書,講的很詳細(xì),圖也很精致
  •   紙質(zhì)挺好 還沒仔細(xì)看 內(nèi)容有圖解 有助于理解
  •   圖示搭配文字的講解 理解起來輕松 對(duì)進(jìn)一步學(xué)習(xí)有很大地幫助
  •   書剛剛到,我也來寫寫。之前看了一點(diǎn)發(fā)布出來的第四章,覺得非常好。以前一直都不屑于中國(guó)人自己寫的書,認(rèn)為出書的作者出于利益,總是著急把書寫出來,有些內(nèi)容甚至直接在網(wǎng)上抄襲,沒有檢查或檢查不夠仔細(xì),錯(cuò)別字一大堆。那個(gè)什么“**大系”我就不明指了,害得爺跟著破書走了很多彎路。我的書很多很多都是國(guó)外寫的,因?yàn)槲腋胫雷髡邔?duì)于某個(gè)問題他自己負(fù)責(zé)的看法,很多國(guó)外的作者顯得更加職業(yè),能為了弄清某個(gè)問題而去深究。國(guó)內(nèi)的大都連自己都沒弄明白,說到準(zhǔn)備精彩的地方就收尾了,真不爽!而這本書我確實(shí)想給很高的評(píng)價(jià),當(dāng)然,我現(xiàn)在還沒有去深究,也不知道作者深入的程度。但是,這絕對(duì)是國(guó)內(nèi)一本另類的,空前的書。期待新設(shè)計(jì)團(tuán)隊(duì)有更多的作品出來。
  •   很新穎,都是圖 還是雙手印刷 不錯(cuò)不錯(cuò)哦
  •   看到書里的圖,覺得還不錯(cuò)。
  •   有圖有文,很詳細(xì)
  •   深入淺出,形象直觀,收益頗多。喜歡這種教學(xué)方式。
  •   的確是一本好書,楊老師和他的團(tuán)隊(duì)的心血之作,同時(shí)得到歐美定作,唯一國(guó)內(nèi)的計(jì)算機(jī)類的書籍收到國(guó)外的肯定。。。而且達(dá)到了使人易懂的效果,著也是楊老師一直強(qiáng)調(diào)的一點(diǎn)。。。
  •   講的很詳細(xì)具體,很好理解
  •   分析的還算透徹
  •   講得挺細(xì)致的,對(duì)了解一些細(xì)節(jié)還是很有幫助的。
  •   圖解得很詳細(xì),是本好書。
  •   此書超級(jí)棒,正在閱讀中
  •   書很不錯(cuò)啊,質(zhì)量很好,內(nèi)容也好,很容易懂 呵呵
  •   這本書是國(guó)內(nèi)出的最好的一本書,這種環(huán)境下能出這樣的書,真的很感動(dòng),向作者致敬
  •   質(zhì)量很好 書很新穎 準(zhǔn)備接下來翻爛它!O(∩_∩)O哈哈~
  •   標(biāo)題很給力,第一本計(jì)算機(jī)方面的出國(guó)的書。給人一印象很不錯(cuò)。最起碼比那些隨便翻譯一下的書籍好。
  •   講解到位,把非常復(fù)雜的問題講得很生動(dòng)
  •   這本書寫的深入淺出
  •   給同學(xué)買的,他覺得這本書不錯(cuò),就是貴了點(diǎn)
  •   這本書非常的好,圖文并茂,是中國(guó)人寫的一本好書。
  •   替別人買的,據(jù)說不錯(cuò)。不懂計(jì)算機(jī)。
  •   彩版印刷,還沒讀,大致看了一下,挺好的·
  •   還沒開始看,書看起來質(zhì)量還不錯(cuò)。
  •   中國(guó)人自己出的書,很好很棒,建議喜歡編程的人好好看一下
  •   還沒看,書完好。
  •   看網(wǎng)上介紹買的,這是第一本翻譯成外文的中文書,憑著一點(diǎn),希望還可以看看
  •   書到了,只是翻看了一下,感覺很好!
    希望自己能堅(jiān)持看下去!
  •   前些天在書店看到了這書,感覺講的很細(xì),比較到位
  •   書質(zhì)量很不錯(cuò),是正版的,包裝也很好,就是送貨速度太慢了。
  •   書有塑料薄膜包著,第一感覺還可以, 里面標(biāo)題全是綠色, 夠突出, 也有點(diǎn)刺眼, 黑白的看習(xí)慣了,呵呵
  •   畢竟是老師推薦的,在同等教材中算上上等
  •   朋友說不錯(cuò),很喜歡~
  •   雖說只看了一半,但是感覺真不錯(cuò)
  •   有時(shí)間認(rèn)真實(shí)踐真會(huì)很好的
  •   還沒看,該不錯(cuò)
  •   當(dāng)當(dāng)?shù)陌b比過去好了點(diǎn)。
  •   大家買本自己看吧,值得看的,不多說了
  •   沒想到枯燥的東西這么生動(dòng)解釋出來
  •   國(guó)人的驕傲,必須頂
  •   一本較好的參考書,希望可以看懂一些。
  •   此書不錯(cuò),好書!
  •   還沒看完,但收獲很大
  •   作者給我們講,好好呀~~
  •   楊老師上課挺幽默的,書寫的也不錯(cuò)
  •   看了第一章,感覺很易懂,所以就買了!
  •   對(duì)流程、步驟比較清晰
  •   寫得很形象
  •   該書主要是圖文并茂,還是很有用
  •   有助了解
  •   好書,簡(jiǎn)單易懂,很不錯(cuò),值得推薦。
  •   書籍非常好,送貨非??欤浅8兄x!
  •   反正我是看得比較爽的.
  •   都下訂單這么久了,居然還發(fā)貨。審核通過有鳥用啊。
  •   感覺一般,相比深入理解linux內(nèi)核架構(gòu)差太多太多
  •   還行吧,可以當(dāng)作學(xué)習(xí)操作系統(tǒng)理論課的補(bǔ)充,熟悉下linux操作系統(tǒng)的早期版本。不過也是因?yàn)榘姹咎偷木壒?,?duì)現(xiàn)在的工作起到的作用不大。值得推薦是里面的圖很多,也比較細(xì)致。畢竟是國(guó)內(nèi)作者的,還是要贊一個(gè)。希望后續(xù)會(huì)出高級(jí)版本的Linux相關(guān)分析,尤其期待更好的圖片說明。
  •   一直想學(xué)Linux可惜都是泛泛的看看,后來決定主要研究Windows平臺(tái),買這本書主要是為了了解操作系統(tǒng)的,大致看了一下,圖文并茂,大概能看懂。收藏ing
  •   自己也是看了評(píng)論才買的,沒有看完,不過從目前來看,很不錯(cuò)。真正的圖文并茂,希望以后國(guó)內(nèi)可以出版更多這樣的圖書,很推薦想搞內(nèi)核的朋友。
  •   結(jié)合起內(nèi)核注釋這本書來看就更好,不錯(cuò)的書,值得購(gòu)買
  •   期待中,還沒收到,看評(píng)價(jià),應(yīng)該很不錯(cuò)~~希望盡快到貨,想盡可能全面了解下內(nèi)核
  •   看這本書需要很好的操作系統(tǒng)原理與匯編功底,否則看著很費(fèi)勁。不過書寫得確實(shí)不錯(cuò)!也讓我見識(shí)到了中科院的水平!!
  •   一本不錯(cuò)的linux的書
 

250萬本中文圖書簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書網(wǎng) 手機(jī)版

京ICP備13047387號(hào)-7