一個64位作業系統的設計與實現——目錄(已通過稽核)

田宇發表於2015-04-15

非常感謝大家提供的寶貴意見和建議,文章的目錄(V0.3版)已經通過稽核啦,但是,在這個作業系統沒開發完之前,這個目錄應該還會有內容遺漏或者當時考慮不周到的地方,所以,這也不是最終的目錄,我會根據開發進度及時更新調整的,同時也歡迎大家多提寶貴意見。
在此,感謝一直關注這本書的讀者們,謝謝~!

第一部分 作業系統相關知識介紹及環境搭建

  1. 作業系統整體概述
    1.1 什麼是作業系統
    1.2 作業系統結構組成
    1.3 寫作業系統需要的知識
    1.4 本書作業系統簡介
  2. 環境搭建及基礎知識介紹
    2.1 虛擬機器及開發系統平臺介紹
    2.1.1 VMware安裝
    2.1.2 搭建CentOS系統平臺
    2.1.3 Bochs虛擬機器安裝與使用簡介
    2.2 組合語言
    2.2.1 AT&T彙編與Intel彙編
    2.2.2 NASM彙編
    2.2.3 彙編呼叫C函式
    2.3 C語言
    2.3.1 GNU C內嵌組合語言
    2.3.2 GNU C對標準C語言的擴充套件

    第二部分 初級篇

  3. BootLoader引導啟動程式
    3.1 Boot啟動程式
    3.1.1 Boot原理
    3.1.2 寫一個Boot程式
    3.1.3 建立虛擬軟盤映象檔案
    3.1.4 在Bochs上執行我們的Boot程式
    3.1.5 載入Loader到記憶體
    3.1.6 從Boot跳轉到Loader程式
    3.2 Loader引導載入程式
    3.2.1 Loader原理
    3.2.2 寫一個Loader程式
    3.2.3 從真實模式進入保護模式再到IA-32E模式
    3.2.3.1 從真實模式進入保護模式
    3.2.3.2 從保護模式進入IA-32E模式
    3.2.4 從Loader跳轉到核心程式

  4. 核心層
    4.1 核心執行頭
    4.1.1 什麼是核心執行頭
    4.1.2 寫一個執行頭程式
    4.1.3 從執行頭進入到核心主程式
    4.1.4 在螢幕上顯示色彩
    4.1.5 在螢幕上輸出log
    4.1.5.1 ASCII字元庫
    4.1.5.2 printk函式的實現
    4.2 系統異常
    4.2.1 錯誤(fault)、異常(trap)、終止(abort)的區別
    4.2.2 捕獲系統異常
    4.3 記憶體頁表分配
    4.3.1 獲得實體記憶體資訊
    4.3.2 計算可用記憶體頁數
    4.3.3 分配可用物理頁
    4.4 外部中斷處理
    4.4.1 設定中斷控制器
    4.4.2 觸發一箇中斷
    4.5 鍵盤驅動
    4.5.1 簡述鍵盤功能
    4.5.2 實現鍵盤中斷捕獲函式
    4.6 程式管理
    4.6.1 簡述程式管理模組
    4.6.2 建立程式管理結構體
    4.6.3 建立Init程式
    4.6.4 跳轉到使用者層
  5. 使用者層
    5.1 寫一個系統API介面
    5.2 寫Hello World!程式

    第三部分 高階篇

  6. 處理器體系結構
    6.1 真實模式
    6.1.1 真實模式概述
    6.1.2 真實模式定址方式
    6.1.3 真實模式下的中斷向量表
    6.2 保護模式
    6.2.1 保護模式概述
    6.2.2 保護模式下的段機制
    6.2.3 保護模式下的頁機制
    6.2.4 保護模式下的門描述符
    6.3 IA32-E模式
    6.3.1 IA32-E模式概述
    6.3.2 IA-32E模式下的段機制
    6.3.3 IA-32E模式下的頁機制
    6.3.4 IA-32E模式下的門描述符

  7. 完善BootLoader功能
    7.1 真實模式下的定址瓶頸
    7.1.1 錯綜複雜的1MB實體記憶體空間
    7.1.2 突破1MB實體記憶體瓶頸
    7.1.3 真實模式下的4G定址
    7.2 細說各個模式間的切換
    7.3 BIOS中斷
    7.3.1 Int 10h 顯示文字
    7.3.2 Int 13h 讀軟盤扇區
    7.3.3 Int 15h E820獲得實體記憶體資訊
    7.4 劃分各個硬體資料的儲存空間
    7.5 U盤啟動
    7.5.1 USB-ZIP、USB-HDD、USB-FDD區別簡介
    7.5.2 把BootLoader改為U盤啟動
    7.6 細說VBE(VESA BIOS EXTENSION)功能的實現
    7.6.1 VBE規範概述
    7.6.2 獲得硬體平臺的VBE相關資訊
    7.6.3 設定顯示模式

  8. 核心主程式
    8.1 核心主程式功能概述
    8.2 編譯指令碼介紹
    8.3 連結指令碼介紹
    8.4 作業系統空間劃分
    8.5 獲得處理器基本資訊及擴充套件資訊

  9. 記憶體管理
    9.1 統計實體記憶體資訊
    9.2 記憶體管理單元結構及相關巨集定義
    9.3 分配可用物理頁功能重構
    9.4 slab緩衝池技術
    9.5 基於slab的系統記憶體管理功能
    9.6 頁表重新初始化

  10. 高階中斷處理
    10.1 8259A簡介
    10.2 Local APIC高階可程式設計中斷控制器
    10.2.1 Local APIC概述
    10.2.2 操作暫存器的相關方法
    10.2.3 Local APIC暫存器列表
    10.3 I/O APIC 外設高階中斷控制器
    10.3.1 I/O APIC 概述
    10.3.2 I/O APIC 暫存器列表
    10.3.3 如何使能I/O APIC
    10.3.3.1 檢視晶片組
    10.3.3.2 RCBA暫存器——Root Complex Base Address Register
    10.3.3.3 OIC暫存器——Other Interrupt Control Register
    10.3.3.4 使能中斷投遞
    10.4 中斷初始化
    10.5 Linux中斷處理思想概述
    10.6 實現我們的中斷處理功能
    10.6.1 實現中斷上部處理功能
    10.6.2 實現中斷下部處理功能

  11. 驅動程式
    11.1 鍵盤和滑鼠驅動程式
    11.1.1 鍵盤原理
    11.1.2 滑鼠原理
    11.1.3 I8042控制器
    11.1.4 完善鍵盤驅動
    11.1.4.1 鍵盤初始化函式
    11.1.4.2 鍵盤中斷處理函式
    11.1.4.3 鍵盤掃描碼解析函式
    11.1.5 實現滑鼠驅動
    11.1.5.1 滑鼠初始化函式
    11.1.5.2 滑鼠中斷處理函式
    11.1.5.3 滑鼠協議解析函式
    11.2 硬碟驅動程式
    11.2.1 硬碟結構及原理
    11.2.1.1 硬碟原理概述
    11.2.1.2 IDE硬碟與SATA硬碟的區別
    11.2.1.3 硬碟介面功能列表簡介
    11.2.2 硬碟操作初探
    11.2.2.1 調整BIOS的硬碟操作模式
    11.2.2.2 實現一個讀硬碟ROM資訊的程式
    11.2.2.3 實現一個清除硬碟扇區資料的程式
    11.2.3 完善硬碟驅動程式
    11.2.3.1 硬碟初始化函式
    11.2.3.2 硬碟中斷處理函式
    11.2.3.3 讀硬碟操作
    11.2.3.4 寫硬碟操作

  12. 程式管理
    12.1 程式管理單元功能概述
    12.2 完善程式控制模組(PCB)結構體
    12.3 完善init程式
    12.4 程式排程
    12.4.1 Linux程式排程功能介紹
    12.4.2 時鐘中斷處理
    12.4.2.1 牆上時鐘
    12.4.2.2 定時器時鐘
    12.4.3 核心延時函式
    12.4.4 基於時間片輪詢的程式排程函式
    12.5 多核
    12.5.1 Hyper-threading & Multi-core概述
    12.5.2 ICR中斷命令暫存器
    12.5.3 IPI多核間通訊
    12.5.4 多核引導程式碼
    12.5.5 讓我們的系統支援多核
    12.5.6 多核間加鎖機制
    12.6 程式間通訊
    12.6.1 程式間通訊原理
    12.6.2 實現程式間訊號通訊功能

  13. 檔案系統
    13.1 檔案系統概述
    13.2 解析FAT類檔案系統
    13.3 Linux虛擬檔案系統簡介
    13.4 寫一個支援FAT32的檔案系統
    13.4.1 superblock超級塊結構體
    13.4.2 inode節點結構體
    13.4.3 dentry目錄結構體
    13.4.4 file檔案結構體
    13.4.5 fileoperation檔案操作結構體
    13.5 檔案系統初始化函式
    13.6 搜尋路徑函式
    13.7 檔案的讀寫操作
    13.8 檔案的其他操作

  14. 系統異常
    14.1 Linux的相關實現
    14.2 實現缺頁異常

  15. 系統API庫
    15.1 系統呼叫原理
    15.2 基於POSIX規範實現常用的系統庫函式
    15.2.1 POSIX規範簡介
    15.2.2 fork、clone函式實現
    15.2.3 open、close、read、write函式實現
    15.2.4 execve、exit函式實現
    15.2.5 signal函式實現
    15.2.6 mmap函式實現

  16. 圖形庫
    16.1 完善顯示部分驅動程式
    16.1.1 顯示驅動結構體
    16.1.2 顯示驅動初始化函式
    16.1.3 新增mmap功能
    16.2 將視訊記憶體對映到使用者空間
    16.3 實現基本圖形庫函式
    16.3.1 點描畫函式
    16.3.2 線描畫函式
    16.3.3 矩形描畫函式
    16.4 實現貼圖功能
    16.4.1 貼圖功能概述
    16.4.2 BitMap圖片結構概述
    16.4.3 實現BitMap函式
    16.4.4 實現貼圖函式

  17. 視窗管理器
    17.1 視窗管理器原理概述
    17.2 實現一個簡單的視窗管理器
    17.2.1 建立視窗
    17.2.2 移動視窗
    17.2.3 銷燬視窗
    17.3 視窗焦點管理
    17.3.1 滑鼠跟隨獲得焦點
    17.3.2 滑鼠點選獲得焦點
    17.3.3 畫一個滑鼠箭頭
    17.3.4 實現焦點管理
    17.4 視窗訊息傳遞
    17.4.1 訊息傳遞原理概述
    17.4.2 實現訊息傳遞功能
    17.5 實現視窗點選事件
    17.5.1 新增視窗最大化功能
    17.5.2 新增視窗最小化功能
    17.5.3 新增視窗關閉功能

  18. 基本命令
    18.1 終端命令列視窗
    18.1.1 終端原理概述
    18.1.2 實現一個終端視窗
    18.2 ELF執行檔案頭
    18.2.1 ELF概述
    18.2.2 實現ELF解析功能函式
    18.3 編寫基本命令
    18.3.1 ls顯示目錄命令
    18.3.2 pwd顯示當前路徑命令
    18.3.3 cd切換目錄命令
    18.3.4 touch建立檔案命令
    18.3.5 exec執行程式命令
    18.3.6 poweroff關機命令

  19. 桌面
    19.1 設計桌面佈局
    19.2 新增工作列功能
    19.3 新增時鐘功能
    19.4 新增關機按鈕功能

  20. 完善功能及優化
    20.1 完善作業系統功能
    20.2 對系統效能進行優化

