內容簡介
本書是一本與作業系統理論教材相配套的實踐教材。全書主要介紹了GeekOS教學作業系統的設計原理和精心為學生設計的7個設計項目。這7個項目涵蓋了作業系統所有重要的原理和機制,通過這些項目的設計與實現,可以很好地幫助學生深入了解作業系統核心設計及其工作原理。
本書共分為兩部分:第一部分主要介紹GeekOS作業系統、課程設計環境的搭建以及一些重要的源檔案的代碼及注釋;第二部分是對GeekOS項目設計的指導——核心編譯運行、核心執行緒管理、用戶級執行緒管理、進程調度算法、分頁存儲管理、檔案系統設計和多用戶檔案系統訪問控制等。
本書既可以作為高等院校計算機相關專業作業系統課程的實踐教材,也可以供相關專業的技術人員參考使用。
書籍目錄
第1章 GeekOS教學作業系統概論
1.1 引言
1.2 GeekOS教學作業系統
1.2.1 GeekOS概述
1.2.2 GeekOS的存儲器管理
1.2.3 GeekOS支持的設備
1.2.4 GeekOS的中斷和執行緒
1.2.5 GeekOS系統引導和初始化
1.2.6 GeekOS系統原始碼結構和設計項目
第2章 課程設計開發環境
2.1 Cygwin介紹
2.1.1 Cygwin簡述
2.1.2 Cygwin安裝與設定
2.1.3 Cygwin使用
2.2 安裝Linux
2.2.1 安裝虛擬機
2.2.2 在虛擬機上安裝Linux
2.2.3 安裝VMware Tools和實現檔案共享
2.3 工具軟體
2.3.1 GNU gcc編譯器
2.3.2 NASM彙編器
2.3.3 GNU gdb調試器
2.4 Bochs PC 模擬器
2.4.1 Bochs安裝和使用
2.4.2 在Bochs中運行GeekOS
第3章 make工具和makefile規則
3.1 makefile檔案
3.1.1 makefile檔案內容
3.1.2 makefile規則
3.1.3 makefile檔案示例
3.1.4 make工作原理
3.1.5 makefile宏
3.1.6 make隱含規則
3.1.7 clean命令的套用
3.2 GeekOS的makefile檔案
第4章 PC啟動原理及GeekOS啟動程式
4.1 PC啟動原理
4.1.1 計算機系統啟動
4.1.2 引導程式
4.1.3 核心程式導入
4.2 保護模式
4.2.1 保護模式
4.2.2 實模式和保護模式
4.2.3 進入保護模式
4.3 GeekOS啟動程式分析
4.3.1 fd_boot.asm代碼分析
4.3.2 setup.asm代碼分析
4.3.3 lowlevel.asm代碼分析
第5章 GeekOS進程管理
5.1 GeekOS進程狀態及轉換
5.2 GeekOS核心進程
5.2.1 核心進程控制塊
5.2.2 GeekOS系統中最早的核心進程
5.2.3 核心進程對象
5.3 進程調度
5.3.1 核心進程切換
5.3.2 用戶進程切換
5.3.3 GeekOS進程調度策略
5.4 核心進程主要操作函式
5.4.1 Init_Thread函式
5.4.2 Create_Thread函式
5.4.3 Destroy_Thread函式
5.4.4 Reap_Thread函式
5.4.5 Detach_Thread函式
5.4.6 Start_Kernel_Thread函式
5.4.7 Setup_Kernel_Thread 函式
5.4.8 Make_Runnable函式
5.4.9 Make_Runnable_Atomic函式
5.4.10 Get_Current函式
5.4.11 Get_Next_Runnable函式
5.4.12 Schedule函式
5.4.13 Join 函式
5.4.14 Lookup_Thread函式
5.4.15 Wait函式
5.4.16 Wake_Up函式
5.4.17 Wake_Up_One函式
5.4.18 Dump_All_Thread_List函式
第6章 GeekOS分頁存儲管理
6.1 存儲器分頁管理機制
6.2 線性地址到物理地址的轉換
6.2.1 映射表結構
6.2.2 表項格式
6.2.3 線性地址到物理地址的轉換
6.2.4 不存在的頁表
6.2.5 頁的共享
6.3 頁級保護和虛擬存儲器支持
6.3.1 頁級保護
6.3.2 虛擬存儲器技術
6.4 頁故障
6.5 GeekOS分頁系統數據結構
6.5.1 頁目錄表和頁表項數據結構
6.5.2 物理頁數據結構和頁狀態
6.6 GeekOS分頁系統主要操作函式
6.6.1 Alloac_Page函式
6.6.2 Alloac_Pageable_Page函式
6.6.3 Find_Page_To_Page_Out函式
6.6.4 Free_Page函式
6.6.5 Page_Fault_Handler函式
6.6.6 Print_Fault_Info函式
第7章 GeekOS檔案系統
7.1 GeekOS檔案系統框架
7.2 虛擬檔案系統層
7.3 高速緩衝區
7.4 PFAT檔案系統
7.5 PFAT檔案系統操作函式
7.5.1 Copy_Stat函式
7.5.2 PFAT_FStat函式
7.5.3 PFAT_Read函式
7.5.4 PFAT_Write函式
7.5.5 PFAT_Seek函式
7.5.6 PFAT_Read_Entry函式
7.5.7 PFAT_Lookup函式
7.5.8 Get_PFAT_File函式
7.5.9 PFAT_Open 函式
7.5.10 PFAT_Open_Directory函式
7.5.11 PFAT_Mount函式
7.5.12 Init_PFAT函式
7.5.13 Register_Filesystem函式
7.6 虛擬檔案系統函式
7.6.1 Unpack_Path 函式
7.6.2 Lookup_Filesystem函式
7.6.3 Lookup_Mount_Point函式
7.6.4 Format函式
7.6.5 Mount函式
7.6.6 Open函式
7.6.7 Do_Open函式
7.6.8 Close函式
7.6.9 Read函式
7.6.10 Write函式
7.6.11 Seek函式
7.6.12 Create_Directory函式
7.6.13 Delete函式
第8章 GeekOS設計項目0
8.1 項目設計目的
8.2 項目設計要求
8.3 GeekOS鍵盤處理函式
8.4 項目設計提示
第9章 GeekOS設計項目1
9.1 項目設計目的
9.2 項目設計要求
9.3 ELF檔案格式
9.3.1 執行檔
9.3.2 ELF(可執行連線格式)
9.3.3 ELF Header
9.3.4 程式頭部(Program Header)
9.3.5 節區頭部表格(section header table)
9.4 用戶可執行程式裝入
9.5 項目設計提示
第10章 GeekOS設計項目2
10.1 項目設計目的
10.2 項目設計要求
10.3 項目設計提示
10.3.1 GeekOS的用戶態進程
10.3.2 用戶態進程空間
10.3.3 用戶堆疊空間初始化
10.3.4 用戶態進程創建
第11章 GeekOS設計項目3
11.1 項目設計目的
11.2 項目設計要求
11.3 項目設計提示
11.3.1 GeekOS進程調度處理過程
11.3.2 四級反饋佇列調度策略實現
11.3.3 進程調度策略評價
11.3.4 GeekOS系統中的進程同步
第12章 GeekOS設計項目4
12.1 項目設計目的
12.2 項目設計要求
12.3 項目設計提示
12.3.1 為核心程式空間建立頁表
12.3.2 為用戶進程建立頁表
12.3.3 請求分頁技術實現
12.3.4 進程終止處理
12.3.5 系統完善處理
第13章 GeekOS設計項目5
13.1 項目設計目的
13.2 項目設計要求
13.3 項目設計提示
13.3.1 GOSFS磁碟格式
13.3.2 檔案與目錄
13.3.3 GOSFS檔案系統數據結構和操作
參考文獻