《計算機(jī)科學(xué)叢書:操作系統(tǒng)設(shè)計:Xinu方法》對操作系統(tǒng)的內(nèi)存管理、進(jìn)程管理、進(jìn)程協(xié)調(diào)和同步、進(jìn)程間通信、實時時鐘管理、設(shè)備無關(guān)的I/O、設(shè)備驅(qū)動、網(wǎng)絡(luò)協(xié)議、文件系統(tǒng)等進(jìn)行了詳細(xì)的介紹,并利用分層的設(shè)計范式,以一種有序、易于理解的方式來闡述這些內(nèi)容?!队嬎銠C(jī)科學(xué)叢書:操作系統(tǒng)設(shè)計:Xinu方法》以Xinu操作系統(tǒng)為系統(tǒng)設(shè)計的樣板和模式,從一個裸機(jī)開始,一步一步地設(shè)計和實現(xiàn)一個小型但優(yōu)雅的操作系統(tǒng)。本書的樣本代碼可以運(yùn)行在Linksys E2100L無線路由器上。
《計算機(jī)科學(xué)叢書:操作系統(tǒng)設(shè)計:Xinu方法》適用于高年級的本科生或低年級的研究生,也適用于那些想了解操作系統(tǒng)的計算機(jī)從業(yè)人員。學(xué)習(xí)本書前,學(xué)生需要具備基本的程序設(shè)計能力,應(yīng)當(dāng)理解基本的數(shù)據(jù)結(jié)構(gòu),包括鏈表、棧和隊列,并且應(yīng)當(dāng)用C語言寫過程序。
Douglas Comer,美國普度大學(xué)計算機(jī)系杰出教授,國際公認(rèn)的計算機(jī)網(wǎng)絡(luò)、TCP/IP協(xié)議、Internet和操作系統(tǒng)設(shè)計方面的專家。Comer出版了多部優(yōu)秀的教材和專著,被翻譯成16種語言,并廣泛用于世界各地的工業(yè)界和學(xué)術(shù)界。Comer教授劃時代的三卷巨著《Internetworking with TCP/IP》對網(wǎng)絡(luò)和網(wǎng)絡(luò)教育產(chǎn)生了革命性的影響。Comer博士是ACM院士、普度教育學(xué)院院士。
出版者的話
譯者序
前言
關(guān)于作者
第1章 引言和概述
1.1 操作系統(tǒng)
1.2 本書的研究方法
1.3 分層設(shè)計
1.4 Xinu操作系統(tǒng)
1.5 操作系統(tǒng)不是什么
1.6 從外面看操作系統(tǒng)
1.7 其他章節(jié)概要
1.8 觀點
1.9 總結(jié)
練習(xí)
第2章 并發(fā)執(zhí)行與操作系統(tǒng)服務(wù)
2.1 引言
2.2 多活動的編程模型
2.3 操作系統(tǒng)服務(wù)
2.4 并發(fā)處理的概念和術(shù)語
2.5 串行程序和并發(fā)程序的區(qū)別
2.6 多進(jìn)程共享同一段代碼
2.7 進(jìn)程退出與進(jìn)程終止
2.8 共享內(nèi)存、競爭條件和同步
2.9 信號量與互斥
2.10 Xinu中的類型命名方法
2.11 使用Kputc和Kprintf進(jìn)行操作系統(tǒng)的調(diào)試
2.12 觀點
2.13 總結(jié)
練習(xí)
第3章 硬件和運(yùn)行時環(huán)境概覽
3.1 引言
3.2 E2100L的物理和邏輯結(jié)構(gòu)
3.3 處理器結(jié)構(gòu)和寄存器
3.4 總線操作:獲取-存儲范式
3.5 直接內(nèi)存訪問
3.6 總線地址空間
3.7 內(nèi)核段KSEG0和KSEG1的內(nèi)容
3.8 總線啟動的靜態(tài)配置
3.9 調(diào)用約定和運(yùn)行時棧
3.10 中斷和中斷處理
3.11 異常處理
3.12 計時器硬件
3.13 串行通信
3.14 輪詢與中斷驅(qū)動I/O
3.15 內(nèi)存緩存和KSEG
3.16 存儲布局
3.17 內(nèi)存保護(hù)
3.18 觀點
練習(xí)
第4章 鏈表與隊列操作
4.1 引言
4.2 用于進(jìn)程鏈表的統(tǒng)一數(shù)據(jù)結(jié)構(gòu)
4.3 簡潔的鏈表數(shù)據(jù)結(jié)構(gòu)
4.4 隊列數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)
4.5 內(nèi)聯(lián)隊列操作函數(shù)
4.6 獲取鏈表中進(jìn)程的基礎(chǔ)函數(shù)
4.7 FIFO隊列操作
4.8 優(yōu)先級隊列的操作
4.9 鏈表初始化
4.10 觀點
4.11 總結(jié)
練習(xí)
第5章 調(diào)度和上下文切換
5.1 引言
5.2 進(jìn)程表
5.3 進(jìn)程狀態(tài)
5.4 就緒和當(dāng)前狀態(tài)
5.5 調(diào)度策略
5.6 調(diào)度的實現(xiàn)
5.7 上下文切換的實現(xiàn)
5.8 內(nèi)存中保存的狀態(tài)
5.9 在MIPS處理器上切換上下文
5.10 重新啟動進(jìn)程執(zhí)行的地址
5.11 并發(fā)執(zhí)行和null進(jìn)程
5.12 使進(jìn)程準(zhǔn)備執(zhí)行和調(diào)度不變式
5.13 推遲重新調(diào)度
5.14 其他進(jìn)程調(diào)度算法
5.15 觀點
5.16 總結(jié)
練習(xí)
第6章 更多進(jìn)程管理
6.1 引言
6.2 進(jìn)程掛起和恢復(fù)
6.3 自我掛起和信息隱藏
6.4 系統(tǒng)調(diào)用的概念
6.5 禁止中斷和恢復(fù)中斷
6.6 系統(tǒng)調(diào)用模板
6.7 系統(tǒng)調(diào)用返回SYSERR和OK值
6.8 掛起的實現(xiàn)
6.9 掛起當(dāng)前進(jìn)程
6.10 suspend函數(shù)的返回值
6.11 進(jìn)程終止和進(jìn)程退出
6.12 進(jìn)程創(chuàng)建
6.13 其他進(jìn)程管理函數(shù)
6.14 總結(jié)
練習(xí)
第7章 協(xié)調(diào)并發(fā)進(jìn)程
7.1 引言
7.2 進(jìn)程同步的必要性
7.3 計數(shù)信號量的概念
7.4 避免忙等待
7.5 信號量策略和進(jìn)程選擇
7.6 等待狀態(tài)
7.7 信號量數(shù)據(jù)結(jié)構(gòu)
7.8 系統(tǒng)調(diào)用wait
7.9 系統(tǒng)調(diào)用signal
7.10 靜態(tài)和動態(tài)信號量分配
7.11 動態(tài)信號量的實現(xiàn)示例
7.12 信號量刪除
7.13 信號量重置
7.14 多核處理器之間的協(xié)調(diào)
7.15 觀點
7.16 總結(jié)
練習(xí)
第8章 消息傳遞
8.1 引言
8.2 兩種類型的消息傳遞服務(wù)
8.3 消息使用資源的限制
8.4 消息傳遞函數(shù)和狀態(tài)轉(zhuǎn)換
8.5 send的實現(xiàn)
8.6 receive的實現(xiàn)
8.7 非阻塞消息接收的實現(xiàn)
8.8 觀點
8.9 總結(jié)
練習(xí)
第9章 基本內(nèi)存管理
9.1 引言
9.2 內(nèi)存的類型
9.3 重量級進(jìn)程的定義
9.4 小型嵌入式系統(tǒng)的內(nèi)存管理
9.5 程序段和內(nèi)存區(qū)域
9.6 嵌入式系統(tǒng)中的動態(tài)內(nèi)存分配
9.7 低層內(nèi)存管理器的設(shè)計
9.8 分配策略和內(nèi)存持久性
9.9 追蹤空閑內(nèi)存
9.10 低層內(nèi)存管理的實現(xiàn)
9.11 分配堆存儲
9.12 分配棧存儲
9.13 釋放堆和棧存儲
9.14 觀點
9.15 總結(jié)
練習(xí)
第10章 高級內(nèi)存管理和虛擬內(nèi)存
10.1 引言
10.2 分區(qū)空間分配
10.3 緩沖池
10.4 分配緩沖區(qū)
10.5 將緩沖區(qū)返回給緩沖池
10.6 創(chuàng)建緩沖池
10.7 初始化緩沖池表
10.8 虛擬內(nèi)存和內(nèi)存復(fù)用
10.9 實地址空間和虛地址空間
10.10 支持按需換頁的硬件
10.11 使用頁表的地址翻譯
10.12 頁表項中的元數(shù)據(jù)
10.13 按需換頁以及設(shè)計上的問題
10.14 頁面替換和全局時鐘算法
10.15 觀點
10.16 總結(jié)
練習(xí)
第11章 高層消息傳遞
11.1 引言
11.2 進(jìn)程間通信端口
11.3 端口實現(xiàn)
11.4 端口表初始化
11.5 端口創(chuàng)建
11.6 向端口發(fā)送消息
11.7 從端口接收消息
11.8 端口的刪除和重置
11.9 觀點
11.10 總結(jié)
練習(xí)
第12章 中斷處理
12.1 引言
12.2 中斷的優(yōu)點
12.3 中斷分配
12.4 中斷向量
12.5 中斷向量號的分配
12.6 硬件中斷
12.7 中斷請求的局限性和中斷多路復(fù)用
12.8 中斷軟件和分配
12.9 中斷分配器底層部分
12.10 中斷分配器高層部分
12.11 禁止中斷
12.12 函數(shù)中中斷代碼引起的限制
12.13 中斷過程中重新調(diào)度的必要性
12.14 中斷過程中的重新調(diào)度
12.15 觀點
12.16 總結(jié)
練習(xí)
第13章 實時時鐘管理
13.1 引言
13.2 定時事件
13.3 實時時鐘和計時器硬件
13.4 處理實時時鐘中斷
13.5 延時與搶占
13.6 使用計時器來模擬實時時鐘
13.7 搶占的實現(xiàn)
13.8 使用增量鏈表對延遲進(jìn)行有效管理
13.9 增量鏈表的實現(xiàn)
13.10 將進(jìn)程轉(zhuǎn)入睡眠
13.11 定時消息接收
13.12 喚醒睡眠進(jìn)程
13.13 時鐘中斷處理
13.14 時鐘初始化
13.15 間隔計時器管理
13.16 觀點
13.17 總結(jié)
練習(xí)
第14章 設(shè)備無關(guān)的I/O
14.1 引言
14.2 I/O和設(shè)備驅(qū)動的概念結(jié)構(gòu)
14.3 接口抽象和驅(qū)動抽象
14.4 I/O接口的一個示例
14.5 打開-讀-寫-關(guān)閉范式
14.6 綁定I/O操作和設(shè)備名
14.7 Xinu中的設(shè)備名
14.8 設(shè)備轉(zhuǎn)換表概念
14.9 設(shè)備和共享驅(qū)動的多個副本
14.10 高層I/O操作的實現(xiàn)
14.11 其他高層I/O函數(shù)
14.12 打開、關(guān)閉和引用計數(shù)
14.13 devtab中的空條目和錯誤條目
14.14 I/O系統(tǒng)的初始化
14.15 觀點
14.16 總結(jié)
練習(xí)
第15章 設(shè)備驅(qū)動示例
15.1 引言
15.2 tty抽象
15.3 tty設(shè)備驅(qū)動的組成
15.4 請求隊列和緩沖區(qū)
15.5 上半部和下半部的同步
15.6 硬件緩沖區(qū)和驅(qū)動設(shè)計
15.7 tty控制塊和數(shù)據(jù)聲明
15.8 次設(shè)備號
15.9 上半部tty字符輸入(ttyGetc)
15.10 通用上半部tty輸入(ttyRead)
15.11 上半部tty字符輸出(ttyPutc)
15.12 開始輸出(ttyKickOut)
15.13 上半部tty多字符輸出(ttyWrite)
15.14 下半部tty驅(qū)動函數(shù)(ttyInterrupt)
15.15 輸出中斷處理(ttyInter_out)
15.16 tty輸入處理(tty Inter-in)
15.17 tty控制塊初始化(ttyInit)
15.18 設(shè)備驅(qū)動控制
15.19 觀點
15.20 總結(jié)
練習(xí)
第16章 DMA設(shè)備和驅(qū)動(以太網(wǎng))
16.1 引言
16.2 直接內(nèi)存訪問和緩沖區(qū)
16.3 多緩沖區(qū)和環(huán)
16.4 使用DMA的以太網(wǎng)驅(qū)動例子
16.5 設(shè)備的硬件定義和常量
16.6 環(huán)和內(nèi)存緩沖區(qū)
16.7 以太網(wǎng)控制塊的定義
16.8 設(shè)備和驅(qū)動初始化
16.9 分配輸入緩沖區(qū)
16.10 從以太網(wǎng)設(shè)備中讀取數(shù)據(jù)包
16.11 向以太網(wǎng)設(shè)備中寫入數(shù)據(jù)包
16.12 以太網(wǎng)設(shè)備的中斷處理
16.13 以太網(wǎng)控制函數(shù)
16.14 觀點
16.15 總結(jié)
練習(xí)
第17章 最小互聯(lián)網(wǎng)協(xié)議棧
17.1 引言
17.2 所需的功能
17.3 同步對話、超時和進(jìn)程
17.4 ARP函數(shù)
17.5 網(wǎng)絡(luò)數(shù)據(jù)包的定義
17.6 網(wǎng)絡(luò)輸入進(jìn)程
17.7 UDP表的定義
17.8 UDP函數(shù)
17.9 互聯(lián)網(wǎng)控制報文協(xié)議
17.10 動態(tài)主機(jī)配置協(xié)議
17.11 觀點
17.12 總結(jié)
練習(xí)
第18章 遠(yuǎn)程磁盤驅(qū)動
18.1 引言
18.2 磁盤抽象
18.3 磁盤操作驅(qū)動支持
18.4 塊傳輸和高層I/O函數(shù)
18.5 遠(yuǎn)程磁盤范式
18.6 磁盤操作的語義
18.7 驅(qū)動數(shù)據(jù)結(jié)構(gòu)的定義
18.8 驅(qū)動初始化(rdsInit)
18.9 上半部打開函數(shù)(rdsOpen)
18.10 遠(yuǎn)程通信函數(shù)(rdscomm)
18.11 上半部寫函數(shù)(rdsWrite)
18.12 上半部讀函數(shù)(rdsRead)
18.13 刷新掛起的請求
18.14 上半部控制函數(shù)(rdsControl)
18.15 分配磁盤緩沖區(qū)(rdsbufalloc)
18.16 上半部關(guān)閉函數(shù)(rdsClose)
18.17 下半部通信進(jìn)程(rdsprocess)
18.18 觀點
18.19 總結(jié)
練習(xí)
第19章 文件系統(tǒng)
19.1 文件系統(tǒng)是什么
19.2 文件操作的示例集合
19.3 本地文件系統(tǒng)的設(shè)計
19.4 Xinu文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)
19.5 索引管理器的實現(xiàn)
19.6 清空索引塊(lfibclear)
19.7 獲取索引塊(lfibget)
19.8 存儲索引塊(lfibput)
19.9 從空閑鏈表中分配索引塊(lfiballoc)
19.10 從空閑鏈表中分配數(shù)據(jù)塊(lfdballoc)
19.11 使用設(shè)備無關(guān)的I/O函數(shù)的文件操作
19.12 文件系統(tǒng)的設(shè)備設(shè)置和函數(shù)名稱
19.13 本地文件系統(tǒng)打開函數(shù)(lfsOpen)
19.14 關(guān)閉文件偽設(shè)備(lflClose)
19.15 刷新磁盤中的數(shù)據(jù)(lfflush)
19.16 文件的批量傳輸函數(shù)(lflWrite,lflRead)
19.17 在文件中查找一個新位置(lflSeek)
19.18 從文件中提取一個字節(jié)(lflGetc)
19.19 改變文件中的一個字節(jié)(lflPutc)
19.20 載入索引塊和數(shù)據(jù)塊(lfsetup)
19.21 主文件系統(tǒng)設(shè)備的初始化(lfsInit)
19.22 偽設(shè)備的初始化(lflInit)
19.23 文件截斷(lftruncate)
19.24 初始文件系統(tǒng)的創(chuàng)建(lfscreate)
19.25 觀點
19.26 總結(jié)
練習(xí)
第20章 遠(yuǎn)程文件機(jī)制
20.1 引言
20.2 遠(yuǎn)程文件訪問
20.3 遠(yuǎn)程文件語義
20.4 遠(yuǎn)程文件設(shè)計和消息
20.5 遠(yuǎn)程文件服務(wù)器通信
20.6 發(fā)送一個基本消息
20.7 網(wǎng)絡(luò)字節(jié)序
20.8 使用設(shè)備范式的遠(yuǎn)程文件系統(tǒng)
20.9 打開遠(yuǎn)程文件
20.10 檢查文件模式
20.11 關(guān)閉遠(yuǎn)程文件
20.12 讀遠(yuǎn)程文件
20.13 寫遠(yuǎn)程文件
20.14 遠(yuǎn)程文件的定位
20.15 遠(yuǎn)程文件單字符I/O
20.16 遠(yuǎn)程文件系統(tǒng)控制函數(shù)
20.17 初始化遠(yuǎn)程文件數(shù)據(jù)結(jié)構(gòu)
20.18 觀點
20.19 總結(jié)
練習(xí)
第21章 句法名字空間
21.1 引言
21.2 透明與名字空間的抽象
21.3 多種命名方案
21.4 命名系統(tǒng)設(shè)計的其他方案
21.5 基于句法的名字空間
21.6 模式和替換
21.7 前綴模式
21.8 名字空間的實現(xiàn)
21.9 名字空間的數(shù)據(jù)結(jié)構(gòu)和常量
21.10 增加名字空間前綴表的映射
21.11 使用前綴表進(jìn)行名字映射
21.12 打開命名文件
21.13 名字空間初始化
21.14 對前綴表中的項進(jìn)行排序
21.15 選擇一個邏輯名字空間
21.16 默認(rèn)層次和空前綴
21.17 額外的對象操作函數(shù)
21.18 名字空間方法的優(yōu)點和限制
21.19 廣義模式
21.20 觀點
21.21 總結(jié)
練習(xí)
第22章 系統(tǒng)初始化
22.1 引言
22.2 引導(dǎo)程序:從頭開始
22.3 操作系統(tǒng)初始化
22.4 在E2100L上啟動一個可選的映像
22.5 Xinu初始化
22.6 系統(tǒng)啟動
22.7 從程序轉(zhuǎn)化為進(jìn)程
22.8 觀點
22.9 總結(jié)
練習(xí)
第23章 異常處理
23.1 引言
23.2 異常、陷阱和惡意中斷
23.3 panic的實現(xiàn)
23.4 觀點
23.5 總結(jié)
練習(xí)
第24章 系統(tǒng)配置
24.1 引言
24.2 多重配置的需求
24.3 Xinu系統(tǒng)配置
24.4 Xinu配置文件的內(nèi)容
24.5 計算次設(shè)備號
24.6 配置Xinu系統(tǒng)的步驟
24.7 觀點
24.8 總結(jié)
練習(xí)
第25章 一個用戶接口例子:Xinu殼
25.1 引言
25.2 用戶接口
25.3 命令和設(shè)計原則
25.4 一個簡化殼的設(shè)計決策
25.5 殼的組織和操作
25.6 詞法符號的定義
25.7 命令行語法的定義
25.8 Xinu殼的實現(xiàn)
25.9 符號的存儲
25.10 詞法分析器代碼
25.11 命令解釋器的核心
25.12 命令名查詢和內(nèi)部處理
25.13 傳給命令的參數(shù)
25.14 向外部命令傳遞參數(shù)
25.15 I/O重定向
25.16 示例命令函數(shù)(sleep)
25.17 觀點
25.18 總結(jié)
練習(xí)
附錄1 操作系統(tǒng)移植
附錄2 Xinu設(shè)計注解
索引