擬定目錄——向大家求助

起因:

年初我將圖書選題情況表和大綱提交給圖靈出版社後,現在的反饋是:

  1. 大綱與題目不太符合,說更像是講Intel處理器的書;
  2. 與30天自制作業系統對比,感覺讀者讀了半本書也寫不出個作業系統來;
  3. 本來擬定是一系列叢書的,最後調整到一本800頁,頁數太多有風險。(個人感覺,寫一個64位作業系統的實現,從底層到上層都講的話,800頁能夠嗎?我覺得一個核心講800頁應該是夠的。)

因為我也是第一次寫作,沒有什麼經驗,所以,希望大家能幫我調整一下文章目錄,覺得那裡該刪減,那裡該新增,我知道目前這個目錄有很多缺陷和考慮不周的地方。請都指出來,說說你們的想法!!。。。。。。在此向大家致謝啦~!

第一章 環境搭建

1.1VMware的安裝
1.2系統平臺——CentOS6
1.3Bochs——一個可除錯的虛擬機器
1.3.1Bochs環境安裝
1.3.2Bochs執行環境配置
1.3.3Bochs相關的除錯命令

第二章 基礎知識——走的越遠基礎越重要

2.1組合語言
2.1.1AT&T 彙編與intel彙編
2.1.2NASM彙編
2.1.3彙編呼叫C函式
2.2C語言
2.2.1GNU C內嵌組合語言
2.2.2GUN C對標準C語言的擴充套件
2.2.3一些常用的庫函式實現
2.3MakeFile編譯指令碼
2.3.1Linux的MakeFile
2.3.2寫一個MakeFile
2.4LD連結指令碼
2.4.1 語法簡介
2.4.2 Linux的vmlinux.lds

