Orange'S:一個(gè)操作系統(tǒng)的實(shí)現(xiàn)

出版時(shí)間:2009-6  出版社:電子工業(yè)出版社  作者:于淵  頁(yè)數(shù):469  
Tag標(biāo)簽:無(wú)  

前言

  做真正 Hacker的樂(lè)趣──自己動(dòng)手去實(shí)踐  2004年我聽(tīng)編輯說(shuō)有個(gè)年輕人寫(xiě)了本《自己動(dòng)手寫(xiě)操作系統(tǒng)》,第一反應(yīng)是不可能,恐怕是翻譯稿,寫(xiě)這種書(shū)籍是要考作者硬功夫的,不但需要深入掌握操作系統(tǒng)的原理,還需要實(shí)際動(dòng)手寫(xiě)出原型?! v史上的 Linux就是這么產(chǎn)生的,Linus Torvalds當(dāng)時(shí)是一名赫爾辛基大學(xué)計(jì)算機(jī)科學(xué)系的二年級(jí)學(xué)生,經(jīng)常要用自己的電腦去訪(fǎng)問(wèn)大學(xué)主機(jī)上的新聞組和郵件,為了方便讀寫(xiě)和下載文件,他自己編寫(xiě)了磁盤(pán)驅(qū)動(dòng)程序和文件系統(tǒng),這成為了 Linux第一個(gè)內(nèi)核的雛形?! ∥蚁胫袊?guó)有能力寫(xiě)出內(nèi)核原型的程序員應(yīng)該也有,但把這個(gè)題目寫(xiě)成一本書(shū),感覺(jué)上不會(huì)有人愿意做這件事情,作者要花很多時(shí)間,加上主題比較硬,銷(xiāo)售量不會(huì)太高,經(jīng)濟(jì)上回報(bào)有限?! 〉脕?lái)文稿一看,整個(gè)編輯部大為驚艷,內(nèi)容文筆俱佳,而且絕對(duì)原創(chuàng),馬上決定在《程序員》連載。2005年博文視點(diǎn)出版的第一版也廣受好評(píng)。  不過(guò)有很多讀者還是質(zhì)疑:現(xiàn)在軟件編程主要領(lǐng)域是框架和應(yīng)用,還需要了解操作系統(tǒng)底層嗎?  經(jīng)過(guò)四年的磨練成長(zhǎng),于淵又拿出第二版的書(shū)稿《Orange’S:一個(gè)操作系統(tǒng)的實(shí)現(xiàn)》,這本書(shū)是屬于真正 Hacker的。我雖然已經(jīng)有多年不寫(xiě)代碼了,但看這本書(shū)的時(shí)候,讓我又重新感受到做程序員的樂(lè)趣:用代碼建設(shè)屬于自己的系統(tǒng),讓電腦聽(tīng)從自己的指令,對(duì)系統(tǒng)的每個(gè)部分都了如指掌?! 『诳停╤acker)實(shí)際是褒義詞,維基百科的解釋是喜歡用智力通過(guò)創(chuàng)造性方法來(lái)挑戰(zhàn)腦力極限的人,特別是他們所感興趣的領(lǐng)域,例如軟件編程或電氣工程。個(gè)人電腦、軟件和互聯(lián)網(wǎng)等劃時(shí)代的產(chǎn)品都是黑客創(chuàng)造出來(lái)的,如蘋(píng)果的 Apple電腦、微軟的 Basic解釋器、互聯(lián)網(wǎng)的 Mosaic瀏覽器?! 』卮鹎懊孀x者的質(zhì)疑,學(xué)軟件編程并不需要看這本書(shū),想成為優(yōu)秀程序員和黑客的朋友,我強(qiáng)烈建議你花時(shí)間來(lái)閱讀這本書(shū),并親自動(dòng)手實(shí)踐。正如于淵在本書(shū)結(jié)尾中所說(shuō)“我們寫(xiě)自己的操作系統(tǒng)是出于一種好奇,或者說(shuō)一種求知欲。我希望這樣不停地‘過(guò)把癮’能讓這種好奇不停地延續(xù)”。  好奇心是動(dòng)力的源泉,追究問(wèn)題的本質(zhì)是優(yōu)秀黑客的必備素質(zhì),只有充分掌握了系統(tǒng)原理,才能在技術(shù)上游刃有余,才能有真正的創(chuàng)新和發(fā)展。中國(guó)需要更多真正的黑客,也希望更多的程序員能享受屬于黑客的創(chuàng)造樂(lè)趣。

