出版時(shí)間:2012-8 出版社:人民郵電出版社 作者:[日] 川合秀實(shí) 頁數(shù):710 字?jǐn)?shù):1063000 譯者:周自恒,李黎明,曾祥江,張文旭
Tag標(biāo)簽:無
前言
“好想編寫一個(gè)操作系統(tǒng)呀!”筆者的朋友曾說這是所有程序員都曾經(jīng)懷揣的一個(gè)夢想。說“所有的程序員”可能有點(diǎn)夸張了,不過作為程序員的夢想,它至少也應(yīng)該能排進(jìn)前十名吧。 也許很多人覺得編寫操作系統(tǒng)是個(gè)天方夜譚,這一定是操作系統(tǒng)業(yè)界的一個(gè)陰謀(笑)。他們故意讓大家相信編寫操作系統(tǒng)是一件非常困難的事情,這樣就可以高價(jià)兜售自己開發(fā)的操作系統(tǒng),而且操作系統(tǒng)的作者還會(huì)被頂禮膜拜。那么實(shí)際情況又怎么樣呢?和別的程序相比,其實(shí)編寫操作系統(tǒng)并沒有那么難,至少筆者的感覺是這樣?! ≡诟魑蛔x者之中,也許有人曾經(jīng)挑戰(zhàn)過操作系統(tǒng)的編寫,但因?yàn)樘y而放棄了。擁有這樣經(jīng)歷的人也許不會(huì)認(rèn)同筆者的觀點(diǎn)。其實(shí)你錯(cuò)了,你的失敗并不是因?yàn)榫帉懖僮飨到y(tǒng)太難,而是因?yàn)闆]有人告訴你那其實(shí)是一件很簡單的事而已?! 〔粌H是編寫操作系統(tǒng),任何事都是一樣的。如果講解的人認(rèn)為它很難,那就不可能把它講述得通俗易懂,即便是同樣的內(nèi)容,也會(huì)講得無比復(fù)雜。這樣的講解,肯定是很難懂的。 那么,你想不想和筆者一起再挑戰(zhàn)一次呢?如果你曾經(jīng)夢想過編寫自己的操作系統(tǒng),一定會(huì)覺得樂在其中的。 可能有人會(huì)說,這本書足足有700多頁,怎么會(huì)“有趣”和“簡單”呢?唔,這么一說筆者也覺得挺心虛的,不過其實(shí)也只是長了那么一點(diǎn)點(diǎn)啦。平均下來的話,每天只有大約23頁的內(nèi)容,你看,也沒有那么長吧? 這本書的文風(fēng)非常輕松,也許你不知不覺中就會(huì)讀得很快。但是這樣的話可能印象不會(huì)很深,最好還是能靜下心來慢慢地讀。書中所展示的程序代碼和文字的說明同樣重要,因此也希望大家仔細(xì)閱讀。只要注意這些,理解本書的內(nèi)容就應(yīng)該沒有問題了?! ≡诒緯校覀兪褂肅語言和匯編語言來編寫操作系統(tǒng),不過不必?fù)?dān)心,你可以在閱讀本書的同時(shí)來逐步學(xué)習(xí)關(guān)于這些編程語言的知識(shí)。本書在這方面寫得非常仔細(xì),如果能有人通過本書終于把C語言中的指針給搞懂了,那筆者的目的也就達(dá)到了。即便是從這樣的水平開始,30天后你也能夠編寫出一個(gè)很棒的操作系統(tǒng),請大家拭目以待吧!
內(nèi)容概要
自己編寫一個(gè)操作系統(tǒng),是許多程序員的夢想。也許有人曾經(jīng)挑戰(zhàn)過,但因?yàn)樘y而放棄了。其實(shí)你錯(cuò)了,你的失敗并不是因?yàn)榫帉懖僮飨怠〗y(tǒng)太難,而是因?yàn)闆]有人告訴你那其實(shí)是一件很簡單的事。那么,你想不想再挑戰(zhàn)一次呢?
這是一本兼具趣味性、實(shí)用性與學(xué)習(xí)性的書籍。作者從計(jì)算機(jī)的構(gòu)造、匯編語言、C語言開始解說,讓你在實(shí)踐中掌握算法。在這本書的指導(dǎo)下,從零編寫所有代碼,30天后就可以制作出一個(gè)具有窗口系統(tǒng)的32位多任務(wù)操作系統(tǒng)。
本書以課題為主導(dǎo),邊做邊玩,拋開晦澀難懂的語言,行文風(fēng)格十分隨性,還充滿了各種歡樂的吐槽,適合操作系統(tǒng)愛好者和程序設(shè)計(jì)人員閱讀。
作者簡介
川合秀實(shí)(Hidemi Kawai)
生于1975年,是一位以“輕量化”編程思想見長的“非主流”開發(fā)者。2000年因自行開發(fā)的OSASK項(xiàng)目而名聲大噪。OSASK是一個(gè)開源的32位微型操作系統(tǒng),它并非以Linux等內(nèi)核為基礎(chǔ),而是完全從零開始開發(fā),在一張軟盤的容量下實(shí)現(xiàn)了GUI、多任務(wù)、多語言等高級(jí)特性,啟動(dòng)時(shí)間只需1秒。本書的內(nèi)容可以看成是作者以O(shè)SASK為藍(lán)本,教會(huì)讀者從零開始開發(fā)一個(gè)操作系統(tǒng),同時(shí)可以讓初學(xué)者在編寫操作系統(tǒng)的過程中,了解操作系統(tǒng)背后更多的知識(shí)。
書籍目錄
第0天 著手開發(fā)之前
1 前言
2 何謂操作系統(tǒng)
3 開發(fā)操作系統(tǒng)的各種方法
4 無知?jiǎng)t無畏
5 如何開發(fā)操作系統(tǒng)
6 操作系統(tǒng)開發(fā)中的困難
7 學(xué)習(xí)本書時(shí)的注意事項(xiàng)(重要?。?br />8 各章內(nèi)容摘要
第1天 從計(jì)算機(jī)結(jié)構(gòu)到匯編程序入門
1 先動(dòng)手操作
2 究竟做了些什么
3 初次體驗(yàn)匯編程序
4 加工潤色
第2天 匯編語言學(xué)習(xí)與Makefile入門
1 介紹文本編輯器
2 繼續(xù)開發(fā)
3 先制作啟動(dòng)區(qū)
4 Makefile入門
第3天 進(jìn)入32位模式并導(dǎo)入C語言
1 制作真正的IPL
2 試錯(cuò)
3 讀到18扇區(qū)
4 讀入10個(gè)柱面
5 著手開發(fā)操作系統(tǒng)
6 從啟動(dòng)區(qū)執(zhí)行操作系統(tǒng)
7 確認(rèn)操作系統(tǒng)的執(zhí)行情況
8 32位模式前期準(zhǔn)備
9 開始導(dǎo)入C語言
10 實(shí)現(xiàn)HLT(harib00j)
第4天 C語言與畫面顯示的練習(xí)
1 用C語言實(shí)現(xiàn)內(nèi)存寫入(harib01a)
2 條紋圖案(harib01b)
3 挑戰(zhàn)指針(harib01c)
4 指針的應(yīng)用(1)(harib01d)
5 指針的應(yīng)用(2)(harib01e)
6 色號(hào)設(shè)定(harib01f)
7 繪制矩形(harib01g)
8 今天的成果(harib01h)
第5天 結(jié)構(gòu)體、文字顯示與GDT/IDT初始化
1 接收啟動(dòng)信息(harib02a)
2 試用結(jié)構(gòu)體(harib02b)
3 試用箭頭記號(hào)(harib02c)
4 顯示字符(harib02d)
5 增加字體(harib02e)
6 顯示字符串(harib02f)
7 顯示變量值(harib02g)
8 顯示鼠標(biāo)指針(harib02h)
9 GDT與IDT的初始化(harib02i)
第6天 分割編譯與中斷處理
1 分割源文件(harib03a)
2 整理Makefile(harib03b)
3 整理頭文件(harib03c)
4 意猶未盡
5 初始化PIC(harib03d)
6 中斷處理程序的制作(harib03e)
第7天 FIFO與鼠標(biāo)控制
1 獲取按鍵編碼(hiarib04a)
2 加快中斷處理(hiarib04b)
3 制作FIFO緩沖區(qū)(hiarib04c)
4 改善FIFO緩沖區(qū)(hiarib04d)
5 整理FIFO緩沖區(qū)(hiarib04e)
6 總算講到鼠標(biāo)了(harib04f)
7 從鼠標(biāo)接受數(shù)據(jù)(harib04g)
第8天 鼠標(biāo)控制與32位模式切換
1 鼠標(biāo)解讀(1)(harib05a)
2 稍事整理(harib05b)
3 鼠標(biāo)解讀(2)(harib05c)
4 移動(dòng)鼠標(biāo)指針(harib05d)
5 通往32位模式之路
第9天 內(nèi)存管理
1 整理源文件(harib06a)
2 內(nèi)存容量檢查(1)(harib06b)
3 內(nèi)存容量檢查(2)(harib06c)
4 挑戰(zhàn)內(nèi)存管理(harib06d)
第10天 疊加處理
1 內(nèi)存管理(續(xù))(harib07a)
2 疊加處理(harib07b)
3 提高疊加處理速度(1)(harib07c)
4 提高疊加處理速度(2)(harib07d)
第11天 制作窗口
1 鼠標(biāo)顯示問題(harib08a)
2 實(shí)現(xiàn)畫面外的支持(harib08b)
3 shtctl的指定省略(harib08c)
4 顯示窗口(harib08d)
5 小實(shí)驗(yàn)(harib08e)
6 高速計(jì)數(shù)器(harib08f)
7 消除閃爍(1)(harib08g)
8 消除閃爍(2)(harib08h)
第12天 定時(shí)器(1)
1 使用定時(shí)器(harib09a)
2 計(jì)量時(shí)間(harib09b)
3 超時(shí)功能(harib09c)
4 設(shè)定多個(gè)定時(shí)器(harib09d)
5 加快中斷處理(1)(harib09e)
6 加快中斷處理(2)(harib09f)
7 加快中斷處理(3)(harib09g)
第13天 定時(shí)器(2)
1 簡化字符串顯示(harib10a)
2 重新調(diào)整FIFO緩沖區(qū)(1)(harib10b)
3 測試性能(harib10c~harib10f)
4 重新調(diào)整FIFO緩沖區(qū)(2)(harib10g)
5 加快中斷處理(4)(harib10h)
6 使用“哨兵”簡化程序(harib10i)
第14天 高分辨率及鍵盤輸入
1 繼續(xù)測試性能(harib11a~harib11c)
2 提高分辨率(1)(harib11d)
3 提高分辨率(2)(harib11e)
4 鍵盤輸入(1)(harib11f)
5 鍵盤輸入(2)(harib11g)
6 追記內(nèi)容(1)(harib11h)
7 追記內(nèi)容(2)(harib11i)
第15天 多任務(wù)(1)
1 挑戰(zhàn)任務(wù)切換(harib12a)
2 任務(wù)切換進(jìn)階(harib12b)
3 做個(gè)簡單的多任務(wù)(1)(harib12c)
4 做個(gè)簡單的多任務(wù)(2)(harib12d)
5 提高運(yùn)行速度(harib12e)
6 測試運(yùn)行速度(harib12f)
7 多任務(wù)進(jìn)階(harib12g)
第16天 多任務(wù)(2)
1 任務(wù)管理自動(dòng)化(harib13a)
2 讓任務(wù)休眠(harib13b)
3 增加窗口數(shù)量(harib13c)
4 設(shè)定任務(wù)優(yōu)先級(jí)(1)(harib13d)
5 設(shè)定任務(wù)優(yōu)先級(jí)(2)(harib13e)
第17天 命令行窗口
1 閑置任務(wù)(harib14a)
2 創(chuàng)建命令行窗口(harib14b)
3 切換輸入窗口(harib14c)
4 實(shí)現(xiàn)字符輸入(harib14d)
5 符號(hào)的輸入(harib14e)
6 大寫字母與小寫字母(harib14f)
7 對各種鎖定鍵的支持(harib14g)
第18天 dir命令
1 控制光標(biāo)閃爍(1)(harib15a)
2 控制光標(biāo)閃爍(2)(harib15b)
3 對回車鍵的支持(harib15c)
4 對窗口滾動(dòng)的支持(harib15d)
5 mem命令(harib15e)
6 cls命令(harib15f)
7 dir命令(harib15g)
第19天 應(yīng)用程序
1 type命令(harib16a)
2 type命令改良(harib16b)
3 對FAT的支持(harib16c)
4 代碼整理(harib16d)
5 第一個(gè)應(yīng)用程序(harib16e)
第20天 API
1 程序整理(harib17a)
2 顯示單個(gè)字符的API(1)(harib17b)
3 顯示單個(gè)字符的API(2)(harib17c)
4 結(jié)束應(yīng)用程序(harib17d)
5 不隨操作系統(tǒng)版本而改變的API(harib17e)
6 為應(yīng)用程序自由命名(harib17f)
7 當(dāng)心寄存器(harib17g)
8 用API顯示字符串(harib17h)
第21天 保護(hù)操作系統(tǒng)
1 攻克難題——字符串顯示API(harib18a)
2 用C語言編寫應(yīng)用程序(harib18b)
3 保護(hù)操作系統(tǒng)(1)(harib18c)
4 保護(hù)操作系統(tǒng)(2)(harib18d)
5 對異常的支持(harib18e)
6 保護(hù)操作系統(tǒng)(3)(harib18f)
7 保護(hù)操作系統(tǒng)(4)(harib18g)
第22天 用C語言編寫應(yīng)用程序
1 保護(hù)操作系統(tǒng)(5)(harib19a)
2 幫助發(fā)現(xiàn)bug(harib19b)
3 強(qiáng)制結(jié)束應(yīng)用程序(harib19c)
4 用C語言顯示字符串(1)(harib19d)
5 用C語言顯示字符串(2)(harib19e)
6 顯示窗口(harib19f)
7 在窗口中描繪字符和方塊(harib19g)
第23天 圖形處理相關(guān)
1 編寫malloc(harib20a)
2 畫點(diǎn)(harib20b)
3 刷新窗口(harib20c)
4 畫直線(harib20d)
5 關(guān)閉窗口(harib20e)
6 鍵盤輸入API(harib20f)
7 用鍵盤輸入來消遣一下(harib20g)
8 強(qiáng)制結(jié)束并關(guān)閉窗口(harib20h)
第24天 窗口操作
1 窗口切換(1)(harib21a)
2 窗口切換(2)(harib21b)
3 移動(dòng)窗口(harib21c)
4 用鼠標(biāo)關(guān)閉窗口(harib21d)
5 將輸入切換到應(yīng)用程序窗口(harib21e)
6 用鼠標(biāo)切換輸入窗口(harib21f)
7 定時(shí)器API(harib21g)
8 取消定時(shí)器(harib21h)
第25天 增加命令行窗口
1 蜂鳴器發(fā)聲(harib22a)
2 增加更多的顏色(1)(harib22b)
3 增加更多的顏色(2)(harib22c)
4 窗口初始位置(harib22d)
5 增加命令行窗口(1)(harib22e)
6 增加命令行窗口(2)(harib22f)
7 增加命令行窗口(3)(harib22g)
8 增加命令行窗口(4)(harib22h)
9 變得更像真正的操作系統(tǒng)(1)(harib22i)
10 變得更像真正的操作系統(tǒng)(2)(harib22j)
第26天 為窗口移動(dòng)提速
1 提高窗口移動(dòng)速度(1)(harib23a)
2 提高窗口移動(dòng)速度(2)(harib23b)
3 提高窗口移動(dòng)速度(3)(harib23c)
4 提高窗口移動(dòng)速度(4)(harib23d)
5 啟動(dòng)時(shí)只打開一個(gè)命令行窗口(harib23e)
6 增加更多的命令行窗口(harib23f)
7 關(guān)閉命令行窗口(1)(harib23g)
8 關(guān)閉命令行窗口(2)(harib23h)
9 start命令(harib23i)
10 ncst命令(harib23j)
第27天 LDT與庫
1 先來修復(fù)bug(harib24a)
2 應(yīng)用程序運(yùn)行時(shí)關(guān)閉命令行窗口(harib24b)
3 保護(hù)應(yīng)用程序(1)(harib24c)
4 保護(hù)應(yīng)用程序(2)(harib24d)
5 優(yōu)化應(yīng)用程序的大小(harib24e)
6 庫(harib24f)
7 整理make環(huán)境(harib24g)
第28天 文件操作與文字顯示
1 alloca(1)(harib25a)
2 alloca(2)(harib25b)
3 文件操作API(harib25c)
4 命令行API(harib25d)
5 日文文字顯示(1)(harib25e)
6 日文文字顯示(2)(harib25f)
7 日文文字顯示(3)(harib25g)
第29天 壓縮與簡單的應(yīng)用程序
1 修復(fù)bug(harib26a)
2 文件壓縮(harib26b)
3 標(biāo)準(zhǔn)函數(shù)
4 非矩形窗口(harib26c)
5 bball(harib26d)
6 外星人游戲(harib26e)
第30天 高級(jí)的應(yīng)用程序
1 命令行計(jì)算器(harib27a)
2 文本閱覽器(harib27b)
3 MML播放器(harib27c)
4 圖片閱覽器(harib27d)
5 IPL的改良(harib27e)
6 光盤啟動(dòng)(harib27f)
第31天 寫在開發(fā)完成之后
1 繼續(xù)開發(fā)要靠大家的努力
2 關(guān)于操作系統(tǒng)的大小
3 操作系統(tǒng)開發(fā)的訣竅
4 分享給他人使用
5 關(guān)于光盤中的軟件
6 關(guān)于開源的建議
7 后記
8 畢業(yè)典禮
9 附錄
章節(jié)摘錄
版權(quán)頁: 插圖: 現(xiàn)在我們要進(jìn)行內(nèi)存管理了。首先必須要做的事情,是搞清楚內(nèi)存究竟有多大,范圍是到哪里。如果連這一點(diǎn)都搞不清楚的話,內(nèi)存管理就無從談起。 在最初啟動(dòng)時(shí),BIOS肯定要檢查內(nèi)存容量,所以只要我們問一問BIOS,就能知道內(nèi)存容量有多大。但問題是,如果那樣做的話,一方面asmhead.nas會(huì)變長,另一方面,BIOS版本不同,BIOS函數(shù)的調(diào)用方法也不相同,麻煩事太多了。所以,筆者想與其如此,不如自己去檢查內(nèi)存。 下面介紹一下做法。 首先,暫時(shí)讓486以后的CPU的高速緩存(cache)功能無效?;貞浺幌伦畛踔v的CPU與內(nèi)存的關(guān)系吧。我們說過,內(nèi)存與CPU的距離地與CPU內(nèi)部元件要遠(yuǎn)得多,因此在寄存器內(nèi)部MOV,要比從寄存器MOV到內(nèi)存快得多。但另一方面,有一個(gè)問題,CPU的記憶力太差了,即使知道內(nèi)存的速度不行,還不得不頻繁使用內(nèi)存。 考慮到這個(gè)問題,英特爾的大叔們在CPU里也加進(jìn)了一點(diǎn)存儲(chǔ)器,它被稱為高速緩沖存儲(chǔ)器(cache memory)。cache這個(gè)詞原是指儲(chǔ)存糧食彈藥等物資的倉庫。但是能夠跟得上CPU速度的高速存儲(chǔ)器價(jià)格特別高,一個(gè)芯片就有一個(gè)CPU那么貴。如果128MB內(nèi)存全部都用這種高價(jià)存儲(chǔ)器,預(yù)算上肯定受不了。高速緩存,容量只有這個(gè)數(shù)值的千分之一,也就是128KB左右。高級(jí)CPU,也許能有1MB高速緩存,但即便這樣,也不過就是128MB的分之一。 為了有效使用如此稀有的高速緩存,英特爾的大叔們決定,每次訪問內(nèi)存,都要將所訪問的地址和內(nèi)容存人到高速緩存里。也就是存放成這樣:18號(hào)地址的值是54。如果下次再要用18號(hào)地址的內(nèi)容,CPU就不再讀內(nèi)存了,而是使用高速緩存的信息,馬上就能回答出l8號(hào)地址的內(nèi)容是54。 往內(nèi)存里寫人數(shù)據(jù)時(shí)也一樣,首先更新高速緩存的信息,然后再寫入內(nèi)存。如果先寫入內(nèi)存的話,在等待寫入完成的期間,CPU處于空閑狀態(tài),這樣就會(huì)影響速度。所以,先更新緩存,緩存控制電路配合內(nèi)存的速度,然后再慢慢發(fā)送內(nèi)存寫入命令。
編輯推薦
39.1K迷你系統(tǒng),實(shí)現(xiàn)多任務(wù)、漢字顯示、文件壓縮,還能聽歌看圖玩游戲。擁有《30天自制操作系統(tǒng)》一書,只需30天,從零開始編寫一個(gè)五臟俱全的圖形操作系統(tǒng)將不再只是個(gè)夢想。 日本編程天才川合秀實(shí),將通過本書,揭開CPU、內(nèi)存、磁盤以及操作系統(tǒng)底層工作模式的神秘面紗。
圖書封面
圖書標(biāo)簽Tags
無
評(píng)論、評(píng)分、閱讀與下載