第三章 Boot——萬事開頭難

3.1Boot在哪裡?——MBR扇區
3.2Boot的功能
3.3編寫我們的Boot程式碼
3.4建立一個軟盤映象
3.5讓我們的Boot跑起來
3.6強大的BIOS中斷
3.6.1int 10h 顯示文字
3.6.2int 13h 讀軟盤扇區
3.6.3int 15h E820h獲得實體記憶體資訊
3.7真實模式的瓶頸——1MB記憶體的地址劃分
3.8FAT12——一個軟盤檔案系統
3.9FAT12檔案系統結構及原理
3.10讓我們的程式碼尋找Loader

第四章 保護模式&IA32e模式——枯燥中不失深奧

4.1保護模式概述
4.232位段結構 & 頁結構
4.3IA32e模式概述
4.464位段結構 & 頁結構
4.5CR控制暫存器

第五章 Loader——跟真實模式說再見

5.1GRUB & Uboot——現代的bootloader
5.2Loader的功能
5.3錯綜複雜的1MB記憶體空間
5.4突破1MB瓶頸——開啟地址A20
5.5劃分我們的地址空間
5.6突破渴望——誰說真實模式下就不能定址4GB!
5.7一個關鍵的跳躍——goto Kernel

第六章 真實的色彩——VESA BIOS EXTENSION

6.1什麼是VBE
6.2VBE功能介紹
6.2.1 VBE狀態
6.2.2 VBE功能號
6.2.3 設定VBE模式
6.2.4 設定我們的顯示模式

第七章 一個轉折性的跳躍——main.c

7.1at&t 64位彙編的注意事項
7.2head.s——我來組成頭部
7.3記憶體地址空間劃分——連結指令碼的作用
7.4揚帆起航——Start_Kernel

第八章 printk——你值得擁有

8.1幀存初體驗
8.2ASCII碼——我們的字元庫font.h
8.3printk()

第九章 看看我們的處理器型號——CPUID

9.1處理器基本資訊與擴充套件資訊
9.2最大定址範圍
9.3實體地址
9.4線性地址
9.5原來我的處理器是I7

第十章 U盤啟動——擺脫虛擬虛擬環境

10.1USB ZIP、USB HDD、USB FDD
10.2使用硬碟軟體格式化U盤
10.3重新分析fat12檔案系統在U盤扇區上的結構
10.4修改我們的BootLoader
10.5讓夢想飛起來——U盤啟動
10.6一次蛻變——從虛擬機器到物理機

第十一章 Trap、Fault、Abort——處理器異常

11.1Trap、Fault、Abort異常
11.2EFLAGES
11.3門描述符
11.4保護模式下的門描述符
11.5IA32e模式下的門描述符
11.6處理異常前的準備——gate.h
11.7Linux的相關實現
11.8給核心加上異常處理

第十二章 記憶體管理單元——從此不再裸奔

12.1pagetable_init ()——真正的頁表初始化函式
12.2init_memory ()——總該整理下記憶體空間了
12.3alloc_pages()——有這個就可以申請連續物理頁了
12.4slab_init()——做個簡單的緩衝池管理
12.5kmalloc_create()——有了這個自由呼叫kmalloc不是夢
12.6kmalloc()——2MB以內的空間盡情申請
12.7kfree()——記憶體釋放就這麼簡單
12.8framebuffer的重定向
12.9framebuffer_init()
12.10彩色printk——螢幕從此不再單調

