自己動手寫操作系統(tǒng)

出版時間:2005-8  出版社:電子工業(yè)出版社  作者:于淵  頁數(shù):374  
Tag標簽:無  

前言

  你是否有過這樣的經(jīng)歷,有一天你興致勃勃買來一堆菜譜想學(xué)廚藝,翻開之后卻發(fā)現(xiàn)自己根本沒見過那些材料的名字,也不知道什么叫文火什么叫武火,什么叫上漿什么叫勾芡。而菜譜里根本沒告訴你!你扔掉菜譜,垂頭喪氣,從此對廚藝失去興趣。你也可能會有這樣的經(jīng)歷,當你在計算機課上學(xué)完了一堆C語言語法,想要大展身手實踐一番的時候,突然發(fā)現(xiàn)你居然不知道源代碼應(yīng)該敲到哪里,是Word還是NotePad?很多計算機自學(xué)者可能有過這樣的經(jīng)歷,由于不知道如何跟蹤調(diào)試,在辛辛苦苦編寫的程序得不出正確的結(jié)果時,要么束手無策,要么用打印語句輸出很多東西,費時費力,而教科書根本沒教你這些操作的細節(jié)。

內(nèi)容概要

  本書在詳細分析操作系統(tǒng)原理的基礎(chǔ)上,用豐富的實例代碼,一步一步地指導(dǎo)讀者用C語言和匯編語言編寫出一個具備操作系統(tǒng)基本功能的操作系統(tǒng)框架。本書不同于其他的理論型書籍,而是提供給讀者一個動手實踐的路線圖。書中講解了大量在開發(fā)操作系統(tǒng)中需注意的細節(jié)問題,這些細節(jié)不僅能使讀者更深刻地認識操作系統(tǒng)的核心原理,而且使整個開發(fā)過程少走彎路。全書共分7章?! ”緯m合各類程序員、程序開發(fā)愛好者閱讀,也可作為高等院校操作系統(tǒng)課程的實踐參考書。

書籍目錄

