出版時(shí)間:2005-8 出版社:電子工業(yè)出版社 作者:于淵 頁(yè)數(shù):374
Tag標(biāo)簽:無
前言
你是否有過這樣的經(jīng)歷,有一天你興致勃勃買來一堆菜譜想學(xué)廚藝,翻開之后卻發(fā)現(xiàn)自己根本沒見過那些材料的名字,也不知道什么叫文火什么叫武火,什么叫上漿什么叫勾芡。而菜譜里根本沒告訴你!你扔掉菜譜,垂頭喪氣,從此對(duì)廚藝失去興趣。你也可能會(huì)有這樣的經(jīng)歷,當(dāng)你在計(jì)算機(jī)課上學(xué)完了一堆C語(yǔ)言語(yǔ)法,想要大展身手實(shí)踐一番的時(shí)候,突然發(fā)現(xiàn)你居然不知道源代碼應(yīng)該敲到哪里,是Word還是NotePad?很多計(jì)算機(jī)自學(xué)者可能有過這樣的經(jīng)歷,由于不知道如何跟蹤調(diào)試,在辛辛苦苦編寫的程序得不出正確的結(jié)果時(shí),要么束手無策,要么用打印語(yǔ)句輸出很多東西,費(fèi)時(shí)費(fèi)力,而教科書根本沒教你這些操作的細(xì)節(jié)。
內(nèi)容概要
本書在詳細(xì)分析操作系統(tǒng)原理的基礎(chǔ)上,用豐富的實(shí)例代碼,一步一步地指導(dǎo)讀者用C語(yǔ)言和匯編語(yǔ)言編寫出一個(gè)具備操作系統(tǒng)基本功能的操作系統(tǒng)框架。本書不同于其他的理論型書籍,而是提供給讀者一個(gè)動(dòng)手實(shí)踐的路線圖。書中講解了大量在開發(fā)操作系統(tǒng)中需注意的細(xì)節(jié)問題,這些細(xì)節(jié)不僅能使讀者更深刻地認(rèn)識(shí)操作系統(tǒng)的核心原理,而且使整個(gè)開發(fā)過程少走彎路。全書共分7章?! ”緯m合各類程序員、程序開發(fā)愛好者閱讀,也可作為高等院校操作系統(tǒng)課程的實(shí)踐參考書。
書籍目錄
第1章 馬上動(dòng)手寫一個(gè)最小的“操作系統(tǒng)”11.1 準(zhǔn)備工作11.2 10分鐘完成的操作系統(tǒng)11.3 Boot Sector31.4 代碼解釋31.5 水面下的冰山51.6 回顧6第2章 搭建你的工作環(huán)境72.1 虛擬計(jì)算機(jī)(Virtual PC)72.1.1 Virtual PC初體驗(yàn)82.1.2 創(chuàng)建你的第一個(gè)Virtual PC92.1.3 虛擬軟盤研究122.1.4 虛擬軟盤實(shí)戰(zhàn)142.2 編譯器(NASM & GCC)182.3 安裝虛擬Linux192.4 在虛擬Linux上訪問Windows文件夾262.5 安裝虛擬PCDOS262.6 其他要素292.7 Bochs292.7.1 Bochs vs. Virtual PC vs. VMware302.7.2 Bochs的使用方法312.7.3 用Bochs進(jìn)行調(diào)試332.7.4 在Linux上開發(fā)342.8 總結(jié)與回顧36第3章 保護(hù)模式(Protect Mode)373.1 認(rèn)識(shí)保護(hù)模式373.1.1 GDT(Global Descriptor Table) 423.1.2 實(shí)模式到保護(hù)模式,不一般的jmp453.1.3 描述符屬性473.2 保護(hù)模式進(jìn)階503.2.1 海闊憑魚躍503.2.2 LDT(Local Descriptor Table)583.2.3 特權(quán)級(jí)623.3 頁(yè)式存儲(chǔ)823.3.1 分頁(yè)機(jī)制概述833.3.2 編寫代碼啟動(dòng)分頁(yè)機(jī)制843.3.3 PDE和PTE853.3.4 cr3883.3.5 回頭看代碼883.3.6 克勤克儉用內(nèi)存903.3.7 進(jìn)一步體會(huì)分頁(yè)機(jī)制1003.4 中斷和異常1073.4.1 中斷和異常機(jī)制1093.4.2 外部中斷1113.4.3 編程操作8259A1133.4.4 建立IDT1163.4.5 實(shí)現(xiàn)一個(gè)中斷1173.4.6 時(shí)鐘中斷試驗(yàn)1193.4.7 幾點(diǎn)額外說明1213.5 保護(hù)模式下的I/O1223.5.1 IOPL1223.5.2 I/O許可位圖(I/O Permission Bitmap)1233.6 保護(hù)模式小結(jié)123第4章 讓操作系統(tǒng)走進(jìn)保護(hù)模式1254.1 突破512字節(jié)的限制1254.1.1 FAT121264.1.2 DOS可以識(shí)別的引導(dǎo)盤1314.1.3 一個(gè)最簡(jiǎn)單的Loader1324.1.4 加載Loader入內(nèi)存1334.1.5 向Loader交出控制權(quán)1424.1.6 整理boot.asm1424.2 保護(hù)模式下的“操作系統(tǒng)”144第5章 內(nèi)核雛形1465.1 用NASM在Linux下寫Hello World1465.2 再進(jìn)一步,匯編和C同步使用1485.3 ELF(Executable and Linkable Format)1505.4 從Loader到內(nèi)核1555.4.1 用Loader加載ELF1555.4.2 跳入保護(hù)模式1615.4.3 重新放置內(nèi)核1705.4.4 向內(nèi)核交出控制權(quán)1755.4.5 操作系統(tǒng)的調(diào)試方法1765.5 擴(kuò)充內(nèi)核1845.5.1 切換堆棧和GDT1845.5.2 整理我們的文件夾1915.5.3 Makefile1915.5.4 添加中斷處理2005.5.5 兩點(diǎn)說明2185.6 小結(jié)219第6章 進(jìn)程2216.1 遲到的進(jìn)程2216.2 概述2226.2.1 進(jìn)程介紹2226.2.2 未雨綢繆——形成進(jìn)程的必要考慮2226.2.3 參考的代碼2246.3 最簡(jiǎn)單的進(jìn)程2246.3.1 簡(jiǎn)單進(jìn)程的關(guān)鍵技術(shù)預(yù)測(cè)2256.3.2 第一步——ring0→ring12276.3.3 第二步——豐富中斷處理程序2436.3.4 進(jìn)程體設(shè)計(jì)技巧2546.4 多進(jìn)程2566.4.1 添加一個(gè)進(jìn)程體2566.4.2 相關(guān)的變量和宏2576.4.3 進(jìn)程表初始化代碼擴(kuò)充2586.4.4 LDT2606.4.5 修改中斷處理程序2616.4.6 添加一個(gè)任務(wù)的步驟總結(jié)2636.4.7 號(hào)外:Minix的中斷處理2656.4.8 代碼回顧與整理2696.5 系統(tǒng)調(diào)用2806.5.1 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的系統(tǒng)調(diào)用2806.5.2 get_ticks的應(yīng)用2866.6 進(jìn)程調(diào)度2926.6.1 避免對(duì)稱——進(jìn)程的節(jié)奏感2926.6.2 優(yōu)先級(jí)調(diào)度總結(jié)300第7章 輸入/輸出系統(tǒng)3027.1 鍵盤3027.1.1 從中斷開始——鍵盤初體驗(yàn)3027.1.2 AT、PS/2鍵盤3047.1.3 鍵盤敲擊的過程3047.1.4 解析掃描碼3097.2 顯示器3257.2.1 初識(shí)TTY3257.2.2 基本概念3267.2.3 寄存器3287.3 TTY任務(wù)3327.3.1 TTY任務(wù)框架的搭建3347.3.2 多控制臺(tái)3407.3.3 完善鍵盤處理3467.3.4 TTY任務(wù)總結(jié)3547.4 區(qū)分任務(wù)和用戶進(jìn)程3547.5 printf3577.5.1 為進(jìn)程指定TTY3577.5.2 printf()的實(shí)現(xiàn)3587.5.3 系統(tǒng)調(diào)用write()3617.5.4 使用printf()363后記366參考文獻(xiàn)369附錄書中的章節(jié)和代碼對(duì)照表370
章節(jié)摘錄
前言 一年多以前,電子工業(yè)出版社的張毅編輯告訴我說,有一位年輕的程序員,正在寫一本《自己動(dòng)手寫操作系統(tǒng)》的書。知道這個(gè)消息,我既有點(diǎn)好奇,又有些擔(dān)憂。如果是在十年前,這樣題材的書將會(huì)是讀者爭(zhēng)相傳閱的對(duì)象,畢竟20世紀(jì)90年代是軟件的理想主義年代。但是在理想褪盡、實(shí)務(wù)未興的尷尬的這兩年,這樣一本書在市場(chǎng)上究竟會(huì)遇到怎樣的待遇,確實(shí)讓人不敢樂觀。不過,在閱讀了樣章之后,我深為作者清新的文筆、流暢的思路和扎實(shí)的技術(shù)功底所折服,于是請(qǐng)張毅為我引見了這位作者,即本書的作者于淵。 于淵非常年輕,卻有著高人一籌的表達(dá)能力和技術(shù)視野,我覺得他是難得的技術(shù)寫作人才,就鼓勵(lì)他在《程序員》雜志開辟了一個(gè)技術(shù)專欄,專門剖析操作系統(tǒng)相關(guān)的技術(shù)。一年來這個(gè)專欄陸續(xù)發(fā)表了一系列文章,獲得了不少讀者的正面反饋。 然而,事實(shí)證明,我最初的擔(dān)憂并不是沒有道理的。一年多來,不斷有人表達(dá)過他們對(duì)這樣一個(gè)題材的不同看法。他們認(rèn)為,相對(duì)于90年代中后期,現(xiàn)在的軟件產(chǎn)業(yè)已經(jīng)務(wù)實(shí)了很多,今天的程序員更關(guān)心的是如何盡可能快、盡可能簡(jiǎn)單地用軟件解決實(shí)際問題,創(chuàng)造實(shí)際價(jià)值,在一個(gè)既定的秩序中尋找自己的生存空間,而不是異想天開地憧憬能成為L(zhǎng)inus Torvalds式的舊秩序的“破壞者”。因此諸如軟件過程、開發(fā)方法、系統(tǒng)集成、應(yīng)用架構(gòu)等“高級(jí)”的話題受到關(guān)注和歡迎,而諸如操作系統(tǒng)、編譯原理之類的基礎(chǔ)技術(shù),已經(jīng)是關(guān)心者寥寥了。他們非常懷疑,這樣的一本書,對(duì)于一線的開發(fā)者是否有實(shí)際的意義?對(duì)于尚在尋找自己職業(yè)發(fā)展方向的初學(xué)者是否構(gòu)成一種誤導(dǎo)?這個(gè)問題相當(dāng)尖銳,必須面對(duì)。我想這樣一本書,至少在以下幾個(gè)方面是具有重要的正面意義的。 首先,對(duì)于正在大學(xué)里學(xué)習(xí)計(jì)算機(jī)科學(xué)的學(xué)生來說,“操作系統(tǒng)原理”是重要的專業(yè)基礎(chǔ)課。為了達(dá)到大學(xué)階段教育的標(biāo)準(zhǔn),這方面的知識(shí)應(yīng)當(dāng)認(rèn)真學(xué)習(xí)。一些比較嚴(yán)肅的學(xué)校鼓勵(lì)學(xué)生在學(xué)習(xí)這門課程的同時(shí)自己動(dòng)手開發(fā)一個(gè)具體而微的操作系統(tǒng)。這種實(shí)習(xí)對(duì)于學(xué)生充分掌握書本知識(shí)、打下扎實(shí)的基本功有非常大的好處。在我認(rèn)識(shí)的比較有成就的開發(fā)者中,有不少人自己動(dòng)手寫過小的操作系統(tǒng),他們認(rèn)為編寫操作系統(tǒng)的實(shí)踐使他們最終消除了對(duì)編寫軟件系統(tǒng)的心理障礙,實(shí)在地消化和理解了書本上的知識(shí),學(xué)會(huì)了解決問題的思路,收獲非常巨大??上У氖?,大部分的學(xué)生都沒有進(jìn)行過這樣的實(shí)踐,這主要是因?yàn)槟壳暗恼n本偏重操作系統(tǒng)理論,把大量的筆墨放在對(duì)操作系統(tǒng)運(yùn)行機(jī)制的剖析或者現(xiàn)成源代碼的分析上,對(duì)于那些想自己動(dòng)手寫一個(gè)操作系統(tǒng)的同學(xué)來說,從課本上反而得不到實(shí)際的指導(dǎo)。即使是一些世界級(jí)的名著,在“How”上也是語(yǔ)焉不詳。在這方面,我相信于淵的這本書在國(guó)內(nèi)算是填補(bǔ)了一個(gè)空白。這本書最大的特點(diǎn)是明白、實(shí)在,將學(xué)習(xí)編寫操作系統(tǒng)的每一個(gè)步驟都清清楚楚地交代出來,絲毫沒有含糊其辭之處。可以說,只要讀者能夠耐心閱讀學(xué)習(xí),按照書上交代的步驟一步步來,就肯定能夠進(jìn)入操作系統(tǒng)的大門,把書本上的知識(shí)與實(shí)踐緊密聯(lián)系起來。畢竟寫自己的操作系統(tǒng)是一個(gè)讓所有程序員心動(dòng)的事情。如果當(dāng)年我學(xué)習(xí)操作系統(tǒng)知識(shí)的時(shí)候能夠有這樣一本書,那該有多好! 其次,對(duì)于那些希望通過分析Linux源代碼學(xué)習(xí)與研究操作系統(tǒng),進(jìn)而在開源軟件天地里有所作為的研究者和開發(fā)者來說,這本書是非常好的入門階梯。目前研究Linux內(nèi)核的圖書,一般局限在對(duì)現(xiàn)有內(nèi)核源代碼的分析上,不但理解起來很困難,而且沒有給讀者以自己實(shí)踐的機(jī)會(huì)。有人想到去分析Linux早期的版本,降低了讀者理解的難度,但是總的來說還是紙上談兵。本書的風(fēng)格截然不同,不但行文活潑清新,敘理簡(jiǎn)明清晰,而且完全著眼于動(dòng)手,以一種夾敘夾議的方式,對(duì)于編寫操作系統(tǒng)過程中可能遇到的各種問題“逢山開路,遇水架橋”,讀者可以在實(shí)際的語(yǔ)境中理解問題,解決問題。通過這種方式學(xué)習(xí)操作系統(tǒng)的實(shí)現(xiàn)技術(shù),無疑要比其他方式更為有效。而且,于淵在這本書中構(gòu)造的這個(gè)微型的操作系統(tǒng),跟Linux有微妙的相關(guān),讀者細(xì)心品味便知。 另外,雖然目前國(guó)內(nèi)軟件產(chǎn)業(yè)的主流是做下游的生產(chǎn)性集成,但是對(duì)于程序員個(gè)體來說,也有不少?gòu)氖孪到y(tǒng)級(jí)軟件開發(fā)的機(jī)會(huì)。有幸從事系統(tǒng)級(jí)軟件開發(fā)的朋友,更是可以直接地從本書中學(xué)到不少實(shí)用的知識(shí)和技能。特別是作者在解決一個(gè)又一個(gè)問題的過程中所體現(xiàn)出來的思路和方法,可能是更值得大家學(xué)習(xí)的東西。 眾所周知,操作系統(tǒng)是計(jì)算機(jī)軟件領(lǐng)域中核心的工程性技術(shù),盡管它的理論相對(duì)成熟,但是在工程實(shí)施和維護(hù)上,仍然是體現(xiàn)一個(gè)國(guó)家軟件技術(shù)水平的“兩彈、一星、大飛機(jī)”級(jí)的標(biāo)志性核心技術(shù)。世界上凡是在軟件產(chǎn)業(yè)方面存有雄心壯志的國(guó)家,無不非常重視操作系統(tǒng)技術(shù)的研究和積累。比如法國(guó)在他們的一個(gè)國(guó)家級(jí)實(shí)驗(yàn)室中,自己研發(fā)了包括操作系統(tǒng)和編譯器在內(nèi)的全套基礎(chǔ)軟件,并由國(guó)家投入資金不斷維護(hù)和發(fā)展。德國(guó)擁有大批Linux黑客,其政府因勢(shì)利導(dǎo),通過一系列的大型工程將自己的Linux軟件人才組織起來,希望依托Linux重建自己的軟件核心技術(shù)力量。20世紀(jì)80年代中期,日本在美國(guó)的壓力下而放棄了自己的“BTRON”操作系統(tǒng),此后軟件產(chǎn)業(yè)的發(fā)展讓日本追悔莫及。痛定思痛之后,日本希望牢牢地把握自己在消費(fèi)電子產(chǎn)品上的優(yōu)勢(shì),一方面繼續(xù)發(fā)展國(guó)產(chǎn)的ITRON OS,另一方面把握住Linux的機(jī)會(huì),希望在未來占據(jù)消費(fèi)類嵌入式操作系統(tǒng)的制高點(diǎn)。我國(guó)在這個(gè)方面走過一些彎路,但是現(xiàn)在已經(jīng)認(rèn)識(shí)到了掌握核心軟件技術(shù)的重要性,并且有了一定的投入,相信今后國(guó)家在這方面的支持力度會(huì)越來越強(qiáng)。我本人見過國(guó)內(nèi)的一些操作系統(tǒng)方面的專家,切實(shí)地感到,就個(gè)體而言,國(guó)內(nèi)的技術(shù)專家在理論和實(shí)踐上都達(dá)到了很高的水平,但是由于缺乏一個(gè)質(zhì)量高、并且有一定規(guī)模的團(tuán)隊(duì)和社群,他們基本處于單打獨(dú)斗或者小組作戰(zhàn)的狀態(tài),不僅個(gè)人的技術(shù)不能夠得到充分地發(fā)揮,而且也不能形成有規(guī)模的成果,無法從根本上扭轉(zhuǎn)我國(guó)在軟件核心技術(shù)領(lǐng)域上的劣勢(shì)。 我認(rèn)為,只有在中國(guó)出現(xiàn)一大批關(guān)心操作系統(tǒng)、熟悉操作系統(tǒng)的程序員,才有可能逐漸縮小我們與世界先進(jìn)水平的差異。 作為中國(guó)軟件產(chǎn)業(yè)中的普通一員,我非常希望看到這本書能夠在這個(gè)過程中發(fā)揮一點(diǎn)作用。 孟巖 《程序員》雜志技術(shù)主編 2005年7月
媒體關(guān)注與評(píng)論
這是一本編程愛好者編寫的別具一格、頗有特色的操作系統(tǒng)原理與實(shí)現(xiàn)的書。該書作者對(duì)操作系統(tǒng)具有特殊愛好,在大量實(shí)踐和反復(fù)鉆研下積累了豐富而可貴的經(jīng)驗(yàn),為了與廣大讀者分享這些經(jīng)驗(yàn)寫成了此書?! ”緯鴮?duì)一般的操作系統(tǒng)原理教材不很重視的部分,例如,系統(tǒng)初啟、保護(hù)模式、控制權(quán)如何轉(zhuǎn)入OS Kernal等都寫得具體詳細(xì),對(duì)操作系統(tǒng)的愛好者以及涉足于操作系統(tǒng)設(shè)計(jì)、實(shí)現(xiàn)和應(yīng)用的讀者有很好的參考價(jià)值?! ”緯奈淖稚鷦?dòng)活潑,富有個(gè)性,可望提高青年學(xué)子的閱讀興趣。
編輯推薦
《自己動(dòng)手寫操作系統(tǒng)》是一本編程愛好者編寫的別具一格、頗有特色的操作系統(tǒng)原理與實(shí)現(xiàn)的書。該書作者對(duì)操作系統(tǒng)具有特殊愛好,在大量實(shí)踐和反復(fù)鉆研下積累了豐富而可貴的經(jīng)驗(yàn),為了與廣大讀者分享這些經(jīng)驗(yàn)寫成了此書。本書對(duì)一般的操作系統(tǒng)原理教材不很重視的部分,例如,系統(tǒng)初啟、保護(hù)模式、控制權(quán)如何轉(zhuǎn)入OS Kernal等都寫得具體詳細(xì),對(duì)操作系統(tǒng)的愛好者以及涉足于操作系統(tǒng)設(shè)計(jì)、實(shí)現(xiàn)和應(yīng)用的讀者有很好的參考價(jià)值?!蹲约簞?dòng)手寫操作系統(tǒng)》的文字生動(dòng)活潑,富有個(gè)性,可望提高青年學(xué)子的閱讀興趣?!蹲约簞?dòng)手寫操作系統(tǒng)》在詳細(xì)分析操作系統(tǒng)原理的基礎(chǔ)上,用豐富的實(shí)例代碼,一步一步地指導(dǎo)讀者用C語(yǔ)言和匯編語(yǔ)言編寫出一個(gè)具備操作系統(tǒng)基本功能的操作系統(tǒng)框架。本書不同于其他的理論型書籍,而是提供給讀者一個(gè)動(dòng)手實(shí)踐的路線圖。書中講解了大量在開發(fā)操作系統(tǒng)中需注意的細(xì)節(jié)問題,這些細(xì)節(jié)不僅能使讀者更深刻地認(rèn)識(shí)操作系統(tǒng)的核心原理,而且使整個(gè)開發(fā)過程少走彎路。全書共分7章?!蹲约簞?dòng)手寫操作系統(tǒng)》適合各類程序員、程序開發(fā)愛好者閱讀,也可作為高等院校操作系統(tǒng)課程的實(shí)踐參考書。
圖書封面
圖書標(biāo)簽Tags
無
評(píng)論、評(píng)分、閱讀與下載