《 自己動手寫作業系統》由電子工業出版社於2005年8月發行,作者是 於淵。本書主要介紹如何用C語言和彙編語言編寫出具備作業系統基本功能的作業系統框架。
基本介紹
- 書名:自己動手寫作業系統
- 作者:於淵
- ISBN:7-121-01577-3
- 出版社:電子工業出版社
- 出版時間:2005年8月
內容簡介,作品目錄,
內容簡介
本書在詳細分析作業系統原理的基礎上,用豐富的實例代碼,一步一步地指導讀者用C語言和彙編語言編寫出一個具備作業系統基本功能的作業系統框架。本書不同於其他的理論型書籍,而是提供給讀者一個動手實踐的路線圖。書中講解了大量在開發作業系統中需注意的細節問題,這些細節不僅能使讀者更深刻地認識作業系統的核心原理,而且使整個開發過程少走彎路。全書共分7章。
本書適合各類程式設計師、程式開發愛好者閱讀,也可作為高等院校作業系統課程的實踐參考書。
作品目錄
第1章 馬上動手寫一個最小的“作業系統”1
1.1 準備工作1
1.2 10分鐘完成的作業系統1
1.3 Boot Sector3
1.4 代碼解釋3
1.5 水面下的冰山5
1.6 回顧6
第2章 搭建你的工作環境7
2.1 虛擬計算機(Virtual PC)7
2.1.1 Virtual PC初體驗8
2.1.2 創建你的第一個Virtual PC9
2.1.3 虛擬軟碟研究12
2.1.4 虛擬軟碟實戰14
2.2 編譯器(NASM & GCC)18
2.3 安裝虛擬Linux19
2.4 在虛擬Linux上訪問Windows資料夾26
2.5 安裝虛擬PCDOS26
2.6 其他要素29
2.7 Bochs29
2.7.1 Bochs vs. Virtual PC vs. VMware30
2.7.2 Bochs的使用方法31
2.7.3 用Bochs進行調試33
2.7.4 在Linux上開發34
2.8 總結與回顧36
第3章 保護模式(Protect Mode)37
3.1 認識保護模式37
3.1.1 GDT(Global Descriptor Table) 42
3.1.2 實模式到保護模式,不一般的jmp45
3.1.3 描述符屬性47
3.2 保護模式進階50
3.2.1 海闊憑魚躍50
3.2.2 LDT(Local Descriptor Table)58
3.2.3 特權級62
3.3 頁式存儲82
3.3.1 分頁機制概述83
3.3.2 編寫代碼啟動分頁機制84
3.3.3 PDE和PTE85
3.3.4 cr388
3.3.5 回頭看代碼88
3.3.6 克勤克儉用記憶體90
3.3.7 進一步體會分頁機制100
3.4 中斷和異常107
3.4.1 中斷和異常機制109
3.4.2 外部中斷111
3.4.3 編程操作8259A113
3.4.4 建立IDT116
3.4.5 實現一個中斷117
3.4.6 時鐘中斷試驗119
3.4.7 幾點額外說明121
3.5 保護模式下的I/O122
3.5.1 IOPL122
3.5.2 I/O許可點陣圖(I/O Permission Bitmap)123
3.6 保護模式小結123
第4章 讓作業系統走進保護模式125
4.1 突破512位元組的限制125
4.1.1 FAT12126
4.1.2 DOS可以識別的引導盤131
4.1.3 一個最簡單的Loader132
4.1.4 載入Loader入記憶體133
4.1.5 向Loader交出控制權142
4.1.6 整理boot.asm142
4.2 保護模式下的“作業系統”144
第5章 核心雛形146
5.1 用NASM在Linux下寫Hello World146
5.2 再進一步,彙編和C同步使用148
5.3 ELF(Executable and Linkable Format)150
5.4 從Loader到核心155
5.4.1 用Loader載入ELF155
5.4.2 跳入保護模式161
5.4.3 重新放置核心170
5.4.4 向核心交出控制權175
5.4.5 作業系統的調試方法176
5.5 擴充核心184
5.5.1 切換堆疊和GDT184
5.5.2 整理我們的資料夾191
5.5.3 Makefile191
5.5.4 添加中斷處理200
5.5.5 兩點說明218
5.6 小結219
第6章 進程221
6.1 遲到的進程221
6.2 概述222
6.2.1 進程介紹222
6.2.2 未雨綢繆——形成進程的必要考慮222
6.2.3 參考的代碼224
6.3 最簡單的進程224
6.3.1 簡單進程的關鍵技術預測225
6.3.2 第一步——ring0→ring1227
6.3.3 第二步——豐富中斷處理程式243
6.3.4 進程體設計技巧254
6.4 多進程256
6.4.1 添加一個進程體256
6.4.2 相關的變數和宏257
6.4.3 進程表初始化代碼擴充258
6.4.4 LDT260
6.4.5 修改中斷處理程式261
6.4.6 添加一個任務的步驟總結263
6.4.7 號外:Minix的中斷處理265
6.4.8 代碼回顧與整理269
6.5 系統調用280
6.5.1 實現一個簡單的系統調用280
6.5.2 get_ticks的套用286
6.6 進程調度292
6.6.1 避免對稱——進程的節奏感292
6.6.2 優先權調度總結300
第7章 輸入/輸出系統302
7.1 鍵盤302
7.1.1 從中斷開始——鍵盤初體驗302
7.1.2 AT、PS/2鍵盤304
7.1.3 鍵盤敲擊的過程304
7.1.4 解析掃描碼309
7.2 顯示器325
7.2.1 初識TTY325
7.2.2 基本概念326
7.2.3 暫存器328
7.3 TTY任務332
7.3.1 TTY任務框架的搭建334
7.3.2 多控制台340
7.3.3 完善鍵盤處理346
7.3.4 TTY任務總結354
7.4 區分任務和用戶進程354
7.5 printf357
7.5.1 為進程指定TTY357
7.5.2 printf()的實現358
7.5.3 系統調用write()361
7.5.4 使用printf()363
後記366
參考文獻369
附錄書中的章節和代碼對照表370