第十三章 處理器上的Local APIC——高階可中斷程式設計控制器

13.1中斷控制器的發展史
13.2APIC的功能
13.3local APIC版本
13.4操作暫存器的相關方法
13.5暫存器列表
13.6中斷實現

第十四章 IOAPIC——晶片組裡的裝置中斷投遞

14.1過時的中斷控制器——8259A
14.2IOAPIC——I/O 高階中斷控制器
14.3IOAPIC暫存器列表
14.4如何使能IOAPIC
14.5檢視晶片組
14.6RCBA暫存器——Root Complex Base Address Register
14.7OIC暫存器——Other Interrupt Control Register
14.8第一次親密接觸——觸發一箇中斷

第十五章 策略與機制——設計我們的中斷處理

15.1設計思想概述 15.1.1Linux中斷處理思想
15.1.2取其精華——我們的中斷處理
15.2中斷的註冊與登出
15.3中斷處理函式

第十六章 鍵盤——我們的第一個裝置驅動

16.1強大的I8042
16.2鍵盤原理
16.3如何與鍵盤通訊——埠60h和64h
16.4鍵盤掃描碼
16.5鍵盤驅動
16.5.1鍵盤的初始化函式 16.5.2鍵盤的中斷處理函式
16.6鍵盤掃描碼解析函式

第十七章 滑鼠——鍵盤從此不再孤單

17.1滑鼠原理
17.2滑鼠通訊——還是埠60h、64h
17.3滑鼠資料包
17.4滑鼠驅動
17.5滑鼠初始化函式
17.6滑鼠中斷處理函式
17.7滑鼠協議解析函式

第十八章 硬碟——我們的百寶箱

18.1硬碟結構及原理
18.1.1硬體結構
18.1.2硬碟埠
18.2硬碟初探——讀取MBR扇區
18.3完善硬碟驅動
18.4硬碟初始化函式
18.5硬碟中斷處理函式
18.6讀硬碟操作
18.7寫硬碟操作

第十九章 FAT32檔案系統——FAT12的升級版

19.1FAT家族——FAT 12的擴充套件版
19.2FAT 16檔案系統結構
19.3FAT 32檔案系統結構
19.4VFAT檔案系統結構
19.5Linux虛擬檔案系統簡介
19.6寫一個FAT相容型檔案系統
19.7設計檔案系統相關結構體
19.8SuperBlock結構體
19.9Inode結構體
19.10Dentry結構體
19.11File結構體
19.12path_walk()——沿著路徑找到我們的檔案
19.13操作一個檔案

第二十章 你不是一個人在戰鬥——遲到的多核

20.1Hyper-threading & Multi-core
20.2ICR——Interrupt Command Register
20.3多核引導程式碼
20.4多核間通訊IPI ——Inter-Processor Interrupt

第二十一章 又一個跳轉——進入應用層

21.1建立我們的PCB結構體
21.2初始化init程式
21.3進入應用層空間

第二十二章 程式排程——schedule

22.1時鐘中斷
22.2牆上時鐘
22.3時間片時鐘
22.4基於時間片輪詢
22.5設計我們的時間片輪詢
22.6程式間的排程
22.7程式間通訊
22.8多核間的程式排程
22.9系統API呼叫——System Call
22.10應用層函式庫——我們也實現部分POSIX吧

第二十三章 一些基本命令

23.1實現一個終端
23.2我們的ELF——Executable and Link Format
23.3ls——顯示目錄內容
23.4pwd——顯示當前路徑
23.5cd——切換目錄
23.6touch——建立檔案
23.7exec——執行程式
23.8poweroff——關機

第二十四章 UI介面

24.1重做顯示驅動
24.2BitMap圖片解析器
24.3點、線、面、貼圖——實現一個描畫庫
24.4設定系統桌面
24.5滑鼠箭頭
24.6視窗管理器
24.7視窗焦點管理
24.8滑鼠跟隨獲得焦點
24.9滑鼠點選獲得焦點
24.10輸入訊息傳遞

第二十五章 最後的奉獻

25.1設計桌面佈局以及按鈕事件
25.2設計視窗點選事件
25.3讓程式執行在指定處理器上

以上這是本書的暫定內容,希望大家多提建議,幫助我修改,說出您的想法,萬分感激~!~!

擬定目錄V0.2版——麻煩大家再給提提意見

根據之前大家提出的修改意見,我對目錄進行了整體結構修改,修改後,目錄的結構性更強了。應該看著有點像本《作業系統》的書籍了。但是,不知道還有哪裡不合理的地方,還請大家再給提提意見,謝謝大家了~!

第一部 環境搭建及基礎知識介紹

1. 環境搭建
1.1VMware的安裝
1.2系統平臺——CentOS6
1.3Bochs——一個可調式的虛擬機器
2.基礎知識
2.1 組合語言
2.1.1 AT&T彙編與Intel彙編
2.1.2 NASM編譯器
2.1.3 彙編呼叫C函式
2.2 C語言
2.2.1 GNU C內嵌組合語言
2.2.2 GNU C會標準C語言的擴充套件

第二部分 bootloader引導篇