內(nèi)容概要

  《Orange S:一個(gè)操作系統(tǒng)的實(shí)現(xiàn)》從只有二十行的引導(dǎo)扇區(qū)代碼出發(fā),一步一步地向讀者呈現(xiàn)一個(gè)操作系統(tǒng)框架的完成過(guò)程。書(shū)中不僅關(guān)注代碼本身,同時(shí)關(guān)注完成這些代碼的思路和過(guò)程。本書(shū)不同于其他的理論型書(shū)籍,而是提供給讀者一個(gè)動(dòng)手實(shí)踐的路線(xiàn)圖。讀者可以根據(jù)路線(xiàn)圖逐步完成各部分的功能,從而避免了一開(kāi)始就面對(duì)整個(gè)操作系統(tǒng)數(shù)萬(wàn)行代碼時(shí)的迷茫和挫敗感。書(shū)中講解了大量在開(kāi)發(fā)操作系統(tǒng)中需注意的細(xì)節(jié)問(wèn)題,這些細(xì)節(jié)不僅能使讀者更深刻地認(rèn)識(shí)操作系統(tǒng)的核心原理,而且使整個(gè)開(kāi)發(fā)過(guò)程少走彎路。本書(shū)分上下兩篇,共11章。其中每一章都以前一章的工作成果為基礎(chǔ),實(shí)現(xiàn)一項(xiàng)新的功能。而在章的內(nèi)部,一項(xiàng)大的功能被分解成許多小的步驟,通過(guò)完成每個(gè)小的步驟,讀者可以不斷獲得階段性的成果,從而讓整個(gè)開(kāi)發(fā)過(guò)程變得輕松并且有趣?! ”緯?shū)適合各類(lèi)程序員、程序開(kāi)發(fā)愛(ài)好者閱讀,也可作為高等院校操作系統(tǒng)課程的實(shí)踐參考書(shū)。

作者簡(jiǎn)介

  于淵自述——性懶,好靜,涉獵甚廣,然所精者少。遇所好之事,譬如程序,必沉迷其中,恍恍然如癲如癡?! ∽x書(shū)非多,然每讀必思,偶有心得,自得其樂(lè)。遇知其所云者,欣然以為知音,必邀之共飲,所飲不必多,喜聞觥籌鏗鏘之聲,與談笑交錯(cuò),快意淋漓?! ”拘怨虉?zhí),喜鉆研,求本質(zhì),不滿(mǎn)于浮光掠影,故凡可能之事,必躬親而后快。以求甚解之心,究操作系統(tǒng)之原委,并親為之,耗時(shí)數(shù)月,咸雛形?;仡櫞藲v程,自有一番甘苦,乃以此記錄,與同道分享。雖有貽笑方家之慮,然凡此種種,皆切身之感受,所感所想,點(diǎn)滴皆為領(lǐng)悟,故心下坦然。若恰能為后來(lái)者借鑒一二,心當(dāng)甚慰。

書(shū)籍目錄

