前言
第一篇 基礎原理篇
第1章 操作系統(tǒng)導論
引子:智者的挑戰(zhàn)
1.1 人造與神造
1.2 程序是如何運行的
1.3 什么是操作系統(tǒng)
1.4 魔術與管理
1.5 用戶程序與操作系統(tǒng)
1.6 操作系統(tǒng)的范疇
1.7 為什么學習操作系統(tǒng)
思考題
第2章操 作系統(tǒng)歷史
引子:不能承受之真
2.1 第一階段:狀態(tài)機操作系統(tǒng)(1940年以前)
2.2 第二階段:單一操作員單一控制端操作系統(tǒng)(20世紀40年代)
2.3 第三階段:批處理操作系統(tǒng)(20世紀50年代)
2.4 第四代:多道批處理操作系統(tǒng)(20世紀60年代)
2.5 第五代之一:分時操作系統(tǒng)(20世紀70年代)
2.6 第五代之二:實時操作系統(tǒng)
2.7 第六代:現(xiàn)代操作系統(tǒng)(1980年以后)
2.8 操作系統(tǒng)的演變過程
2.9 操作系統(tǒng)的未來發(fā)展趨勢
2.10 討論:操作系統(tǒng)虛擬化和虛擬化的操作系統(tǒng)
思考題
第3章 操作系統(tǒng)基本概念
引子:軟件師的尷尬
3.1 計算機硬件基本知識
3.2 抽象
3.3 內核態(tài)和用戶態(tài)
3.4 操作系統(tǒng)結構
3.5 進程、內存和文件
3.6 系統(tǒng)調用
3.7 殼
思考題
第二篇 進程原理篇
第4章 進程
引子:牛頓的困惑
4.1 進程概論
4.2 進程模型
4.3 多道編程的好處
4.4 進程的產生與消失
4.5 進程的層次結構
4.6 進程的狀態(tài)
4.7 進程與地址空間
4.8 進程管理
4.9 進程的缺陷
思考題
第5章 進程調度
引子:恐怖分子的調度
5.1 進程調度的定義
5.2 進程調度的目標
5.3 先來先服務調度算法
5.4 時間片輪轉算法
5.5 短任務優(yōu)先算法
5.6 優(yōu)先級調度算法
5.7 混合調度算法
5.8 其他調度算法
5.9 實時調度算法
5.10 進程調度的過程
5.11 高級議題:調度異常之優(yōu)先級倒掛
思考題
第6章 進程通信
引子:孤獨爆破手的自白
6.1 為什么要通信
6.2 進程對白:管道、記名管道、套接字
6.3 進程電報:信號
6.4 進程旗語:信號量
6.5 進程擁抱:共享內存
6.6 信件發(fā)送:消息隊列
6.7 其他通信機制
思考題
第三篇 線程原理篇
第7章 線程
引子:亞歷山大的分身術
7.1 進程的分身術——線程
7.2 線程管理
7.3 線程模型的實現(xiàn)
7.4 現(xiàn)代操作系統(tǒng)的線程實現(xiàn)模型
7.5 多線程的關系
7.6 討論:從用戶態(tài)進入內核態(tài)
7.7 討論:線程的困惑——確定性與非確定性
思考題
第8章 線程同步
引子:滑鐵盧的同步
8.1 為什么要同步
8.2 線程同步的目的
8.3 鎖的進化:金魚生存
8.4 睡覺與叫醒:生產者與消費者問題
8.5 信號量
8.6 鎖、睡覺與叫醒、信號量
8.7 管程
8.8 消息傳遞
8.9 柵欄
思考題
第9章 死鎖應對之哲學原理
引子:迷霧籠罩的加拿大
9.1 為什么會發(fā)生死鎖
9.2 死鎖的描述
9.3 死鎖的4個必要條件
9.4 哲學家就餐問題
9.5 死鎖的應對
9.6 消除死鎖的必要條件
9.7 銀行家算法:冒險的代價
9.8 哲學家就餐問題之解
9.9 討論:死鎖的思考——綜合治理
9.10 討論:死鎖、活鎖與饑餓
思考題
第10章 鎖的實現(xiàn)
引子:高登繩結
10.1 以中斷啟用與禁止來實現(xiàn)鎖
10.2 以測試與設置指令來實現(xiàn)鎖
10.3 以非繁忙等待、中斷啟用與禁止來實現(xiàn)鎖
10.4 以最少繁忙等待、測試與設置來實現(xiàn)鎖
10.5 中斷禁止、測試與設置
思考題
第四篇 內存原理篇
第11章 基本內存管理
引子:讓別人無路可走
11.1 內存管理的環(huán)境
11.2 內存管理的目標
11.3 虛擬內存的概念
11.4 操作系統(tǒng)在內存中的位置
11.5 單道編程的內存管理
11.6 多道編程的內存管理
11.7 閑置空間管理
思考題
第12章 頁式內存管理
引子:虛擬概念的變現(xiàn)
12.1 基址極限管理模式的問題
12.2 分頁內存管理
12.3 分頁系統(tǒng)的優(yōu)缺點
12.4 翻譯速度
12.5 缺頁中斷處理
12.6 鎖住頁面
12.7 頁面尺寸
12.8 內存抖動
思考題
第13章 頁面更換算法
引子:黑洞理論的替換
13.1 頁面需要更換
13.2 頁面更換的目標
13.3 隨機更換算法
13.4 先進先出算法
13.5 第二次機會算法
13.6 時鐘算法
13.7 最優(yōu)更換算法
13.8 NRU算法
13.9 LRU算法
13.10 工作集算法
13.11 工作集時鐘算法
13.12 頁面替換策略
思考題
第14章 段式內存管理
引子:否定之否定
14.1 分頁系統(tǒng)的缺點
14.2 分段管理系統(tǒng)
14.3 分段的優(yōu)缺點
14.4 段頁式內存管理
14.5 段號是否占用尋址字位
14.6 討論:否定之否定的嵌套——純粹分段與邏輯分段、分頁與段頁
思考題
第五篇 文件原理篇
第15章 磁盤操作
引子:EMC——從不可能到可能
15.1 磁盤組織與管理
15.2 磁盤的結構
15.3 盤面的結構
15.4 磁盤驅動器的訪問速度
15.5 操作系統(tǒng)界面
15.6 磁盤調度算法
15.7 討論:固態(tài)盤
15.8 討論:智能磁盤系統(tǒng)
思考題
第16章 文件系統(tǒng)
引子:掩飾的極致
16.1 為什么需要文件系統(tǒng)
16.2 文件系統(tǒng)
16.3 文件系統(tǒng)的目標
16.4 文件的基本知識
16.5 從用戶角度看文件系統(tǒng)
16.6 地址獨立的實現(xiàn)機制:文件夾
16.7 文件系統(tǒng)調用
16.8 內存映射的文件訪問
思考題
第17 章文件系統(tǒng)實現(xiàn)
引子:成功中的失敗
17.1 文件系統(tǒng)的布局
17.2 文件的實現(xiàn)
17.3 目錄實現(xiàn):地址獨立的實現(xiàn)
17.4 閑置空間管理
思考題
第18章 文件系統(tǒng)性能
引子:從不可能到可能
18.1 文件授權管理
18.2 主動控制:訪問控制表
18.3 能力表
18.4 訪問控制的實施
18.5 其他文件安全措施
18.6 文件系統(tǒng)性能
18.7 文件系統(tǒng)效率性能
18.8 文件系統(tǒng)設計分析:日志結構的文件系統(tǒng)
18.9 海量數(shù)據(jù)文件系統(tǒng)
思考題
第六篇 I/O原理篇
第19章 輸入輸出
引子:約翰遜的輸出——從沒有到爆發(fā)
19.1 輸入輸出
19.2 輸入輸出的目的
19.3 輸入輸出硬件
19.4 I/O軟件
19.5 I/O軟件分層
思考題
第七篇 多核原理篇
第20章 多核結構與內存
引子:不能承受之熱
20.1 以量取勝
20.2 多核基本概念
20.3 多核的內存結構
20.4 對稱多處理器計算機的啟動過程
20.5 多處理器之間的通信
20.6 SMP緩存一致性
20.7 多處理器、超線程和多核的比較
思考題
第21章 多核環(huán)境下的進程同步與調度
引子:“多核”帝國的隕落
21.1 多核環(huán)境下操作系統(tǒng)的修正
21.2 多核環(huán)境下的進程同步與調度
21.3 多核進程同步
21.4 硬件原子操作
21.5 總線鎖
21.6 多核環(huán)境下的軟件同步原語
21.7 旋鎖
21.8 其他同步原語
21.9 多核環(huán)境下的進程調度
21.10 多核環(huán)境下的能耗管理
21.11 討論:多核系統(tǒng)的性能
思考題
第八篇 操作系統(tǒng)設計篇
第22章 操作系統(tǒng)設計之哲學原理
引子:殘缺心智的勝利
22.1 操作系統(tǒng)設計的追求
22.2 操作系統(tǒng)設計的第1條哲學原理:層次架構
22.3 操作系統(tǒng)設計的第2條哲學原理:沒有對錯
22.4 操作系統(tǒng)設計的第3條哲學原理:懶人哲學
22.5 操作系統(tǒng)設計的第4條哲學原理:讓困于人
22.6 操作系統(tǒng)設計的第5條哲學原理:留有余地
22.7 操作系統(tǒng)設計的第6條哲學原理:子虛烏有——海市蜃樓之美
22.8 操作系統(tǒng)設計的第7條哲學原理:時空轉換——滄海桑田之變
22.9 操作系統(tǒng)設計的第8條哲學原理:策機分離與權利分離
22.10 操作系統(tǒng)設計的第9條哲學原理:簡單為美——求于至簡,歸于永恒
22.11 操作系統(tǒng)設計的第10條哲學原理:適可而止
思考題
結語:失望與希望
參考文獻