第1章 馬上動手寫一個最小的“操作系統(tǒng)”11.1 準備工作11.2 10分鐘完成的操作系統(tǒng)11.3 Boot Sector31.4 代碼解釋31.5 水面下的冰山51.6 回顧6第2章 搭建你的工作環(huán)境72.1 虛擬計算機(Virtual PC)72.1.1 Virtual PC初體驗82.1.2 創(chuàng)建你的第一個Virtual PC92.1.3 虛擬軟盤研究122.1.4 虛擬軟盤實戰(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進行調(diào)試332.7.4 在Linux上開發(fā)342.8 總結(jié)與回顧36第3章 保護模式(Protect Mode)373.1 認識保護模式373.1.1 GDT(Global Descriptor Table) 423.1.2 實模式到保護模式,不一般的jmp453.1.3 描述符屬性473.2 保護模式進階503.2.1 海闊憑魚躍503.2.2 LDT(Local Descriptor Table)583.2.3 特權(quán)級623.3 頁式存儲823.3.1 分頁機制概述833.3.2 編寫代碼啟動分頁機制843.3.3 PDE和PTE853.3.4 cr3883.3.5 回頭看代碼883.3.6 克勤克儉用內(nèi)存903.3.7 進一步體會分頁機制1003.4 中斷和異常1073.4.1 中斷和異常機制1093.4.2 外部中斷1113.4.3 編程操作8259A1133.4.4 建立IDT1163.4.5 實現(xiàn)一個中斷1173.4.6 時鐘中斷試驗1193.4.7 幾點額外說明1213.5 保護模式下的I/O1223.5.1 IOPL1223.5.2 I/O許可位圖(I/O Permission Bitmap)1233.6 保護模式小結(jié)123第4章 讓操作系統(tǒng)走進保護模式1254.1 突破512字節(jié)的限制1254.1.1 FAT121264.1.2 DOS可以識別的引導(dǎo)盤1314.1.3 一個最簡單的Loader1324.1.4 加載Loader入內(nèi)存1334.1.5 向Loader交出控制權(quán)1424.1.6 整理boot.asm1424.2 保護模式下的“操作系統(tǒng)”144第5章 內(nèi)核雛形1465.1 用NASM在Linux下寫Hello World1465.2 再進一步,匯編和C同步使用1485.3 ELF(Executable and Linkable Format)1505.4 從Loader到內(nèi)核1555.4.1 用Loader加載ELF1555.4.2 跳入保護模式1615.4.3 重新放置內(nèi)核1705.4.4 向內(nèi)核交出控制權(quán)1755.4.5 操作系統(tǒng)的調(diào)試方法1765.5 擴充內(nèi)核1845.5.1 切換堆棧和GDT1845.5.2 整理我們的文件夾1915.5.3 Makefile1915.5.4 添加中斷處理2005.5.5 兩點說明2185.6 小結(jié)219第6章 進程2216.1 遲到的進程2216.2 概述2226.2.1 進程介紹2226.2.2 未雨綢繆——形成進程的必要考慮2226.2.3 參考的代碼2246.3 最簡單的進程2246.3.1 簡單進程的關(guān)鍵技術(shù)預(yù)測2256.3.2 第一步——ring0→ring12276.3.3 第二步——豐富中斷處理程序2436.3.4 進程體設(shè)計技巧2546.4 多進程2566.4.1 添加一個進程體2566.4.2 相關(guān)的變量和宏2576.4.3 進程表初始化代碼擴充2586.4.4 LDT2606.4.5 修改中斷處理程序2616.4.6 添加一個任務(wù)的步驟總結(jié)2636.4.7 號外:Minix的中斷處理2656.4.8 代碼回顧與整理2696.5 系統(tǒng)調(diào)用2806.5.1 實現(xiàn)一個簡單的系統(tǒng)調(diào)用2806.5.2 get_ticks的應(yīng)用2866.6 進程調(diào)度2926.6.1 避免對稱——進程的節(jié)奏感2926.6.2 優(yōu)先級調(diào)度總結(jié)300第7章 輸入/輸出系統(tǒng)3027.1 鍵盤3027.1.1 從中斷開始——鍵盤初體驗3027.1.2 AT、PS/2鍵盤3047.1.3 鍵盤敲擊的過程3047.1.4 解析掃描碼3097.2 顯示器3257.2.1 初識TTY3257.2.2 基本概念3267.2.3 寄存器3287.3 TTY任務(wù)3327.3.1 TTY任務(wù)框架的搭建3347.3.2 多控制臺3407.3.3 完善鍵盤處理3467.3.4 TTY任務(wù)總結(jié)3547.4 區(qū)分任務(wù)和用戶進程3547.5 printf3577.5.1 為進程指定TTY3577.5.2 printf()的實現(xiàn)3587.5.3 系統(tǒng)調(diào)用write()3617.5.4 使用printf()363后記366參考文獻369附錄書中的章節(jié)和代碼對照表370

章節(jié)摘錄

  前言  一年多以前,電子工業(yè)出版社的張毅編輯告訴我說,有一位年輕的程序員,正在寫一本《自己動手寫操作系統(tǒng)》的書。知道這個消息,我既有點好奇,又有些擔(dān)憂。如果是在十年前,這樣題材的書將會是讀者爭相傳閱的對象,畢竟20世紀90年代是軟件的理想主義年代。但是在理想褪盡、實務(wù)未興的尷尬的這兩年,這樣一本書在市場上究竟會遇到怎樣的待遇,確實讓人不敢樂觀。不過,在閱讀了樣章之后,我深為作者清新的文筆、流暢的思路和扎實的技術(shù)功底所折服,于是請張毅為我引見了這位作者,即本書的作者于淵。 于淵非常年輕,卻有著高人一籌的表達能力和技術(shù)視野,我覺得他是難得的技術(shù)寫作人才,就鼓勵他在《程序員》雜志開辟了一個技術(shù)專欄,專門剖析操作系統(tǒng)相關(guān)的技術(shù)。一年來這個專欄陸續(xù)發(fā)表了一系列文章,獲得了不少讀者的正面反饋。 然而,事實證明,我最初的擔(dān)憂并不是沒有道理的。一年多來,不斷有人表達過他們對這樣一個題材的不同看法。他們認為,相對于90年代中后期,現(xiàn)在的軟件產(chǎn)業(yè)已經(jīng)務(wù)實了很多,今天的程序員更關(guān)心的是如何盡可能快、盡可能簡單地用軟件解決實際問題,創(chuàng)造實際價值,在一個既定的秩序中尋找自己的生存空間,而不是異想天開地憧憬能成為Linus Torvalds式的舊秩序的“破壞者”。因此諸如軟件過程、開發(fā)方法、系統(tǒng)集成、應(yīng)用架構(gòu)等“高級”的話題受到關(guān)注和歡迎,而諸如操作系統(tǒng)、編譯原理之類的基礎(chǔ)技術(shù),已經(jīng)是關(guān)心者寥寥了。他們非常懷疑,這樣的一本書,對于一線的開發(fā)者是否有實際的意義?對于尚在尋找自己職業(yè)發(fā)展方向的初學(xué)者是否構(gòu)成一種誤導(dǎo)?這個問題相當尖銳,必須面對。我想這樣一本書,至少在以下幾個方面是具有重要的正面意義的。 首先,對于正在大學(xué)里學(xué)習(xí)計算機科學(xué)的學(xué)生來說,“操作系統(tǒng)原理”是重要的專業(yè)基礎(chǔ)課。為了達到大學(xué)階段教育的標準,這方面的知識應(yīng)當認真學(xué)習(xí)。一些比較嚴肅的學(xué)校鼓勵學(xué)生在學(xué)習(xí)這門課程的同時自己動手開發(fā)一個具體而微的操作系統(tǒng)。這種實習(xí)對于學(xué)生充分掌握書本知識、打下扎實的基本功有非常大的好處。在我認識的比較有成就的開發(fā)者中,有不少人自己動手寫過小的操作系統(tǒng),他們認為編寫操作系統(tǒng)的實踐使他們最終消除了對編寫軟件系統(tǒng)的心理障礙,實在地消化和理解了書本上的知識,學(xué)會了解決問題的思路,收獲非常巨大??上У氖?,大部分的學(xué)生都沒有進行過這樣的實踐,這主要是因為目前的課本偏重操作系統(tǒng)理論,把大量的筆墨放在對操作系統(tǒng)運行機制的剖析或者現(xiàn)成源代碼的分析上,對于那些想自己動手寫一個操作系統(tǒng)的同學(xué)來說,從課本上反而得不到實際的指導(dǎo)。即使是一些世界級的名著,在“How”上也是語焉不詳。在這方面,我相信于淵的這本書在國內(nèi)算是填補了一個空白。這本書最大的特點是明白、實在,將學(xué)習(xí)編寫操作系統(tǒng)的每一個步驟都清清楚楚地交代出來,絲毫沒有含糊其辭之處??梢哉f,只要讀者能夠耐心閱讀學(xué)習(xí),按照書上交代的步驟一步步來,就肯定能夠進入操作系統(tǒng)的大門,把書本上的知識與實踐緊密聯(lián)系起來。畢竟寫自己的操作系統(tǒng)是一個讓所有程序員心動的事情。如果當年我學(xué)習(xí)操作系統(tǒng)知識的時候能夠有這樣一本書,那該有多好! 其次,對于那些希望通過分析Linux源代碼學(xué)習(xí)與研究操作系統(tǒng),進而在開源軟件天地里有所作為的研究者和開發(fā)者來說,這本書是非常好的入門階梯。目前研究Linux內(nèi)核的圖書,一般局限在對現(xiàn)有內(nèi)核源代碼的分析上,不但理解起來很困難,而且沒有給讀者以自己實踐的機會。有人想到去分析Linux早期的版本,降低了讀者理解的難度,但是總的來說還是紙上談兵。本書的風(fēng)格截然不同,不但行文活潑清新,敘理簡明清晰,而且完全著眼于動手,以一種夾敘夾議的方式,對于編寫操作系統(tǒng)過程中可能遇到的各種問題“逢山開路,遇水架橋”,讀者可以在實際的語境中理解問題,解決問題。通過這種方式學(xué)習(xí)操作系統(tǒng)的實現(xiàn)技術(shù),無疑要比其他方式更為有效。而且,于淵在這本書中構(gòu)造的這個微型的操作系統(tǒng),跟Linux有微妙的相關(guān),讀者細心品味便知。 另外,雖然目前國內(nèi)軟件產(chǎn)業(yè)的主流是做下游的生產(chǎn)性集成,但是對于程序員個體來說,也有不少從事系統(tǒng)級軟件開發(fā)的機會。有幸從事系統(tǒng)級軟件開發(fā)的朋友,更是可以直接地從本書中學(xué)到不少實用的知識和技能。特別是作者在解決一個又一個問題的過程中所體現(xiàn)出來的思路和方法,可能是更值得大家學(xué)習(xí)的東西。 眾所周知,操作系統(tǒng)是計算機軟件領(lǐng)域中核心的工程性技術(shù),盡管它的理論相對成熟,但是在工程實施和維護上,仍然是體現(xiàn)一個國家軟件技術(shù)水平的“兩彈、一星、大飛機”級的標志性核心技術(shù)。世界上凡是在軟件產(chǎn)業(yè)方面存有雄心壯志的國家,無不非常重視操作系統(tǒng)技術(shù)的研究和積累。比如法國在他們的一個國家級實驗室中,自己研發(fā)了包括操作系統(tǒng)和編譯器在內(nèi)的全套基礎(chǔ)軟件,并由國家投入資金不斷維護和發(fā)展。德國擁有大批Linux黑客,其政府因勢利導(dǎo),通過一系列的大型工程將自己的Linux軟件人才組織起來,希望依托Linux重建自己的軟件核心技術(shù)力量。20世紀80年代中期,日本在美國的壓力下而放棄了自己的“BTRON”操作系統(tǒng),此后軟件產(chǎn)業(yè)的發(fā)展讓日本追悔莫及。痛定思痛之后,日本希望牢牢地把握自己在消費電子產(chǎn)品上的優(yōu)勢,一方面繼續(xù)發(fā)展國產(chǎn)的ITRON OS,另一方面把握住Linux的機會,希望在未來占據(jù)消費類嵌入式操作系統(tǒng)的制高點。我國在這個方面走過一些彎路,但是現(xiàn)在已經(jīng)認識到了掌握核心軟件技術(shù)的重要性,并且有了一定的投入,相信今后國家在這方面的支持力度會越來越強。我本人見過國內(nèi)的一些操作系統(tǒng)方面的專家,切實地感到,就個體而言,國內(nèi)的技術(shù)專家在理論和實踐上都達到了很高的水平,但是由于缺乏一個質(zhì)量高、并且有一定規(guī)模的團隊和社群,他們基本處于單打獨斗或者小組作戰(zhàn)的狀態(tài),不僅個人的技術(shù)不能夠得到充分地發(fā)揮,而且也不能形成有規(guī)模的成果,無法從根本上扭轉(zhuǎn)我國在軟件核心技術(shù)領(lǐng)域上的劣勢。 我認為,只有在中國出現(xiàn)一大批關(guān)心操作系統(tǒng)、熟悉操作系統(tǒng)的程序員,才有可能逐漸縮小我們與世界先進水平的差異。 作為中國軟件產(chǎn)業(yè)中的普通一員,我非常希望看到這本書能夠在這個過程中發(fā)揮一點作用。   孟巖 《程序員》雜志技術(shù)主編 2005年7月

媒體關(guān)注與評論

  這是一本編程愛好者編寫的別具一格、頗有特色的操作系統(tǒng)原理與實現(xiàn)的書。該書作者對操作系統(tǒng)具有特殊愛好,在大量實踐和反復(fù)鉆研下積累了豐富而可貴的經(jīng)驗,為了與廣大讀者分享這些經(jīng)驗寫成了此書?! ”緯鴮σ话愕牟僮飨到y(tǒng)原理教材不很重視的部分,例如,系統(tǒng)初啟、保護模式、控制權(quán)如何轉(zhuǎn)入OS Kernal等都寫得具體詳細,對操作系統(tǒng)的愛好者以及涉足于操作系統(tǒng)設(shè)計、實現(xiàn)和應(yīng)用的讀者有很好的參考價值?! ”緯奈淖稚鷦踊顫?,富有個性,可望提高青年學(xué)子的閱讀興趣。

編輯推薦

  《自己動手寫操作系統(tǒng)》是一本編程愛好者編寫的別具一格、頗有特色的操作系統(tǒng)原理與實現(xiàn)的書。該書作者對操作系統(tǒng)具有特殊愛好,在大量實踐和反復(fù)鉆研下積累了豐富而可貴的經(jīng)驗,為了與廣大讀者分享這些經(jīng)驗寫成了此書。本書對一般的操作系統(tǒng)原理教材不很重視的部分,例如,系統(tǒng)初啟、保護模式、控制權(quán)如何轉(zhuǎn)入OS Kernal等都寫得具體詳細,對操作系統(tǒng)的愛好者以及涉足于操作系統(tǒng)設(shè)計、實現(xiàn)和應(yīng)用的讀者有很好的參考價值?!蹲约簞邮謱懖僮飨到y(tǒng)》的文字生動活潑,富有個性,可望提高青年學(xué)子的閱讀興趣?!蹲约簞邮謱懖僮飨到y(tǒng)》在詳細分析操作系統(tǒng)原理的基礎(chǔ)上,用豐富的實例代碼,一步一步地指導(dǎo)讀者用C語言和匯編語言編寫出一個具備操作系統(tǒng)基本功能的操作系統(tǒng)框架。本書不同于其他的理論型書籍,而是提供給讀者一個動手實踐的路線圖。書中講解了大量在開發(fā)操作系統(tǒng)中需注意的細節(jié)問題,這些細節(jié)不僅能使讀者更深刻地認識操作系統(tǒng)的核心原理,而且使整個開發(fā)過程少走彎路。全書共分7章?!蹲约簞邮謱懖僮飨到y(tǒng)》適合各類程序員、程序開發(fā)愛好者閱讀,也可作為高等院校操作系統(tǒng)課程的實踐參考書。

圖書封面

圖書標簽Tags

評論、評分、閱讀與下載


    自己動手寫操作系統(tǒng) PDF格式下載


用戶評論 (總計0條)

 
 

 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網(wǎng) 手機版

京ICP備13047387號-7