本書為“基于系統(tǒng)能力培養(yǎng)的計算機專業(yè)課程建設研究”項目規(guī)劃教材。本書定位于初學者的動手實踐類操作系統(tǒng)教材,帶領讀者一步步從無到有,實現一個近1萬行的小型內核Lcore。全書共11章。其中,第1章簡單回顧操作系統(tǒng)的基本原理;第2章將從操作系統(tǒng)五大模塊入手設計Lcore系統(tǒng);第3章將為Lcore添加VGA顯示功能;第4章從時鐘中斷入手討論如何在內核中實現對中斷進行處理;第5章實現鍵盤輸入功能;第6章分別實現內存管理系統(tǒng)的Bootmem、Buddy、Slub分配器;第7章介紹進程管理初始化、進程創(chuàng)建、頁異常處理和進程調度;第8章將實現一個能夠在Lcore內核中運行的類FAT32文件系統(tǒng),同時也涉及如何編寫一個SD卡的小驅動;第9章實現系統(tǒng)調用模塊;第10章開發(fā)一款專屬、簡單的shell;第11章總結全文。附錄是硬件實驗平臺手冊,說明平臺的有關使用細節(jié),以便讀者在開發(fā)過程中隨時查閱。本書可作為本科計算機類專業(yè)操作系統(tǒng)課程配套的實踐教材,也可供有關技術人員參考。
陳文智,浙江大學教授,博士生導師。主要研究方向為計算機系統(tǒng)級軟件、計算機網絡和安全、嵌入式系統(tǒng)及應用、計算機體系結構。承擔國家自然基金、國家“863”重大項目、核高基重點項目、科技支撐計劃項目、科技重大專項等科研項目10余項,在高水平學術期刊或會議發(fā)表論文50余篇,獲國家發(fā)明專利授權20余項。主講“嵌入式系統(tǒng)”“操作系統(tǒng)”“計算機體系結構”“軟件工程”“計算機系統(tǒng)綜合”等課程。曾獲浙江省科技進步一等獎、浙江省教學成果一等獎。2013年獲全國寶鋼**教師獎。
第1章 操作系統(tǒng)開發(fā)介紹
1.1 操作系統(tǒng)原理
1.1.1 進程管理
1.1.2 內存管理
1.1.3 文件管理
1.1.4 I/O設備管理
1.1.5 用戶接口
1.2 實驗平臺簡介
1.2.1 物理實驗平臺
1.2.2 計算機硬件體系結構
1.2.3 QS模擬器
1.2.4 平臺指令集
1.3 開發(fā)環(huán)境搭建
1.3.1 交叉編譯工具鏈
1.3.2 QS模擬器使用
1.3.3 其他工具
小結
第2章 系統(tǒng)設計與初始化
2.1 Lcore整體設計
2.1.1 進程管理
2.1.2 內存管理
2.1.3 文件系統(tǒng)
2.1.4 I/O設備
2.1.5 用戶接口
2.2 建立初始化框架
2.2.1 init_Kernel函數
2.2.2 中斷異常人口
2.2.3 內核頁表初始化
2.2.4 其他初始化
小結
第3章 VGA顯示功能
3.1 VGA初始化
3.1.1 實驗平臺VGA介紹
3.1.2 實現VGA初始化
3.2 實現put_char函數
3.2.1 scroll_screen函數
3.2.2 put_char_ex函數
3.2.3 pu_char函數
3.3 實現printk函數
3.3.1 可變參數函數
3.3.2 相關子函數的實現
3.3.3 printk函數的實現
小結
第4章 處理時鐘中斷
4.1 硬件的外部中斷
4.1.1 機制剖析
4.1.2 相關硬件接口
4.2 中斷處理注冊機制
4.2.1 相關數據結構
4.2.2 中斷處理人口
4.2.3 中斷處理注冊
4.3 時鐘中斷實現
4.3.1 時鐘中斷注冊
4.3.2 顯示信息規(guī)劃
4.3.3 系統(tǒng)時間顯示
小結
第5章 鍵盤輸入功能
5.1 鍵盤中斷處理
5.1.1 相關硬件接口
5.1.2 實現鍵盤中斷處理
5.2 鍵盤掃描碼解析
5.2.1 鍵盤掃描碼
5.2.2 解析掃描碼
小結
第6章 物理內存管理
6.1 內存管理策略
6.2 Bootmem管理實現
6.2.1 Bootmem數據結構
6.2.2 Bootmem初始化
6.3 Buddy系統(tǒng)實現
6.3.1 Buddy系統(tǒng)數據結構
6.3.2 Buddy系統(tǒng)初始化
6.3.3 Buddy系統(tǒng)內存釋放
6.3.4 Buddy系統(tǒng)內存分配
6.4 S1ub系統(tǒng)實現
6.4.1 Slub系統(tǒng)數據結構
6.4.2 Slub系統(tǒng)初始化
6.4.3 Slub系統(tǒng)分配內存
6.4.4 Slub系統(tǒng)釋放內存
小結
第7章 實現進程管理
7.1 進程管理初始化
7.1.1 進程數據結構
7.1.2 進程初始化
7.2 進程創(chuàng)建
7.3 頁異常處理
7.3.1 缺頁異常處理
7.3.2 寫保護異常
7.4 進程調度
7.4.1 調度初始化
7.4.2 執(zhí)行調度
小結
第8章 實現文件系統(tǒng)
8.1 SD卡驅動程序實現
8.1.1 SD卡通信方式簡介
8.1.2 實現SPI通信
8.1.3 指令處理
8.1.4 實現SD卡初始化
8.1.5 實現SD卡讀操作
8.1.6 實現SD卡寫操作
8.2 文件系統(tǒng)實現
8.2.1 文件控制塊的實現
8.2.2 緩存機制的實現
8.2.3 FAT表
8.2.4 文件系統(tǒng)初始化
8.2.5 打開文件
8.2.6 關閉文件
8.2.7 文件讀取
8.2.8 文件寫入
8.2.9 創(chuàng)建文件
小結
第9章 添加系統(tǒng)調用
9.1 系統(tǒng)調用框架
9.1.1 系統(tǒng)調用人口
9.1.2 系統(tǒng)調用初始化
9.1.3 系統(tǒng)調用定義
9.2 添加系統(tǒng)調用
9.2.1 進程管理相關
9.2.2 輸入顯示相關
9.2.3 文件系統(tǒng)相關
小結
第10章 實現簡單shell
10.1 實現用戶態(tài)庫
10.2 實現shell程序
10.2.1 解析程序
10.2.2 內建命令
10.3 其他基本程序
10.3.1 ls命令
10.3.2 ps命令
10.3.3 kill命令
小結
結束語
附錄A 實驗平臺手冊
A.1 實驗平臺詳細介紹
A.1.1 Sword實驗平臺
A.1.2 物理地址分配
A.1.3 CPO寄存器組
A.1.4 中斷處理
A.1.5 MMU功能
A.1.6 外設接口
A.2 實驗平臺指令集
A.2.1 算術運算指令
A.2.2 邏輯運算指令
A.2.3 移位指令
A.2.4 讀寫指令
A.2.5 跳轉指令
A.2.6 自陷指令
A.2.7 CP指令
A.3 實驗平臺寄存器
A.3.1 通用寄存器
A.3.2 CPO寄存器