上篇第1章 馬上動(dòng)手寫(xiě)一個(gè)最小的“操作系統(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 虛擬計(jì)算機(jī)Bochs	2.1.1 Bochs初體驗(yàn)	2.1.2 Bochs的安裝	2.1.3 Bochs的使用	2.1.4 用Bochs調(diào)試操作系統(tǒng)	2.2 QEMU	2.3 平臺(tái)之爭(zhēng):Windows還是*nix	2.4 GNU/Linux下的開(kāi)發(fā)環(huán)境	2.5 Windows下的開(kāi)發(fā)環(huán)境	2.6 總結(jié)	第3章 保護(hù)模式(Protect Mode)	3.1 認(rèn)識(shí)保護(hù)模式	3.1.1 保護(hù)模式的運(yùn)行環(huán)境	3.1.2 GDT(Global Descriptor Table)	3.1.3 實(shí)模式到保護(hù)模式,不一般的jmp	3.1.4 描述符屬性	3.2 保護(hù)模式進(jìn)階	3.2.1 海闊憑魚(yú)躍	3.2.2 LDT(Local Descriptor Table)	3.2.3 特權(quán)級(jí)概述	3.2.4 特權(quán)級(jí)轉(zhuǎn)移	3.2.5 關(guān)于“保護(hù)”二字的一點(diǎn)思考	3.3 頁(yè)式存儲(chǔ)	3.3.1 分頁(yè)機(jī)制概述	3.3.2 編寫(xiě)代碼啟動(dòng)分頁(yè)機(jī)制	3.3.3 PDE和PTE	3.3.4 cr3	3.3.5 回頭看代碼	3.3.6 克勤克儉用內(nèi)存	3.3.7 進(jìn)一步體會(huì)分頁(yè)機(jī)制	3.4 中斷和異常	3.4.1 中斷和異常機(jī)制	3.4.2 外部中斷	3.4.3 編程操作8259A	3.4.4 建立IDT	3.4.5 實(shí)現(xiàn)一個(gè)中斷	3.4.6 時(shí)鐘中斷試驗(yàn)	3.4.7 幾點(diǎn)額外說(shuō)明	3.5 保護(hù)模式下的I/O	3.5.1 IOPL	3.5.2 I/O許可位圖(I/O Permission Bitmap)	3.6 保護(hù)模式小結(jié)	第4章 讓操作系統(tǒng)走進(jìn)保護(hù)模式	4.1 突破512字節(jié)的限制	4.1.1 FAT12	4.1.2 DOS可以識(shí)別的引導(dǎo)盤(pán)	4.1.3 一個(gè)最簡(jiǎn)單的Loader	4.1.4 加載Loader入內(nèi)存	4.1.5 向Loader交出控制權(quán)	4.1.6 整理boot.asm	4.2 保護(hù)模式下的“操作系統(tǒng)”	第5章 內(nèi)核雛形	5.1 在Linux下用匯編寫(xiě)Hello World	5.2 再進(jìn)一步,匯編和C同步使用	5.3 ELF(Executable and Linkable Format)	5.4 從Loader到內(nèi)核	5.4.1 用Loader加載ELF	5.4.2 跳入保護(hù)模式	5.4.3 重新放置內(nèi)核	5.4.4 向內(nèi)核交出控制權(quán)	5.5 擴(kuò)充內(nèi)核	5.5.1 切換堆棧和GDT	5.5.2 整理我們的文件夾	5.5.3 Makefile	5.5.4 添加中斷處理	5.5.5 兩點(diǎn)說(shuō)明	5.6 小結(jié)	第6章 進(jìn)程	6.1 遲到的進(jìn)程	6.2 概述	6.2.1 進(jìn)程介紹	6.2.2 未雨綢繆——形成進(jìn)程的必要考慮	6.2.3 參考的代碼	6.3 最簡(jiǎn)單的進(jìn)程	6.3.1 簡(jiǎn)單進(jìn)程的關(guān)鍵技術(shù)預(yù)測(cè)	6.3.2 第一步——ring0→ring1	6.3.3 第二步——豐富中斷處理程序	6.4 多進(jìn)程	6.4.1 添加一個(gè)進(jìn)程體	6.4.2 相關(guān)的變量和宏	6.4.3 進(jìn)程表初始化代碼擴(kuò)充	6.4.4 LDT	6.4.5 修改中斷處理程序	6.4.6 添加一個(gè)任務(wù)的步驟總結(jié)	6.4.7 號(hào)外:Minix的中斷處理	6.4.8 代碼回顧與整理	6.5 系統(tǒng)調(diào)用	6.5.1 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的系統(tǒng)調(diào)用	6.5.2 get_ticks的應(yīng)用	6.6 進(jìn)程調(diào)度	6.6.1 避免對(duì)稱(chēng)——進(jìn)程的節(jié)奏感	6.6.2 優(yōu)先級(jí)調(diào)度總結(jié)	第7章 輸入/輸出系統(tǒng)	7.1 鍵盤(pán)	7.1.1 從中斷開(kāi)始——鍵盤(pán)初體驗(yàn)	7.1.2 AT、PS/2鍵盤(pán)	7.1.3 鍵盤(pán)敲擊的過(guò)程	7.1.4 用數(shù)組表示掃描碼	7.1.5 鍵盤(pán)輸入緩沖區(qū)	7.1.6 用新加的任務(wù)處理鍵盤(pán)操作	7.1.7 解析掃描碼	7.2 顯示器	7.2.1 初識(shí)TTY	7.2.2 基本概念	7.2.3 寄存器	7.3 TTY任務(wù)	7.3.1 TTY任務(wù)框架的搭建	7.3.2 多控制臺(tái)	7.3.3 完善鍵盤(pán)處理	7.3.4 TTY任務(wù)總結(jié)	7.4 區(qū)分任務(wù)和用戶(hù)進(jìn)程	7.5 printf	7.5.1 為進(jìn)程指定TTY	7.5.2 printf()的實(shí)現(xiàn)	7.5.3 系統(tǒng)調(diào)用write()	7.5.4 使用printf()	下篇第8章 進(jìn)程間通信	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 實(shí)現(xiàn)IPC	8.3.1 assert()和panic()	8.3.2 msg_send()和msg_receive()	8.3.3 增加消息機(jī)制之后的進(jìn)程調(diào)度	8.4 使用IPC來(lái)替換系統(tǒng)調(diào)用get_ticks	8.5 總結(jié)	第9章 文件系統(tǒng)	9.1 硬盤(pán)簡(jiǎn)介	9.2 硬盤(pán)操作的I/O 端口	9.3 硬盤(pán)驅(qū)動(dòng)程序	9.4 文件系統(tǒng)	9.5 硬盤(pán)分區(qū)表	9.6 設(shè)備號(hào)	9.7 用代碼遍歷所有分區(qū)	9.8 完善硬盤(pán)驅(qū)動(dòng)程序	9.9 在硬盤(pán)上制作一個(gè)文件系統(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 打開(kāi)文件	9.15 讀寫(xiě)文件	9.16 測(cè)試文件讀寫(xiě)	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)識(shí)fork	10.1.2 fork前要做的工作(為fork所做的準(zhǔn)備)	10.1.3 fork()庫(kù)函數(shù)	10.1.4 MM	10.1.5 運(yùn)行	10.2 exit和wait	10.3 exec	10.3.1 認(rèn)識(shí)exec	10.3.2 為自己的操作系統(tǒng)編寫(xiě)應(yīng)用程序	10.3.3 “安裝”應(yīng)用程序	10.3.4 實(shí)現(xiàn)exec	10.4 簡(jiǎn)單的shell	10.5 總結(jié)	第11章 尾聲	11.1 讓mkfs()只執(zhí)行一次	11.2 從硬盤(pán)引導(dǎo)	11.2.1 編寫(xiě)硬盤(pán)引導(dǎo)扇區(qū)和硬盤(pán)版loader	11.2.2 “安裝”hdboot.bin和hdldr.bin	11.2.3 grub	11.2.4 小結(jié)	11.3 將OS安裝到真實(shí)的計(jì)算機(jī)	11.3.1 準(zhǔn)備工作	11.3.2 安裝Linux	11.3.3 編譯源代碼	11.3.4 開(kāi)始安裝	11.4 總結(jié)	參考文獻(xiàn)

章節(jié)摘錄

  上篇  第2章 搭建你的工作環(huán)境	  我知道,現(xiàn)在你已經(jīng)開(kāi)始摩拳擦掌準(zhǔn)備大干一場(chǎng)了,因?yàn)槟惆l(fā)現(xiàn),開(kāi)頭并不是那么難的。你可能想到了Linus,或許他在寫(xiě)出第一個(gè)引導(dǎo)扇區(qū)并調(diào)試成功時(shí)也是同樣的激動(dòng)不已;你可能在想,有一天,我也要寫(xiě)出一個(gè)Linux那樣偉大的操作系統(tǒng)!是的,這一切都有可能,因?yàn)橐磺袀ゴ蟊囟ㄊ菑钠椒查_(kāi)始的。我知道此刻你躊躇滿(mǎn)志,已經(jīng)迫不及待要進(jìn)入操作系統(tǒng)的殿堂?! 】墒窍炔灰?,古人云:“工欲善其事,必先利其器”,你可能已經(jīng)發(fā)現(xiàn),如果每次我們編譯好的東西都要寫(xiě)到軟盤(pán)上,再重啟計(jì)算機(jī),不但費(fèi)時(shí)費(fèi)力,對(duì)自己的愛(ài)機(jī)簡(jiǎn)直是一種蹂躪。你一定不會(huì)滿(mǎn)足于這樣的現(xiàn)狀,還好,我們有如此多的工具,比如前面提到過(guò)的Bochs?! ≡诮榻BBochs及其他工具之前,需要說(shuō)明一點(diǎn),這些工具并不是不可或缺的,介紹它們僅僅是為讀者提供一些可供選擇的方法,用以搭建自己的工作環(huán)境。但是,這并不代表這一章就不重要,因?yàn)榈眯膽?yīng)手的工具不但可以愉悅身心,并且可以起到讓工作事半功倍的功效。  下面就從Bochs開(kāi)始介紹?! ?.1 虛擬計(jì)算機(jī)Bochs  即便沒(méi)有聽(tīng)說(shuō)過(guò)虛擬計(jì)算機(jī),你至少應(yīng)該聽(tīng)說(shuō)過(guò)磁盤(pán)映像。如果經(jīng)歷過(guò)DOS時(shí)代,你可能就曾經(jīng)用HD—COPY把一張軟盤(pán)做成一個(gè)IMG文件,或者把一個(gè)IMG文件恢復(fù)成一張軟盤(pán)。虛擬計(jì)算機(jī)相當(dāng)于此概念的外延,它與映像文件的關(guān)系就相當(dāng)于計(jì)算機(jī)與磁盤(pán)。簡(jiǎn)單來(lái)講,它相當(dāng)于運(yùn)行在計(jì)算機(jī)內(nèi)的小計(jì)算機(jī)。