3.boot引導
3.1 boot原理
3.1.1 boot功能
3.1.2 寫一個簡單的boot
3.1.3 建立軟盤映象
3.1.4 在Bochs下執行我們的boot程式
3.2 FAT12檔案系統
3.2.1 FAT12檔案系統結構及原理
3.2.2 讓boot識別FAT12檔案系統
3.2.3 跳轉到loader
4. loader檢測
4.1 loader原理
4.1.1 loader功能
4.1.2 GRUB&Uboot介紹
4.1.3 寫一個簡單的loader程式
4.2 BIOS中斷
4.2.1 int 10h 顯示文字
4.2.2 int 13h 讀軟盤扇區
4.2.3 int 15h E820獲得物力記憶體資訊
4.3 真實模式簡介
4.3.1 真實模式概述
4.3.2 真實模式下的定址瓶頸
4.3.2.1 錯綜複雜的1MB實體記憶體空間
4.3.2.2 突破1MB實體記憶體瓶頸
4.4 載入核心
4.4.1 為獲得的資料劃分地址空間
4.4.2 真實模式下的4GB定址
4.4.3 從真實模式切換到保護模式
4.4.4 保護模式概述
4.4.4.1 保護模式下的段定址
4.4.4.2 保護模式下的頁定址
4.4.5 從保護模式切換到IA-32E模式
4.4.6 IA-32E模式概述
4.4.6.1 IA-32E模式下的段定址
4.4.6.2 IA-32E模式下的頁定址
4.4.7 向核心跳轉

第三部分 核心空間篇

5.核心啟動
5.1 核心執行頭
5.1.1 核心執行頭功能介紹
5.1.2 寫一個head.s執行頭程式
5.2 編譯指令碼
5.2.1 編譯指令碼簡介
5.2.2 為我們的核心寫一個MakeFile編譯指令碼
5.3 連結指令碼
5.3.1 結合Linux的vmlinux.lds簡介連結指令碼
5.3.2 為我們的核心寫一個連結指令碼
5.4 從核心執行頭跳轉至核心Start_Kernel主函式
5.5 顯示部分
5.5.1 視訊記憶體概述
5.5.2 VBE(VESA BIOS EXTENSION)規範
5.5.2.1 VBE規範概述
5.5.2.2 獲得硬體平臺的VBE相關資訊
5.5.2.3 根據硬體資訊設定顯示模式
5.5.3 printk函式
5.5.3.1 ASCII字元庫
5.5.3.2 彩色printk函式的實現
5.6 處理器基本資訊與擴充套件資訊
5.6.1 CPUID指令概述
5.6.2 最大定址範圍
5.6.2.1 最大物理定址範圍
5.6.2.2 最大線性定址範圍
5.6.3 獲得處理器型號資訊
5.7 U盤啟動
5.7.1 USB-ZIP、USB-HDD、USB-FDD區別簡介
5.7.2 讓我們的系統改為U盤啟動
5.7.2.1 使用軟體格式化U盤
5.7.2.2 重新分析U盤上的FAT12檔案系統
5.7.2.3 修改我們的BootLoader程式
6. 系統異常
6.1 系統異常概述
6.1.1 錯誤(Fault)
6.1.2 異常(Trap)
6.1.3 中斷(Abort)
6.2 各個模式下的中斷概述
6.2.1 真實模式下的中斷向量表
6.2.2 門描述符
6.2.2.1 保護模式下的門描述符
6.2.2.2 IA-32E模式下的門描述符
6.3 為我們的系統新增異常處理功能
6.3.1 定義門結構體
6.3.2 Linux的相關實現
6.3.3 實現我們的異常處理功能
7. 記憶體管理
7.1 記憶體管理單元初始化
7.1.1 統計可用實體記憶體資訊
7.1.2 建立記憶體管理結構
7.1.2.1 記憶體管理結構概述
7.1.2.2 為我們的系統編寫記憶體管理單元結構
7.1.3 完成記憶體管理單元初始化
7.2 從頁表申請物理頁
7.2.1 頁分配原理
7.2.2 實現分配頁表函式alloc_page
7.3 基於快取池技術的系統記憶體管理功能
7.3.1 系統記憶體管理功能概述
7.3.2 快取池實現原理
7.3.3 實現快取池初始化函式slab_init
7.3.4 基於快取池技術的記憶體申請函式kmalloc_create
7.3.5 記憶體申請函式kmalloc
7.3.6 記憶體釋放函式kfree
7.4 頁表初始化
7.4.1 重新初始化系統頁表
7.4.2 FrameBuffer重定向
8. 中斷處理
8.1 中斷控制器
8.1.1 早期8259A簡介
8.1.2 Local APIC 高階可程式設計中斷控制器
8.1.2.1 Local APIC 概述
8.1.2.2 操作暫存器的相關方法
8.1.2.3 Local APIC 暫存器列表
8.1.3 I/O APIC 高階中斷控制器
8.1.3.1 I/O APIC 概述
8.1.3.2 I/O APIC 暫存器列表
8.1.3.3 如何使能I/O APIC
8.1.3.3.1 檢視晶片組
8.1.3.3.2 RCBA暫存器——Root Complex Base Address Register
8.1.3.3.3 OIC暫存器——Other Interrupt Control Register
8.2 中斷初始化
8.2.1 實現Local APIC初始化
8.2.2 實現I/O APIC初始化
8.2.3 觸發一箇中斷
8.3 借鑑Linux設計中斷處理函式
8.3.1 Linux中斷處理思想概述
8.3.2 中斷的註冊與登出
8.3.3 中斷上部處理函式
8.3.4 中斷下部處理函式
9. 裝置驅動
9.1 鍵盤驅動
9.1.1 鍵盤原理
9.1.1.1 鍵盤結構概述
9.1.1.2 鍵盤通訊
9.1.1.3 I8042控制器的鍵盤部分
9.1.1.3.1 埠60h
9.1.1.3.2 埠64h
9.1.1.4 鍵盤掃描碼
9.1.2 實現鍵盤驅動程式
9.1.2.1 鍵盤初始化函式
9.1.2.2 鍵盤中斷處理函式
9.1.2.3 鍵盤掃描碼解析函式
9.2 滑鼠驅動
9.2.1 滑鼠原理
9.2.1.1 滑鼠結構概述
9.2.1.2 滑鼠通訊
9.2.1.3 I8042控制器的滑鼠部分
9.2.1.3.1 埠60h
9.2.1.3.2 埠64h
9.2.1.4 滑鼠資料包
9.2.2 實現滑鼠驅動程式
9.2.2.1 滑鼠初始化函式
9.2.2.2 滑鼠中斷處理函式
9.2.2.3 滑鼠協議解析函式
9.3 硬碟驅動
9.3.1 硬碟結構及原理
9.3.1.1 硬碟原理概述
9.3.1.2 IDE硬碟與SATA硬碟的區別
9.3.1.3 硬碟埠功能列表
9.3.2 硬碟操作初探
9.3.2.1 調整BIOS的硬碟操作模式
9.3.2.2 實現一個讀硬碟ROM資訊的程式
9.3.2.3 實現一個清楚硬碟扇區資料的程式
9.3.3 完善硬碟驅動
9.3.3.1 硬碟初始化函式
9.3.3.2 硬碟中斷處理函式
9.3.3.3 讀硬碟操作
9.3.3.4 寫硬碟操作
10.程式管理
10.1 程式管理單元概述
10.2 程式控制模組(PCB)結構定義
10.3 建立init程式
10.4 跳轉至使用者空間的init程式
10.5 程式排程
10.5.1 Linux程式排程功能簡介
10.5.2 時鐘中斷
10.5.2.1 牆上時鐘
10.5.2.2 時間片時鐘
10.5.3 核心延時函式
10.5.4 基於時間片輪詢
10.5.5 實現一個簡單的程式排程函式
10.6 多核
10.6.1 Hyper-threading & Multi-core概述
10.6.2 ICR中斷命令暫存器
10.6.3 IPI多核間通訊
10.6.4 多核引導程式碼
10.6.5 讓我們的系統支援多核
11. 檔案系統
11.1 檔案系統概述
11.2 解析FAT類檔案系統
11.3 Linux虛擬檔案系統簡介
11.4 寫一個支援FAT的檔案系統
11.4.1 設計相關結構體
11.4.1.1 superblock超級塊結構體
11.4.1.2 inode節點結構體
11.4.1.3 dentry目錄結構體
11.4.1.4 file檔案結構體
11.4.2 檔案系統初始化函式
11.4.3 搜尋路徑函式
11.4.4 檔案的讀寫操作
11.5 程式間通訊
11.5.1 程式間通訊原理概述
11.5.2 實現程式間訊號通訊功能

