出版時間:2009-6 出版社:電子工業(yè)出版社 作者:于淵 頁數(shù):469
Tag標(biāo)簽:無
前言
做真正 Hacker的樂趣──自己動手去實踐 2004年我聽編輯說有個年輕人寫了本《自己動手寫操作系統(tǒng)》,第一反應(yīng)是不可能,恐怕是翻譯稿,寫這種書籍是要考作者硬功夫的,不但需要深入掌握操作系統(tǒng)的原理,還需要實際動手寫出原型?! v史上的 Linux就是這么產(chǎn)生的,Linus Torvalds當(dāng)時是一名赫爾辛基大學(xué)計算機科學(xué)系的二年級學(xué)生,經(jīng)常要用自己的電腦去訪問大學(xué)主機上的新聞組和郵件,為了方便讀寫和下載文件,他自己編寫了磁盤驅(qū)動程序和文件系統(tǒng),這成為了 Linux第一個內(nèi)核的雛形?! ∥蚁胫袊心芰懗鰞?nèi)核原型的程序員應(yīng)該也有,但把這個題目寫成一本書,感覺上不會有人愿意做這件事情,作者要花很多時間,加上主題比較硬,銷售量不會太高,經(jīng)濟上回報有限?! 〉脕砦母逡豢?,整個編輯部大為驚艷,內(nèi)容文筆俱佳,而且絕對原創(chuàng),馬上決定在《程序員》連載。2005年博文視點出版的第一版也廣受好評?! 〔贿^有很多讀者還是質(zhì)疑:現(xiàn)在軟件編程主要領(lǐng)域是框架和應(yīng)用,還需要了解操作系統(tǒng)底層嗎? 經(jīng)過四年的磨練成長,于淵又拿出第二版的書稿《Orange’S:一個操作系統(tǒng)的實現(xiàn)》,這本書是屬于真正 Hacker的。我雖然已經(jīng)有多年不寫代碼了,但看這本書的時候,讓我又重新感受到做程序員的樂趣:用代碼建設(shè)屬于自己的系統(tǒng),讓電腦聽從自己的指令,對系統(tǒng)的每個部分都了如指掌。 黑客(hacker)實際是褒義詞,維基百科的解釋是喜歡用智力通過創(chuàng)造性方法來挑戰(zhàn)腦力極限的人,特別是他們所感興趣的領(lǐng)域,例如軟件編程或電氣工程。個人電腦、軟件和互聯(lián)網(wǎng)等劃時代的產(chǎn)品都是黑客創(chuàng)造出來的,如蘋果的 Apple電腦、微軟的 Basic解釋器、互聯(lián)網(wǎng)的 Mosaic瀏覽器。 回答前面讀者的質(zhì)疑,學(xué)軟件編程并不需要看這本書,想成為優(yōu)秀程序員和黑客的朋友,我強烈建議你花時間來閱讀這本書,并親自動手實踐。正如于淵在本書結(jié)尾中所說“我們寫自己的操作系統(tǒng)是出于一種好奇,或者說一種求知欲。我希望這樣不停地‘過把癮’能讓這種好奇不停地延續(xù)”。 好奇心是動力的源泉,追究問題的本質(zhì)是優(yōu)秀黑客的必備素質(zhì),只有充分掌握了系統(tǒng)原理,才能在技術(shù)上游刃有余,才能有真正的創(chuàng)新和發(fā)展。中國需要更多真正的黑客,也希望更多的程序員能享受屬于黑客的創(chuàng)造樂趣。
內(nèi)容概要
《Orange S:一個操作系統(tǒng)的實現(xiàn)》從只有二十行的引導(dǎo)扇區(qū)代碼出發(fā),一步一步地向讀者呈現(xiàn)一個操作系統(tǒng)框架的完成過程。書中不僅關(guān)注代碼本身,同時關(guān)注完成這些代碼的思路和過程。本書不同于其他的理論型書籍,而是提供給讀者一個動手實踐的路線圖。讀者可以根據(jù)路線圖逐步完成各部分的功能,從而避免了一開始就面對整個操作系統(tǒng)數(shù)萬行代碼時的迷茫和挫敗感。書中講解了大量在開發(fā)操作系統(tǒng)中需注意的細(xì)節(jié)問題,這些細(xì)節(jié)不僅能使讀者更深刻地認(rèn)識操作系統(tǒng)的核心原理,而且使整個開發(fā)過程少走彎路。本書分上下兩篇,共11章。其中每一章都以前一章的工作成果為基礎(chǔ),實現(xiàn)一項新的功能。而在章的內(nèi)部,一項大的功能被分解成許多小的步驟,通過完成每個小的步驟,讀者可以不斷獲得階段性的成果,從而讓整個開發(fā)過程變得輕松并且有趣?! ”緯m合各類程序員、程序開發(fā)愛好者閱讀,也可作為高等院校操作系統(tǒng)課程的實踐參考書。
作者簡介
于淵自述——性懶,好靜,涉獵甚廣,然所精者少。遇所好之事,譬如程序,必沉迷其中,恍恍然如癲如癡。 讀書非多,然每讀必思,偶有心得,自得其樂。遇知其所云者,欣然以為知音,必邀之共飲,所飲不必多,喜聞觥籌鏗鏘之聲,與談笑交錯,快意淋漓?! ”拘怨虉?zhí),喜鉆研,求本質(zhì),不滿于浮光掠影,故凡可能之事,必躬親而后快。以求甚解之心,究操作系統(tǒng)之原委,并親為之,耗時數(shù)月,咸雛形?;仡櫞藲v程,自有一番甘苦,乃以此記錄,與同道分享。雖有貽笑方家之慮,然凡此種種,皆切身之感受,所感所想,點滴皆為領(lǐng)悟,故心下坦然。若恰能為后來者借鑒一二,心當(dāng)甚慰。
書籍目錄
上篇第1章 馬上動手寫一個最小的“操作系統(tǒng)” 1.1 準(zhǔn)備工作 1.2 十分鐘完成的操作系統(tǒng) 1.3 引導(dǎo)扇區(qū) 1.4 代碼解釋 1.5 水面下的冰山 1.6 回顧 第2章 搭建你的工作環(huán)境 2.1 虛擬計算機Bochs 2.1.1 Bochs初體驗 2.1.2 Bochs的安裝 2.1.3 Bochs的使用 2.1.4 用Bochs調(diào)試操作系統(tǒng) 2.2 QEMU 2.3 平臺之爭:Windows還是*nix 2.4 GNU/Linux下的開發(fā)環(huán)境 2.5 Windows下的開發(fā)環(huán)境 2.6 總結(jié) 第3章 保護模式(Protect Mode) 3.1 認(rèn)識保護模式 3.1.1 保護模式的運行環(huán)境 3.1.2 GDT(Global Descriptor Table) 3.1.3 實模式到保護模式,不一般的jmp 3.1.4 描述符屬性 3.2 保護模式進階 3.2.1 海闊憑魚躍 3.2.2 LDT(Local Descriptor Table) 3.2.3 特權(quán)級概述 3.2.4 特權(quán)級轉(zhuǎn)移 3.2.5 關(guān)于“保護”二字的一點思考 3.3 頁式存儲 3.3.1 分頁機制概述 3.3.2 編寫代碼啟動分頁機制 3.3.3 PDE和PTE 3.3.4 cr3 3.3.5 回頭看代碼 3.3.6 克勤克儉用內(nèi)存 3.3.7 進一步體會分頁機制 3.4 中斷和異常 3.4.1 中斷和異常機制 3.4.2 外部中斷 3.4.3 編程操作8259A 3.4.4 建立IDT 3.4.5 實現(xiàn)一個中斷 3.4.6 時鐘中斷試驗 3.4.7 幾點額外說明 3.5 保護模式下的I/O 3.5.1 IOPL 3.5.2 I/O許可位圖(I/O Permission Bitmap) 3.6 保護模式小結(jié) 第4章 讓操作系統(tǒng)走進保護模式 4.1 突破512字節(jié)的限制 4.1.1 FAT12 4.1.2 DOS可以識別的引導(dǎo)盤 4.1.3 一個最簡單的Loader 4.1.4 加載Loader入內(nèi)存 4.1.5 向Loader交出控制權(quán) 4.1.6 整理boot.asm 4.2 保護模式下的“操作系統(tǒng)” 第5章 內(nèi)核雛形 5.1 在Linux下用匯編寫Hello World 5.2 再進一步,匯編和C同步使用 5.3 ELF(Executable and Linkable Format) 5.4 從Loader到內(nèi)核 5.4.1 用Loader加載ELF 5.4.2 跳入保護模式 5.4.3 重新放置內(nèi)核 5.4.4 向內(nèi)核交出控制權(quán) 5.5 擴充內(nèi)核 5.5.1 切換堆棧和GDT 5.5.2 整理我們的文件夾 5.5.3 Makefile 5.5.4 添加中斷處理 5.5.5 兩點說明 5.6 小結(jié) 第6章 進程 6.1 遲到的進程 6.2 概述 6.2.1 進程介紹 6.2.2 未雨綢繆——形成進程的必要考慮 6.2.3 參考的代碼 6.3 最簡單的進程 6.3.1 簡單進程的關(guān)鍵技術(shù)預(yù)測 6.3.2 第一步——ring0→ring1 6.3.3 第二步——豐富中斷處理程序 6.4 多進程 6.4.1 添加一個進程體 6.4.2 相關(guān)的變量和宏 6.4.3 進程表初始化代碼擴充 6.4.4 LDT 6.4.5 修改中斷處理程序 6.4.6 添加一個任務(wù)的步驟總結(jié) 6.4.7 號外:Minix的中斷處理 6.4.8 代碼回顧與整理 6.5 系統(tǒng)調(diào)用 6.5.1 實現(xiàn)一個簡單的系統(tǒng)調(diào)用 6.5.2 get_ticks的應(yīng)用 6.6 進程調(diào)度 6.6.1 避免對稱——進程的節(jié)奏感 6.6.2 優(yōu)先級調(diào)度總結(jié) 第7章 輸入/輸出系統(tǒng) 7.1 鍵盤 7.1.1 從中斷開始——鍵盤初體驗 7.1.2 AT、PS/2鍵盤 7.1.3 鍵盤敲擊的過程 7.1.4 用數(shù)組表示掃描碼 7.1.5 鍵盤輸入緩沖區(qū) 7.1.6 用新加的任務(wù)處理鍵盤操作 7.1.7 解析掃描碼 7.2 顯示器 7.2.1 初識TTY 7.2.2 基本概念 7.2.3 寄存器 7.3 TTY任務(wù) 7.3.1 TTY任務(wù)框架的搭建 7.3.2 多控制臺 7.3.3 完善鍵盤處理 7.3.4 TTY任務(wù)總結(jié) 7.4 區(qū)分任務(wù)和用戶進程 7.5 printf 7.5.1 為進程指定TTY 7.5.2 printf()的實現(xiàn) 7.5.3 系統(tǒng)調(diào)用write() 7.5.4 使用printf() 下篇第8章 進程間通信 8.1 微內(nèi)核還是宏內(nèi)核 8.1.1 Linux的系統(tǒng)調(diào)用 8.1.2 Minix的系統(tǒng)調(diào)用 8.1.3 我們的選擇 8.2 IPC 8.3 實現(xiàn)IPC 8.3.1 assert()和panic() 8.3.2 msg_send()和msg_receive() 8.3.3 增加消息機制之后的進程調(diào)度 8.4 使用IPC來替換系統(tǒng)調(diào)用get_ticks 8.5 總結(jié) 第9章 文件系統(tǒng) 9.1 硬盤簡介 9.2 硬盤操作的I/O 端口 9.3 硬盤驅(qū)動程序 9.4 文件系統(tǒng) 9.5 硬盤分區(qū)表 9.6 設(shè)備號 9.7 用代碼遍歷所有分區(qū) 9.8 完善硬盤驅(qū)動程序 9.9 在硬盤上制作一個文件系統(tǒng) 9.9.1 文件系統(tǒng)涉及的數(shù)據(jù)結(jié)構(gòu) 9.9.2 編碼建立文件系統(tǒng) 9.10 創(chuàng)建文件 9.10.1 Linux下的文件操作 9.10.2 文件描述符(file descriptor) 9.10.3 open() 9.11 創(chuàng)建文件所涉及的其他函數(shù) 9.11.1 strip_path() 9.11.2 search_file() 9.11.3 get_inode()和sync_inode() 9.11.4 init_fs() 9.11.5 read_super_block()和get_super_block() 9.12 關(guān)閉文件 9.13 查看已創(chuàng)建的文件 9.14 打開文件 9.15 讀寫文件 9.16 測試文件讀寫 9.17 文件系統(tǒng)調(diào)試 9.18 刪除文件 9.19 插曲:奇怪的異常 9.20 為文件系統(tǒng)添加系統(tǒng)調(diào)用的步驟 9.21 將TTY納入文件系統(tǒng) 9.22 改造printf 9.23 總結(jié) 第10章 內(nèi)存管理 10.1 fork 10.1.1 認(rèn)識fork 10.1.2 fork前要做的工作(為fork所做的準(zhǔn)備) 10.1.3 fork()庫函數(shù) 10.1.4 MM 10.1.5 運行 10.2 exit和wait 10.3 exec 10.3.1 認(rèn)識exec 10.3.2 為自己的操作系統(tǒng)編寫應(yīng)用程序 10.3.3 “安裝”應(yīng)用程序 10.3.4 實現(xiàn)exec 10.4 簡單的shell 10.5 總結(jié) 第11章 尾聲 11.1 讓mkfs()只執(zhí)行一次 11.2 從硬盤引導(dǎo) 11.2.1 編寫硬盤引導(dǎo)扇區(qū)和硬盤版loader 11.2.2 “安裝”hdboot.bin和hdldr.bin 11.2.3 grub 11.2.4 小結(jié) 11.3 將OS安裝到真實的計算機 11.3.1 準(zhǔn)備工作 11.3.2 安裝Linux 11.3.3 編譯源代碼 11.3.4 開始安裝 11.4 總結(jié) 參考文獻(xiàn)
章節(jié)摘錄
上篇 第2章 搭建你的工作環(huán)境 我知道,現(xiàn)在你已經(jīng)開始摩拳擦掌準(zhǔn)備大干一場了,因為你發(fā)現(xiàn),開頭并不是那么難的。你可能想到了Linus,或許他在寫出第一個引導(dǎo)扇區(qū)并調(diào)試成功時也是同樣的激動不已;你可能在想,有一天,我也要寫出一個Linux那樣偉大的操作系統(tǒng)!是的,這一切都有可能,因為一切偉大必定是從平凡開始的。我知道此刻你躊躇滿志,已經(jīng)迫不及待要進入操作系統(tǒng)的殿堂?! 】墒窍炔灰保湃嗽疲骸肮び破涫?,必先利其器”,你可能已經(jīng)發(fā)現(xiàn),如果每次我們編譯好的東西都要寫到軟盤上,再重啟計算機,不但費時費力,對自己的愛機簡直是一種蹂躪。你一定不會滿足于這樣的現(xiàn)狀,還好,我們有如此多的工具,比如前面提到過的Bochs?! ≡诮榻BBochs及其他工具之前,需要說明一點,這些工具并不是不可或缺的,介紹它們僅僅是為讀者提供一些可供選擇的方法,用以搭建自己的工作環(huán)境。但是,這并不代表這一章就不重要,因為得心應(yīng)手的工具不但可以愉悅身心,并且可以起到讓工作事半功倍的功效?! ∠旅婢蛷腂ochs開始介紹?! ?.1 虛擬計算機Bochs 即便沒有聽說過虛擬計算機,你至少應(yīng)該聽說過磁盤映像。如果經(jīng)歷過DOS時代,你可能就曾經(jīng)用HD—COPY把一張軟盤做成一個IMG文件,或者把一個IMG文件恢復(fù)成一張軟盤。虛擬計算機相當(dāng)于此概念的外延,它與映像文件的關(guān)系就相當(dāng)于計算機與磁盤。簡單來講,它相當(dāng)于運行在計算機內(nèi)的小計算機。
編輯推薦
暢銷書《自己動手寫操作系統(tǒng)》第二版?! ?從只有二十行的引導(dǎo)扇區(qū)代碼出發(fā),一步一步地向讀者呈現(xiàn)一個操作系統(tǒng)框架的完成過程?! ∠鑼嵉奈淖?,豐富的圖表,清晰的代碼,作者親自用LAATEX排版,內(nèi)容與形式并重?! ∪诵曰拇a組織,幫讀者關(guān)注每節(jié)重點,完備的行號標(biāo)識,便于讀者對照實際代碼。 專屬網(wǎng)站和郵件列表,方便讀者交流?! ×⒆銓嵺`層面,關(guān)注動于操作過程中的細(xì)節(jié),一步一步熟讀者完成自己的操作系統(tǒng):最簡單的Boot Sector-由Boot Sector和Loader加載的內(nèi)核-實現(xiàn)一個和多個進程-多控制臺-進程間通信-輕巧的FS-簡單的MM-自己的C運行時庫-運行自己的應(yīng)用程序-在真機進行自己操作系統(tǒng)。
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載
Orange'S:一個操作系統(tǒng)的實現(xiàn) PDF格式下載