編輯推薦

  暢銷(xiāo)書(shū)《自己動(dòng)手寫(xiě)操作系統(tǒng)》第二版。  ?從只有二十行的引導(dǎo)扇區(qū)代碼出發(fā),一步一步地向讀者呈現(xiàn)一個(gè)操作系統(tǒng)框架的完成過(guò)程?!   ∠鑼?shí)的文字,豐富的圖表,清晰的代碼,作者親自用LAATEX排版,內(nèi)容與形式并重?! ∪诵曰拇a組織,幫讀者關(guān)注每節(jié)重點(diǎn),完備的行號(hào)標(biāo)識(shí),便于讀者對(duì)照實(shí)際代碼。  專(zhuān)屬網(wǎng)站和郵件列表,方便讀者交流?! ×⒆銓?shí)踐層面,關(guān)注動(dòng)于操作過(guò)程中的細(xì)節(jié),一步一步熟讀者完成自己的操作系統(tǒng):最簡(jiǎn)單的Boot Sector-由Boot Sector和Loader加載的內(nèi)核-實(shí)現(xiàn)一個(gè)和多個(gè)進(jìn)程-多控制臺(tái)-進(jìn)程間通信-輕巧的FS-簡(jiǎn)單的MM-自己的C運(yùn)行時(shí)庫(kù)-運(yùn)行自己的應(yīng)用程序-在真機(jī)進(jìn)行自己操作系統(tǒng)。