第四部分 使用者空間篇

12.庫函式
12.1 系統API庫
12.1.1 系統呼叫原理
12.1.2 寫一個簡單的系統呼叫
12.1.3 基於POSIX規範實現常用的系統庫函式
12.1.3.1 POSIX規範簡介
12.1.3.2 open、close函式實現
12.1.3.3 read、write函式實現
12.1.3.4 ioctl函式實現
12.1.3.5 delay函式實現
12.1.3.6 printf函式實現
12.1.3.7 mmap函式實現
12.2 圖形庫
12.2.1 寫一個顯示卡驅動
12.2.1.1 設計顯示卡驅動結構
12.2.1.2 顯示卡初始化函式
12.2.1.3 為顯示卡驅動新增mmap功能
12.2.2 將顯示卡的framebuffer對映到使用者空間
12.2.3 實現基本圖形庫函式
12.2.3.1 點描畫函式
12.2.3.2 線描畫函式
12.2.3.3 矩形描畫函式
12.2.4 實現貼圖功能
12.2.4.1 BitMap圖片結構概述
12.2.4.2 解析BitMap圖片函式
12.2.4.3 實現貼圖函式
13. 視窗管理器
13.1 視窗管理器原理概述
13.2 實現一個簡單的視窗管理器
13.3 視窗焦點管理
13.3.1 滑鼠跟隨獲得焦點
13.3.2 滑鼠點選獲得焦點
13.3.3 畫一個滑鼠箭頭
13.3.4 實現焦點管理
13.4 視窗訊息傳遞
13.4.1 訊息傳遞原理概述
13.4.2 實現訊息傳遞功能
14. 基本命令
14.1 終端命令列視窗
14.1.1 終端原理概述
14.1.2 實現一個終端
14.2 ELF執行檔案頭
14.2.1 ELF原理概述
14.2.2 實現一個精簡的ELF功能
14.3 實現基本命令
14.3.1 ls顯示目錄命令
14.3.2 pwd顯示當前路徑命令
14.3.3 cd切換目錄命令
14.3.4 touch建立檔案命令
14.3.5 exec執行程式命令
14.3.6 poweroff關機命令
15. 桌面
15.1 設計桌面佈局
15.1.1 新增工作列功能
15.1.2 新增時鐘功能
15.1.3 新增關機按鈕功能
15.2 設計視窗點選事件
15.2.1 新增視窗最大化功能
15.2.2 新增視窗最小化功能
15.2.3 新增視窗關閉功能

擬定目錄V0.3版——大家覺得這版怎麼樣?

**我覺得這回的目錄應該照前兩次寫的目錄有很大進步,不知道大家對這個目錄還有什麼意見,還請多多指教啊~!~**

