作者簡介
鄭鋼
畢業於北京大學,前百度運維高級工程師,對作業系統有深入的研究。愛運動,喜鑽研,熱衷於嘗試前沿技術,樂於分享學習成果。
前言
Chapter 00 一些你可能正感到迷惑的問題
0.1 作業系統是什麼
0.2 你想研究到什麼程度
0.3 撰寫作業系統,哪些需要我來做
0.4 軟體是如何存取硬體的
0.5 應用程式是什麼,和作業系統是如何配合到一起的
0.6 為什麼稱為「陷入」核心
0.7 記憶體存取為什麼要分段
0.8 程式中為什麼分為程式碼片段、資料段?這和記憶體存取機制中的段是一回事嗎
0.9 實體位址、邏輯位址、有效位址、線性位址、虛擬位址的區別
0.10 什麼是段重疊
0.11 什麼是平坦模型
0.12 cs、ds 這種sreg 段暫存器,位寬是多少
0.13 什麼是專案,什麼是協定
0.14 為什麼Linux 系統下的應用程式不能在Windows 系統下執行
0.15 區域變數和函數參數為什麼要放在堆疊中
0.16 為什麼說組合語言比C 語言快
0.17 先有的語言,還是先有的編譯器,第1 個編譯器是怎麼產生的
0.18 編譯型程式與直譯型程式的區別
0.19 什麼是大端位元組序、小端位元組序
0.20 BIOS 中斷、DOS 中斷、Linux 中斷的區別
0.21 Section 和Segment 的區別
0.22 什麼是魔術參數
0.23 作業系統是如何識別檔案系統的
0.24 如何控制CPU 的下一行指令
0.25 指令集、系統結構、微架構、程式語言
0.26 函數庫函數是使用者處理程序與核心的橋樑
0.27 逸出字元與ASCII 碼
0.28 MBR、EBR、DBR 和OBR各是什麼
Chapter 01 部署工作環境
1.1 工欲善其事,必先利其器
1.2 我們需要哪些編譯器
1.3 作業系統的宿主環境
1.4 設定bochs
1.5 執行bochs
Chapter 02 撰寫MBR 主啟動記錄,讓我們開始掌權
2.1 電腦的啟動過程
2.2 軟體接力第一棒,BIOS
2.3 讓MBR 先飛一會兒
Chapter 03 增強MBR
3.1 地址、section、vstart 淺嘗即止
3.2 CPU 的真實模式
3.3 讓我們直接對顯示器說點什麼吧
3.4 bochs 偵錯方法
3.5 硬碟介紹
3.6 讓MBR 使用硬碟
Chapter 04 保護模式入門
4.1 保護模式概述CPU,變成了16 位元
4.2 初見保護模式
4.3 通用描述元表
4.4 處理器微架構簡介
4.5 使用遠跳躍指令清空管線,更新段描述符號緩衝暫存器
4.6 保護模式之記憶體段的保護
Chapter 05 保護模式進階,向核心邁進
5.1 取得實體記憶體容量
5.2 啟用記憶體分頁機制,暢遊虛擬空間
5.3 載入核心
5.4 特權等級深入淺出
Chapter 06 增強核心
6.1 函數呼叫約定簡介
6.2 組合語言和C 語言混合程式設計
6.3 實現自己的列印函數
6.4 內聯組合語言
Chapter 07 中斷
7.1 中斷是什麼,為什麼要有中斷
7.2 作業系統是中斷驅動的
7.3 中斷分類
7.4 中斷描述符號表
7.5 可程式化中斷控制器8259A
7.6 撰寫中斷處理常式
7.7 可程式化計數器/計時器8253 簡介
7.8 加強時脈中斷的頻率,讓中斷來得更猛烈一些
Chapter 08 記憶體管理系統
8.1 makefile 簡介
8.2 實現assert 斷言
8.3 實現字串操作函數
8.4 點陣圖bitmap 及其函數的實現
8.5 記憶體管理系統
Chapter 09 執行緒
9.1 實現核心執行緒
9.2 在核心空間實現執行緒
9.3 核心資料結構,雙向鏈結串列
9.4 多執行緒排程
Chapter 10 輸入輸出系統
10.1 同步機制——鎖
10.2 用鎖實現終端輸出
10.3 從鍵盤取得輸入
10.4 撰寫鍵盤驅動
10.5 環狀輸入緩衝區
Chapter 11 使用者處理程序
11.1 為什麼要有工作狀態段TSS
11.2 定義並初始化TSS
11.3 實現使用者處理程序
11.3 執行時期註釋
Chapter 12 進一步增強核心
12.1 Linux 系統呼叫淺析.
12.2 系統呼叫的實現
12.3 讓使用者處理程序「說話」
12.4 增強堆積記憶體管理
Chapter 13 撰寫硬碟驅動程式
13.1 硬碟及分區表
13.2 撰寫硬碟驅動程式
Chapter 14 檔案系統
14.1 檔案系統概念簡介
14.2 建立檔案系統
14.3 檔案描述符號簡介
14.4 檔案操作相關的基礎函數
14.5 建立檔案
14.6 檔案的開啟與關閉
14.7 實現檔案寫入
14.8 讀取檔案
14.9 實現檔案讀寫指標定位功能
14.10 實現檔案刪除功能
14.11 建立目錄
14.12 檢查目錄
14.13 刪除目錄
14.14 工作的工作目錄
14.15 獲得檔案屬性
Chapter 15 系統互動
15.1 fork 的原理與實現
15.2 增加read 系統呼叫,取得鍵盤輸入
15.3 增加putchar、clear 系統呼叫
15.4 實現一個簡單的shell
15.5 載入使用者處理程序
15.6 實現系統呼叫wait 和exit
15.7 管線