圖書(shū)封面

圖書(shū)標(biāo)簽Tags

無(wú)

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


    Orange'S:一個(gè)操作系統(tǒng)的實(shí)現(xiàn) PDF格式下載


用戶(hù)評(píng)論 (總計(jì)7條)

 
 

  •   Orange S:一個(gè)操作系統(tǒng)的實(shí)現(xiàn)
  •   Orange S
  •   買(mǎi)書(shū)沒(méi)碟
  •   準(zhǔn)備學(xué)習(xí),現(xiàn)在還不是
  •   買(mǎi)了用來(lái)儲(chǔ)存的,
  •     也許題目寫(xiě)的有些太夸張了,但是這本書(shū)給我的感覺(jué)真的很好,雖然確實(shí)很難,要想要靜下心來(lái)一步步全部讀完真的不易,我也只是讀了一大半而已,將他標(biāo)記為已讀,是因?yàn)槲矣X(jué)得可能以后也不會(huì)再讀這本書(shū)了,也紀(jì)念一下可能離我遠(yuǎn)去的程序員的夢(mèng)想
      現(xiàn)在的工作需要編程,但是不需要這么深入的了,還記得當(dāng)時(shí)準(zhǔn)備找工作的時(shí)候自己每天在這里啃這本書(shū),一天天神魂顛倒,呵呵,那真是一段忙碌苦逼的日子,但是現(xiàn)在想起來(lái)卻有一些懷念,有著夢(mèng)想,有著堅(jiān)持,不管多難,只要堅(jiān)持下去,最后的收獲一定是you deserve it!
      現(xiàn)在每天都還會(huì)堅(jiān)持看一些書(shū),技術(shù)方面的,人文方面的,歷史金融方面的,實(shí)際覺(jué)得很多時(shí)候自己知道的真的是太少了,從7月份畢業(yè)到現(xiàn)在差不多看了10本書(shū),會(huì)繼續(xù)這個(gè)節(jié)奏的,一個(gè)人懂得太少容易自以為是,懂得越多就會(huì)越彬彬有禮,魅力、氣場(chǎng)都會(huì)越來(lái)越強(qiáng),而且看問(wèn)題,解決問(wèn)題的思路就會(huì)越寬廣,越有效,而這些恰恰是一個(gè)人不管在什么方面能否卓越發(fā)展的關(guān)鍵
      學(xué)無(wú)止境,共勉
  •     覺(jué)得有些細(xì)節(jié)方面寫(xiě)得不夠深入透徹,直接貼代碼了事~想完全弄明白自己實(shí)現(xiàn)一遍還得自己Google大量的資料、不如《Linux0.11內(nèi)核完全注釋》透徹、細(xì)膩。總得來(lái)說(shuō)還是可以,可以讓人對(duì)內(nèi)核的實(shí)現(xiàn)有個(gè)大概的印象,不至于找不到學(xué)習(xí)的方向~
 

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

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