第一部 相關知識介紹及環境搭建

  1. 作業系統整體概述
    1.1 什麼是作業系統
    1.2 作業系統結構
    1.2.1 引導啟動
    1.2.2 記憶體管理
    1.2.3 中斷處理
    1.2.4 程式管理
    1.2.5 裝置驅動
    1.2.6 檔案系統
    1.3 寫作業系統需要的知識
    1.4 本書作業系統概述
  2. 環境搭建及基礎知識介紹
    2.1 虛擬機器及開發系統平臺介紹
    2.1.1 VMware安裝
    2.1.2 搭建CentOS系統平臺
    2.1.3 Bochs虛擬機器安裝與使用簡介
    2.2 組合語言
    2.2.1 AT&T彙編與Intel彙編
    2.2.2 NASM彙編
    2.2.3 彙編呼叫C函式
    2.3 C語言
    2.3.1 GNU C內嵌組合語言
    2.3.2 GNU C對標準C語言的擴充套件

    第二部 初級篇

  3. Bootloader載入程式
    3.1 Boot啟動程式
    3.1.1 Boot原理
    3.1.2 寫一個boot程式
    3.1.3 建立虛擬軟盤映象檔案
    3.1.4 在bochs上執行我們的boot程式
    3.1.5 載入loader到記憶體
    3.1.6 從boot跳轉到loader程式
    3.2 Loader檢查程式
    3.2.1 Loader原理
    3.2.2 寫一個loader程式
    3.2.3 從真實模式進入保護模式再到IA-32E模式
    3.2.3.1 從真實模式進入保護模式
    3.2.3.2 從保護模式進入IA-32E模式
    3.2.4 從loader跳轉到核心程式

  4. 核心層
    4.1 核心執行頭
    4.1.1 什麼是核心執行頭
    4.1.2 寫一個執行頭程式
    4.1.3 從執行頭進入到核心主程式
    4.1.4 在螢幕上顯示色彩
    4.1.5 在螢幕上輸出LOG
    4.1.5.1 ASCII字元庫
    4.1.5.2 Printk函式的實現
    4.2 系統異常
    4.2.1 錯誤(fault)、異常(trap)、終止(abort)的區別
    4.2.2 捕獲系統異常
    4.3 記憶體頁表分配
    4.3.1 獲得實體記憶體資訊
    4.3.2 計算可用記憶體頁數
    4.3.3 分配可用物理頁
    4.4 外部中斷處理
    4.4.1 設定中斷控制器
    4.4.2 觸發一箇中斷
    4.5 鍵盤驅動
    4.5.1 簡述鍵盤功能
    4.5.2 實現鍵盤中斷捕獲函式
    4.6 程式管理
    4.6.1 簡述程式管理模組
    4.6.2 建立程式管理結構體
    4.6.3 建立Init程式
    4.6.4 跳轉到使用者層
  5. 使用者層
    5.1 寫一個系統API介面
    5.2 寫Hello World!程式

    第三部 高階篇

  6. 處理器體系結構
    6.1 真實模式
    6.1.1 真實模式概述
    6.1.2 真實模式定址方式
    6.1.3 真實模式下的中斷向量表
    6.2 保護模式
    6.2.1 保護模式概述
    6.2.2 保護模式下的段機制
    6.2.3 保護模式下的頁機制
    6.2.4 保護模式下的門描述符
    6.3 IA32-E模式
    6.3.1 IA32-E模式概述
    6.3.2 IA-32E模式下的段機制
    6.3.3 IA-32E模式下的頁機制
    6.3.4 IA-32E模式下的門描述符

  7. 完善BootLoader功能
    7.1 真實模式下的定址瓶頸
    7.1.1 錯綜複雜的1MB實體記憶體空間
    7.1.2 突破1MB實體記憶體瓶頸
    7.1.3 真實模式下的4G定址
    7.2 細說各個模式間的切換
    7.3 BIOS中斷
    7.3.1 Int 10h 顯示文字
    7.3.2 Int 13h 讀軟盤扇區
    7.3.3 Int 15h E820獲得實體記憶體資訊
    7.4 劃分各個硬體資料的儲存空間
    7.5 U盤啟動
    7.5.1 USB-ZIP、USB-HDD、USB-FDD區別簡介
    7.5.2 把BootLoader改為U盤啟動
    7.6 細說VBE(VESA BIOS EXTENSION)功能的實現
    7.6.1 VBE規範概述
    7.6.2 獲得硬體平臺的VBE相關資訊
    7.6.3 設定顯示模式
  8. 核心主程式
    8.1 核心主程式功能概述
    8.2 編譯指令碼介紹
    8.3 連結指令碼介紹
    8.4 作業系統空間劃分
    8.5 獲得處理器基本資訊及擴充套件資訊
  9. 記憶體管理
    9.1 統計實體記憶體資訊
    9.2 記憶體管理單元結構及相關巨集定義
    9.3 分配可用物理頁功能重構
    9.4 slab緩衝池技術
    9.5 基於slab的系統記憶體管理功能
    9.6 頁表重新初始化
  10. 高階中斷處理
    10.1 8259A簡介
    10.2 Local APIC高階可程式設計中斷控制器
    10.2.1 Local APIC概述
    10.2.2 操作暫存器的相關方法
    10.2.3 Local APIC暫存器列表
    10.3 I/O APIC 外設高階中斷控制器
    10.3.1 I/O APIC 概述
    10.3.2 I/O APIC 暫存器列表
    10.3.3 如何使能I/O APIC
    10.3.3.1 檢視晶片組
    10.3.3.2 RCBA暫存器——Root Complex Base Address Register
    10.3.3.3 OIC暫存器——Other Interrupt Control Register
    10.3.3.4 使能中斷投遞
    10.4 中斷初始化
    10.5 Linux中斷處理思想概述
    10.6 實現我們的中斷處理功能
    10.6.1 實現中斷上部處理功能
    10.6.2 實現中斷下部處理功能
  11. 驅動程式
    11.1 鍵盤和滑鼠驅動程式
    11.1.1 鍵盤原理
    11.1.2 滑鼠原理
    11.1.3 I8042控制器
    11.1.4 完善鍵盤驅動
    11.1.4.1 鍵盤初始化函式
    11.1.4.2 鍵盤中斷處理函式
    11.1.4.3 鍵盤掃描碼解析函式
    11.1.5 實現滑鼠驅動
    11.1.5.1 滑鼠初始化函式
    11.1.5.2 滑鼠中斷處理函式
    11.1.5.3 滑鼠協議解析函式
    11.2 硬碟驅動程式
    11.2.1 硬碟結構及原理
    11.2.1.1 硬碟原理概述
    11.2.1.2 IDE硬碟與SATA硬碟的區別
    11.2.1.3 硬碟介面功能列表簡介
    11.2.2 硬碟操作初探
    11.2.2.1 調整BIOS的硬碟操作模式
    11.2.2.2 實現一個讀硬碟ROM資訊的程式
    11.2.2.3 實現一個清除硬碟扇區資料的程式
    11.2.3 完善硬碟驅動程式
    11.2.3.1 硬碟初始化函式
    11.2.3.2 硬碟中斷處理函式
    11.2.3.3 讀硬碟操作
    11.2.3.4 寫硬碟操作
  12. 程式管理
    12.1 程式管理單元功能概述
    12.2 完善程式控制模組(PCB)結構體
    12.3 完善init程式
    12.4 程式排程
    12.4.1 Linux程式排程功能介紹
    12.4.2 時鐘中斷處理
    12.4.2.1 牆上時鐘
    12.4.2.2 定時器時鐘
    12.4.3 核心延時函式
    12.4.4 基於時間片輪詢的程式排程函式
    12.5 多核
    12.5.1 Hyper-threading & Multi-core概述
    12.5.2 ICR中斷命令暫存器
    12.5.3 IPI多核間通訊
    12.5.4 多核引導程式碼
    12.5.5 讓我們的系統支援多核
    12.5.6 多核間加鎖機制
    12.6 程式間通訊
    12.6.1 程式間通訊原理
    12.6.2 實現程式間訊號通訊功能
  13. 檔案系統
    13.1 檔案系統概述
    13.2 解析FAT類檔案系統
    13.3 Linux虛擬檔案系統簡介
    13.4 寫一個支援FAT32的檔案系統
    13.4.1 superblock超級塊結構體
    13.4.2 inode節點結構體
    13.4.3 dentry目錄結構體
    13.4.4 file檔案結構體
    13.4.5 fileoperation檔案操作結構體
    13.5 檔案系統初始化函式
    13.6 搜尋路徑函式
    13.7 檔案的讀寫操作
    13.8 檔案的其他操作
  14. 系統異常
    14.1 Linux異常的相關實現
    14.2 實現缺頁異常
  15. 系統API庫
    15.1 系統呼叫原理
    15.2 基於POSIX規範實現常用的系統庫函式
    15.2.1 POSIX規範簡介
    15.2.2 fork函式實現
    15.2.3 open、close、read、write函式實現
    15.2.4 execve、exit函式實現
    15.2.5 signal函式實現
    15.2.6 mmap函式實現
  16. 圖形庫
    16.1 完善顯示部分驅動程式
    16.1.1 顯示驅動結構體
    16.1.2 顯示驅動初始化函式
    16.1.3 新增mmap功能
    16.2 將視訊記憶體對映到使用者空間
    16.3 實現基本圖形庫函式
    16.3.1 點描畫函式
    16.3.2 線描畫函式
    16.3.3 矩形描畫函式
    16.4 實現貼圖功能
    16.4.1 貼圖功能概述
    16.4.2 BitMap圖片結構概述
    16.4.3 實現BitMap函式
    16.4.4 實現貼圖函式
  17. 視窗管理器
    17.1 視窗管理器原理概述
    17.2 實現一個簡單的視窗管理器
    17.2.1 建立視窗
    17.2.2 移動視窗
    17.2.3 銷燬視窗
    17.3 視窗焦點管理
    17.3.1 滑鼠跟隨獲得焦點
    17.3.2 滑鼠點選獲得焦點
    17.3.3 畫一個滑鼠箭頭
    17.3.4 實現焦點管理
    17.4 視窗訊息傳遞
    17.4.1 訊息傳遞原理概述
    17.4.2 實現訊息傳遞功能
    17.5 實現視窗點選事件
    17.5.1 新增視窗最大化功能
    17.5.2 新增視窗最小化功能
    17.5.3 新增視窗關閉功能
  18. 基本命令
    18.1 終端命令列視窗
    18.1.1 終端原理概述
    18.1.2 實現一個終端視窗
    18.2 ELF執行檔案頭
    18.2.1 ELF概述
    18.2.2 實現ELF解析功能函式
    18.3 編寫基本命令
    18.3.1 ls顯示目錄命令
    18.3.2 pwd顯示當前路徑命令
    18.3.3 cd切換目錄命令
    18.3.4 touch建立檔案命令
    18.3.5 exec執行程式命令
    18.3.6 poweroff關機命令
  19. 桌面
    19.1 設計桌面佈局
    19.2 新增工作列功能
    19.3 新增時鐘功能
    19.4 新增關機按鈕功能
  20. 其他
    20.1 完善作業系統功能
    20.2 對系統效能進行優化

**我覺得這回的目錄應該照前兩次寫的目錄有很大進步,不知道大家對這個目錄還有什麼意見,還請多多指教啊~!~**

相關文章